Skip to content

Commit 481f651

Browse files
committed
Move generation to a single executable
1 parent a2d31e8 commit 481f651

25 files changed

+85
-329
lines changed

CodeGeneration/Package.swift

Lines changed: 0 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -8,47 +8,13 @@ let package = Package(
88
.macOS(.v10_15),
99
],
1010
products: [
11-
.executable(name: "generate-swiftbasicformat", targets: ["generate-swiftbasicformat"]),
12-
.executable(name: "generate-swiftideutils", targets: ["generate-swiftideutils"]),
13-
.executable(name: "generate-swiftparser", targets: ["generate-swiftparser"]),
1411
.executable(name: "generate-swiftsyntax", targets: ["generate-swiftsyntax"]),
15-
.executable(name: "generate-swiftsyntaxbuilder", targets: ["generate-swiftsyntaxbuilder"]),
1612
],
1713
dependencies: [
1814
.package(url: "https://github.com/apple/swift-syntax.git", revision: "74b1286795d6a4e4f5a106638dc99eb482df609d"),
1915
.package(url: "https://github.com/apple/swift-argument-parser.git", .upToNextMinor(from: "1.1.4")),
2016
],
2117
targets: [
22-
.executableTarget(
23-
name: "generate-swiftbasicformat",
24-
dependencies: [
25-
.product(name: "SwiftSyntax", package: "swift-syntax"),
26-
.product(name: "SwiftSyntaxBuilder", package: "swift-syntax"),
27-
.product(name: "ArgumentParser", package: "swift-argument-parser"),
28-
"SyntaxSupport",
29-
"Utils"
30-
]
31-
),
32-
.executableTarget(
33-
name: "generate-swiftideutils",
34-
dependencies: [
35-
.product(name: "SwiftSyntax", package: "swift-syntax"),
36-
.product(name: "SwiftSyntaxBuilder", package: "swift-syntax"),
37-
.product(name: "ArgumentParser", package: "swift-argument-parser"),
38-
"SyntaxSupport",
39-
"Utils"
40-
]
41-
),
42-
.executableTarget(
43-
name: "generate-swiftparser",
44-
dependencies: [
45-
.product(name: "SwiftSyntax", package: "swift-syntax"),
46-
.product(name: "SwiftSyntaxBuilder", package: "swift-syntax"),
47-
.product(name: "ArgumentParser", package: "swift-argument-parser"),
48-
"SyntaxSupport",
49-
"Utils"
50-
]
51-
),
5218
.executableTarget(
5319
name: "generate-swiftsyntax",
5420
dependencies: [
@@ -58,16 +24,6 @@ let package = Package(
5824
"SyntaxSupport",
5925
"Utils"
6026
]
61-
),
62-
.executableTarget(
63-
name: "generate-swiftsyntaxbuilder",
64-
dependencies: [
65-
.product(name: "SwiftSyntax", package: "swift-syntax"),
66-
.product(name: "SwiftSyntaxBuilder", package: "swift-syntax"),
67-
.product(name: "ArgumentParser", package: "swift-argument-parser"),
68-
"SyntaxSupport",
69-
"Utils"
70-
]
7127
),
7228
.target(
7329
name: "SyntaxSupport",

CodeGeneration/Sources/Utils/GenerateTemplates.swift

Lines changed: 0 additions & 33 deletions
This file was deleted.

CodeGeneration/Sources/generate-swiftbasicformat/GenerateSwiftBasicFormat.swift

Lines changed: 0 additions & 35 deletions
This file was deleted.

CodeGeneration/Sources/generate-swiftideutils/GenerateIDEUtils.swift

Lines changed: 0 additions & 35 deletions
This file was deleted.

CodeGeneration/Sources/generate-swiftparser/GenerateSwiftParser.swift

Lines changed: 0 additions & 38 deletions
This file was deleted.

CodeGeneration/Sources/generate-swiftsyntax/GenerateSwiftSyntax.swift

Lines changed: 61 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,28 +12,76 @@
1212

1313
import ArgumentParser
1414
import Foundation
15+
import SwiftSyntax
1516
import SwiftSyntaxBuilder
1617
import Utils
1718

19+
private let swiftBasicFormatDir: String = "SwiftBasicFormat"
20+
private let IDEUtilsDir: String = "IDEUtils"
21+
private let swiftParserDir: String = "SwiftParser"
22+
private let swiftSyntaxDir: String = "SwiftSyntax"
23+
private let swiftSyntaxBuilderDir: String = "SwiftSyntaxBuilder"
24+
1825
@main
1926
struct GenerateSwiftSyntax: ParsableCommand {
20-
@Argument(help: "The path to the destination directory where the source files are to be generated")
27+
@Argument(help: "The path to the source directory where the source files are to be generated")
2128
var generatedPath: String
2229

2330
@Flag(help: "Enable verbose output")
2431
var verbose: Bool = false
25-
32+
2633
func run() throws {
27-
try generateTemplates(
28-
templates: [
29-
(miscFile, "Misc.swift"),
30-
(syntaxAnyVisitorFile, "SyntaxAnyVisitor.swift"),
31-
(syntaxBaseNodesFile, "SyntaxBaseNodes.swift"),
32-
(syntaxEnumFile, "SyntaxEnum.swift"),
33-
(syntaxKindFile, "SyntaxKind.swift")
34-
],
35-
destination: URL(fileURLWithPath: generatedPath),
36-
verbose: verbose
37-
)
34+
let templates: [(sourceFile: SourceFileSyntax, module: String, filename: String)] = [
35+
(basicFormatFile, swiftBasicFormatDir, "BasicFormat.swift"),
36+
(syntaxClassificationFile, IDEUtilsDir, "SyntaxClassification.swift"),
37+
(declarationAttributeFile, swiftParserDir, "DeclarationAttribute.swift"),
38+
(declarationModifierFile, swiftParserDir, "DeclarationModifier.swift"),
39+
(parserEntryFile, swiftParserDir, "Parser+Entry.swift"),
40+
(typeAttributeFile, swiftParserDir, "TypeAttribute.swift"),
41+
(miscFile, swiftSyntaxDir, "Misc.swift"),
42+
(syntaxBaseNodesFile, swiftSyntaxDir, "SyntaxBaseNodes.swift"),
43+
(syntaxBaseNodesFile, swiftSyntaxDir, "SyntaxBaseNodes.swift"),
44+
(syntaxEnumFile, swiftSyntaxDir, "SyntaxEnum.swift"),
45+
(syntaxKindFile, swiftSyntaxDir, "SyntaxKind.swift"),
46+
(buildableCollectionNodesFile, swiftSyntaxBuilderDir, "BuildableCollectionNodes.swift"),
47+
(buildableNodesFile, swiftSyntaxBuilderDir, "BuildableNodes.swift"),
48+
(resultBuildersFile, swiftSyntaxBuilderDir, "ResultBuilders.swift"),
49+
(syntaxExpressibleByStringInterpolationConformancesFile, swiftSyntaxBuilderDir, "SyntaxExpressibleByStringInterpolationConformances.swift"),
50+
(tokenFile, swiftSyntaxBuilderDir, "Token.swift"),
51+
(typealiasesFile, swiftSyntaxBuilderDir, "Typealiases.swift"),
52+
]
53+
54+
for template in templates {
55+
try generateTemplate(
56+
sourceFile: template.sourceFile,
57+
module: template.module,
58+
filename: template.filename,
59+
destination: URL(fileURLWithPath: generatedPath),
60+
verbose: verbose)
61+
}
3862
}
63+
64+
private func generateTemplate(
65+
sourceFile: SourceFileSyntax,
66+
module: String,
67+
filename: String,
68+
destination: URL,
69+
verbose: Bool) throws {
70+
try FileManager.default.createDirectory(
71+
atPath: destination.path,
72+
withIntermediateDirectories: true,
73+
attributes: nil
74+
)
75+
76+
let fileURL = destination
77+
.appendingPathComponent(module)
78+
.appendingPathComponent("generated")
79+
.appendingPathComponent(filename)
80+
81+
if verbose {
82+
print("Generating \(fileURL.path)...")
83+
}
84+
let syntax = sourceFile.formatted(using: CodeGenerationFormat())
85+
try "\(syntax)\n".write(to: fileURL, atomically: true, encoding: .utf8)
86+
}
3987
}

CodeGeneration/Sources/generate-swiftideutils/SyntaxClassificationFile.swift renamed to CodeGeneration/Sources/generate-swiftsyntax/templates/ideutils/SyntaxClassificationFile.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import SyntaxSupport
1616
import Utils
1717

1818
// Collects the list of classifications to use for contextual classification.
19-
var node_child_classifications: [ChildClassification] {
19+
fileprivate var node_child_classifications: [ChildClassification] {
2020
var result = [ChildClassification]()
2121
for node in SYNTAX_NODES {
2222
for (index, child) in node.children.enumerated() where child.classification?.name != nil {

CodeGeneration/Sources/generate-swiftsyntaxbuilder/GenerateSwiftSyntaxBuilder.swift

Lines changed: 0 additions & 40 deletions
This file was deleted.

0 commit comments

Comments
 (0)