Skip to content

Commit e336e73

Browse files
committed
Only allow postfixQuestionMark as the question mark after init
We allowed both `postfixQuestionMark` and `infixQuestionMark` because we didn’t know as which token kind the lexer classified the question mark. But we can just remap the kind in the parser to simplify the syntax node.
1 parent 39a4239 commit e336e73

File tree

5 files changed

+3
-9
lines changed

5 files changed

+3
-9
lines changed

CodeGeneration/Sources/SyntaxSupport/DeclNodes.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1267,7 +1267,6 @@ public let DECL_NODES: [Node] = [
12671267
name: "optionalMark",
12681268
kind: .token(choices: [
12691269
.token(.postfixQuestionMark),
1270-
.token(.infixQuestionMark),
12711270
.token(.exclamationMark),
12721271
]),
12731272
documentation: "If the initializer is failable, a question mark to indicate that.",

Sources/SwiftParser/Declarations.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -922,7 +922,7 @@ extension Parser {
922922

923923
// Parse the '!' or '?' for a failable initializer.
924924
let failable: RawTokenSyntax?
925-
if let parsedFailable = self.consume(if: .exclamationMark, .postfixQuestionMark, .infixQuestionMark) {
925+
if let parsedFailable = self.consume(if: .exclamationMark, .postfixQuestionMark, TokenSpec(.infixQuestionMark, remapping: .postfixQuestionMark)) {
926926
failable = parsedFailable
927927
} else if let parsedFailable = self.consumeIfContextualPunctuator("!", remapping: .exclamationMark) {
928928
failable = parsedFailable

Sources/SwiftParser/generated/Parser+TokenSpecSet.swift

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1814,15 +1814,12 @@ extension InitializerDeclSyntax {
18141814
@_spi(Diagnostics)
18151815
public enum OptionalMarkOptions: TokenSpecSet {
18161816
case postfixQuestionMark
1817-
case infixQuestionMark
18181817
case exclamationMark
18191818

18201819
init?(lexeme: Lexer.Lexeme) {
18211820
switch PrepareForKeywordMatch(lexeme) {
18221821
case TokenSpec(.postfixQuestionMark):
18231822
self = .postfixQuestionMark
1824-
case TokenSpec(.infixQuestionMark):
1825-
self = .infixQuestionMark
18261823
case TokenSpec(.exclamationMark):
18271824
self = .exclamationMark
18281825
default:
@@ -1834,8 +1831,6 @@ extension InitializerDeclSyntax {
18341831
switch self {
18351832
case .postfixQuestionMark:
18361833
return .postfixQuestionMark
1837-
case .infixQuestionMark:
1838-
return .infixQuestionMark
18391834
case .exclamationMark:
18401835
return .exclamationMark
18411836
}

Sources/SwiftSyntax/generated/raw/RawSyntaxValidation.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1554,7 +1554,7 @@ func validateLayout(layout: RawSyntaxBuffer, as kind: SyntaxKind) {
15541554
assertNoError(kind, 4, verify(layout[4], as: RawUnexpectedNodesSyntax?.self))
15551555
assertNoError(kind, 5, verify(layout[5], as: RawTokenSyntax.self, tokenChoices: [.keyword("init")]))
15561556
assertNoError(kind, 6, verify(layout[6], as: RawUnexpectedNodesSyntax?.self))
1557-
assertNoError(kind, 7, verify(layout[7], as: RawTokenSyntax?.self, tokenChoices: [.tokenKind(.postfixQuestionMark), .tokenKind(.infixQuestionMark), .tokenKind(.exclamationMark)]))
1557+
assertNoError(kind, 7, verify(layout[7], as: RawTokenSyntax?.self, tokenChoices: [.tokenKind(.postfixQuestionMark), .tokenKind(.exclamationMark)]))
15581558
assertNoError(kind, 8, verify(layout[8], as: RawUnexpectedNodesSyntax?.self))
15591559
assertNoError(kind, 9, verify(layout[9], as: RawGenericParameterClauseSyntax?.self))
15601560
assertNoError(kind, 10, verify(layout[10], as: RawUnexpectedNodesSyntax?.self))

Sources/SwiftSyntax/generated/syntaxNodes/SyntaxDeclNodes.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3572,7 +3572,7 @@ public struct ImportDeclSyntax: DeclSyntaxProtocol, SyntaxHashable {
35723572
/// - `attributes`: ``AttributeListSyntax``
35733573
/// - `modifiers`: ``DeclModifierListSyntax``
35743574
/// - `initKeyword`: `'init'`
3575-
/// - `optionalMark`: (`'?'` | `'?'` | `'!'`)?
3575+
/// - `optionalMark`: (`'?'` | `'!'`)?
35763576
/// - `genericParameterClause`: ``GenericParameterClauseSyntax``?
35773577
/// - `signature`: ``FunctionSignatureSyntax``
35783578
/// - `genericWhereClause`: ``GenericWhereClauseSyntax``?

0 commit comments

Comments
 (0)