Skip to content

Commit b53c33a

Browse files
committed
Support building swift-format using SwiftPM for toolchain builds on Windows
This allows us to also run tests of swift-format on Windows.
1 parent 1812069 commit b53c33a

File tree

2 files changed

+35
-17
lines changed

2 files changed

+35
-17
lines changed

Package.swift

Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -47,22 +47,22 @@ let package = Package(
4747

4848
.target(
4949
name: "SwiftFormat",
50-
dependencies: [
50+
dependencies: omittingExternalDependenciesIfNecessary([
5151
.product(name: "Markdown", package: "swift-markdown"),
5252
.product(name: "SwiftSyntax", package: "swift-syntax"),
5353
.product(name: "SwiftSyntaxBuilder", package: "swift-syntax"),
5454
.product(name: "SwiftOperators", package: "swift-syntax"),
5555
.product(name: "SwiftParser", package: "swift-syntax"),
5656
.product(name: "SwiftParserDiagnostics", package: "swift-syntax"),
57-
],
57+
]),
5858
exclude: ["CMakeLists.txt"]
5959
),
6060
.target(
6161
name: "_SwiftFormatTestSupport",
62-
dependencies: [
62+
dependencies: omittingExternalDependenciesIfNecessary([
6363
"SwiftFormat",
6464
.product(name: "SwiftOperators", package: "swift-syntax"),
65-
]
65+
])
6666
),
6767
.plugin(
6868
name: "Format Source Code",
@@ -93,44 +93,42 @@ let package = Package(
9393
.executableTarget(
9494
name: "generate-swift-format",
9595
dependencies: [
96-
"SwiftFormat",
97-
.product(name: "SwiftSyntax", package: "swift-syntax"),
98-
.product(name: "SwiftParser", package: "swift-syntax"),
96+
"SwiftFormat"
9997
]
10098
),
10199
.executableTarget(
102100
name: "swift-format",
103-
dependencies: [
101+
dependencies: omittingExternalDependenciesIfNecessary([
104102
"_SwiftFormatInstructionCounter",
105103
"SwiftFormat",
106104
.product(name: "ArgumentParser", package: "swift-argument-parser"),
107105
.product(name: "SwiftSyntax", package: "swift-syntax"),
108106
.product(name: "SwiftParser", package: "swift-syntax"),
109-
],
107+
]),
110108
exclude: ["CMakeLists.txt"],
111109
linkerSettings: swiftformatLinkSettings
112110
),
113111

114112
.testTarget(
115113
name: "SwiftFormatPerformanceTests",
116-
dependencies: [
114+
dependencies: omittingExternalDependenciesIfNecessary([
117115
"SwiftFormat",
118116
"_SwiftFormatTestSupport",
119117
.product(name: "SwiftSyntax", package: "swift-syntax"),
120118
.product(name: "SwiftParser", package: "swift-syntax"),
121-
]
119+
])
122120
),
123121
.testTarget(
124122
name: "SwiftFormatTests",
125-
dependencies: [
123+
dependencies: omittingExternalDependenciesIfNecessary([
126124
"SwiftFormat",
127125
"_SwiftFormatTestSupport",
128126
.product(name: "Markdown", package: "swift-markdown"),
129127
.product(name: "SwiftOperators", package: "swift-syntax"),
130128
.product(name: "SwiftParser", package: "swift-syntax"),
131129
.product(name: "SwiftSyntax", package: "swift-syntax"),
132130
.product(name: "SwiftSyntaxBuilder", package: "swift-syntax"),
133-
]
131+
])
134132
),
135133
]
136134
)
@@ -149,20 +147,38 @@ var installAction: Bool { hasEnvironmentVariable("SWIFTFORMAT_CI_INSTALL") }
149147
/// remote dependency.
150148
var useLocalDependencies: Bool { hasEnvironmentVariable("SWIFTCI_USE_LOCAL_DEPS") }
151149

150+
var omitExternalDependencies: Bool {
151+
hasEnvironmentVariable("SWIFTFORMAT_OMIT_EXTERNAL_DEPENDENCIES")
152+
}
153+
154+
func omittingExternalDependenciesIfNecessary(
155+
_ dependencies: [Target.Dependency]
156+
) -> [Target.Dependency] {
157+
guard omitExternalDependencies else {
158+
return dependencies
159+
}
160+
return dependencies.filter { dependency in
161+
if case .productItem(_, let package, _, _) = dependency {
162+
return package == nil
163+
}
164+
return true
165+
}
166+
}
167+
152168
// MARK: - Dependencies
153169

154170
var dependencies: [Package.Dependency] {
155-
if useLocalDependencies {
171+
if omitExternalDependencies {
172+
return []
173+
} else if useLocalDependencies {
156174
return [
157175
.package(path: "../swift-argument-parser"),
158176
.package(path: "../swift-markdown"),
159-
.package(path: "../swift-syntax"),
160177
]
161178
} else {
162179
return [
163180
.package(url: "https://github.com/apple/swift-argument-parser.git", from: "1.2.2"),
164181
.package(url: "https://github.com/apple/swift-markdown.git", from: "0.2.0"),
165-
.package(url: "https://github.com/swiftlang/swift-syntax.git", branch: "main"),
166182
]
167183
}
168184
}

Sources/SwiftFormat/Rules/NoEmptyLineOpeningClosingBraces.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,9 @@ public final class NoEmptyLinesOpeningClosingBraces: SyntaxFormatRule {
8686
let (trimmedLeadingTrivia, count) = first.leadingTrivia.trimmingSuperfluousNewlines()
8787
if trimmedLeadingTrivia.sourceLength != first.leadingTriviaLength {
8888
diagnose(.removeEmptyLinesAfter(count), on: first, anchor: .leadingTrivia(0))
89-
result[index] = first.with(\.leadingTrivia, trimmedLeadingTrivia)
89+
var first = first
90+
first.leadingTrivia = trimmedLeadingTrivia
91+
result[index] = first
9092
}
9193
}
9294
return rewrite(result).as(C.self)!

0 commit comments

Comments
 (0)