Skip to content

Commit b7b36cd

Browse files
authored
CustomStringConvertible for Parser errors (#85)
1 parent a84925c commit b7b36cd

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

Sources/_MatchingEngine/Regex/Parse/Diagnostics.swift

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,41 @@ enum ParseError: Error, Hashable {
2626
case emptyProperty
2727
}
2828

29+
extension ParseError: CustomStringConvertible {
30+
var description: String {
31+
switch self {
32+
case let .numberOverflow(s):
33+
return "number overflow: \(s)"
34+
case let .expectedNumDigits(s, i):
35+
return "expected \(i) digits in '\(s)'"
36+
case let .expectedNumber(s, kind: kind):
37+
let radix: String
38+
if kind == .decimal {
39+
radix = ""
40+
} else {
41+
radix = " of radix \(kind.radix)"
42+
}
43+
return "expected a numbers in '\(s)'\(radix)"
44+
case let .expected(s):
45+
return "expected '\(s)'"
46+
case .unexpectedEndOfInput:
47+
return "unexpected end of input"
48+
case let .misc(s):
49+
return s
50+
case let .expectedASCII(c):
51+
return "expected ASCII for '\(c)'"
52+
case .expectedCustomCharacterClassMembers:
53+
return "expected custom character class members"
54+
case .invalidCharacterClassRangeOperand:
55+
return "invalid character class range"
56+
case let .invalidPOSIXSetName(n):
57+
return "invalid character set name: '\(n)'"
58+
case .emptyProperty:
59+
return "empty property"
60+
}
61+
}
62+
}
63+
2964
// TODO: Fixits, notes, etc.
3065

3166
// TODO: Diagnostics engine, recorder, logger, or similar.

Tests/RegexTests/DiagnosticTests.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,4 +86,12 @@ extension RegexTests {
8686
// TODO: Find out way to render value-members of AST, not
8787
// just children
8888
}
89+
90+
func testErrors() {
91+
// Note: These don't really "test" anything, but good to
92+
// see our output...
93+
print("\(ParseError.emptyProperty)")
94+
print("\(ParseError.expectedNumber("abc", kind: .decimal))")
95+
print("\(ParseError.expectedNumber("abc", kind: .hex))")
96+
}
8997
}

0 commit comments

Comments
 (0)