diff --git a/CodeGeneration/Sources/SyntaxSupport/CommonNodes.swift b/CodeGeneration/Sources/SyntaxSupport/CommonNodes.swift index 6b6ecf0963b..f9e245d877c 100644 --- a/CodeGeneration/Sources/SyntaxSupport/CommonNodes.swift +++ b/CodeGeneration/Sources/SyntaxSupport/CommonNodes.swift @@ -83,9 +83,31 @@ public let COMMON_NODES: [Node] = [ ] ), - // decl-effect-specifiers -> (async | reasync)? (throws | rethrows)? + // accessor-effect-specifiers -> (async)? (throws)? Node( - name: "DeclEffectSpecifiers", + name: "AccessorEffectSpecifiers", + nameForDiagnostics: "accessor specifiers", + kind: "Syntax", + traits: [ + "EffectSpecifiers" + ], + children: [ + Child( + name: "AsyncSpecifier", + kind: .token(choices: [.keyword(text: "async")]), + isOptional: true + ), + Child( + name: "ThrowsSpecifier", + kind: .token(choices: [.keyword(text: "throws")]), + isOptional: true + ), + ] + ), + + // funtion-effect-specifiers -> (async | reasync)? (throws | rethrows)? + Node( + name: "FunctionEffectSpecifiers", nameForDiagnostics: "effect specifiers", kind: "Syntax", traits: [ diff --git a/CodeGeneration/Sources/SyntaxSupport/DeclNodes.swift b/CodeGeneration/Sources/SyntaxSupport/DeclNodes.swift index 96911aab784..852bbbce812 100644 --- a/CodeGeneration/Sources/SyntaxSupport/DeclNodes.swift +++ b/CodeGeneration/Sources/SyntaxSupport/DeclNodes.swift @@ -96,7 +96,7 @@ public let DECL_NODES: [Node] = [ ), Child( name: "EffectSpecifiers", - kind: .node(kind: "DeclEffectSpecifiers"), + kind: .node(kind: "AccessorEffectSpecifiers"), isOptional: true ), Child( @@ -842,7 +842,7 @@ public let DECL_NODES: [Node] = [ ), // function-signature -> - // '(' parameter-list? ')' decl-effect-specifiers? return-clause? + // '(' parameter-list? ')' function-effect-specifiers? return-clause? Node( name: "FunctionSignature", nameForDiagnostics: "function signature", @@ -854,7 +854,7 @@ public let DECL_NODES: [Node] = [ ), Child( name: "EffectSpecifiers", - kind: .node(kind: "DeclEffectSpecifiers"), + kind: .node(kind: "FunctionEffectSpecifiers"), isOptional: true ), Child( diff --git a/Sources/SwiftParser/Declarations.swift b/Sources/SwiftParser/Declarations.swift index 181595f7e2d..466f83f0a92 100644 --- a/Sources/SwiftParser/Declarations.swift +++ b/Sources/SwiftParser/Declarations.swift @@ -1198,7 +1198,7 @@ extension Parser { parser.parseFunctionParameter() } - var effectSpecifiers = self.parseDeclEffectSpecifiers() + var effectSpecifiers = self.parseFunctionEffectSpecifiers() var output: RawReturnClauseSyntax? @@ -1264,7 +1264,7 @@ extension Parser { parser.parseFunctionParameter() } - var misplacedEffectSpecifiers: RawDeclEffectSpecifiersSyntax? + var misplacedEffectSpecifiers: RawFunctionEffectSpecifiersSyntax? let result = self.parseFunctionReturnClause(effectSpecifiers: &misplacedEffectSpecifiers, allowNamedOpaqueResultType: true) // Parse a 'where' clause if present. @@ -1519,7 +1519,7 @@ extension Parser { parameter = nil } - let effectSpecifiers = self.parseDeclEffectSpecifiers() + let effectSpecifiers = self.parseAccessorEffectSpecifiers() let body = self.parseOptionalCodeBlock() return RawAccessorDeclSyntax( diff --git a/Sources/SwiftParser/Specifiers.swift b/Sources/SwiftParser/Specifiers.swift index 3467666ade5..18749f12b1a 100644 --- a/Sources/SwiftParser/Specifiers.swift +++ b/Sources/SwiftParser/Specifiers.swift @@ -173,7 +173,7 @@ extension RawEffectSpecifiersTrait { } } -extension RawDeclEffectSpecifiersSyntax: RawEffectSpecifiersTrait { +extension RawFunctionEffectSpecifiersSyntax: RawEffectSpecifiersTrait { enum MisspelledAsyncSpecifiers: TokenSpecSet { case await @@ -331,6 +331,86 @@ extension RawTypeEffectSpecifiersSyntax: RawEffectSpecifiersTrait { } } +extension RawAccessorEffectSpecifiersSyntax: RawEffectSpecifiersTrait { + enum MisspelledAsyncSpecifiers: TokenSpecSet { + case await + case reasync + + init?(lexeme: Lexer.Lexeme) { + switch PrepareForKeywordMatch(lexeme) { + case TokenSpec(.await, allowAtStartOfLine: false): self = .await + case TokenSpec(.reasync): self = .reasync + default: return nil + } + } + + var spec: TokenSpec { + switch self { + case .await: return TokenSpec(.await, allowAtStartOfLine: false) + case .reasync: return .keyword(.reasync) + } + } + } + + enum CorrectAsyncTokenKinds: TokenSpecSet { + case async + + init?(lexeme: Lexer.Lexeme) { + switch PrepareForKeywordMatch(lexeme) { + case TokenSpec(.async): self = .async + default: return nil + } + } + + var spec: TokenSpec { + switch self { + case .async: return .keyword(.async) + } + } + } + + enum MisspelledThrowsTokenKinds: TokenSpecSet { + case `rethrows` + case `try` + case `throw` + + init?(lexeme: Lexer.Lexeme) { + switch PrepareForKeywordMatch(lexeme) { + case TokenSpec(.rethrows): self = .rethrows + case TokenSpec(.try, allowAtStartOfLine: false): self = .try + case TokenSpec(.throw, allowAtStartOfLine: false): self = .throw + default: return nil + } + } + + var spec: TokenSpec { + switch self { + case .rethrows: return .keyword(.rethrows) + case .try: return TokenSpec(.try, allowAtStartOfLine: false) + case .throw: return TokenSpec(.throw, allowAtStartOfLine: false) + } + } + } + + enum CorrectThrowsTokenKinds: TokenSpecSet { + case `throws` + + init?(lexeme: Lexer.Lexeme) { + switch PrepareForKeywordMatch(lexeme) { + case TokenSpec(.throws): self = .throws + default: return nil + } + } + + var spec: TokenSpec { + switch self { + case .throws: return .keyword(.throws) + } + } + } + +} + extension TokenConsumer { mutating func at(anyIn specSet1: SpecSet1.Type, or specSet2: SpecSet2.Type) -> (TokenSpec, TokenConsumptionHandle)? { if let (spec, handle) = self.at(anyIn: specSet1) { @@ -423,8 +503,12 @@ extension Parser { return parseEffectSpecifiers(RawTypeEffectSpecifiersSyntax.self) } - mutating func parseDeclEffectSpecifiers() -> RawDeclEffectSpecifiersSyntax? { - return parseEffectSpecifiers(RawDeclEffectSpecifiersSyntax.self) + mutating func parseFunctionEffectSpecifiers() -> RawFunctionEffectSpecifiersSyntax? { + return parseEffectSpecifiers(RawFunctionEffectSpecifiersSyntax.self) + } + + mutating func parseAccessorEffectSpecifiers() -> RawAccessorEffectSpecifiersSyntax? { + return parseEffectSpecifiers(RawAccessorEffectSpecifiersSyntax.self) } /// Consume any misplaced effect specifiers and return them in as unexpected tokens. diff --git a/Sources/SwiftParserDiagnostics/ParseDiagnosticsGenerator.swift b/Sources/SwiftParserDiagnostics/ParseDiagnosticsGenerator.swift index e559a211d47..d0a1d68a20a 100644 --- a/Sources/SwiftParserDiagnostics/ParseDiagnosticsGenerator.swift +++ b/Sources/SwiftParserDiagnostics/ParseDiagnosticsGenerator.swift @@ -385,6 +385,10 @@ public class ParseDiagnosticsGenerator: SyntaxAnyVisitor { return .visitChildren } + public override func visit(_ node: AccessorEffectSpecifiersSyntax) -> SyntaxVisitorContinueKind { + return handleEffectSpecifiers(node) + } + public override func visit(_ node: AssociatedtypeDeclSyntax) -> SyntaxVisitorContinueKind { if shouldSkip(node) { return .skipChildren @@ -538,7 +542,7 @@ public class ParseDiagnosticsGenerator: SyntaxAnyVisitor { return .visitChildren } - public override func visit(_ node: DeclEffectSpecifiersSyntax) -> SyntaxVisitorContinueKind { + public override func visit(_ node: FunctionEffectSpecifiersSyntax) -> SyntaxVisitorContinueKind { return handleEffectSpecifiers(node) } diff --git a/Sources/SwiftParserDiagnostics/generated/SyntaxKindNameForDiagnostics.swift b/Sources/SwiftParserDiagnostics/generated/SyntaxKindNameForDiagnostics.swift index e5d39584be2..b35327cad6d 100644 --- a/Sources/SwiftParserDiagnostics/generated/SyntaxKindNameForDiagnostics.swift +++ b/Sources/SwiftParserDiagnostics/generated/SyntaxKindNameForDiagnostics.swift @@ -21,6 +21,8 @@ extension SyntaxKind { return "token" case .accessorDecl: return "accessor" + case .accessorEffectSpecifiers: + return "accessor specifiers" case .actorDecl: return "actor" case .arrayElement: @@ -105,8 +107,6 @@ extension SyntaxKind { return "@convention(...) arguments" case .conventionWitnessMethodAttributeArguments: return "@convention(...) arguments for witness methods" - case .declEffectSpecifiers: - return "effect specifiers" case .declModifier: return "modifier" case .declName: @@ -179,6 +179,8 @@ extension SyntaxKind { return "function call" case .functionDecl: return "function" + case .functionEffectSpecifiers: + return "effect specifiers" case .functionParameterList: return "parameter list" case .functionParameter: diff --git a/Sources/SwiftSyntax/Documentation.docc/generated/SwiftSyntax.md b/Sources/SwiftSyntax/Documentation.docc/generated/SwiftSyntax.md index ef77edd0b94..c3924e1afc6 100644 --- a/Sources/SwiftSyntax/Documentation.docc/generated/SwiftSyntax.md +++ b/Sources/SwiftSyntax/Documentation.docc/generated/SwiftSyntax.md @@ -284,6 +284,7 @@ allows Swift tools to parse, inspect, generate, and transform Swift source code. ### Miscellaneous Syntax - +- - - - @@ -299,7 +300,6 @@ allows Swift tools to parse, inspect, generate, and transform Swift source code. - - - -- - - - @@ -311,6 +311,7 @@ allows Swift tools to parse, inspect, generate, and transform Swift source code. - - - +- - - - diff --git a/Sources/SwiftSyntax/generated/SyntaxAnyVisitor.swift b/Sources/SwiftSyntax/generated/SyntaxAnyVisitor.swift index 6132585baae..08f7d2307a1 100644 --- a/Sources/SwiftSyntax/generated/SyntaxAnyVisitor.swift +++ b/Sources/SwiftSyntax/generated/SyntaxAnyVisitor.swift @@ -85,6 +85,14 @@ open class SyntaxAnyVisitor: SyntaxVisitor { visitAnyPost(node._syntaxNode) } + override open func visit(_ node: AccessorEffectSpecifiersSyntax) -> SyntaxVisitorContinueKind { + return visitAny(node._syntaxNode) + } + + override open func visitPost(_ node: AccessorEffectSpecifiersSyntax) { + visitAnyPost(node._syntaxNode) + } + override open func visit(_ node: AccessorListSyntax) -> SyntaxVisitorContinueKind { return visitAny(node._syntaxNode) } @@ -565,14 +573,6 @@ open class SyntaxAnyVisitor: SyntaxVisitor { visitAnyPost(node._syntaxNode) } - override open func visit(_ node: DeclEffectSpecifiersSyntax) -> SyntaxVisitorContinueKind { - return visitAny(node._syntaxNode) - } - - override open func visitPost(_ node: DeclEffectSpecifiersSyntax) { - visitAnyPost(node._syntaxNode) - } - override open func visit(_ node: DeclModifierDetailSyntax) -> SyntaxVisitorContinueKind { return visitAny(node._syntaxNode) } @@ -957,6 +957,14 @@ open class SyntaxAnyVisitor: SyntaxVisitor { visitAnyPost(node._syntaxNode) } + override open func visit(_ node: FunctionEffectSpecifiersSyntax) -> SyntaxVisitorContinueKind { + return visitAny(node._syntaxNode) + } + + override open func visitPost(_ node: FunctionEffectSpecifiersSyntax) { + visitAnyPost(node._syntaxNode) + } + override open func visit(_ node: FunctionParameterListSyntax) -> SyntaxVisitorContinueKind { return visitAny(node._syntaxNode) } diff --git a/Sources/SwiftSyntax/generated/SyntaxBaseNodes.swift b/Sources/SwiftSyntax/generated/SyntaxBaseNodes.swift index a4b9fad17eb..0da98428095 100644 --- a/Sources/SwiftSyntax/generated/SyntaxBaseNodes.swift +++ b/Sources/SwiftSyntax/generated/SyntaxBaseNodes.swift @@ -737,6 +737,7 @@ extension Syntax { .node(AccessPathSyntax.self), .node(AccessorBlockSyntax.self), .node(AccessorDeclSyntax.self), + .node(AccessorEffectSpecifiersSyntax.self), .node(AccessorListSyntax.self), .node(AccessorParameterSyntax.self), .node(ActorDeclSyntax.self), @@ -797,7 +798,6 @@ extension Syntax { .node(ContinueStmtSyntax.self), .node(ConventionAttributeArgumentsSyntax.self), .node(ConventionWitnessMethodAttributeArgumentsSyntax.self), - .node(DeclEffectSpecifiersSyntax.self), .node(DeclModifierDetailSyntax.self), .node(DeclModifierSyntax.self), .node(DeclNameArgumentListSyntax.self), @@ -846,6 +846,7 @@ extension Syntax { .node(ForgetStmtSyntax.self), .node(FunctionCallExprSyntax.self), .node(FunctionDeclSyntax.self), + .node(FunctionEffectSpecifiersSyntax.self), .node(FunctionParameterListSyntax.self), .node(FunctionParameterSyntax.self), .node(FunctionSignatureSyntax.self), diff --git a/Sources/SwiftSyntax/generated/SyntaxCollections.swift b/Sources/SwiftSyntax/generated/SyntaxCollections.swift index 1eef68f6e13..715791e6a21 100644 --- a/Sources/SwiftSyntax/generated/SyntaxCollections.swift +++ b/Sources/SwiftSyntax/generated/SyntaxCollections.swift @@ -2387,8 +2387,7 @@ public struct ClosureParameterListSyntax: SyntaxCollection, SyntaxHashable { public let _syntaxNode: Syntax - @_spi(RawSyntax) - public var layoutView: RawSyntaxLayoutView { + private var layoutView: RawSyntaxLayoutView { data.raw.layoutView! } @@ -2420,7 +2419,7 @@ public struct ClosureParameterListSyntax: SyntaxCollection, SyntaxHashable { /// The number of elements, `present` or `missing`, in this collection. public var count: Int { - return raw.layoutView!.children.count + return layoutView.children.count } /// Creates a new `ClosureParameterListSyntax` by replacing the underlying layout with @@ -4689,8 +4688,7 @@ public struct EnumCaseParameterListSyntax: SyntaxCollection, SyntaxHashable { public let _syntaxNode: Syntax - @_spi(RawSyntax) - public var layoutView: RawSyntaxLayoutView { + private var layoutView: RawSyntaxLayoutView { data.raw.layoutView! } @@ -4722,7 +4720,7 @@ public struct EnumCaseParameterListSyntax: SyntaxCollection, SyntaxHashable { /// The number of elements, `present` or `missing`, in this collection. public var count: Int { - return raw.layoutView!.children.count + return layoutView.children.count } /// Creates a new `EnumCaseParameterListSyntax` by replacing the underlying layout with diff --git a/Sources/SwiftSyntax/generated/SyntaxEnum.swift b/Sources/SwiftSyntax/generated/SyntaxEnum.swift index 5c4cb5c976e..8e9144700ab 100644 --- a/Sources/SwiftSyntax/generated/SyntaxEnum.swift +++ b/Sources/SwiftSyntax/generated/SyntaxEnum.swift @@ -20,6 +20,7 @@ public enum SyntaxEnum { case accessPath(AccessPathSyntax) case accessorBlock(AccessorBlockSyntax) case accessorDecl(AccessorDeclSyntax) + case accessorEffectSpecifiers(AccessorEffectSpecifiersSyntax) case accessorList(AccessorListSyntax) case accessorParameter(AccessorParameterSyntax) case actorDecl(ActorDeclSyntax) @@ -80,7 +81,6 @@ public enum SyntaxEnum { case continueStmt(ContinueStmtSyntax) case conventionAttributeArguments(ConventionAttributeArgumentsSyntax) case conventionWitnessMethodAttributeArguments(ConventionWitnessMethodAttributeArgumentsSyntax) - case declEffectSpecifiers(DeclEffectSpecifiersSyntax) case declModifierDetail(DeclModifierDetailSyntax) case declModifier(DeclModifierSyntax) case declNameArgumentList(DeclNameArgumentListSyntax) @@ -129,6 +129,7 @@ public enum SyntaxEnum { case forgetStmt(ForgetStmtSyntax) case functionCallExpr(FunctionCallExprSyntax) case functionDecl(FunctionDeclSyntax) + case functionEffectSpecifiers(FunctionEffectSpecifiersSyntax) case functionParameterList(FunctionParameterListSyntax) case functionParameter(FunctionParameterSyntax) case functionSignature(FunctionSignatureSyntax) @@ -299,6 +300,8 @@ public extension Syntax { return .accessorBlock(AccessorBlockSyntax(self)!) case .accessorDecl: return .accessorDecl(AccessorDeclSyntax(self)!) + case .accessorEffectSpecifiers: + return .accessorEffectSpecifiers(AccessorEffectSpecifiersSyntax(self)!) case .accessorList: return .accessorList(AccessorListSyntax(self)!) case .accessorParameter: @@ -419,8 +422,6 @@ public extension Syntax { return .conventionAttributeArguments(ConventionAttributeArgumentsSyntax(self)!) case .conventionWitnessMethodAttributeArguments: return .conventionWitnessMethodAttributeArguments(ConventionWitnessMethodAttributeArgumentsSyntax(self)!) - case .declEffectSpecifiers: - return .declEffectSpecifiers(DeclEffectSpecifiersSyntax(self)!) case .declModifierDetail: return .declModifierDetail(DeclModifierDetailSyntax(self)!) case .declModifier: @@ -517,6 +518,8 @@ public extension Syntax { return .functionCallExpr(FunctionCallExprSyntax(self)!) case .functionDecl: return .functionDecl(FunctionDeclSyntax(self)!) + case .functionEffectSpecifiers: + return .functionEffectSpecifiers(FunctionEffectSpecifiersSyntax(self)!) case .functionParameterList: return .functionParameterList(FunctionParameterListSyntax(self)!) case .functionParameter: diff --git a/Sources/SwiftSyntax/generated/SyntaxKind.swift b/Sources/SwiftSyntax/generated/SyntaxKind.swift index e551b4c9b4c..518f1f43a0f 100644 --- a/Sources/SwiftSyntax/generated/SyntaxKind.swift +++ b/Sources/SwiftSyntax/generated/SyntaxKind.swift @@ -20,6 +20,7 @@ public enum SyntaxKind { case accessPath case accessorBlock case accessorDecl + case accessorEffectSpecifiers case accessorList case accessorParameter case actorDecl @@ -80,7 +81,6 @@ public enum SyntaxKind { case continueStmt case conventionAttributeArguments case conventionWitnessMethodAttributeArguments - case declEffectSpecifiers case declModifierDetail case declModifier case declNameArgumentList @@ -129,6 +129,7 @@ public enum SyntaxKind { case forgetStmt case functionCallExpr case functionDecl + case functionEffectSpecifiers case functionParameterList case functionParameter case functionSignature @@ -414,6 +415,8 @@ public enum SyntaxKind { return AccessorBlockSyntax.self case .accessorDecl: return AccessorDeclSyntax.self + case .accessorEffectSpecifiers: + return AccessorEffectSpecifiersSyntax.self case .accessorList: return AccessorListSyntax.self case .accessorParameter: @@ -534,8 +537,6 @@ public enum SyntaxKind { return ConventionAttributeArgumentsSyntax.self case .conventionWitnessMethodAttributeArguments: return ConventionWitnessMethodAttributeArgumentsSyntax.self - case .declEffectSpecifiers: - return DeclEffectSpecifiersSyntax.self case .declModifierDetail: return DeclModifierDetailSyntax.self case .declModifier: @@ -632,6 +633,8 @@ public enum SyntaxKind { return FunctionCallExprSyntax.self case .functionDecl: return FunctionDeclSyntax.self + case .functionEffectSpecifiers: + return FunctionEffectSpecifiersSyntax.self case .functionParameterList: return FunctionParameterListSyntax.self case .functionParameter: diff --git a/Sources/SwiftSyntax/generated/SyntaxRewriter.swift b/Sources/SwiftSyntax/generated/SyntaxRewriter.swift index ebe853136c2..c70f90f24a7 100644 --- a/Sources/SwiftSyntax/generated/SyntaxRewriter.swift +++ b/Sources/SwiftSyntax/generated/SyntaxRewriter.swift @@ -53,6 +53,13 @@ open class SyntaxRewriter { return DeclSyntax(visitChildren(node)) } + /// Visit a `AccessorEffectSpecifiersSyntax`. + /// - Parameter node: the node that is being visited + /// - Returns: the rewritten node + open func visit(_ node: AccessorEffectSpecifiersSyntax) -> AccessorEffectSpecifiersSyntax { + return Syntax(visitChildren(node)).cast(AccessorEffectSpecifiersSyntax.self) + } + /// Visit a `AccessorListSyntax`. /// - Parameter node: the node that is being visited /// - Returns: the rewritten node @@ -473,13 +480,6 @@ open class SyntaxRewriter { return Syntax(visitChildren(node)).cast(ConventionWitnessMethodAttributeArgumentsSyntax.self) } - /// Visit a `DeclEffectSpecifiersSyntax`. - /// - Parameter node: the node that is being visited - /// - Returns: the rewritten node - open func visit(_ node: DeclEffectSpecifiersSyntax) -> DeclEffectSpecifiersSyntax { - return Syntax(visitChildren(node)).cast(DeclEffectSpecifiersSyntax.self) - } - /// Visit a `DeclModifierDetailSyntax`. /// - Parameter node: the node that is being visited /// - Returns: the rewritten node @@ -816,6 +816,13 @@ open class SyntaxRewriter { return DeclSyntax(visitChildren(node)) } + /// Visit a `FunctionEffectSpecifiersSyntax`. + /// - Parameter node: the node that is being visited + /// - Returns: the rewritten node + open func visit(_ node: FunctionEffectSpecifiersSyntax) -> FunctionEffectSpecifiersSyntax { + return Syntax(visitChildren(node)).cast(FunctionEffectSpecifiersSyntax.self) + } + /// Visit a `FunctionParameterListSyntax`. /// - Parameter node: the node that is being visited /// - Returns: the rewritten node @@ -2024,6 +2031,20 @@ open class SyntaxRewriter { return Syntax(visit(node)) } + /// Implementation detail of visit(_:). Do not call directly. + private func visitImplAccessorEffectSpecifiersSyntax(_ data: SyntaxData) -> Syntax { + let node = AccessorEffectSpecifiersSyntax(data) + // Accessing _syntaxNode directly is faster than calling Syntax(node) + visitPre(node._syntaxNode) + defer { + visitPost(node._syntaxNode) + } + if let newNode = visitAny(node._syntaxNode) { + return newNode + } + return Syntax(visit(node)) + } + /// Implementation detail of visit(_:). Do not call directly. private func visitImplAccessorListSyntax(_ data: SyntaxData) -> Syntax { let node = AccessorListSyntax(data) @@ -2864,20 +2885,6 @@ open class SyntaxRewriter { return Syntax(visit(node)) } - /// Implementation detail of visit(_:). Do not call directly. - private func visitImplDeclEffectSpecifiersSyntax(_ data: SyntaxData) -> Syntax { - let node = DeclEffectSpecifiersSyntax(data) - // Accessing _syntaxNode directly is faster than calling Syntax(node) - visitPre(node._syntaxNode) - defer { - visitPost(node._syntaxNode) - } - if let newNode = visitAny(node._syntaxNode) { - return newNode - } - return Syntax(visit(node)) - } - /// Implementation detail of visit(_:). Do not call directly. private func visitImplDeclModifierDetailSyntax(_ data: SyntaxData) -> Syntax { let node = DeclModifierDetailSyntax(data) @@ -3550,6 +3557,20 @@ open class SyntaxRewriter { return Syntax(visit(node)) } + /// Implementation detail of visit(_:). Do not call directly. + private func visitImplFunctionEffectSpecifiersSyntax(_ data: SyntaxData) -> Syntax { + let node = FunctionEffectSpecifiersSyntax(data) + // Accessing _syntaxNode directly is faster than calling Syntax(node) + visitPre(node._syntaxNode) + defer { + visitPost(node._syntaxNode) + } + if let newNode = visitAny(node._syntaxNode) { + return newNode + } + return Syntax(visit(node)) + } + /// Implementation detail of visit(_:). Do not call directly. private func visitImplFunctionParameterListSyntax(_ data: SyntaxData) -> Syntax { let node = FunctionParameterListSyntax(data) @@ -5756,6 +5777,8 @@ open class SyntaxRewriter { return visitImplAccessorBlockSyntax case .accessorDecl: return visitImplAccessorDeclSyntax + case .accessorEffectSpecifiers: + return visitImplAccessorEffectSpecifiersSyntax case .accessorList: return visitImplAccessorListSyntax case .accessorParameter: @@ -5876,8 +5899,6 @@ open class SyntaxRewriter { return visitImplConventionAttributeArgumentsSyntax case .conventionWitnessMethodAttributeArguments: return visitImplConventionWitnessMethodAttributeArgumentsSyntax - case .declEffectSpecifiers: - return visitImplDeclEffectSpecifiersSyntax case .declModifierDetail: return visitImplDeclModifierDetailSyntax case .declModifier: @@ -5974,6 +5995,8 @@ open class SyntaxRewriter { return visitImplFunctionCallExprSyntax case .functionDecl: return visitImplFunctionDeclSyntax + case .functionEffectSpecifiers: + return visitImplFunctionEffectSpecifiersSyntax case .functionParameterList: return visitImplFunctionParameterListSyntax case .functionParameter: @@ -6300,6 +6323,8 @@ open class SyntaxRewriter { return visitImplAccessorBlockSyntax(data) case .accessorDecl: return visitImplAccessorDeclSyntax(data) + case .accessorEffectSpecifiers: + return visitImplAccessorEffectSpecifiersSyntax(data) case .accessorList: return visitImplAccessorListSyntax(data) case .accessorParameter: @@ -6420,8 +6445,6 @@ open class SyntaxRewriter { return visitImplConventionAttributeArgumentsSyntax(data) case .conventionWitnessMethodAttributeArguments: return visitImplConventionWitnessMethodAttributeArgumentsSyntax(data) - case .declEffectSpecifiers: - return visitImplDeclEffectSpecifiersSyntax(data) case .declModifierDetail: return visitImplDeclModifierDetailSyntax(data) case .declModifier: @@ -6518,6 +6541,8 @@ open class SyntaxRewriter { return visitImplFunctionCallExprSyntax(data) case .functionDecl: return visitImplFunctionDeclSyntax(data) + case .functionEffectSpecifiers: + return visitImplFunctionEffectSpecifiersSyntax(data) case .functionParameterList: return visitImplFunctionParameterListSyntax(data) case .functionParameter: diff --git a/Sources/SwiftSyntax/generated/SyntaxTraits.swift b/Sources/SwiftSyntax/generated/SyntaxTraits.swift index e10e731d032..1586f0b6fc6 100644 --- a/Sources/SwiftSyntax/generated/SyntaxTraits.swift +++ b/Sources/SwiftSyntax/generated/SyntaxTraits.swift @@ -451,6 +451,8 @@ extension AccessorBlockSyntax: BracedSyntax {} extension AccessorDeclSyntax: AttributedSyntax {} +extension AccessorEffectSpecifiersSyntax: EffectSpecifiersSyntax {} + extension AccessorParameterSyntax: ParenthesizedSyntax {} extension ActorDeclSyntax: DeclGroupSyntax, IdentifiedDeclSyntax, AttributedSyntax {} @@ -485,8 +487,6 @@ extension CodeBlockSyntax: BracedSyntax, WithStatementsSyntax {} extension ConditionElementSyntax: WithTrailingCommaSyntax {} -extension DeclEffectSpecifiersSyntax: EffectSpecifiersSyntax {} - extension DeclModifierDetailSyntax: ParenthesizedSyntax {} extension DeclNameArgumentsSyntax: ParenthesizedSyntax {} @@ -521,6 +521,8 @@ extension ForInStmtSyntax: WithCodeBlockSyntax {} extension FunctionDeclSyntax: IdentifiedDeclSyntax, AttributedSyntax {} +extension FunctionEffectSpecifiersSyntax: EffectSpecifiersSyntax {} + extension FunctionParameterSyntax: WithTrailingCommaSyntax, AttributedSyntax {} extension FunctionTypeSyntax: ParenthesizedSyntax {} diff --git a/Sources/SwiftSyntax/generated/SyntaxTransform.swift b/Sources/SwiftSyntax/generated/SyntaxTransform.swift index 613bdb25f96..40967c51cf5 100644 --- a/Sources/SwiftSyntax/generated/SyntaxTransform.swift +++ b/Sources/SwiftSyntax/generated/SyntaxTransform.swift @@ -39,6 +39,11 @@ public protocol SyntaxTransformVisitor { /// - Returns: the sum of whatever the child visitors return. func visit(_ node: AccessorDeclSyntax) -> ResultType + /// Visiting `AccessorEffectSpecifiersSyntax` specifically. + /// - Parameter node: the node we are visiting. + /// - Returns: the sum of whatever the child visitors return. + func visit(_ node: AccessorEffectSpecifiersSyntax) -> ResultType + /// Visiting `AccessorListSyntax` specifically. /// - Parameter node: the node we are visiting. /// - Returns: the sum of whatever the child visitors return. @@ -339,11 +344,6 @@ public protocol SyntaxTransformVisitor { /// - Returns: the sum of whatever the child visitors return. func visit(_ node: ConventionWitnessMethodAttributeArgumentsSyntax) -> ResultType - /// Visiting `DeclEffectSpecifiersSyntax` specifically. - /// - Parameter node: the node we are visiting. - /// - Returns: the sum of whatever the child visitors return. - func visit(_ node: DeclEffectSpecifiersSyntax) -> ResultType - /// Visiting `DeclModifierDetailSyntax` specifically. /// - Parameter node: the node we are visiting. /// - Returns: the sum of whatever the child visitors return. @@ -584,6 +584,11 @@ public protocol SyntaxTransformVisitor { /// - Returns: the sum of whatever the child visitors return. func visit(_ node: FunctionDeclSyntax) -> ResultType + /// Visiting `FunctionEffectSpecifiersSyntax` specifically. + /// - Parameter node: the node we are visiting. + /// - Returns: the sum of whatever the child visitors return. + func visit(_ node: FunctionEffectSpecifiersSyntax) -> ResultType + /// Visiting `FunctionParameterListSyntax` specifically. /// - Parameter node: the node we are visiting. /// - Returns: the sum of whatever the child visitors return. @@ -1388,6 +1393,13 @@ extension SyntaxTransformVisitor { visitAny(Syntax(node)) } + /// Visiting `AccessorEffectSpecifiersSyntax` specifically. + /// - Parameter node: the node we are visiting. + /// - Returns: nil by default. + public func visit(_ node: AccessorEffectSpecifiersSyntax) -> ResultType { + visitAny(Syntax(node)) + } + /// Visiting `AccessorListSyntax` specifically. /// - Parameter node: the node we are visiting. /// - Returns: nil by default. @@ -1808,13 +1820,6 @@ extension SyntaxTransformVisitor { visitAny(Syntax(node)) } - /// Visiting `DeclEffectSpecifiersSyntax` specifically. - /// - Parameter node: the node we are visiting. - /// - Returns: nil by default. - public func visit(_ node: DeclEffectSpecifiersSyntax) -> ResultType { - visitAny(Syntax(node)) - } - /// Visiting `DeclModifierDetailSyntax` specifically. /// - Parameter node: the node we are visiting. /// - Returns: nil by default. @@ -2151,6 +2156,13 @@ extension SyntaxTransformVisitor { visitAny(Syntax(node)) } + /// Visiting `FunctionEffectSpecifiersSyntax` specifically. + /// - Parameter node: the node we are visiting. + /// - Returns: nil by default. + public func visit(_ node: FunctionEffectSpecifiersSyntax) -> ResultType { + visitAny(Syntax(node)) + } + /// Visiting `FunctionParameterListSyntax` specifically. /// - Parameter node: the node we are visiting. /// - Returns: nil by default. @@ -3241,6 +3253,8 @@ extension SyntaxTransformVisitor { return visit(derived) case .accessorDecl(let derived): return visit(derived) + case .accessorEffectSpecifiers(let derived): + return visit(derived) case .accessorList(let derived): return visit(derived) case .accessorParameter(let derived): @@ -3361,8 +3375,6 @@ extension SyntaxTransformVisitor { return visit(derived) case .conventionWitnessMethodAttributeArguments(let derived): return visit(derived) - case .declEffectSpecifiers(let derived): - return visit(derived) case .declModifierDetail(let derived): return visit(derived) case .declModifier(let derived): @@ -3459,6 +3471,8 @@ extension SyntaxTransformVisitor { return visit(derived) case .functionDecl(let derived): return visit(derived) + case .functionEffectSpecifiers(let derived): + return visit(derived) case .functionParameterList(let derived): return visit(derived) case .functionParameter(let derived): diff --git a/Sources/SwiftSyntax/generated/SyntaxVisitor.swift b/Sources/SwiftSyntax/generated/SyntaxVisitor.swift index 512c3bfd286..0e9e589d93c 100644 --- a/Sources/SwiftSyntax/generated/SyntaxVisitor.swift +++ b/Sources/SwiftSyntax/generated/SyntaxVisitor.swift @@ -82,6 +82,18 @@ open class SyntaxVisitor { open func visitPost(_ node: AccessorDeclSyntax) { } + /// Visiting `AccessorEffectSpecifiersSyntax` specifically. + /// - Parameter node: the node we are visiting. + /// - Returns: how should we continue visiting. + open func visit(_ node: AccessorEffectSpecifiersSyntax) -> SyntaxVisitorContinueKind { + return .visitChildren + } + + /// The function called after visiting `AccessorEffectSpecifiersSyntax` and its descendents. + /// - node: the node we just finished visiting. + open func visitPost(_ node: AccessorEffectSpecifiersSyntax) { + } + /// Visiting `AccessorListSyntax` specifically. /// - Parameter node: the node we are visiting. /// - Returns: how should we continue visiting. @@ -802,18 +814,6 @@ open class SyntaxVisitor { open func visitPost(_ node: ConventionWitnessMethodAttributeArgumentsSyntax) { } - /// Visiting `DeclEffectSpecifiersSyntax` specifically. - /// - Parameter node: the node we are visiting. - /// - Returns: how should we continue visiting. - open func visit(_ node: DeclEffectSpecifiersSyntax) -> SyntaxVisitorContinueKind { - return .visitChildren - } - - /// The function called after visiting `DeclEffectSpecifiersSyntax` and its descendents. - /// - node: the node we just finished visiting. - open func visitPost(_ node: DeclEffectSpecifiersSyntax) { - } - /// Visiting `DeclModifierDetailSyntax` specifically. /// - Parameter node: the node we are visiting. /// - Returns: how should we continue visiting. @@ -1390,6 +1390,18 @@ open class SyntaxVisitor { open func visitPost(_ node: FunctionDeclSyntax) { } + /// Visiting `FunctionEffectSpecifiersSyntax` specifically. + /// - Parameter node: the node we are visiting. + /// - Returns: how should we continue visiting. + open func visit(_ node: FunctionEffectSpecifiersSyntax) -> SyntaxVisitorContinueKind { + return .visitChildren + } + + /// The function called after visiting `FunctionEffectSpecifiersSyntax` and its descendents. + /// - node: the node we just finished visiting. + open func visitPost(_ node: FunctionEffectSpecifiersSyntax) { + } + /// Visiting `FunctionParameterListSyntax` specifically. /// - Parameter node: the node we are visiting. /// - Returns: how should we continue visiting. @@ -3294,6 +3306,17 @@ open class SyntaxVisitor { visitPost(node) } + /// Implementation detail of doVisit(_:_:). Do not call directly. + private func visitImplAccessorEffectSpecifiersSyntax(_ data: SyntaxData) { + let node = AccessorEffectSpecifiersSyntax(data) + let needsChildren = (visit(node) == .visitChildren) + // Avoid calling into visitChildren if possible. + if needsChildren && !node.raw.layoutView!.children.isEmpty { + visitChildren(node) + } + visitPost(node) + } + /// Implementation detail of doVisit(_:_:). Do not call directly. private func visitImplAccessorListSyntax(_ data: SyntaxData) { let node = AccessorListSyntax(data) @@ -3954,17 +3977,6 @@ open class SyntaxVisitor { visitPost(node) } - /// Implementation detail of doVisit(_:_:). Do not call directly. - private func visitImplDeclEffectSpecifiersSyntax(_ data: SyntaxData) { - let node = DeclEffectSpecifiersSyntax(data) - let needsChildren = (visit(node) == .visitChildren) - // Avoid calling into visitChildren if possible. - if needsChildren && !node.raw.layoutView!.children.isEmpty { - visitChildren(node) - } - visitPost(node) - } - /// Implementation detail of doVisit(_:_:). Do not call directly. private func visitImplDeclModifierDetailSyntax(_ data: SyntaxData) { let node = DeclModifierDetailSyntax(data) @@ -4493,6 +4505,17 @@ open class SyntaxVisitor { visitPost(node) } + /// Implementation detail of doVisit(_:_:). Do not call directly. + private func visitImplFunctionEffectSpecifiersSyntax(_ data: SyntaxData) { + let node = FunctionEffectSpecifiersSyntax(data) + let needsChildren = (visit(node) == .visitChildren) + // Avoid calling into visitChildren if possible. + if needsChildren && !node.raw.layoutView!.children.isEmpty { + visitChildren(node) + } + visitPost(node) + } + /// Implementation detail of doVisit(_:_:). Do not call directly. private func visitImplFunctionParameterListSyntax(_ data: SyntaxData) { let node = FunctionParameterListSyntax(data) @@ -6202,6 +6225,8 @@ open class SyntaxVisitor { visitImplAccessorBlockSyntax(data) case .accessorDecl: visitImplAccessorDeclSyntax(data) + case .accessorEffectSpecifiers: + visitImplAccessorEffectSpecifiersSyntax(data) case .accessorList: visitImplAccessorListSyntax(data) case .accessorParameter: @@ -6322,8 +6347,6 @@ open class SyntaxVisitor { visitImplConventionAttributeArgumentsSyntax(data) case .conventionWitnessMethodAttributeArguments: visitImplConventionWitnessMethodAttributeArgumentsSyntax(data) - case .declEffectSpecifiers: - visitImplDeclEffectSpecifiersSyntax(data) case .declModifierDetail: visitImplDeclModifierDetailSyntax(data) case .declModifier: @@ -6420,6 +6443,8 @@ open class SyntaxVisitor { visitImplFunctionCallExprSyntax(data) case .functionDecl: visitImplFunctionDeclSyntax(data) + case .functionEffectSpecifiers: + visitImplFunctionEffectSpecifiersSyntax(data) case .functionParameterList: visitImplFunctionParameterListSyntax(data) case .functionParameter: diff --git a/Sources/SwiftSyntax/generated/raw/RawSyntaxNodes.swift b/Sources/SwiftSyntax/generated/raw/RawSyntaxNodes.swift index d458364369e..f40cf63e711 100644 --- a/Sources/SwiftSyntax/generated/raw/RawSyntaxNodes.swift +++ b/Sources/SwiftSyntax/generated/raw/RawSyntaxNodes.swift @@ -268,7 +268,7 @@ public struct RawAccessorDeclSyntax: RawDeclSyntaxNodeProtocol { _ unexpectedBetweenAccessorKindAndParameter: RawUnexpectedNodesSyntax? = nil, parameter: RawAccessorParameterSyntax?, _ unexpectedBetweenParameterAndEffectSpecifiers: RawUnexpectedNodesSyntax? = nil, - effectSpecifiers: RawDeclEffectSpecifiersSyntax?, + effectSpecifiers: RawAccessorEffectSpecifiersSyntax?, _ unexpectedBetweenEffectSpecifiersAndBody: RawUnexpectedNodesSyntax? = nil, body: RawCodeBlockSyntax?, _ unexpectedAfterBody: RawUnexpectedNodesSyntax? = nil, @@ -330,8 +330,8 @@ public struct RawAccessorDeclSyntax: RawDeclSyntaxNodeProtocol { layoutView.children[8].map(RawUnexpectedNodesSyntax.init(raw:)) } - public var effectSpecifiers: RawDeclEffectSpecifiersSyntax? { - layoutView.children[9].map(RawDeclEffectSpecifiersSyntax.init(raw:)) + public var effectSpecifiers: RawAccessorEffectSpecifiersSyntax? { + layoutView.children[9].map(RawAccessorEffectSpecifiersSyntax.init(raw:)) } public var unexpectedBetweenEffectSpecifiersAndBody: RawUnexpectedNodesSyntax? { @@ -347,6 +347,76 @@ public struct RawAccessorDeclSyntax: RawDeclSyntaxNodeProtocol { } } +@_spi(RawSyntax) +public struct RawAccessorEffectSpecifiersSyntax: RawSyntaxNodeProtocol { + @_spi(RawSyntax) + public var layoutView: RawSyntaxLayoutView { + return raw.layoutView! + } + + public static func isKindOf(_ raw: RawSyntax) -> Bool { + return raw.kind == .accessorEffectSpecifiers + } + + public var raw: RawSyntax + + init(raw: RawSyntax) { + precondition(Self.isKindOf(raw)) + self.raw = raw + } + + private init(unchecked raw: RawSyntax) { + self.raw = raw + } + + public init?(_ other: Node) { + guard Self.isKindOf(other.raw) else { + return nil + } + self.init(unchecked: other.raw) + } + + public init( + _ unexpectedBeforeAsyncSpecifier: RawUnexpectedNodesSyntax? = nil, + asyncSpecifier: RawTokenSyntax?, + _ unexpectedBetweenAsyncSpecifierAndThrowsSpecifier: RawUnexpectedNodesSyntax? = nil, + throwsSpecifier: RawTokenSyntax?, + _ unexpectedAfterThrowsSpecifier: RawUnexpectedNodesSyntax? = nil, + arena: __shared SyntaxArena + ) { + let raw = RawSyntax.makeLayout( + kind: .accessorEffectSpecifiers, uninitializedCount: 5, arena: arena) { layout in + layout.initialize(repeating: nil) + layout[0] = unexpectedBeforeAsyncSpecifier?.raw + layout[1] = asyncSpecifier?.raw + layout[2] = unexpectedBetweenAsyncSpecifierAndThrowsSpecifier?.raw + layout[3] = throwsSpecifier?.raw + layout[4] = unexpectedAfterThrowsSpecifier?.raw + } + self.init(unchecked: raw) + } + + public var unexpectedBeforeAsyncSpecifier: RawUnexpectedNodesSyntax? { + layoutView.children[0].map(RawUnexpectedNodesSyntax.init(raw:)) + } + + public var asyncSpecifier: RawTokenSyntax? { + layoutView.children[1].map(RawTokenSyntax.init(raw:)) + } + + public var unexpectedBetweenAsyncSpecifierAndThrowsSpecifier: RawUnexpectedNodesSyntax? { + layoutView.children[2].map(RawUnexpectedNodesSyntax.init(raw:)) + } + + public var throwsSpecifier: RawTokenSyntax? { + layoutView.children[3].map(RawTokenSyntax.init(raw:)) + } + + public var unexpectedAfterThrowsSpecifier: RawUnexpectedNodesSyntax? { + layoutView.children[4].map(RawUnexpectedNodesSyntax.init(raw:)) + } +} + @_spi(RawSyntax) public struct RawAccessorListSyntax: RawSyntaxNodeProtocol { @_spi(RawSyntax) @@ -5298,76 +5368,6 @@ public struct RawConventionWitnessMethodAttributeArgumentsSyntax: RawSyntaxNodeP } } -@_spi(RawSyntax) -public struct RawDeclEffectSpecifiersSyntax: RawSyntaxNodeProtocol { - @_spi(RawSyntax) - public var layoutView: RawSyntaxLayoutView { - return raw.layoutView! - } - - public static func isKindOf(_ raw: RawSyntax) -> Bool { - return raw.kind == .declEffectSpecifiers - } - - public var raw: RawSyntax - - init(raw: RawSyntax) { - precondition(Self.isKindOf(raw)) - self.raw = raw - } - - private init(unchecked raw: RawSyntax) { - self.raw = raw - } - - public init?(_ other: Node) { - guard Self.isKindOf(other.raw) else { - return nil - } - self.init(unchecked: other.raw) - } - - public init( - _ unexpectedBeforeAsyncSpecifier: RawUnexpectedNodesSyntax? = nil, - asyncSpecifier: RawTokenSyntax?, - _ unexpectedBetweenAsyncSpecifierAndThrowsSpecifier: RawUnexpectedNodesSyntax? = nil, - throwsSpecifier: RawTokenSyntax?, - _ unexpectedAfterThrowsSpecifier: RawUnexpectedNodesSyntax? = nil, - arena: __shared SyntaxArena - ) { - let raw = RawSyntax.makeLayout( - kind: .declEffectSpecifiers, uninitializedCount: 5, arena: arena) { layout in - layout.initialize(repeating: nil) - layout[0] = unexpectedBeforeAsyncSpecifier?.raw - layout[1] = asyncSpecifier?.raw - layout[2] = unexpectedBetweenAsyncSpecifierAndThrowsSpecifier?.raw - layout[3] = throwsSpecifier?.raw - layout[4] = unexpectedAfterThrowsSpecifier?.raw - } - self.init(unchecked: raw) - } - - public var unexpectedBeforeAsyncSpecifier: RawUnexpectedNodesSyntax? { - layoutView.children[0].map(RawUnexpectedNodesSyntax.init(raw:)) - } - - public var asyncSpecifier: RawTokenSyntax? { - layoutView.children[1].map(RawTokenSyntax.init(raw:)) - } - - public var unexpectedBetweenAsyncSpecifierAndThrowsSpecifier: RawUnexpectedNodesSyntax? { - layoutView.children[2].map(RawUnexpectedNodesSyntax.init(raw:)) - } - - public var throwsSpecifier: RawTokenSyntax? { - layoutView.children[3].map(RawTokenSyntax.init(raw:)) - } - - public var unexpectedAfterThrowsSpecifier: RawUnexpectedNodesSyntax? { - layoutView.children[4].map(RawUnexpectedNodesSyntax.init(raw:)) - } -} - @_spi(RawSyntax) public struct RawDeclModifierDetailSyntax: RawSyntaxNodeProtocol { @_spi(RawSyntax) @@ -9439,6 +9439,76 @@ public struct RawFunctionDeclSyntax: RawDeclSyntaxNodeProtocol { } } +@_spi(RawSyntax) +public struct RawFunctionEffectSpecifiersSyntax: RawSyntaxNodeProtocol { + @_spi(RawSyntax) + public var layoutView: RawSyntaxLayoutView { + return raw.layoutView! + } + + public static func isKindOf(_ raw: RawSyntax) -> Bool { + return raw.kind == .functionEffectSpecifiers + } + + public var raw: RawSyntax + + init(raw: RawSyntax) { + precondition(Self.isKindOf(raw)) + self.raw = raw + } + + private init(unchecked raw: RawSyntax) { + self.raw = raw + } + + public init?(_ other: Node) { + guard Self.isKindOf(other.raw) else { + return nil + } + self.init(unchecked: other.raw) + } + + public init( + _ unexpectedBeforeAsyncSpecifier: RawUnexpectedNodesSyntax? = nil, + asyncSpecifier: RawTokenSyntax?, + _ unexpectedBetweenAsyncSpecifierAndThrowsSpecifier: RawUnexpectedNodesSyntax? = nil, + throwsSpecifier: RawTokenSyntax?, + _ unexpectedAfterThrowsSpecifier: RawUnexpectedNodesSyntax? = nil, + arena: __shared SyntaxArena + ) { + let raw = RawSyntax.makeLayout( + kind: .functionEffectSpecifiers, uninitializedCount: 5, arena: arena) { layout in + layout.initialize(repeating: nil) + layout[0] = unexpectedBeforeAsyncSpecifier?.raw + layout[1] = asyncSpecifier?.raw + layout[2] = unexpectedBetweenAsyncSpecifierAndThrowsSpecifier?.raw + layout[3] = throwsSpecifier?.raw + layout[4] = unexpectedAfterThrowsSpecifier?.raw + } + self.init(unchecked: raw) + } + + public var unexpectedBeforeAsyncSpecifier: RawUnexpectedNodesSyntax? { + layoutView.children[0].map(RawUnexpectedNodesSyntax.init(raw:)) + } + + public var asyncSpecifier: RawTokenSyntax? { + layoutView.children[1].map(RawTokenSyntax.init(raw:)) + } + + public var unexpectedBetweenAsyncSpecifierAndThrowsSpecifier: RawUnexpectedNodesSyntax? { + layoutView.children[2].map(RawUnexpectedNodesSyntax.init(raw:)) + } + + public var throwsSpecifier: RawTokenSyntax? { + layoutView.children[3].map(RawTokenSyntax.init(raw:)) + } + + public var unexpectedAfterThrowsSpecifier: RawUnexpectedNodesSyntax? { + layoutView.children[4].map(RawUnexpectedNodesSyntax.init(raw:)) + } +} + @_spi(RawSyntax) public struct RawFunctionParameterListSyntax: RawSyntaxNodeProtocol { @_spi(RawSyntax) @@ -9676,7 +9746,7 @@ public struct RawFunctionSignatureSyntax: RawSyntaxNodeProtocol { _ unexpectedBeforeInput: RawUnexpectedNodesSyntax? = nil, input: RawParameterClauseSyntax, _ unexpectedBetweenInputAndEffectSpecifiers: RawUnexpectedNodesSyntax? = nil, - effectSpecifiers: RawDeclEffectSpecifiersSyntax?, + effectSpecifiers: RawFunctionEffectSpecifiersSyntax?, _ unexpectedBetweenEffectSpecifiersAndOutput: RawUnexpectedNodesSyntax? = nil, output: RawReturnClauseSyntax?, _ unexpectedAfterOutput: RawUnexpectedNodesSyntax? = nil, @@ -9708,8 +9778,8 @@ public struct RawFunctionSignatureSyntax: RawSyntaxNodeProtocol { layoutView.children[2].map(RawUnexpectedNodesSyntax.init(raw:)) } - public var effectSpecifiers: RawDeclEffectSpecifiersSyntax? { - layoutView.children[3].map(RawDeclEffectSpecifiersSyntax.init(raw:)) + public var effectSpecifiers: RawFunctionEffectSpecifiersSyntax? { + layoutView.children[3].map(RawFunctionEffectSpecifiersSyntax.init(raw:)) } public var unexpectedBetweenEffectSpecifiersAndOutput: RawUnexpectedNodesSyntax? { diff --git a/Sources/SwiftSyntax/generated/raw/RawSyntaxValidation.swift b/Sources/SwiftSyntax/generated/raw/RawSyntaxValidation.swift index 585d7731b6a..717235f3916 100644 --- a/Sources/SwiftSyntax/generated/raw/RawSyntaxValidation.swift +++ b/Sources/SwiftSyntax/generated/raw/RawSyntaxValidation.swift @@ -273,10 +273,17 @@ func validateLayout(layout: RawSyntaxBuffer, as kind: SyntaxKind) { assertNoError(kind, 6, verify(layout[6], as: RawUnexpectedNodesSyntax?.self)) assertNoError(kind, 7, verify(layout[7], as: RawAccessorParameterSyntax?.self)) assertNoError(kind, 8, verify(layout[8], as: RawUnexpectedNodesSyntax?.self)) - assertNoError(kind, 9, verify(layout[9], as: RawDeclEffectSpecifiersSyntax?.self)) + assertNoError(kind, 9, verify(layout[9], as: RawAccessorEffectSpecifiersSyntax?.self)) assertNoError(kind, 10, verify(layout[10], as: RawUnexpectedNodesSyntax?.self)) assertNoError(kind, 11, verify(layout[11], as: RawCodeBlockSyntax?.self)) assertNoError(kind, 12, verify(layout[12], as: RawUnexpectedNodesSyntax?.self)) + case .accessorEffectSpecifiers: + assert(layout.count == 5) + assertNoError(kind, 0, verify(layout[0], as: RawUnexpectedNodesSyntax?.self)) + assertNoError(kind, 1, verify(layout[1], as: RawTokenSyntax?.self, tokenChoices: [.keyword("async")])) + assertNoError(kind, 2, verify(layout[2], as: RawUnexpectedNodesSyntax?.self)) + assertNoError(kind, 3, verify(layout[3], as: RawTokenSyntax?.self, tokenChoices: [.keyword("throws")])) + assertNoError(kind, 4, verify(layout[4], as: RawUnexpectedNodesSyntax?.self)) case .accessorList: for (index, element) in layout.enumerated() { assertNoError(kind, index, verify(element, as: RawAccessorDeclSyntax.self)) @@ -787,13 +794,6 @@ func validateLayout(layout: RawSyntaxBuffer, as kind: SyntaxKind) { assertNoError(kind, 4, verify(layout[4], as: RawUnexpectedNodesSyntax?.self)) assertNoError(kind, 5, verify(layout[5], as: RawTokenSyntax.self, tokenChoices: [.tokenKind(.identifier)])) assertNoError(kind, 6, verify(layout[6], as: RawUnexpectedNodesSyntax?.self)) - case .declEffectSpecifiers: - assert(layout.count == 5) - assertNoError(kind, 0, verify(layout[0], as: RawUnexpectedNodesSyntax?.self)) - assertNoError(kind, 1, verify(layout[1], as: RawTokenSyntax?.self, tokenChoices: [.keyword("async"), .keyword("reasync")])) - assertNoError(kind, 2, verify(layout[2], as: RawUnexpectedNodesSyntax?.self)) - assertNoError(kind, 3, verify(layout[3], as: RawTokenSyntax?.self, tokenChoices: [.keyword("throws"), .keyword("rethrows")])) - assertNoError(kind, 4, verify(layout[4], as: RawUnexpectedNodesSyntax?.self)) case .declModifierDetail: assert(layout.count == 7) assertNoError(kind, 0, verify(layout[0], as: RawUnexpectedNodesSyntax?.self)) @@ -1271,6 +1271,13 @@ func validateLayout(layout: RawSyntaxBuffer, as kind: SyntaxKind) { assertNoError(kind, 14, verify(layout[14], as: RawUnexpectedNodesSyntax?.self)) assertNoError(kind, 15, verify(layout[15], as: RawCodeBlockSyntax?.self)) assertNoError(kind, 16, verify(layout[16], as: RawUnexpectedNodesSyntax?.self)) + case .functionEffectSpecifiers: + assert(layout.count == 5) + assertNoError(kind, 0, verify(layout[0], as: RawUnexpectedNodesSyntax?.self)) + assertNoError(kind, 1, verify(layout[1], as: RawTokenSyntax?.self, tokenChoices: [.keyword("async"), .keyword("reasync")])) + assertNoError(kind, 2, verify(layout[2], as: RawUnexpectedNodesSyntax?.self)) + assertNoError(kind, 3, verify(layout[3], as: RawTokenSyntax?.self, tokenChoices: [.keyword("throws"), .keyword("rethrows")])) + assertNoError(kind, 4, verify(layout[4], as: RawUnexpectedNodesSyntax?.self)) case .functionParameterList: for (index, element) in layout.enumerated() { assertNoError(kind, index, verify(element, as: RawFunctionParameterSyntax.self)) @@ -1301,7 +1308,7 @@ func validateLayout(layout: RawSyntaxBuffer, as kind: SyntaxKind) { assertNoError(kind, 0, verify(layout[0], as: RawUnexpectedNodesSyntax?.self)) assertNoError(kind, 1, verify(layout[1], as: RawParameterClauseSyntax.self)) assertNoError(kind, 2, verify(layout[2], as: RawUnexpectedNodesSyntax?.self)) - assertNoError(kind, 3, verify(layout[3], as: RawDeclEffectSpecifiersSyntax?.self)) + assertNoError(kind, 3, verify(layout[3], as: RawFunctionEffectSpecifiersSyntax?.self)) assertNoError(kind, 4, verify(layout[4], as: RawUnexpectedNodesSyntax?.self)) assertNoError(kind, 5, verify(layout[5], as: RawReturnClauseSyntax?.self)) assertNoError(kind, 6, verify(layout[6], as: RawUnexpectedNodesSyntax?.self)) diff --git a/Sources/SwiftSyntax/generated/syntaxNodes/SyntaxDeclNodes.swift b/Sources/SwiftSyntax/generated/syntaxNodes/SyntaxDeclNodes.swift index 365262da656..23740f3e3f4 100644 --- a/Sources/SwiftSyntax/generated/syntaxNodes/SyntaxDeclNodes.swift +++ b/Sources/SwiftSyntax/generated/syntaxNodes/SyntaxDeclNodes.swift @@ -44,7 +44,7 @@ public struct AccessorDeclSyntax: DeclSyntaxProtocol, SyntaxHashable { _ unexpectedBetweenAccessorKindAndParameter: UnexpectedNodesSyntax? = nil, parameter: AccessorParameterSyntax? = nil, _ unexpectedBetweenParameterAndEffectSpecifiers: UnexpectedNodesSyntax? = nil, - effectSpecifiers: DeclEffectSpecifiersSyntax? = nil, + effectSpecifiers: AccessorEffectSpecifiersSyntax? = nil, _ unexpectedBetweenEffectSpecifiersAndBody: UnexpectedNodesSyntax? = nil, body: CodeBlockSyntax? = nil, _ unexpectedAfterBody: UnexpectedNodesSyntax? = nil, @@ -195,9 +195,9 @@ public struct AccessorDeclSyntax: DeclSyntaxProtocol, SyntaxHashable { } } - public var effectSpecifiers: DeclEffectSpecifiersSyntax? { + public var effectSpecifiers: AccessorEffectSpecifiersSyntax? { get { - return data.child(at: 9, parent: Syntax(self)).map(DeclEffectSpecifiersSyntax.init) + return data.child(at: 9, parent: Syntax(self)).map(AccessorEffectSpecifiersSyntax.init) } set(value) { self = AccessorDeclSyntax(data.replacingChild(at: 9, with: value?.raw, arena: SyntaxArena())) diff --git a/Sources/SwiftSyntax/generated/syntaxNodes/SyntaxNodes.swift b/Sources/SwiftSyntax/generated/syntaxNodes/SyntaxNodes.swift index 5a31a4404ad..08e44ba5545 100644 --- a/Sources/SwiftSyntax/generated/syntaxNodes/SyntaxNodes.swift +++ b/Sources/SwiftSyntax/generated/syntaxNodes/SyntaxNodes.swift @@ -313,6 +313,133 @@ extension AccessorBlockSyntax: CustomReflectable { } } +// MARK: - AccessorEffectSpecifiersSyntax + + +public struct AccessorEffectSpecifiersSyntax: SyntaxProtocol, SyntaxHashable { + public let _syntaxNode: Syntax + + public init?(_ node: S) { + guard node.raw.kind == .accessorEffectSpecifiers else { + return nil + } + self._syntaxNode = node._syntaxNode + } + + /// Creates a `AccessorEffectSpecifiersSyntax` node from the given `SyntaxData`. This assumes + /// that the `SyntaxData` is of the correct kind. If it is not, the behaviour + /// is undefined. + internal init(_ data: SyntaxData) { + precondition(data.raw.kind == .accessorEffectSpecifiers) + self._syntaxNode = Syntax(data) + } + + public init( + leadingTrivia: Trivia? = nil, + _ unexpectedBeforeAsyncSpecifier: UnexpectedNodesSyntax? = nil, + asyncSpecifier: TokenSyntax? = nil, + _ unexpectedBetweenAsyncSpecifierAndThrowsSpecifier: UnexpectedNodesSyntax? = nil, + throwsSpecifier: TokenSyntax? = nil, + _ unexpectedAfterThrowsSpecifier: UnexpectedNodesSyntax? = nil, + trailingTrivia: Trivia? = nil + + ) { + // Extend the lifetime of all parameters so their arenas don't get destroyed + // before they can be added as children of the new arena. + let data: SyntaxData = withExtendedLifetime((SyntaxArena(), ( + unexpectedBeforeAsyncSpecifier, + asyncSpecifier, + unexpectedBetweenAsyncSpecifierAndThrowsSpecifier, + throwsSpecifier, + unexpectedAfterThrowsSpecifier + ))) {(arena, _) in + let layout: [RawSyntax?] = [ + unexpectedBeforeAsyncSpecifier?.raw, + asyncSpecifier?.raw, + unexpectedBetweenAsyncSpecifierAndThrowsSpecifier?.raw, + throwsSpecifier?.raw, + unexpectedAfterThrowsSpecifier?.raw + ] + let raw = RawSyntax.makeLayout( + kind: SyntaxKind.accessorEffectSpecifiers, + from: layout, + arena: arena, + leadingTrivia: leadingTrivia, + trailingTrivia: trailingTrivia + ) + return SyntaxData.forRoot(raw) + } + self.init(data) + } + + public var unexpectedBeforeAsyncSpecifier: UnexpectedNodesSyntax? { + get { + return data.child(at: 0, parent: Syntax(self)).map(UnexpectedNodesSyntax.init) + } + set(value) { + self = AccessorEffectSpecifiersSyntax(data.replacingChild(at: 0, with: value?.raw, arena: SyntaxArena())) + } + } + + public var asyncSpecifier: TokenSyntax? { + get { + return data.child(at: 1, parent: Syntax(self)).map(TokenSyntax.init) + } + set(value) { + self = AccessorEffectSpecifiersSyntax(data.replacingChild(at: 1, with: value?.raw, arena: SyntaxArena())) + } + } + + public var unexpectedBetweenAsyncSpecifierAndThrowsSpecifier: UnexpectedNodesSyntax? { + get { + return data.child(at: 2, parent: Syntax(self)).map(UnexpectedNodesSyntax.init) + } + set(value) { + self = AccessorEffectSpecifiersSyntax(data.replacingChild(at: 2, with: value?.raw, arena: SyntaxArena())) + } + } + + public var throwsSpecifier: TokenSyntax? { + get { + return data.child(at: 3, parent: Syntax(self)).map(TokenSyntax.init) + } + set(value) { + self = AccessorEffectSpecifiersSyntax(data.replacingChild(at: 3, with: value?.raw, arena: SyntaxArena())) + } + } + + public var unexpectedAfterThrowsSpecifier: UnexpectedNodesSyntax? { + get { + return data.child(at: 4, parent: Syntax(self)).map(UnexpectedNodesSyntax.init) + } + set(value) { + self = AccessorEffectSpecifiersSyntax(data.replacingChild(at: 4, with: value?.raw, arena: SyntaxArena())) + } + } + + public static var structure: SyntaxNodeStructure { + return .layout([ + \Self.unexpectedBeforeAsyncSpecifier, + \Self.asyncSpecifier, + \Self.unexpectedBetweenAsyncSpecifierAndThrowsSpecifier, + \Self.throwsSpecifier, + \Self.unexpectedAfterThrowsSpecifier + ]) + } +} + +extension AccessorEffectSpecifiersSyntax: CustomReflectable { + public var customMirror: Mirror { + return Mirror(self, children: [ + "unexpectedBeforeAsyncSpecifier": unexpectedBeforeAsyncSpecifier.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any , + "asyncSpecifier": asyncSpecifier.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any , + "unexpectedBetweenAsyncSpecifierAndThrowsSpecifier": unexpectedBetweenAsyncSpecifierAndThrowsSpecifier.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any , + "throwsSpecifier": throwsSpecifier.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any , + "unexpectedAfterThrowsSpecifier": unexpectedAfterThrowsSpecifier.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any + ]) + } +} + // MARK: - AccessorParameterSyntax @@ -5579,133 +5706,6 @@ extension ConventionWitnessMethodAttributeArgumentsSyntax: CustomReflectable { } } -// MARK: - DeclEffectSpecifiersSyntax - - -public struct DeclEffectSpecifiersSyntax: SyntaxProtocol, SyntaxHashable { - public let _syntaxNode: Syntax - - public init?(_ node: S) { - guard node.raw.kind == .declEffectSpecifiers else { - return nil - } - self._syntaxNode = node._syntaxNode - } - - /// Creates a `DeclEffectSpecifiersSyntax` node from the given `SyntaxData`. This assumes - /// that the `SyntaxData` is of the correct kind. If it is not, the behaviour - /// is undefined. - internal init(_ data: SyntaxData) { - precondition(data.raw.kind == .declEffectSpecifiers) - self._syntaxNode = Syntax(data) - } - - public init( - leadingTrivia: Trivia? = nil, - _ unexpectedBeforeAsyncSpecifier: UnexpectedNodesSyntax? = nil, - asyncSpecifier: TokenSyntax? = nil, - _ unexpectedBetweenAsyncSpecifierAndThrowsSpecifier: UnexpectedNodesSyntax? = nil, - throwsSpecifier: TokenSyntax? = nil, - _ unexpectedAfterThrowsSpecifier: UnexpectedNodesSyntax? = nil, - trailingTrivia: Trivia? = nil - - ) { - // Extend the lifetime of all parameters so their arenas don't get destroyed - // before they can be added as children of the new arena. - let data: SyntaxData = withExtendedLifetime((SyntaxArena(), ( - unexpectedBeforeAsyncSpecifier, - asyncSpecifier, - unexpectedBetweenAsyncSpecifierAndThrowsSpecifier, - throwsSpecifier, - unexpectedAfterThrowsSpecifier - ))) {(arena, _) in - let layout: [RawSyntax?] = [ - unexpectedBeforeAsyncSpecifier?.raw, - asyncSpecifier?.raw, - unexpectedBetweenAsyncSpecifierAndThrowsSpecifier?.raw, - throwsSpecifier?.raw, - unexpectedAfterThrowsSpecifier?.raw - ] - let raw = RawSyntax.makeLayout( - kind: SyntaxKind.declEffectSpecifiers, - from: layout, - arena: arena, - leadingTrivia: leadingTrivia, - trailingTrivia: trailingTrivia - ) - return SyntaxData.forRoot(raw) - } - self.init(data) - } - - public var unexpectedBeforeAsyncSpecifier: UnexpectedNodesSyntax? { - get { - return data.child(at: 0, parent: Syntax(self)).map(UnexpectedNodesSyntax.init) - } - set(value) { - self = DeclEffectSpecifiersSyntax(data.replacingChild(at: 0, with: value?.raw, arena: SyntaxArena())) - } - } - - public var asyncSpecifier: TokenSyntax? { - get { - return data.child(at: 1, parent: Syntax(self)).map(TokenSyntax.init) - } - set(value) { - self = DeclEffectSpecifiersSyntax(data.replacingChild(at: 1, with: value?.raw, arena: SyntaxArena())) - } - } - - public var unexpectedBetweenAsyncSpecifierAndThrowsSpecifier: UnexpectedNodesSyntax? { - get { - return data.child(at: 2, parent: Syntax(self)).map(UnexpectedNodesSyntax.init) - } - set(value) { - self = DeclEffectSpecifiersSyntax(data.replacingChild(at: 2, with: value?.raw, arena: SyntaxArena())) - } - } - - public var throwsSpecifier: TokenSyntax? { - get { - return data.child(at: 3, parent: Syntax(self)).map(TokenSyntax.init) - } - set(value) { - self = DeclEffectSpecifiersSyntax(data.replacingChild(at: 3, with: value?.raw, arena: SyntaxArena())) - } - } - - public var unexpectedAfterThrowsSpecifier: UnexpectedNodesSyntax? { - get { - return data.child(at: 4, parent: Syntax(self)).map(UnexpectedNodesSyntax.init) - } - set(value) { - self = DeclEffectSpecifiersSyntax(data.replacingChild(at: 4, with: value?.raw, arena: SyntaxArena())) - } - } - - public static var structure: SyntaxNodeStructure { - return .layout([ - \Self.unexpectedBeforeAsyncSpecifier, - \Self.asyncSpecifier, - \Self.unexpectedBetweenAsyncSpecifierAndThrowsSpecifier, - \Self.throwsSpecifier, - \Self.unexpectedAfterThrowsSpecifier - ]) - } -} - -extension DeclEffectSpecifiersSyntax: CustomReflectable { - public var customMirror: Mirror { - return Mirror(self, children: [ - "unexpectedBeforeAsyncSpecifier": unexpectedBeforeAsyncSpecifier.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any , - "asyncSpecifier": asyncSpecifier.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any , - "unexpectedBetweenAsyncSpecifierAndThrowsSpecifier": unexpectedBetweenAsyncSpecifierAndThrowsSpecifier.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any , - "throwsSpecifier": throwsSpecifier.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any , - "unexpectedAfterThrowsSpecifier": unexpectedAfterThrowsSpecifier.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any - ]) - } -} - // MARK: - DeclModifierDetailSyntax @@ -9134,6 +9134,133 @@ extension ExpressionSegmentSyntax: CustomReflectable { } } +// MARK: - FunctionEffectSpecifiersSyntax + + +public struct FunctionEffectSpecifiersSyntax: SyntaxProtocol, SyntaxHashable { + public let _syntaxNode: Syntax + + public init?(_ node: S) { + guard node.raw.kind == .functionEffectSpecifiers else { + return nil + } + self._syntaxNode = node._syntaxNode + } + + /// Creates a `FunctionEffectSpecifiersSyntax` node from the given `SyntaxData`. This assumes + /// that the `SyntaxData` is of the correct kind. If it is not, the behaviour + /// is undefined. + internal init(_ data: SyntaxData) { + precondition(data.raw.kind == .functionEffectSpecifiers) + self._syntaxNode = Syntax(data) + } + + public init( + leadingTrivia: Trivia? = nil, + _ unexpectedBeforeAsyncSpecifier: UnexpectedNodesSyntax? = nil, + asyncSpecifier: TokenSyntax? = nil, + _ unexpectedBetweenAsyncSpecifierAndThrowsSpecifier: UnexpectedNodesSyntax? = nil, + throwsSpecifier: TokenSyntax? = nil, + _ unexpectedAfterThrowsSpecifier: UnexpectedNodesSyntax? = nil, + trailingTrivia: Trivia? = nil + + ) { + // Extend the lifetime of all parameters so their arenas don't get destroyed + // before they can be added as children of the new arena. + let data: SyntaxData = withExtendedLifetime((SyntaxArena(), ( + unexpectedBeforeAsyncSpecifier, + asyncSpecifier, + unexpectedBetweenAsyncSpecifierAndThrowsSpecifier, + throwsSpecifier, + unexpectedAfterThrowsSpecifier + ))) {(arena, _) in + let layout: [RawSyntax?] = [ + unexpectedBeforeAsyncSpecifier?.raw, + asyncSpecifier?.raw, + unexpectedBetweenAsyncSpecifierAndThrowsSpecifier?.raw, + throwsSpecifier?.raw, + unexpectedAfterThrowsSpecifier?.raw + ] + let raw = RawSyntax.makeLayout( + kind: SyntaxKind.functionEffectSpecifiers, + from: layout, + arena: arena, + leadingTrivia: leadingTrivia, + trailingTrivia: trailingTrivia + ) + return SyntaxData.forRoot(raw) + } + self.init(data) + } + + public var unexpectedBeforeAsyncSpecifier: UnexpectedNodesSyntax? { + get { + return data.child(at: 0, parent: Syntax(self)).map(UnexpectedNodesSyntax.init) + } + set(value) { + self = FunctionEffectSpecifiersSyntax(data.replacingChild(at: 0, with: value?.raw, arena: SyntaxArena())) + } + } + + public var asyncSpecifier: TokenSyntax? { + get { + return data.child(at: 1, parent: Syntax(self)).map(TokenSyntax.init) + } + set(value) { + self = FunctionEffectSpecifiersSyntax(data.replacingChild(at: 1, with: value?.raw, arena: SyntaxArena())) + } + } + + public var unexpectedBetweenAsyncSpecifierAndThrowsSpecifier: UnexpectedNodesSyntax? { + get { + return data.child(at: 2, parent: Syntax(self)).map(UnexpectedNodesSyntax.init) + } + set(value) { + self = FunctionEffectSpecifiersSyntax(data.replacingChild(at: 2, with: value?.raw, arena: SyntaxArena())) + } + } + + public var throwsSpecifier: TokenSyntax? { + get { + return data.child(at: 3, parent: Syntax(self)).map(TokenSyntax.init) + } + set(value) { + self = FunctionEffectSpecifiersSyntax(data.replacingChild(at: 3, with: value?.raw, arena: SyntaxArena())) + } + } + + public var unexpectedAfterThrowsSpecifier: UnexpectedNodesSyntax? { + get { + return data.child(at: 4, parent: Syntax(self)).map(UnexpectedNodesSyntax.init) + } + set(value) { + self = FunctionEffectSpecifiersSyntax(data.replacingChild(at: 4, with: value?.raw, arena: SyntaxArena())) + } + } + + public static var structure: SyntaxNodeStructure { + return .layout([ + \Self.unexpectedBeforeAsyncSpecifier, + \Self.asyncSpecifier, + \Self.unexpectedBetweenAsyncSpecifierAndThrowsSpecifier, + \Self.throwsSpecifier, + \Self.unexpectedAfterThrowsSpecifier + ]) + } +} + +extension FunctionEffectSpecifiersSyntax: CustomReflectable { + public var customMirror: Mirror { + return Mirror(self, children: [ + "unexpectedBeforeAsyncSpecifier": unexpectedBeforeAsyncSpecifier.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any , + "asyncSpecifier": asyncSpecifier.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any , + "unexpectedBetweenAsyncSpecifierAndThrowsSpecifier": unexpectedBetweenAsyncSpecifierAndThrowsSpecifier.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any , + "throwsSpecifier": throwsSpecifier.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any , + "unexpectedAfterThrowsSpecifier": unexpectedAfterThrowsSpecifier.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any + ]) + } +} + // MARK: - FunctionParameterSyntax @@ -9521,7 +9648,7 @@ public struct FunctionSignatureSyntax: SyntaxProtocol, SyntaxHashable { _ unexpectedBeforeInput: UnexpectedNodesSyntax? = nil, input: ParameterClauseSyntax, _ unexpectedBetweenInputAndEffectSpecifiers: UnexpectedNodesSyntax? = nil, - effectSpecifiers: DeclEffectSpecifiersSyntax? = nil, + effectSpecifiers: FunctionEffectSpecifiersSyntax? = nil, _ unexpectedBetweenEffectSpecifiersAndOutput: UnexpectedNodesSyntax? = nil, output: ReturnClauseSyntax? = nil, _ unexpectedAfterOutput: UnexpectedNodesSyntax? = nil, @@ -9587,9 +9714,9 @@ public struct FunctionSignatureSyntax: SyntaxProtocol, SyntaxHashable { } } - public var effectSpecifiers: DeclEffectSpecifiersSyntax? { + public var effectSpecifiers: FunctionEffectSpecifiersSyntax? { get { - return data.child(at: 3, parent: Syntax(self)).map(DeclEffectSpecifiersSyntax.init) + return data.child(at: 3, parent: Syntax(self)).map(FunctionEffectSpecifiersSyntax.init) } set(value) { self = FunctionSignatureSyntax(data.replacingChild(at: 3, with: value?.raw, arena: SyntaxArena())) diff --git a/Sources/SwiftSyntaxBuilder/generated/BuildableNodes.swift b/Sources/SwiftSyntaxBuilder/generated/BuildableNodes.swift index 82fef37abb6..1f01971df8d 100644 --- a/Sources/SwiftSyntaxBuilder/generated/BuildableNodes.swift +++ b/Sources/SwiftSyntaxBuilder/generated/BuildableNodes.swift @@ -27,7 +27,7 @@ extension AccessorDeclSyntax { unexpectedBetweenAccessorKindAndParameter: UnexpectedNodesSyntax? = nil, parameter: AccessorParameterSyntax? = nil, unexpectedBetweenParameterAndEffectSpecifiers: UnexpectedNodesSyntax? = nil, - effectSpecifiers: DeclEffectSpecifiersSyntax? = nil, + effectSpecifiers: AccessorEffectSpecifiersSyntax? = nil, unexpectedBetweenEffectSpecifiersAndBody: UnexpectedNodesSyntax? = nil, unexpectedAfterBody: UnexpectedNodesSyntax? = nil, @CodeBlockItemListBuilder bodyBuilder: () throws -> CodeBlockItemListSyntax?, diff --git a/Tests/SwiftParserTest/DeclarationTests.swift b/Tests/SwiftParserTest/DeclarationTests.swift index 4fadf9e64a7..b97e722c2f5 100644 --- a/Tests/SwiftParserTest/DeclarationTests.swift +++ b/Tests/SwiftParserTest/DeclarationTests.swift @@ -733,9 +733,12 @@ final class DeclarationTests: XCTestCase { assertParse( """ var bad2 : Int { - get reasync { 0 } + get 1️⃣reasync { 0 } } - """ + """, + diagnostics: [ + DiagnosticSpec(message: "expected async specifier; did you mean 'async'?") + ] ) } @@ -766,18 +769,17 @@ final class DeclarationTests: XCTestCase { AccessorBlockSyntax( accessors: AccessorListSyntax([ AccessorDeclSyntax( - accessorKind: .keyword(.get), - effectSpecifiers: DeclEffectSpecifiersSyntax( - UnexpectedNodesSyntax([TokenSyntax.identifier("bogus")]), - throwsSpecifier: .keyword(.rethrows) - ) - ), - AccessorDeclSyntax(accessorKind: .keyword(.set)), + accessorKind: .keyword(.get) + ) + ]), + UnexpectedNodesSyntax([ + TokenSyntax.identifier("bogus"), TokenSyntax.keyword(.rethrows), + TokenSyntax.identifier("set"), ]) ) ), diagnostics: [ - DiagnosticSpec(message: "unexpected code 'bogus' before effect specifiers") + DiagnosticSpec(message: "unexpected code 'bogus rethrows set' in variable") ] ) } diff --git a/Tests/SwiftParserTest/translated/EffectfulPropertiesTests.swift b/Tests/SwiftParserTest/translated/EffectfulPropertiesTests.swift index a94edf20fbc..f7ead214162 100644 --- a/Tests/SwiftParserTest/translated/EffectfulPropertiesTests.swift +++ b/Tests/SwiftParserTest/translated/EffectfulPropertiesTests.swift @@ -174,12 +174,13 @@ final class EffectfulPropertiesTests: XCTestCase { assertParse( """ var bad1 : Int { - get rethrows { 0 } - set rethrows { } + get 1️⃣rethrows { 0 } + set 2️⃣rethrows { } } """, diagnostics: [ - // TODO: Old parser expected error on line 2: only function declarations may be marked 'rethrows'; did you mean 'throws'? + DiagnosticSpec(message: "expected throwing specifier; did you mean 'throws'?"), + DiagnosticSpec(locationMarker: "2️⃣", message: "expected throwing specifier; did you mean 'throws'?"), ] ) } @@ -188,12 +189,13 @@ final class EffectfulPropertiesTests: XCTestCase { assertParse( """ var bad2 : Int { - get reasync { 0 } - set reasync { } + get 1️⃣reasync { 0 } + set 2️⃣reasync { } } """, diagnostics: [ - // TODO: Old parser expected error on line 2: expected '{' to start getter definition + DiagnosticSpec(locationMarker: "1️⃣", message: "expected async specifier; did you mean 'async'?"), + DiagnosticSpec(locationMarker: "2️⃣", message: "expected async specifier; did you mean 'async'?"), ] ) } @@ -213,12 +215,12 @@ final class EffectfulPropertiesTests: XCTestCase { assertParse( """ var bad4 : Int = 0 { - willSet(theValue) 3️⃣reasync 4️⃣rethrows 1️⃣async 2️⃣throws {} + willSet(theValue) 1️⃣reasync 2️⃣rethrows async 3️⃣throws {} } """, diagnostics: [ - DiagnosticSpec(locationMarker: "1️⃣", message: "'async' conflicts with 'reasync'", notes: [NoteSpec(locationMarker: "3️⃣", message: "'reasync' declared here")], fixIts: ["remove redundant 'async'"]), - DiagnosticSpec(locationMarker: "2️⃣", message: "'throws' conflicts with 'rethrows'", notes: [NoteSpec(locationMarker: "4️⃣", message: "'rethrows' declared here")], fixIts: ["remove redundant 'throws'"]), + DiagnosticSpec(locationMarker: "1️⃣", message: "expected async specifier; did you mean 'async'?", fixIts: ["replace 'reasync' with 'async'"]), + DiagnosticSpec(locationMarker: "2️⃣", message: "'rethrows' conflicts with 'throws'", notes: [NoteSpec(locationMarker: "3️⃣", message: "'throws' declared here")], fixIts: ["remove redundant 'rethrows'"]), ] ) } @@ -240,11 +242,11 @@ final class EffectfulPropertiesTests: XCTestCase { assertParse( """ var bad5 : Int { - get 1️⃣bogus rethrows {} + get 1️⃣bogus 2️⃣rethrows {} } """, diagnostics: [ - DiagnosticSpec(message: "unexpected code 'bogus' before effect specifiers") + DiagnosticSpec(locationMarker: "1️⃣", message: "unexpected code 'bogus rethrows' in accessor") ] ) } @@ -253,11 +255,12 @@ final class EffectfulPropertiesTests: XCTestCase { assertParse( """ var bad6 : Int { - get rethrows 1️⃣-> Int { 0 } + get 1️⃣rethrows 2️⃣-> Int { 0 } } """, diagnostics: [ - DiagnosticSpec(message: "unexpected code '-> Int' in accessor") + DiagnosticSpec(locationMarker: "1️⃣", message: "expected throwing specifier; did you mean 'throws'?"), + DiagnosticSpec(locationMarker: "2️⃣", message: "unexpected code '-> Int' in accessor"), ] ) } @@ -294,16 +297,18 @@ final class EffectfulPropertiesTests: XCTestCase { """ protocol BadP { var prop2 : Int { get 1️⃣bogus rethrows set } - var prop3 : Int { get rethrows 2️⃣bogus set } - var prop4 : Int { get reasync 3️⃣bogus set } - var prop5 : Int { get throws 4️⃣async } + var prop3 : Int { get 2️⃣rethrows 3️⃣bogus set } + var prop4 : Int { get 4️⃣reasync 5️⃣bogus set } + var prop5 : Int { get throws 6️⃣async } } """, diagnostics: [ - DiagnosticSpec(locationMarker: "1️⃣", message: "unexpected code 'bogus' before effect specifiers"), - DiagnosticSpec(locationMarker: "2️⃣", message: "unexpected code 'bogus set' in variable"), + DiagnosticSpec(locationMarker: "1️⃣", message: "unexpected code 'bogus rethrows set' in variable"), + DiagnosticSpec(locationMarker: "2️⃣", message: "expected throwing specifier; did you mean 'throws'?"), DiagnosticSpec(locationMarker: "3️⃣", message: "unexpected code 'bogus set' in variable"), - DiagnosticSpec(locationMarker: "4️⃣", message: "'async' must precede 'throws'"), + DiagnosticSpec(locationMarker: "4️⃣", message: "expected async specifier; did you mean 'async'?"), + DiagnosticSpec(locationMarker: "5️⃣", message: "unexpected code 'bogus set' in variable"), + DiagnosticSpec(locationMarker: "6️⃣", message: "'async' must precede 'throws'"), ] ) }