Skip to content

Commit deb75a3

Browse files
authored
Merge pull request #912 from DougGregor/simplify-parser-parse
Simplify the signatures for Parser.parse()
2 parents f9b715a + 5c25423 commit deb75a3

File tree

10 files changed

+49
-108
lines changed

10 files changed

+49
-108
lines changed

Sources/SwiftOperators/SwiftOperators.docc/SwiftOperators.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ import SwiftParser
4545
import SwiftOperators
4646

4747
var opPrecedence = OperatorTable.standardOperators // Use the Swift standard library operators
48-
let parsed = try Parser.parse(source: "x + y * z")
48+
let parsed = Parser.parse(source: "x + y * z")
4949
dump(parsed) // contains SequenceExprSyntax(x, +, y, *, z)
5050
let folded = try opPrecedence.foldAll(parsed)
5151
dump(folded) // contains InfixOperatorExpr(x, +, InfixOperatorExpr(y, *, z))
@@ -65,12 +65,12 @@ let moreOperators =
6565
6666
infix operator **: ExponentiationPrecedence
6767
"""
68-
let parsedOperators = try Parser.parse(source: moreOperators)
68+
let parsedOperators = Parser.parse(source: moreOperators)
6969

7070
// Adds **, ExponentiationPrecedence to the set of known operators and precedence groups.
7171
try opPrecedence.addSourceFile(parsedOperators)
7272

73-
let parsed2 = try Parser.parse(source: "b ** c ** d")
73+
let parsed2 = Parser.parse(source: "b ** c ** d")
7474
dump(parsed2) // contains SequenceExprSyntax(b, **, c, **, d)
7575
let folded2 = try opPrecedence.foldAll(parsed2)
7676
dump(folded2) // contains InfixOperatorExpr(b, **, InfixOperatorExpr(c, **, d))

Sources/SwiftParser/Parser.swift

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,31 +13,23 @@
1313
@_spi(RawSyntax) import SwiftSyntax
1414

1515
extension Parser {
16+
/// Parse the source code in the given string as Swift source file.
1617
public static func parse(
1718
source: String,
18-
parseTransition: IncrementalParseTransition? = nil,
19-
filenameForDiagnostics: String = "",
20-
languageVersion: String? = nil,
21-
enableBareSlashRegexLiteral: Bool? = nil
22-
) throws -> SourceFileSyntax {
19+
parseTransition: IncrementalParseTransition? = nil
20+
) -> SourceFileSyntax {
2321
var source = source
2422
source.makeContiguousUTF8()
25-
return try source.withUTF8 { buffer in
26-
return try parse(source: buffer,
27-
parseTransition: parseTransition,
28-
filenameForDiagnostics: filenameForDiagnostics,
29-
languageVersion: languageVersion,
30-
enableBareSlashRegexLiteral: enableBareSlashRegexLiteral)
23+
return source.withUTF8 { buffer in
24+
return parse(source: buffer, parseTransition: parseTransition)
3125
}
3226
}
3327

28+
/// Parse the source code in the given string as Swift source file.
3429
public static func parse(
3530
source: UnsafeBufferPointer<UInt8>,
36-
parseTransition: IncrementalParseTransition? = nil,
37-
filenameForDiagnostics: String = "",
38-
languageVersion: String? = nil,
39-
enableBareSlashRegexLiteral: Bool? = nil
40-
) throws -> SourceFileSyntax {
31+
parseTransition: IncrementalParseTransition? = nil
32+
) -> SourceFileSyntax {
4133
var parser = Parser(source)
4234
// Extended lifetime is required because `SyntaxArena` in the parser must
4335
// be alive until `Syntax(raw:)` retains the arena.

Sources/swift-parser-cli/swift-parser-cli.swift

Lines changed: 10 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -82,21 +82,13 @@ class VerifyRoundTrip: ParsableCommand {
8282
abstract: "Verify that printing the parsed syntax tree produces the original source"
8383
)
8484

85-
init(sourceFile: String?, swiftVersion: String?, enableBareSlashRegex: Bool?) {
85+
init(sourceFile: String?) {
8686
self.sourceFile = sourceFile
87-
self.swiftVersion = swiftVersion
88-
self.enableBareSlashRegex = enableBareSlashRegex
8987
}
9088

9189
@Argument(help: "The source file that should be parsed; if omitted, use stdin")
9290
var sourceFile: String?
9391

94-
@Option(name: .long, help: "Interpret input according to a specific Swift language version number")
95-
var swiftVersion: String?
96-
97-
@Option(name: .long, help: "Enable or disable the use of forward slash regular-expression literal syntax")
98-
var enableBareSlashRegex: Bool?
99-
10092
@Flag(name: .long, help: "Perform sequence folding with the standard operators")
10193
var foldSequences: Bool = false
10294

@@ -116,22 +108,15 @@ class VerifyRoundTrip: ParsableCommand {
116108

117109
try source.withUnsafeBufferPointer { sourceBuffer in
118110
try Self.run(
119-
source: sourceBuffer, swiftVersion: swiftVersion,
120-
enableBareSlashRegex: enableBareSlashRegex,
121-
foldSequences: foldSequences
111+
source: sourceBuffer, foldSequences: foldSequences
122112
)
123113
}
124114
}
125115

126116
static func run(
127-
source: UnsafeBufferPointer<UInt8>, swiftVersion: String?,
128-
enableBareSlashRegex: Bool?, foldSequences: Bool
117+
source: UnsafeBufferPointer<UInt8>, foldSequences: Bool
129118
) throws {
130-
let tree = try Parser.parse(
131-
source: source,
132-
languageVersion: swiftVersion,
133-
enableBareSlashRegexLiteral: enableBareSlashRegex
134-
)
119+
let tree = Parser.parse(source: source)
135120

136121
let resultTree: Syntax
137122
if foldSequences {
@@ -157,24 +142,14 @@ class PrintDiags: ParsableCommand {
157142
@Argument(help: "The source file that should be parsed; if omitted, use stdin")
158143
var sourceFile: String?
159144

160-
@Option(name: .long, help: "Interpret input according to a specific Swift language version number")
161-
var swiftVersion: String?
162-
163-
@Option(name: .long, help: "Enable or disable the use of forward slash regular-expression literal syntax")
164-
var enableBareSlashRegex: Bool?
165-
166145
@Flag(name: .long, help: "Perform sequence folding with the standard operators")
167146
var foldSequences: Bool = false
168147

169148
func run() throws {
170149
let source = try getContentsOfSourceFile(at: sourceFile)
171150

172-
try source.withUnsafeBufferPointer { sourceBuffer in
173-
let tree = try Parser.parse(
174-
source: sourceBuffer,
175-
languageVersion: swiftVersion,
176-
enableBareSlashRegexLiteral: enableBareSlashRegex
177-
)
151+
source.withUnsafeBufferPointer { sourceBuffer in
152+
let tree = Parser.parse(source: sourceBuffer)
178153

179154
var diags = ParseDiagnosticsGenerator.diagnostics(for: tree)
180155
print(DiagnosticsFormatter.annotatedSource(tree: tree, diags: diags))
@@ -201,24 +176,14 @@ class PrintTree: ParsableCommand {
201176
@Argument(help: "The source file that should be parsed; if omitted, use stdin")
202177
var sourceFile: String?
203178

204-
@Option(name: .long, help: "Interpret input according to a specific Swift language version number")
205-
var swiftVersion: String?
206-
207-
@Option(name: .long, help: "Enable or disable the use of forward slash regular-expression literal syntax")
208-
var enableBareSlashRegex: Bool?
209-
210179
@Flag(name: .long, help: "Perform sequence folding with the standard operators")
211180
var foldSequences: Bool = false
212181

213182
func run() throws {
214183
let source = try getContentsOfSourceFile(at: sourceFile)
215184

216-
try source.withUnsafeBufferPointer { sourceBuffer in
217-
let tree = try Parser.parse(
218-
source: sourceBuffer,
219-
languageVersion: swiftVersion,
220-
enableBareSlashRegexLiteral: enableBareSlashRegex
221-
)
185+
source.withUnsafeBufferPointer { sourceBuffer in
186+
let tree = Parser.parse(source: sourceBuffer)
222187

223188
let resultTree: Syntax
224189
if foldSequences {
@@ -243,12 +208,6 @@ class Reduce: ParsableCommand {
243208
@Argument(help: "The test case that should be reduced; if omitted, use stdin")
244209
var sourceFile: String?
245210

246-
@Option(name: .long, help: "Interpret input according to a specific Swift language version number")
247-
var swiftVersion: String?
248-
249-
@Option(name: .long, help: "Enable or disable the use of forward slash regular-expression literal syntax")
250-
var enableBareSlashRegex: Bool?
251-
252211
@Flag(name: .long, help: "Perform sequence folding with the standard operators")
253212
var foldSequences: Bool = false
254213

@@ -286,16 +245,6 @@ class Reduce: ParsableCommand {
286245
process.arguments = [
287246
"verify-round-trip", tempFileURL.path,
288247
]
289-
if let enableBareSlashRegex = enableBareSlashRegex {
290-
process.arguments! += [
291-
"--enable-bare-slash-regex", enableBareSlashRegex ? "true" : "false"
292-
]
293-
}
294-
if let swiftVersion = swiftVersion {
295-
process.arguments! += [
296-
"--swift-version", swiftVersion
297-
]
298-
}
299248
if foldSequences {
300249
process.arguments! += [ "--fold-sequences" ]
301250
}
@@ -332,8 +281,8 @@ class Reduce: ParsableCommand {
332281
private func runVerifyRoundTripInCurrentProcess(source: [UInt8]) throws -> Bool {
333282
do {
334283
try source.withUnsafeBufferPointer { sourceBuffer in
335-
try VerifyRoundTrip.run(source: sourceBuffer, swiftVersion: self.swiftVersion, enableBareSlashRegex: self.enableBareSlashRegex,
336-
foldSequences: foldSequences)
284+
try VerifyRoundTrip.run(
285+
source: sourceBuffer, foldSequences: foldSequences)
337286
}
338287
} catch {
339288
return false

Tests/PerformanceTest/ParsingPerformanceTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public class ParsingPerformanceTests: XCTestCase {
2626
measure {
2727
do {
2828
let source = try String(contentsOf: inputFile)
29-
_ = try SwiftParser.Parser.parse(source: source)
29+
_ = SwiftParser.Parser.parse(source: source)
3030
} catch {
3131
XCTFail(error.localizedDescription)
3232
}

Tests/SwiftDiagnosticsTest/DiagnosticsFormatterTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import SwiftParser
1818
final class DiagnosticsFormatterTests: XCTestCase {
1919

2020
func annotate(source: String) throws -> String {
21-
let tree = try Parser.parse(source: source)
21+
let tree = Parser.parse(source: source)
2222
let diags = ParseDiagnosticsGenerator.diagnostics(for: tree)
2323
return DiagnosticsFormatter.annotatedSource(tree: tree, diags: diags)
2424
}

Tests/SwiftOperatorsTest/OperatorTableTests.swift

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,12 @@ extension OperatorTable {
8080
_ fullyParenthesizedSource: String
8181
) throws {
8282
// Parse and fold the source we're testing.
83-
let parsed = try Parser.parse(source: source)
83+
let parsed = Parser.parse(source: source)
8484
let foldedSyntax = try foldAll(parsed)
8585
XCTAssertFalse(foldedSyntax.containsExprSequence)
8686

8787
// Parse and "fold" the parenthesized version.
88-
let parenthesizedParsed = try Parser.parse(source: fullyParenthesizedSource)
88+
let parenthesizedParsed = Parser.parse(source: fullyParenthesizedSource)
8989
let parenthesizedSyntax = ExplicitParenFolder().visit(parenthesizedParsed)
9090
XCTAssertFalse(parenthesizedSyntax.containsExprSequence)
9191

@@ -102,7 +102,7 @@ extension OperatorTable {
102102
public class OperatorPrecedenceTests: XCTestCase {
103103
func testLogicalExprsSingle() throws {
104104
let opPrecedence = OperatorTable.logicalOperators
105-
let parsed = try Parser.parse(source: "x && y || w && v || z")
105+
let parsed = Parser.parse(source: "x && y || w && v || z")
106106
let sequenceExpr =
107107
parsed.statements.first!.item.as(SequenceExprSyntax.self)!
108108
let foldedExpr = try opPrecedence.foldSingle(sequenceExpr)
@@ -118,7 +118,7 @@ public class OperatorPrecedenceTests: XCTestCase {
118118

119119
func testSwiftExprs() throws {
120120
let opPrecedence = OperatorTable.standardOperators
121-
let parsed = try Parser.parse(source: "(x + y > 17) && x && y || w && v || z")
121+
let parsed = Parser.parse(source: "(x + y > 17) && x && y || w && v || z")
122122
let sequenceExpr =
123123
parsed.statements.first!.item.as(SequenceExprSyntax.self)!
124124
let foldedExpr = try opPrecedence.foldSingle(sequenceExpr)
@@ -128,7 +128,7 @@ public class OperatorPrecedenceTests: XCTestCase {
128128

129129
func testNestedSwiftExprs() throws {
130130
let opPrecedence = OperatorTable.standardOperators
131-
let parsed = try Parser.parse(source: "(x + y > 17) && x && y || w && v || z")
131+
let parsed = Parser.parse(source: "(x + y > 17) && x && y || w && v || z")
132132
let foldedAll = try opPrecedence.foldAll(parsed)
133133
XCTAssertEqual("\(foldedAll)", "(x + y > 17) && x && y || w && v || z")
134134
XCTAssertFalse(foldedAll.containsExprSequence)
@@ -175,11 +175,11 @@ public class OperatorPrecedenceTests: XCTestCase {
175175
infix operator ||: LogicalDisjunctionPrecedence
176176
"""
177177

178-
let parsedOperatorPrecedence = try Parser.parse(source: logicalOperatorSources)
178+
let parsedOperatorPrecedence = Parser.parse(source: logicalOperatorSources)
179179
var opPrecedence = OperatorTable()
180180
try opPrecedence.addSourceFile(parsedOperatorPrecedence)
181181

182-
let parsed = try Parser.parse(source: "x && y || w && v || z")
182+
let parsed = Parser.parse(source: "x && y || w && v || z")
183183
let sequenceExpr =
184184
parsed.statements.first!.item.as(SequenceExprSyntax.self)!
185185
let foldedExpr = try opPrecedence.foldSingle(sequenceExpr)
@@ -204,7 +204,7 @@ public class OperatorPrecedenceTests: XCTestCase {
204204
}
205205
"""
206206

207-
let parsedOperatorPrecedence = try Parser.parse(source: sources)
207+
let parsedOperatorPrecedence = Parser.parse(source: sources)
208208

209209
var opPrecedence = OperatorTable()
210210
var errors: [OperatorError] = []
@@ -244,7 +244,7 @@ public class OperatorPrecedenceTests: XCTestCase {
244244
postfix operator*
245245
"""
246246

247-
let parsedOperatorPrecedence = try Parser.parse(source: sources)
247+
let parsedOperatorPrecedence = Parser.parse(source: sources)
248248

249249
var opPrecedence = OperatorTable()
250250
var errors: [OperatorError] = []
@@ -266,7 +266,7 @@ public class OperatorPrecedenceTests: XCTestCase {
266266
}
267267

268268
func testFoldErrors() throws {
269-
let parsedOperatorPrecedence = try Parser.parse(source:
269+
let parsedOperatorPrecedence = Parser.parse(source:
270270
"""
271271
precedencegroup A {
272272
associativity: none
@@ -294,7 +294,7 @@ public class OperatorPrecedenceTests: XCTestCase {
294294

295295
do {
296296
var errors: [OperatorError] = []
297-
let parsed = try Parser.parse(source: "a + b * c")
297+
let parsed = Parser.parse(source: "a + b * c")
298298
let sequenceExpr =
299299
parsed.statements.first!.item.as(SequenceExprSyntax.self)!
300300
_ = opPrecedence.foldSingle(sequenceExpr) { error in
@@ -313,7 +313,7 @@ public class OperatorPrecedenceTests: XCTestCase {
313313

314314
do {
315315
var errors: [OperatorError] = []
316-
let parsed = try Parser.parse(source: "a / c")
316+
let parsed = Parser.parse(source: "a / c")
317317
let sequenceExpr =
318318
parsed.statements.first!.item.as(SequenceExprSyntax.self)!
319319
_ = opPrecedence.foldSingle(sequenceExpr) { error in
@@ -332,7 +332,7 @@ public class OperatorPrecedenceTests: XCTestCase {
332332

333333
do {
334334
var errors: [OperatorError] = []
335-
let parsed = try Parser.parse(source: "a + b - c")
335+
let parsed = Parser.parse(source: "a + b - c")
336336
let sequenceExpr =
337337
parsed.statements.first!.item.as(SequenceExprSyntax.self)!
338338
_ = opPrecedence.foldSingle(sequenceExpr) { error in
@@ -354,7 +354,7 @@ public class OperatorPrecedenceTests: XCTestCase {
354354

355355
do {
356356
var errors: [OperatorError] = []
357-
let parsed = try Parser.parse(source: "a ++ b - d")
357+
let parsed = Parser.parse(source: "a ++ b - d")
358358
let sequenceExpr =
359359
parsed.statements.first!.item.as(SequenceExprSyntax.self)!
360360
_ = opPrecedence.foldSingle(sequenceExpr) { error in

Tests/SwiftParserTest/ParserTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ public class ParserTests: XCTestCase {
88
/// Run a single parse test.
99
func runParseTest(fileURL: URL, checkDiagnostics: Bool) throws {
1010
let fileContents = try Data(contentsOf: fileURL)
11-
let parsed = try fileContents.withUnsafeBytes({ buffer in
12-
try Parser.parse(source: buffer.bindMemory(to: UInt8.self))
11+
let parsed = fileContents.withUnsafeBytes({ buffer in
12+
Parser.parse(source: buffer.bindMemory(to: UInt8.self))
1313
})
1414
AssertDataEqualWithDiff(Data(parsed.syntaxTextBytes), fileContents,
1515
additionalInfo: "Failed in file \(fileURL)")

Tests/SwiftParserTest/SyntaxTransformVisitor.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ final class SyntaxTransformVisitorTest: XCTestCase {
2020
visitChildren(node).reduce(1, +)
2121
}
2222
}
23-
_ = try {
24-
let parsed = try Parser.parse(source: """
23+
_ = {
24+
let parsed = Parser.parse(source: """
2525
func foo() {
2626
public func foo() {
2727
func foo() {
@@ -75,24 +75,24 @@ final class SyntaxTransformVisitorTest: XCTestCase {
7575
"[" + visit(node.elementType) + "]"
7676
}
7777
}
78-
_ = try {
79-
let parsed = try Parser.parse(source: """
78+
_ = {
79+
let parsed = Parser.parse(source: """
8080
func foo(a: Int, b: Foo, c: [Int]) -> Result {
8181
}
8282
""")
8383
let stringified = PrintFunctionType().visit(parsed)
8484
XCTAssertEqual(stringified, "(Int, Foo, [Int]) -> Result")
8585
}()
86-
_ = try {
87-
let parsed = try Parser.parse(source: """
86+
_ = {
87+
let parsed = Parser.parse(source: """
8888
func foo() {
8989
}
9090
""")
9191
let stringified = PrintFunctionType().visit(parsed)
9292
XCTAssertEqual(stringified, "() -> Void")
9393
}()
94-
_ = try {
95-
let parsed = try Parser.parse(source: """
94+
_ = {
95+
let parsed = Parser.parse(source: """
9696
func foo(a: Int) -> [Result] {
9797
}
9898
""")

0 commit comments

Comments
 (0)