File tree Expand file tree Collapse file tree 6 files changed +55
-183
lines changed Expand file tree Collapse file tree 6 files changed +55
-183
lines changed Original file line number Diff line number Diff line change @@ -22,7 +22,7 @@ struct Main {
22
22
23
23
var standardError = FileHandle . standardError
24
24
25
- extension FileHandle : TextOutputStream {
25
+ extension FileHandle : @ retroactive TextOutputStream {
26
26
public func write( _ string: String ) {
27
27
guard let data = string. data ( using: . utf8) else { return }
28
28
self . write ( data)
Original file line number Diff line number Diff line change @@ -4,6 +4,7 @@ import Foundation
4
4
5
5
struct ExpressionParser {
6
6
private( set) var tokens = [ Token] ( )
7
+ private( set) var diagnostics : Diagnostics ?
7
8
8
9
private let pattern : String
9
10
private let insensitive : Bool
@@ -16,8 +17,9 @@ struct ExpressionParser {
16
17
self . insensitive = insensitive
17
18
}
18
19
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
21
23
emitNode ( ast. root)
22
24
}
23
25
Original file line number Diff line number Diff line change @@ -10,10 +10,15 @@ struct Main {
10
10
. map { String ( $0) }
11
11
12
12
var parser = ExpressionParser ( pattern: pattern, insensitive: matchingOptions. contains ( " i " ) )
13
- try parser. parse ( )
13
+ parser. parse ( )
14
14
15
15
let data = try JSONEncoder ( ) . encode ( parser. tokens)
16
16
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
+ }
17
22
} catch {
18
23
print ( " \( error) " , to: & standardError)
19
24
}
@@ -22,7 +27,7 @@ struct Main {
22
27
23
28
var standardError = FileHandle . standardError
24
29
25
- extension FileHandle : TextOutputStream {
30
+ extension FileHandle : @ retroactive TextOutputStream {
26
31
public func write( _ string: String ) {
27
32
guard let data = string. data ( using: . utf8) else { return }
28
33
self . write ( data)
Original file line number Diff line number Diff line change @@ -29,7 +29,7 @@ struct Main {
29
29
30
30
var standardError = FileHandle . standardError
31
31
32
- extension FileHandle : TextOutputStream {
32
+ extension FileHandle : @ retroactive TextOutputStream {
33
33
public func write( _ string: String ) {
34
34
guard let data = string. data ( using: . utf8) else { return }
35
35
self . write ( data)
Load Diff This file was deleted.
You can’t perform that action at this time.
0 commit comments