Skip to content

Commit bc08f86

Browse files
committed
Simplify the signatures for Parser.parse()
The new parser doesn't throw, and doesn't use several of the parameters that the old one used.
1 parent 71af420 commit bc08f86

File tree

10 files changed

+51
-120
lines changed

10 files changed

+51
-120
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: 12 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -83,21 +83,13 @@ class VerifyRoundTrip: ParsableCommand {
8383
abstract: "Verify that printing the parsed syntax tree produces the original source"
8484
)
8585

86-
init(sourceFile: String?, swiftVersion: String?, enableBareSlashRegex: Bool?) {
86+
init(sourceFile: String?) {
8787
self.sourceFile = sourceFile
88-
self.swiftVersion = swiftVersion
89-
self.enableBareSlashRegex = enableBareSlashRegex
9088
}
9189

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

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

@@ -117,22 +109,15 @@ class VerifyRoundTrip: ParsableCommand {
117109

118110
try source.withUnsafeBufferPointer { sourceBuffer in
119111
try Self.run(
120-
source: sourceBuffer, swiftVersion: swiftVersion,
121-
enableBareSlashRegex: enableBareSlashRegex,
122-
foldSequences: foldSequences
112+
source: sourceBuffer, foldSequences: foldSequences
123113
)
124114
}
125115
}
126116

127117
static func run(
128-
source: UnsafeBufferPointer<UInt8>, swiftVersion: String?,
129-
enableBareSlashRegex: Bool?, foldSequences: Bool
118+
source: UnsafeBufferPointer<UInt8>, foldSequences: Bool
130119
) throws {
131-
let tree = try Parser.parse(
132-
source: source,
133-
languageVersion: swiftVersion,
134-
enableBareSlashRegexLiteral: enableBareSlashRegex
135-
)
120+
let tree = Parser.parse(source: source)
136121

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

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

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

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

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

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

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

217-
try source.withUnsafeBufferPointer { sourceBuffer in
218-
var tree = try Parser.parse(
219-
source: sourceBuffer,
220-
languageVersion: swiftVersion,
221-
enableBareSlashRegexLiteral: enableBareSlashRegex
222-
)
186+
source.withUnsafeBufferPointer { sourceBuffer in
187+
var tree = Parser.parse(source: sourceBuffer)
223188

224189
if foldSequences {
225190
tree = foldAllSequences(tree).0.as(SourceFileSyntax.self)!
@@ -241,24 +206,14 @@ class PrintTree: ParsableCommand {
241206
@Argument(help: "The source file that should be parsed; if omitted, use stdin")
242207
var sourceFile: String?
243208

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

253212
func run() throws {
254213
let source = try getContentsOfSourceFile(at: sourceFile)
255214

256-
try source.withUnsafeBufferPointer { sourceBuffer in
257-
let tree = try Parser.parse(
258-
source: sourceBuffer,
259-
languageVersion: swiftVersion,
260-
enableBareSlashRegexLiteral: enableBareSlashRegex
261-
)
215+
source.withUnsafeBufferPointer { sourceBuffer in
216+
let tree = Parser.parse(source: sourceBuffer)
262217

263218
let resultTree: Syntax
264219
if foldSequences {
@@ -283,12 +238,6 @@ class Reduce: ParsableCommand {
283238
@Argument(help: "The test case that should be reduced; if omitted, use stdin")
284239
var sourceFile: String?
285240

286-
@Option(name: .long, help: "Interpret input according to a specific Swift language version number")
287-
var swiftVersion: String?
288-
289-
@Option(name: .long, help: "Enable or disable the use of forward slash regular-expression literal syntax")
290-
var enableBareSlashRegex: Bool?
291-
292241
@Flag(name: .long, help: "Perform sequence folding with the standard operators")
293242
var foldSequences: Bool = false
294243

@@ -326,16 +275,6 @@ class Reduce: ParsableCommand {
326275
process.arguments = [
327276
"verify-round-trip", tempFileURL.path,
328277
]
329-
if let enableBareSlashRegex = enableBareSlashRegex {
330-
process.arguments! += [
331-
"--enable-bare-slash-regex", enableBareSlashRegex ? "true" : "false"
332-
]
333-
}
334-
if let swiftVersion = swiftVersion {
335-
process.arguments! += [
336-
"--swift-version", swiftVersion
337-
]
338-
}
339278
if foldSequences {
340279
process.arguments! += [ "--fold-sequences" ]
341280
}
@@ -372,8 +311,8 @@ class Reduce: ParsableCommand {
372311
private func runVerifyRoundTripInCurrentProcess(source: [UInt8]) throws -> Bool {
373312
do {
374313
try source.withUnsafeBufferPointer { sourceBuffer in
375-
try VerifyRoundTrip.run(source: sourceBuffer, swiftVersion: self.swiftVersion, enableBareSlashRegex: self.enableBareSlashRegex,
376-
foldSequences: foldSequences)
314+
try VerifyRoundTrip.run(
315+
source: sourceBuffer, foldSequences: foldSequences)
377316
}
378317
} catch {
379318
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
@@ -16,7 +16,7 @@ import SwiftParser
1616
final class DiagnosticsFormatterTests: XCTestCase {
1717

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

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)")

0 commit comments

Comments
 (0)