Skip to content

Commit b7543f8

Browse files
committed
Support xcode projs
1 parent bf5ee98 commit b7543f8

1 file changed

Lines changed: 51 additions & 23 deletions

File tree

Plugins/OtterPlugin/OtterPlugin.swift

Lines changed: 51 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,39 +6,67 @@
66
//
77

88
import PackagePlugin
9+
import Foundation
910

1011
@main
1112
struct OtterPlugin: BuildToolPlugin {
1213
func createBuildCommands(
1314
context: PluginContext,
1415
target: Target
1516
) throws -> [Command] {
16-
guard target is SourceModuleTarget else { return [] }
17-
18-
let sourceRoot = context.package.directoryURL.absoluteString
19-
20-
let queries = context.pluginWorkDirectoryURL
21-
.appending(component: "Queries.swift")
22-
23-
let inputFiles = target.sourceModule?.sourceFiles
24-
.filter { $0.url.pathExtension == "sql" }
25-
.map(\.url)
17+
return [
18+
createBuildCommand(
19+
projectRoot: context.package.directoryURL,
20+
cliToolURL: try context.tool(named: "OtterCLI").url,
21+
sourceFiles: target.sourceModule?.sourceFiles,
22+
workDirectory: context.pluginWorkDirectoryURL
23+
)
24+
]
25+
}
26+
27+
private func createBuildCommand(
28+
projectRoot: URL,
29+
cliToolURL: URL,
30+
sourceFiles: FileList?,
31+
workDirectory: URL
32+
) -> Command {
33+
let queries = workDirectory.appending(component: "Queries.swift")
2634

35+
return .buildCommand(
36+
displayName: "Running otter generate",
37+
executable: cliToolURL,
38+
arguments: [
39+
"generate",
40+
"--path",
41+
projectRoot.absoluteString,
42+
"--override-output",
43+
queries.absoluteString,
44+
"--skip-directory-create"
45+
],
46+
inputFiles: sourceFiles?
47+
.filter { $0.url.pathExtension == "sql" }
48+
.map(\.url) ?? [],
49+
outputFiles: [queries]
50+
)
51+
}
52+
}
53+
54+
#if canImport(XcodeProjectPlugin)
55+
import XcodeProjectPlugin
56+
57+
extension OtterPlugin: XcodeBuildToolPlugin {
58+
func createBuildCommands(
59+
context: XcodePluginContext,
60+
target: XcodeTarget
61+
) throws -> [Command] {
2762
return [
28-
.buildCommand(
29-
displayName: "Running otter generate",
30-
executable: try context.tool(named: "OtterCLI").url,
31-
arguments: [
32-
"generate",
33-
"--path",
34-
sourceRoot,
35-
"--override-output",
36-
queries.absoluteString,
37-
"--skip-directory-create"
38-
],
39-
inputFiles: inputFiles ?? [],
40-
outputFiles: [queries]
63+
createBuildCommand(
64+
projectRoot: context.xcodeProject.directoryURL,
65+
cliToolURL: try context.tool(named: "OtterCLI").url,
66+
sourceFiles: target.inputFiles,
67+
workDirectory: context.pluginWorkDirectoryURL
4168
)
4269
]
4370
}
4471
}
72+
#endif

0 commit comments

Comments
 (0)