Skip to content

Commit 5dbf470

Browse files
authored
Merge pull request #692 from fwcd/fwcd/generate-ssb-argument-parser
Use `swift-argument-parser` in `generate-swift-syntax-builder`
2 parents 816d691 + e1d947b commit 5dbf470

File tree

2 files changed

+30
-22
lines changed

2 files changed

+30
-22
lines changed

Package.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ let package = Package(
124124
),
125125
.executableTarget(
126126
name: "generate-swift-syntax-builder",
127-
dependencies: ["SwiftSyntaxBuilder"],
127+
dependencies: ["SwiftSyntaxBuilder", .product(name: "ArgumentParser", package: "swift-argument-parser")],
128128
exclude: [
129129
"gyb_helpers",
130130
"gyb_syntax_support",

Sources/generate-swift-syntax-builder/main.swift renamed to Sources/generate-swift-syntax-builder/GenerateSwiftSyntaxBuilder.swift

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,13 @@
1010
//
1111
//===----------------------------------------------------------------------===//
1212

13+
import ArgumentParser
1314
import Foundation
1415
import SwiftSyntax
1516
import SwiftSyntaxBuilder
1617

1718
/// SwiftSyntaxBuilder sources to be generated
18-
let sourceTemplates = [
19+
private let sourceTemplates: [(SourceFile, String)] = [
1920
(buildableBaseProtocolsFile, "BuildableBaseProtocols.swift"),
2021
(buildableCollectionNodesFile, "BuildableCollectionNodes.swift"),
2122
(buildableNodesFile, "BuildableNodes.swift"),
@@ -24,24 +25,31 @@ let sourceTemplates = [
2425
(tokenFile, "Token.swift"),
2526
]
2627

27-
guard CommandLine.arguments.count > 1 else {
28-
fatalError("Please add a destination as the first argument")
28+
@main
29+
struct GenerateSwiftSyntaxBuilder: ParsableCommand {
30+
@Argument(help: "The path to the destination directory where the source files are to be generated")
31+
var generatedPath: String
32+
33+
@Flag(help: "Enable verbose output")
34+
var verbose: Bool = false
35+
36+
func run() throws {
37+
let generatedURL = URL(fileURLWithPath: generatedPath)
38+
let format = Format(indentWidth: 2)
39+
40+
try FileManager.default.createDirectory(
41+
atPath: generatedURL.path,
42+
withIntermediateDirectories: true,
43+
attributes: nil
44+
)
45+
46+
for (sourceFile, name) in sourceTemplates {
47+
let fileURL = generatedURL.appendingPathComponent(name)
48+
if verbose {
49+
print("Generating \(fileURL.path)...")
50+
}
51+
let syntax = sourceFile.buildSyntax(format: format)
52+
try "\(syntax)\n".write(to: fileURL, atomically: true, encoding: .utf8)
53+
}
54+
}
2955
}
30-
31-
let destination = CommandLine.arguments[1]
32-
let generatedPath = URL(fileURLWithPath: destination)
33-
34-
try FileManager.default.createDirectory(
35-
atPath: generatedPath.path,
36-
withIntermediateDirectories: true,
37-
attributes: nil
38-
)
39-
40-
let format = Format(indentWidth: 2)
41-
42-
for (sourceFile, name) in sourceTemplates {
43-
let filePath = generatedPath.appendingPathComponent(name)
44-
let syntax = sourceFile.buildSyntax(format: format)
45-
try "\(syntax)\n".write(to: filePath, atomically: true, encoding: .utf8)
46-
}
47-

0 commit comments

Comments
 (0)