import PackagePlugin import Foundation @main struct LintBuildPlugin { static private let toolName = "swift-format" private func createBuildCommands( pluginWorkDirectory: Path, tool: PluginContext.Tool, targetDirectory: Path ) -> [Command] { let arguments = [ "lint", targetDirectory.string, "--recursive", "--parallel", "--strict", "--configuration", targetDirectory.appending(subpath: ".swift-format").string ] return [ .prebuildCommand( displayName: "Lint Source Code", executable: tool.path, arguments: arguments, environment: [:], outputFilesDirectory: pluginWorkDirectory.appending(Self.toolName) ) ] } } extension LintBuildPlugin: BuildToolPlugin { func createBuildCommands( context: PackagePlugin.PluginContext, target: PackagePlugin.Target ) async throws -> [PackagePlugin.Command] { createBuildCommands( pluginWorkDirectory: context.pluginWorkDirectory, tool: try context.tool(named: Self.toolName), targetDirectory: target.directory ) } } #if canImport(XcodeProjectPlugin) import XcodeProjectPlugin extension LintBuildPlugin: XcodeBuildToolPlugin { func createBuildCommands( context: XcodeProjectPlugin.XcodePluginContext, target: XcodeProjectPlugin.XcodeTarget ) throws -> [PackagePlugin.Command] { createBuildCommands( pluginWorkDirectory: context.pluginWorkDirectory, tool: try context.tool(named: Self.toolName), targetDirectory: context.xcodeProject.directory ) } } #endif