Skip to content

Commit cf54fe6

Browse files
committed
Parse group-like reference syntax
Parse the remaining backreference and subpattern syntax that look like groups, e.g `(?R)`, `(?P=)`. In addition, add some more specific diagnostics for matching options.
1 parent 01b9fdb commit cf54fe6

File tree

4 files changed

+282
-138
lines changed

4 files changed

+282
-138
lines changed

Sources/_MatchingEngine/Regex/Parse/Diagnostics.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ enum ParseError: Error, Hashable {
3232

3333
case expectedNonEmptyContents
3434

35+
case unknownGroupKind(String)
36+
37+
case invalidMatchingOption(Character)
38+
case cannotRemoveMatchingOptionsAfterCaret
39+
3540
case expectedCustomCharacterClassMembers
3641
case invalidCharacterClassRangeOperand
3742

@@ -65,6 +70,12 @@ extension ParseError: CustomStringConvertible {
6570
return s
6671
case .expectedNonEmptyContents:
6772
return "expected non-empty contents"
73+
case let .unknownGroupKind(str):
74+
return "unknown group kind '(\(str)'"
75+
case let .invalidMatchingOption(c):
76+
return "invalid matching option '\(c)'"
77+
case .cannotRemoveMatchingOptionsAfterCaret:
78+
return "cannot remove matching options with '^' specifier"
6879
case let .expectedASCII(c):
6980
return "expected ASCII for '\(c)'"
7081
case .expectedCustomCharacterClassMembers:

0 commit comments

Comments
 (0)