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 {
2222
2323var 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)
Original file line number Diff line number Diff line change @@ -4,6 +4,7 @@ import Foundation
44
55struct 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
Original file line number Diff line number Diff 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
2328var 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)
Original file line number Diff line number Diff line change @@ -29,7 +29,7 @@ struct Main {
2929
3030var 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)
Load Diff This file was deleted.
You can’t perform that action at this time.
0 commit comments