Skip to content

Commit 3abec9e

Browse files
Recovery from parse error
1 parent 7ef1dd2 commit 3abec9e

File tree

6 files changed

+55
-183
lines changed

6 files changed

+55
-183
lines changed

Sources/DSLConverter/Main.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ struct Main {
2222

2323
var standardError = FileHandle.standardError
2424

25-
extension FileHandle : TextOutputStream {
25+
extension FileHandle: @retroactive TextOutputStream {
2626
public func write(_ string: String) {
2727
guard let data = string.data(using: .utf8) else { return }
2828
self.write(data)

Sources/ExpressionParser/ExpressionParser.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import Foundation
44

55
struct ExpressionParser {
66
private(set) var tokens = [Token]()
7+
private(set) var diagnostics: Diagnostics?
78

89
private let pattern: String
910
private let insensitive: Bool
@@ -16,8 +17,9 @@ struct ExpressionParser {
1617
self.insensitive = insensitive
1718
}
1819

19-
mutating func parse() throws {
20-
let ast = try _RegexParser.parse(pattern, .traditional)
20+
mutating func parse() {
21+
let ast = _RegexParser.parseWithRecovery(pattern, .traditional)
22+
diagnostics = ast.diags
2123
emitNode(ast.root)
2224
}
2325

Sources/ExpressionParser/Main.swift

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,15 @@ struct Main {
1010
.map { String($0) }
1111

1212
var parser = ExpressionParser(pattern: pattern, insensitive: matchingOptions.contains("i"))
13-
try parser.parse()
13+
parser.parse()
1414

1515
let data = try JSONEncoder().encode(parser.tokens)
1616
print(String(data: data, encoding: .utf8) ?? "")
17+
if let diagnostics = parser.diagnostics {
18+
for diag in diagnostics.diags {
19+
print("\(diag.message)", to:&standardError)
20+
}
21+
}
1722
} catch {
1823
print("\(error)", to:&standardError)
1924
}
@@ -22,7 +27,7 @@ struct Main {
2227

2328
var standardError = FileHandle.standardError
2429

25-
extension FileHandle : TextOutputStream {
30+
extension FileHandle: @retroactive TextOutputStream {
2631
public func write(_ string: String) {
2732
guard let data = string.data(using: .utf8) else { return }
2833
self.write(data)

Sources/Matcher/Main.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ struct Main {
2929

3030
var standardError = FileHandle.standardError
3131

32-
extension FileHandle : TextOutputStream {
32+
extension FileHandle: @retroactive TextOutputStream {
3333
public func write(_ string: String) {
3434
guard let data = string.data(using: .utf8) else { return }
3535
self.write(data)

Tests/RegexTests/DebuggerTests.swift

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

0 commit comments

Comments
 (0)