Skip to content

Commit 808c363

Browse files
committed
Consider regex literals as identifier-like
1 parent 21ee134 commit 808c363

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

Sources/SwiftParser/RawTokenKindSubset.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -524,6 +524,7 @@ enum OperatorLike: RawTokenKindSubset {
524524
case postfixQuestionMark
525525
case equal
526526
case arrow
527+
case regexLiteral // regex literals can look like operators, e.g. '/^/'
527528

528529
init?(lexeme: Lexer.Lexeme) {
529530
if let op = Operator(lexeme: lexeme) {
@@ -536,6 +537,7 @@ enum OperatorLike: RawTokenKindSubset {
536537
case .postfixQuestionMark: self = .postfixQuestionMark
537538
case .equal: self = .equal
538539
case .arrow: self = .arrow
540+
case .regexLiteral: self = .regexLiteral
539541
default: return nil
540542
}
541543
}
@@ -547,6 +549,7 @@ enum OperatorLike: RawTokenKindSubset {
547549
.postfixQuestionMark,
548550
.equal,
549551
.arrow,
552+
.regexLiteral
550553
]
551554
}
552555

@@ -558,6 +561,14 @@ enum OperatorLike: RawTokenKindSubset {
558561
case .postfixQuestionMark: return .postfixQuestionMark
559562
case .equal: return .equal
560563
case .arrow: return .arrow
564+
case .regexLiteral: return .regexLiteral
565+
}
566+
}
567+
568+
var precedence: TokenPrecedence? {
569+
switch self {
570+
case .regexLiteral: return TokenPrecedence(.spacedBinaryOperator)
571+
default: return nil
561572
}
562573
}
563574
}

Tests/SwiftParserTest/translated/OperatorDeclTests.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -473,4 +473,7 @@ final class OperatorDeclTests: XCTestCase {
473473
)
474474
}
475475

476+
func testRegexLikeOperator() {
477+
AssertParse("prefix operator /^/")
478+
}
476479
}

0 commit comments

Comments
 (0)