I've found a strange behavior where a SimpleTypeIdentifierSyntax
extracted from a variable declaration with a initial value generates a unexpectedAfterBindings
when I use it in a DeclSyntax
literal.
let d1: DeclSyntax = "var number: Int = 5"
let d2: DeclSyntax = "var number: Int"
let t1 = d1.as(VariableDeclSyntax.self)!.bindings.first!.typeAnnotation!.type.as(SimpleTypeIdentifierSyntax.self)!
let t2 = d2.as(VariableDeclSyntax.self)!.bindings.first!.typeAnnotation!.type.as(SimpleTypeIdentifierSyntax.self)!
let d3: DeclSyntax = "var number: \(t1)? = nil" // var number: Int ? = nil
// VariableDeclSyntax
// ├─bindingKeyword: keyword(SwiftSyntax.Keyword.var)
// ├─bindings: PatternBindingListSyntax
// │ ╰─[0]: PatternBindingSyntax
// │ ├─pattern: IdentifierPatternSyntax
// │ │ ╰─identifier: identifier("number")
// │ ╰─typeAnnotation: TypeAnnotationSyntax
// │ ├─colon: colon
// │ ╰─type: SimpleTypeIdentifierSyntax
// │ ╰─name: identifier("Int")
// ╰─unexpectedAfterBindings: UnexpectedNodesSyntax
// ├─[0]: infixQuestionMark
// ├─[1]: equal
// ╰─[2]: keyword(SwiftSyntax.Keyword.nil)
let d4: DeclSyntax = "var number: \(t2)? = nil" // var number: Int? = nil
// VariableDeclSyntax
// ├─bindingKeyword: keyword(SwiftSyntax.Keyword.var)
// ╰─bindings: PatternBindingListSyntax
// ╰─[0]: PatternBindingSyntax
// ├─pattern: IdentifierPatternSyntax
// │ ╰─identifier: identifier("number")
// ├─typeAnnotation: TypeAnnotationSyntax
// │ ├─colon: colon
// │ ╰─type: OptionalTypeSyntax
// │ ├─wrappedType: SimpleTypeIdentifierSyntax
// │ │ ╰─name: identifier("Int")
// │ ╰─questionMark: postfixQuestionMark
// ╰─initializer: InitializerClauseSyntax
// ├─equal: equal
// ╰─value: NilLiteralExprSyntax
// ╰─nilKeyword: keyword(SwiftSyntax.Keyword.nil)
Am I missing something or is this a bug?