diff --git a/.github/workflows/SyntaxKit.yml b/.github/workflows/SyntaxKit.yml index dd72dfa..2c9de80 100644 --- a/.github/workflows/SyntaxKit.yml +++ b/.github/workflows/SyntaxKit.yml @@ -122,7 +122,7 @@ jobs: restore-keys: | ${{ runner.os }}-mint- - name: Install mint - if: steps.cache-mint.outputs.cache-hit != 'true' + if: steps.cache-mint.outputs.cache-hit == '' run: | git clone https://github.com/yonaskolb/Mint.git cd Mint diff --git a/.swiftlint.yml b/.swiftlint.yml index e4222bf..91eed35 100644 --- a/.swiftlint.yml +++ b/.swiftlint.yml @@ -111,11 +111,16 @@ identifier_name: excluded: - id - no +type_name: + excluded: + - If + - Do excluded: - DerivedData - .build - Mint - Examples + - Macros indentation_width: indentation_width: 2 file_name: @@ -129,3 +134,4 @@ disabled_rules: - closure_parameter_position - trailing_comma - opening_brace + - optional_data_string_conversion diff --git a/Examples/Completed/attributes/code.swift b/Examples/Completed/attributes/code.swift new file mode 100644 index 0000000..5e5e708 --- /dev/null +++ b/Examples/Completed/attributes/code.swift @@ -0,0 +1,14 @@ +@objc +class Foo { + @Published var bar: String = "bar" + + @available(iOS 17.0, *) + func bar() { + print("bar") + } + + @MainActor + func baz() { + print("baz") + } +} \ No newline at end of file diff --git a/Examples/Completed/attributes/dsl.swift b/Examples/Completed/attributes/dsl.swift new file mode 100644 index 0000000..daf5416 --- /dev/null +++ b/Examples/Completed/attributes/dsl.swift @@ -0,0 +1,7 @@ +Class("Foo") { + Variable(.var, name: "bar", type: "String", defaultValue: "bar").attribute("Published") + Function("bar") { + print("bar") + }.attribute("available", arguments: ["iOS 17.0", "*"]) + Function("baz") { +}.attribute("objc")}.attribute("objc") \ No newline at end of file diff --git a/Examples/Completed/attributes/syntax.json b/Examples/Completed/attributes/syntax.json new file mode 100644 index 0000000..e69de29 diff --git a/Examples/Completed/concurrency/code.swift b/Examples/Completed/concurrency/code.swift new file mode 100644 index 0000000..1be74cb --- /dev/null +++ b/Examples/Completed/concurrency/code.swift @@ -0,0 +1,42 @@ +enum VendingMachineError: Error { + case invalidSelection + case insufficientFunds(coinsNeeded: Int) + case outOfStock +} + +class VendingMachine { + var inventory = [ + "Candy Bar": Item(price: 12, count: 7), + "Chips": Item(price: 10, count: 4), + "Pretzels": Item(price: 7, count: 11) + ] + var coinsDeposited = 0 + + + func vend(itemNamed name: String) throws { + guard let item = inventory[name] else { + throw VendingMachineError.invalidSelection + } + + + guard item.count > 0 else { + throw VendingMachineError.outOfStock + } + + + guard item.price <= coinsDeposited else { + throw VendingMachineError.insufficientFunds(coinsNeeded: item.price - coinsDeposited) + } + + + coinsDeposited -= item.price + + + var newItem = item + newItem.count -= 1 + inventory[name] = newItem + + + print("Dispensing \(name)") + } +} \ No newline at end of file diff --git a/Examples/Completed/concurrency/dsl.swift b/Examples/Completed/concurrency/dsl.swift new file mode 100644 index 0000000..300a460 --- /dev/null +++ b/Examples/Completed/concurrency/dsl.swift @@ -0,0 +1,48 @@ +Enum("VendingMachineError") { + Case("invalidSelection") + Case("insufficientFunds").associatedValue("coinsNeeded", type: "Int") + Case("outOfStock") +} + +Class("VendingMachine") { + Variable(.var, name: "inventory", equals: Literal.dictionary(Dictionary(uniqueKeysWithValues: [ + ("Candy Bar", Item(price: 12, count: 7)), + ("Chips", Item(price: 10, count: 4)), + ("Pretzels", Item(price: 7, count: 11)) + ]))) + Variable(.var, name: "coinsDeposited", equals: 0) + + Function("vend"){ + Parameter("name", labeled: "itemNamed", type: "String") + } _: { + Guard("let item = inventory[itemNamed]") else: { + Throw( + EnumValue("VendingMachineError", case: "invalidSelection") + ) + } + Guard("item.count > 0") else: { + Throw( + EnumValue("VendingMachineError", case: "outOfStock") + ) + } + Guard("item.price <= coinsDeposited") else: { + Throw( + EnumValue("VendingMachineError", case: "insufficientFunds"){ + ParameterExp("coinsNeeded", value: Infix("-"){ + VariableExp("item").property("price") + VariableExp("coinsDeposited") + }) + } + ) + } + Infix("-=", "coinsDeposited", VariableExp("item").property("price")) + Variable("newItem", equals: VariableExp("item")) + Infix("-=", "newItem.count", 1) + Assignment("inventory[itemNamed]", .ref("newItem")) + Call("print", "Dispensing \\(itemNamed)") + } +} + + + + diff --git a/Examples/Completed/concurrency/syntax.json b/Examples/Completed/concurrency/syntax.json new file mode 100644 index 0000000..b514de5 --- /dev/null +++ b/Examples/Completed/concurrency/syntax.json @@ -0,0 +1 @@ +[{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeShebang"},{"value":{"text":"nil"},"name":"shebang"},{"value":{"text":"nil"},"name":"unexpectedBetweenShebangAndStatements"},{"value":{"text":"CodeBlockItemListSyntax"},"ref":"CodeBlockItemListSyntax","name":"statements"},{"value":{"text":"nil"},"name":"unexpectedBetweenStatementsAndEndOfFileToken"},{"value":{"text":"","kind":"endOfFile"},"name":"endOfFileToken"},{"value":{"text":"nil"},"name":"unexpectedAfterEndOfFileToken"}],"text":"SourceFile","type":"other","id":0,"range":{"endRow":42,"endColumn":2,"startRow":1,"startColumn":1}},{"id":1,"type":"collection","text":"CodeBlockItemList","parent":0,"range":{"endRow":42,"startRow":1,"startColumn":1,"endColumn":2},"structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"2"},"name":"Count"}]},{"id":2,"type":"other","text":"CodeBlockItem","parent":1,"range":{"startColumn":1,"endRow":5,"startRow":1,"endColumn":2},"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"EnumDeclSyntax"},"ref":"EnumDeclSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}]},{"id":3,"type":"decl","text":"EnumDecl","parent":2,"range":{"startRow":1,"endColumn":2,"startColumn":1,"endRow":5},"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"ref":"AttributeListSyntax","name":"attributes","value":{"text":"AttributeListSyntax"}},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"ref":"DeclModifierListSyntax","name":"modifiers","value":{"text":"DeclModifierListSyntax"}},{"name":"unexpectedBetweenModifiersAndEnumKeyword","value":{"text":"nil"}},{"name":"enumKeyword","value":{"text":"enum","kind":"keyword(SwiftSyntax.Keyword.enum)"}},{"name":"unexpectedBetweenEnumKeywordAndName","value":{"text":"nil"}},{"name":"name","value":{"text":"VendingMachineError","kind":"identifier("VendingMachineError")"}},{"name":"unexpectedBetweenNameAndGenericParameterClause","value":{"text":"nil"}},{"name":"genericParameterClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericParameterClauseAndInheritanceClause","value":{"text":"nil"}},{"ref":"InheritanceClauseSyntax","name":"inheritanceClause","value":{"text":"InheritanceClauseSyntax"}},{"name":"unexpectedBetweenInheritanceClauseAndGenericWhereClause","value":{"text":"nil"}},{"name":"genericWhereClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericWhereClauseAndMemberBlock","value":{"text":"nil"}},{"ref":"MemberBlockSyntax","name":"memberBlock","value":{"text":"MemberBlockSyntax"}},{"name":"unexpectedAfterMemberBlock","value":{"text":"nil"}}]},{"structure":[{"name":"Element","value":{"text":"Element"}},{"value":{"text":"0"},"name":"Count"}],"type":"collection","parent":3,"id":4,"text":"AttributeList","range":{"startRow":1,"startColumn":1,"endColumn":1,"endRow":1}},{"text":"DeclModifierList","range":{"startRow":1,"endRow":1,"endColumn":1,"startColumn":1},"id":5,"parent":3,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"type":"collection"},{"id":6,"type":"other","text":"enum","range":{"startColumn":1,"endRow":1,"startRow":1,"endColumn":5},"token":{"kind":"keyword(SwiftSyntax.Keyword.enum)","trailingTrivia":"␣<\/span>","leadingTrivia":""},"structure":[],"parent":3},{"parent":3,"structure":[],"type":"other","range":{"startColumn":6,"endRow":1,"startRow":1,"endColumn":25},"text":"VendingMachineError","id":7,"token":{"kind":"identifier("VendingMachineError")","trailingTrivia":"","leadingTrivia":""}},{"text":"InheritanceClause","range":{"startColumn":25,"endRow":1,"startRow":1,"endColumn":32},"id":8,"parent":3,"structure":[{"name":"unexpectedBeforeColon","value":{"text":"nil"}},{"name":"colon","value":{"kind":"colon","text":":"}},{"name":"unexpectedBetweenColonAndInheritedTypes","value":{"text":"nil"}},{"ref":"InheritedTypeListSyntax","name":"inheritedTypes","value":{"text":"InheritedTypeListSyntax"}},{"name":"unexpectedAfterInheritedTypes","value":{"text":"nil"}}],"type":"other"},{"type":"other","text":":","range":{"endRow":1,"endColumn":26,"startColumn":25,"startRow":1},"id":9,"token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"colon"},"structure":[],"parent":8},{"text":"InheritedTypeList","range":{"endRow":1,"endColumn":32,"startColumn":27,"startRow":1},"id":10,"parent":8,"structure":[{"name":"Element","value":{"text":"InheritedTypeSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection"},{"text":"InheritedType","range":{"startColumn":27,"startRow":1,"endRow":1,"endColumn":32},"id":11,"parent":10,"structure":[{"name":"unexpectedBeforeType","value":{"text":"nil"}},{"value":{"text":"IdentifierTypeSyntax"},"name":"type","ref":"IdentifierTypeSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other"},{"text":"IdentifierType","parent":11,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeName"},{"value":{"text":"Error","kind":"identifier("Error")"},"name":"name"},{"value":{"text":"nil"},"name":"unexpectedBetweenNameAndGenericArgumentClause"},{"value":{"text":"nil"},"name":"genericArgumentClause"},{"value":{"text":"nil"},"name":"unexpectedAfterGenericArgumentClause"}],"range":{"endColumn":32,"startColumn":27,"startRow":1,"endRow":1},"id":12,"type":"type"},{"text":"Error","parent":12,"structure":[],"token":{"kind":"identifier("Error")","trailingTrivia":"␣<\/span>","leadingTrivia":""},"range":{"startRow":1,"endRow":1,"endColumn":32,"startColumn":27},"type":"other","id":13},{"text":"MemberBlock","parent":3,"structure":[{"name":"unexpectedBeforeLeftBrace","value":{"text":"nil"}},{"name":"leftBrace","value":{"kind":"leftBrace","text":"{"}},{"name":"unexpectedBetweenLeftBraceAndMembers","value":{"text":"nil"}},{"name":"members","ref":"MemberBlockItemListSyntax","value":{"text":"MemberBlockItemListSyntax"}},{"name":"unexpectedBetweenMembersAndRightBrace","value":{"text":"nil"}},{"name":"rightBrace","value":{"text":"}","kind":"rightBrace"}},{"value":{"text":"nil"},"name":"unexpectedAfterRightBrace"}],"range":{"startRow":1,"endRow":5,"endColumn":2,"startColumn":33},"id":14,"type":"other"},{"type":"other","text":"{","id":15,"token":{"kind":"leftBrace","leadingTrivia":"","trailingTrivia":""},"structure":[],"range":{"startColumn":33,"startRow":1,"endRow":1,"endColumn":34},"parent":14},{"structure":[{"value":{"text":"MemberBlockItemSyntax"},"name":"Element"},{"value":{"text":"3"},"name":"Count"}],"parent":14,"type":"collection","range":{"startColumn":5,"startRow":2,"endRow":4,"endColumn":20},"text":"MemberBlockItemList","id":16},{"structure":[{"name":"unexpectedBeforeDecl","value":{"text":"nil"}},{"name":"decl","ref":"EnumCaseDeclSyntax","value":{"text":"EnumCaseDeclSyntax"}},{"name":"unexpectedBetweenDeclAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"parent":16,"type":"other","range":{"endColumn":26,"startColumn":5,"startRow":2,"endRow":2},"text":"MemberBlockItem","id":17},{"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","value":{"text":"AttributeListSyntax"},"ref":"AttributeListSyntax"},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax"},{"name":"unexpectedBetweenModifiersAndCaseKeyword","value":{"text":"nil"}},{"name":"caseKeyword","value":{"kind":"keyword(SwiftSyntax.Keyword.case)","text":"case"}},{"name":"unexpectedBetweenCaseKeywordAndElements","value":{"text":"nil"}},{"name":"elements","value":{"text":"EnumCaseElementListSyntax"},"ref":"EnumCaseElementListSyntax"},{"name":"unexpectedAfterElements","value":{"text":"nil"}}],"parent":17,"type":"decl","range":{"startRow":2,"endRow":2,"endColumn":26,"startColumn":5},"text":"EnumCaseDecl","id":18},{"id":19,"range":{"endRow":1,"endColumn":34,"startRow":1,"startColumn":34},"text":"AttributeList","type":"collection","parent":18,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}]},{"id":20,"range":{"startRow":1,"startColumn":34,"endRow":1,"endColumn":34},"text":"DeclModifierList","type":"collection","parent":18,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}]},{"parent":18,"id":21,"range":{"startColumn":5,"startRow":2,"endRow":2,"endColumn":9},"structure":[],"text":"case","token":{"kind":"keyword(SwiftSyntax.Keyword.case)","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"␣<\/span>"},"type":"other"},{"id":22,"range":{"startColumn":10,"startRow":2,"endRow":2,"endColumn":26},"text":"EnumCaseElementList","type":"collection","parent":18,"structure":[{"value":{"text":"EnumCaseElementSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}]},{"id":23,"range":{"startRow":2,"endColumn":26,"startColumn":10,"endRow":2},"text":"EnumCaseElement","type":"other","parent":22,"structure":[{"name":"unexpectedBeforeName","value":{"text":"nil"}},{"name":"name","value":{"text":"invalidSelection","kind":"identifier("invalidSelection")"}},{"name":"unexpectedBetweenNameAndParameterClause","value":{"text":"nil"}},{"name":"parameterClause","value":{"text":"nil"}},{"value":{"text":"nil"},"name":"unexpectedBetweenParameterClauseAndRawValue"},{"value":{"text":"nil"},"name":"rawValue"},{"value":{"text":"nil"},"name":"unexpectedBetweenRawValueAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}]},{"parent":23,"structure":[],"id":24,"range":{"startColumn":10,"endRow":2,"endColumn":26,"startRow":2},"text":"invalidSelection","token":{"kind":"identifier("invalidSelection")","trailingTrivia":"","leadingTrivia":""},"type":"other"},{"parent":16,"text":"MemberBlockItem","structure":[{"name":"unexpectedBeforeDecl","value":{"text":"nil"}},{"name":"decl","value":{"text":"EnumCaseDeclSyntax"},"ref":"EnumCaseDeclSyntax"},{"name":"unexpectedBetweenDeclAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"type":"other","id":25,"range":{"startColumn":5,"endRow":3,"endColumn":45,"startRow":3}},{"parent":25,"text":"EnumCaseDecl","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttributes"},{"value":{"text":"AttributeListSyntax"},"name":"attributes","ref":"AttributeListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenAttributesAndModifiers"},{"value":{"text":"DeclModifierListSyntax"},"name":"modifiers","ref":"DeclModifierListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenModifiersAndCaseKeyword"},{"value":{"text":"case","kind":"keyword(SwiftSyntax.Keyword.case)"},"name":"caseKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenCaseKeywordAndElements"},{"value":{"text":"EnumCaseElementListSyntax"},"ref":"EnumCaseElementListSyntax","name":"elements"},{"value":{"text":"nil"},"name":"unexpectedAfterElements"}],"type":"decl","id":26,"range":{"startRow":3,"startColumn":5,"endRow":3,"endColumn":45}},{"id":27,"parent":26,"range":{"startColumn":26,"endRow":2,"endColumn":26,"startRow":2},"text":"AttributeList","structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection"},{"id":28,"parent":26,"range":{"endRow":2,"startRow":2,"startColumn":26,"endColumn":26},"text":"DeclModifierList","structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"type":"collection"},{"parent":26,"id":29,"range":{"startRow":3,"startColumn":5,"endRow":3,"endColumn":9},"structure":[],"text":"case","token":{"kind":"keyword(SwiftSyntax.Keyword.case)","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"␣<\/span>"},"type":"other"},{"id":30,"parent":26,"range":{"startRow":3,"startColumn":10,"endRow":3,"endColumn":45},"text":"EnumCaseElementList","structure":[{"name":"Element","value":{"text":"EnumCaseElementSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection"},{"id":31,"parent":30,"range":{"endColumn":45,"endRow":3,"startColumn":10,"startRow":3},"text":"EnumCaseElement","structure":[{"name":"unexpectedBeforeName","value":{"text":"nil"}},{"name":"name","value":{"text":"insufficientFunds","kind":"identifier("insufficientFunds")"}},{"name":"unexpectedBetweenNameAndParameterClause","value":{"text":"nil"}},{"value":{"text":"EnumCaseParameterClauseSyntax"},"ref":"EnumCaseParameterClauseSyntax","name":"parameterClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenParameterClauseAndRawValue"},{"value":{"text":"nil"},"name":"rawValue"},{"value":{"text":"nil"},"name":"unexpectedBetweenRawValueAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other"},{"parent":31,"id":32,"range":{"startRow":3,"endColumn":27,"endRow":3,"startColumn":10},"structure":[],"text":"insufficientFunds","token":{"kind":"identifier("insufficientFunds")","leadingTrivia":"","trailingTrivia":""},"type":"other"},{"text":"EnumCaseParameterClause","range":{"startRow":3,"endColumn":45,"endRow":3,"startColumn":27},"id":33,"parent":31,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftParen"},{"value":{"kind":"leftParen","text":"("},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndParameters"},{"value":{"text":"EnumCaseParameterListSyntax"},"name":"parameters","ref":"EnumCaseParameterListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenParametersAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"type":"other"},{"parent":33,"id":34,"range":{"startColumn":27,"startRow":3,"endRow":3,"endColumn":28},"structure":[],"text":"(","token":{"trailingTrivia":"","leadingTrivia":"","kind":"leftParen"},"type":"other"},{"parent":33,"type":"collection","id":35,"text":"EnumCaseParameterList","range":{"endRow":3,"endColumn":44,"startRow":3,"startColumn":28},"structure":[{"name":"Element","value":{"text":"EnumCaseParameterSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"structure":[{"name":"unexpectedBeforeModifiers","value":{"text":"nil"}},{"name":"modifiers","ref":"DeclModifierListSyntax","value":{"text":"DeclModifierListSyntax"}},{"name":"unexpectedBetweenModifiersAndFirstName","value":{"text":"nil"}},{"name":"firstName","value":{"text":"coinsNeeded","kind":"identifier("coinsNeeded")"}},{"name":"unexpectedBetweenFirstNameAndSecondName","value":{"text":"nil"}},{"name":"secondName","value":{"text":"nil"}},{"name":"unexpectedBetweenSecondNameAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":":","kind":"colon"}},{"name":"unexpectedBetweenColonAndType","value":{"text":"nil"}},{"name":"type","ref":"IdentifierTypeSyntax","value":{"text":"IdentifierTypeSyntax"}},{"name":"unexpectedBetweenTypeAndDefaultValue","value":{"text":"nil"}},{"name":"defaultValue","value":{"text":"nil"}},{"name":"unexpectedBetweenDefaultValueAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other","id":36,"text":"EnumCaseParameter","range":{"endColumn":44,"startColumn":28,"startRow":3,"endRow":3},"parent":35},{"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"type":"collection","id":37,"text":"DeclModifierList","range":{"endColumn":28,"startColumn":28,"startRow":3,"endRow":3},"parent":36},{"parent":36,"id":38,"range":{"startColumn":28,"startRow":3,"endRow":3,"endColumn":39},"structure":[],"text":"coinsNeeded","token":{"kind":"identifier("coinsNeeded")","trailingTrivia":"","leadingTrivia":""},"type":"other"},{"parent":36,"id":39,"range":{"startColumn":39,"startRow":3,"endRow":3,"endColumn":40},"structure":[],"text":":","token":{"kind":"colon","trailingTrivia":"␣<\/span>","leadingTrivia":""},"type":"other"},{"parent":36,"text":"IdentifierType","range":{"startColumn":41,"startRow":3,"endRow":3,"endColumn":44},"id":40,"structure":[{"name":"unexpectedBeforeName","value":{"text":"nil"}},{"name":"name","value":{"kind":"identifier("Int")","text":"Int"}},{"name":"unexpectedBetweenNameAndGenericArgumentClause","value":{"text":"nil"}},{"name":"genericArgumentClause","value":{"text":"nil"}},{"name":"unexpectedAfterGenericArgumentClause","value":{"text":"nil"}}],"type":"type"},{"parent":40,"id":41,"range":{"endRow":3,"endColumn":44,"startColumn":41,"startRow":3},"structure":[],"text":"Int","token":{"leadingTrivia":"","kind":"identifier("Int")","trailingTrivia":""},"type":"other"},{"parent":33,"id":42,"range":{"endRow":3,"endColumn":45,"startColumn":44,"startRow":3},"structure":[],"text":")","token":{"leadingTrivia":"","kind":"rightParen","trailingTrivia":""},"type":"other"},{"parent":16,"text":"MemberBlockItem","range":{"endRow":4,"endColumn":20,"startColumn":5,"startRow":4},"id":43,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeDecl"},{"value":{"text":"EnumCaseDeclSyntax"},"name":"decl","ref":"EnumCaseDeclSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenDeclAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other"},{"parent":43,"id":44,"range":{"startColumn":5,"endColumn":20,"startRow":4,"endRow":4},"type":"decl","text":"EnumCaseDecl","structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","value":{"text":"AttributeListSyntax"},"ref":"AttributeListSyntax"},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax"},{"name":"unexpectedBetweenModifiersAndCaseKeyword","value":{"text":"nil"}},{"name":"caseKeyword","value":{"kind":"keyword(SwiftSyntax.Keyword.case)","text":"case"}},{"name":"unexpectedBetweenCaseKeywordAndElements","value":{"text":"nil"}},{"name":"elements","value":{"text":"EnumCaseElementListSyntax"},"ref":"EnumCaseElementListSyntax"},{"name":"unexpectedAfterElements","value":{"text":"nil"}}]},{"parent":44,"id":45,"range":{"startColumn":45,"endRow":3,"endColumn":45,"startRow":3},"type":"collection","text":"AttributeList","structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}]},{"parent":44,"id":46,"range":{"startRow":3,"endRow":3,"startColumn":45,"endColumn":45},"type":"collection","text":"DeclModifierList","structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}]},{"parent":44,"id":47,"range":{"startRow":4,"startColumn":5,"endColumn":9,"endRow":4},"structure":[],"text":"case","token":{"kind":"keyword(SwiftSyntax.Keyword.case)","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"␣<\/span>"},"type":"other"},{"type":"collection","range":{"endRow":4,"startColumn":10,"endColumn":20,"startRow":4},"text":"EnumCaseElementList","structure":[{"value":{"text":"EnumCaseElementSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"parent":44,"id":48},{"type":"other","range":{"startRow":4,"endRow":4,"endColumn":20,"startColumn":10},"text":"EnumCaseElement","structure":[{"name":"unexpectedBeforeName","value":{"text":"nil"}},{"name":"name","value":{"kind":"identifier("outOfStock")","text":"outOfStock"}},{"name":"unexpectedBetweenNameAndParameterClause","value":{"text":"nil"}},{"name":"parameterClause","value":{"text":"nil"}},{"name":"unexpectedBetweenParameterClauseAndRawValue","value":{"text":"nil"}},{"name":"rawValue","value":{"text":"nil"}},{"name":"unexpectedBetweenRawValueAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"parent":48,"id":49},{"parent":49,"structure":[],"range":{"endColumn":20,"startColumn":10,"startRow":4,"endRow":4},"id":50,"text":"outOfStock","token":{"trailingTrivia":"","kind":"identifier("outOfStock")","leadingTrivia":""},"type":"other"},{"parent":14,"structure":[],"range":{"endColumn":2,"startColumn":1,"startRow":5,"endRow":5},"id":51,"text":"}","token":{"trailingTrivia":"","kind":"rightBrace","leadingTrivia":"↲<\/span>"},"type":"other"},{"type":"other","range":{"endColumn":2,"startColumn":1,"startRow":7,"endRow":42},"text":"CodeBlockItem","structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"ClassDeclSyntax","name":"item","value":{"text":"ClassDeclSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"parent":1,"id":52},{"type":"decl","parent":52,"text":"ClassDecl","range":{"endRow":42,"startRow":7,"startColumn":1,"endColumn":2},"id":53,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","value":{"text":"AttributeListSyntax"},"ref":"AttributeListSyntax"},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax"},{"name":"unexpectedBetweenModifiersAndClassKeyword","value":{"text":"nil"}},{"name":"classKeyword","value":{"text":"class","kind":"keyword(SwiftSyntax.Keyword.class)"}},{"name":"unexpectedBetweenClassKeywordAndName","value":{"text":"nil"}},{"name":"name","value":{"text":"VendingMachine","kind":"identifier("VendingMachine")"}},{"name":"unexpectedBetweenNameAndGenericParameterClause","value":{"text":"nil"}},{"name":"genericParameterClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericParameterClauseAndInheritanceClause","value":{"text":"nil"}},{"name":"inheritanceClause","value":{"text":"nil"}},{"name":"unexpectedBetweenInheritanceClauseAndGenericWhereClause","value":{"text":"nil"}},{"name":"genericWhereClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericWhereClauseAndMemberBlock","value":{"text":"nil"}},{"value":{"text":"MemberBlockSyntax"},"ref":"MemberBlockSyntax","name":"memberBlock"},{"value":{"text":"nil"},"name":"unexpectedAfterMemberBlock"}]},{"text":"AttributeList","range":{"startRow":5,"startColumn":2,"endRow":5,"endColumn":2},"type":"collection","id":54,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"parent":53},{"text":"DeclModifierList","range":{"startColumn":2,"endColumn":2,"startRow":5,"endRow":5},"type":"collection","id":55,"structure":[{"value":{"text":"DeclModifierSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"parent":53},{"parent":53,"id":56,"range":{"startRow":7,"startColumn":1,"endRow":7,"endColumn":6},"structure":[],"text":"class","token":{"kind":"keyword(SwiftSyntax.Keyword.class)","leadingTrivia":"↲<\/span>↲<\/span>","trailingTrivia":"␣<\/span>"},"type":"other"},{"parent":53,"id":57,"range":{"startRow":7,"startColumn":7,"endRow":7,"endColumn":21},"structure":[],"text":"VendingMachine","token":{"kind":"identifier("VendingMachine")","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"type":"other"},{"text":"MemberBlock","range":{"startRow":7,"startColumn":22,"endRow":42,"endColumn":2},"type":"other","id":58,"structure":[{"name":"unexpectedBeforeLeftBrace","value":{"text":"nil"}},{"name":"leftBrace","value":{"kind":"leftBrace","text":"{"}},{"name":"unexpectedBetweenLeftBraceAndMembers","value":{"text":"nil"}},{"name":"members","value":{"text":"MemberBlockItemListSyntax"},"ref":"MemberBlockItemListSyntax"},{"name":"unexpectedBetweenMembersAndRightBrace","value":{"text":"nil"}},{"name":"rightBrace","value":{"kind":"rightBrace","text":"}"}},{"name":"unexpectedAfterRightBrace","value":{"text":"nil"}}],"parent":53},{"parent":58,"id":59,"structure":[],"range":{"startRow":7,"endRow":7,"endColumn":23,"startColumn":22},"text":"{","token":{"leadingTrivia":"","kind":"leftBrace","trailingTrivia":""},"type":"other"},{"id":60,"parent":58,"type":"collection","structure":[{"name":"Element","value":{"text":"MemberBlockItemSyntax"}},{"name":"Count","value":{"text":"3"}}],"range":{"startRow":8,"endRow":41,"endColumn":6,"startColumn":5},"text":"MemberBlockItemList"},{"id":61,"parent":60,"type":"other","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeDecl"},{"value":{"text":"VariableDeclSyntax"},"name":"decl","ref":"VariableDeclSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenDeclAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"range":{"startRow":8,"endRow":12,"endColumn":6,"startColumn":5},"text":"MemberBlockItem"},{"id":62,"parent":61,"type":"decl","structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","value":{"text":"AttributeListSyntax"},"ref":"AttributeListSyntax"},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax"},{"name":"unexpectedBetweenModifiersAndBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"kind":"keyword(SwiftSyntax.Keyword.var)","text":"var"}},{"name":"unexpectedBetweenBindingSpecifierAndBindings","value":{"text":"nil"}},{"name":"bindings","value":{"text":"PatternBindingListSyntax"},"ref":"PatternBindingListSyntax"},{"name":"unexpectedAfterBindings","value":{"text":"nil"}}],"range":{"startRow":8,"endColumn":6,"endRow":12,"startColumn":5},"text":"VariableDecl"},{"id":63,"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection","parent":62,"text":"AttributeList","range":{"startRow":7,"endRow":7,"endColumn":23,"startColumn":23}},{"id":64,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"type":"collection","parent":62,"text":"DeclModifierList","range":{"startRow":7,"endRow":7,"endColumn":23,"startColumn":23}},{"parent":62,"id":65,"structure":[],"range":{"endColumn":8,"startRow":8,"startColumn":5,"endRow":8},"text":"var","token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.var)","trailingTrivia":"␣<\/span>"},"type":"other"},{"id":66,"structure":[{"value":{"text":"PatternBindingSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","parent":62,"text":"PatternBindingList","range":{"endColumn":6,"startRow":8,"startColumn":9,"endRow":12}},{"id":67,"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"name":"pattern","value":{"text":"IdentifierPatternSyntax"},"ref":"IdentifierPatternSyntax"},{"name":"unexpectedBetweenPatternAndTypeAnnotation","value":{"text":"nil"}},{"name":"typeAnnotation","value":{"text":"nil"}},{"name":"unexpectedBetweenTypeAnnotationAndInitializer","value":{"text":"nil"}},{"value":{"text":"InitializerClauseSyntax"},"ref":"InitializerClauseSyntax","name":"initializer"},{"value":{"text":"nil"},"name":"unexpectedBetweenInitializerAndAccessorBlock"},{"value":{"text":"nil"},"name":"accessorBlock"},{"value":{"text":"nil"},"name":"unexpectedBetweenAccessorBlockAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","parent":66,"text":"PatternBinding","range":{"startColumn":9,"endRow":12,"startRow":8,"endColumn":6}},{"text":"IdentifierPattern","range":{"startRow":8,"startColumn":9,"endRow":8,"endColumn":18},"type":"pattern","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"text":"inventory","kind":"identifier("inventory")"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"id":68,"parent":67},{"parent":68,"structure":[],"range":{"startColumn":9,"endRow":8,"startRow":8,"endColumn":18},"id":69,"text":"inventory","token":{"leadingTrivia":"","kind":"identifier("inventory")","trailingTrivia":"␣<\/span>"},"type":"other"},{"text":"InitializerClause","range":{"startColumn":19,"endRow":12,"startRow":8,"endColumn":6},"type":"other","structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"text":"=","kind":"equal"}},{"name":"unexpectedBetweenEqualAndValue","value":{"text":"nil"}},{"ref":"DictionaryExprSyntax","name":"value","value":{"text":"DictionaryExprSyntax"}},{"name":"unexpectedAfterValue","value":{"text":"nil"}}],"id":70,"parent":67},{"parent":70,"structure":[],"range":{"startRow":8,"endRow":8,"endColumn":20,"startColumn":19},"id":71,"text":"=","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"equal"},"type":"other"},{"text":"DictionaryExpr","range":{"endRow":12,"startRow":8,"endColumn":6,"startColumn":21},"structure":[{"name":"unexpectedBeforeLeftSquare","value":{"text":"nil"}},{"name":"leftSquare","value":{"text":"[","kind":"leftSquare"}},{"name":"unexpectedBetweenLeftSquareAndContent","value":{"text":"nil"}},{"name":"content","ref":"DictionaryElementListSyntax","value":{"text":"DictionaryElementListSyntax"}},{"name":"unexpectedBetweenContentAndRightSquare","value":{"text":"nil"}},{"name":"rightSquare","value":{"kind":"rightSquare","text":"]"}},{"name":"unexpectedAfterRightSquare","value":{"text":"nil"}}],"type":"expr","id":72,"parent":70},{"parent":72,"structure":[],"range":{"endRow":8,"startColumn":21,"endColumn":22,"startRow":8},"id":73,"text":"[","token":{"kind":"leftSquare","trailingTrivia":"","leadingTrivia":""},"type":"other"},{"text":"DictionaryElementList","range":{"endRow":11,"startColumn":9,"endColumn":46,"startRow":9},"structure":[{"name":"Element","value":{"text":"DictionaryElementSyntax"}},{"name":"Count","value":{"text":"3"}}],"type":"collection","id":74,"parent":72},{"text":"DictionaryElement","range":{"startColumn":9,"startRow":9,"endRow":9,"endColumn":48},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeKey"},{"value":{"text":"StringLiteralExprSyntax"},"name":"key","ref":"StringLiteralExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenKeyAndColon"},{"value":{"text":":","kind":"colon"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndValue"},{"value":{"text":"FunctionCallExprSyntax"},"ref":"FunctionCallExprSyntax","name":"value"},{"value":{"text":"nil"},"name":"unexpectedBetweenValueAndTrailingComma"},{"value":{"text":",","kind":"comma"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","id":75,"parent":74},{"range":{"endColumn":20,"startRow":9,"startColumn":9,"endRow":9},"id":76,"parent":75,"text":"StringLiteralExpr","type":"expr","structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"kind":"stringQuote","text":"""}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"name":"segments","value":{"text":"StringLiteralSegmentListSyntax"},"ref":"StringLiteralSegmentListSyntax"},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"kind":"stringQuote","text":"""}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}]},{"parent":76,"id":77,"range":{"startRow":9,"endRow":9,"endColumn":10,"startColumn":9},"structure":[],"text":""","token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"","kind":"stringQuote"},"type":"other"},{"type":"collection","text":"StringLiteralSegmentList","structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"1"}}],"parent":76,"id":78,"range":{"startRow":9,"startColumn":10,"endRow":9,"endColumn":19}},{"type":"other","text":"StringSegment","structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":"Candy Bar","kind":"stringSegment("Candy Bar")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"parent":78,"id":79,"range":{"startColumn":10,"endColumn":19,"endRow":9,"startRow":9}},{"parent":79,"structure":[],"id":80,"range":{"endRow":9,"startColumn":10,"startRow":9,"endColumn":19},"text":"Candy␣<\/span>Bar","token":{"leadingTrivia":"","kind":"stringSegment("Candy Bar")","trailingTrivia":""},"type":"other"},{"type":"other","text":""","range":{"endRow":9,"startColumn":19,"startRow":9,"endColumn":20},"id":81,"token":{"leadingTrivia":"","kind":"stringQuote","trailingTrivia":""},"structure":[],"parent":76},{"type":"other","text":":","range":{"endRow":9,"startColumn":20,"startRow":9,"endColumn":21},"id":82,"token":{"leadingTrivia":"","kind":"colon","trailingTrivia":"␣<\/span>"},"structure":[],"parent":75},{"type":"expr","text":"FunctionCallExpr","structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"ref":"LabeledExprListSyntax","name":"arguments","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"kind":"rightParen","text":")"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"parent":75,"id":83,"range":{"endRow":9,"startColumn":22,"startRow":9,"endColumn":47}},{"range":{"endRow":9,"startRow":9,"startColumn":22,"endColumn":26},"type":"expr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"Item","kind":"identifier("Item")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"parent":83,"id":84,"text":"DeclReferenceExpr"},{"type":"other","text":"Item","range":{"startColumn":22,"endRow":9,"endColumn":26,"startRow":9},"id":85,"token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("Item")"},"structure":[],"parent":84},{"type":"other","text":"(","range":{"startColumn":26,"endRow":9,"endColumn":27,"startRow":9},"id":86,"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"structure":[],"parent":83},{"range":{"startColumn":27,"endRow":9,"endColumn":46,"startRow":9},"type":"collection","structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"2"},"name":"Count"}],"parent":83,"id":87,"text":"LabeledExprList"},{"range":{"endRow":9,"startColumn":27,"endColumn":37,"startRow":9},"type":"other","structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"price","kind":"identifier("price")"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"kind":"colon","text":":"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"kind":"comma","text":","}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"parent":87,"id":88,"text":"LabeledExpr"},{"type":"other","text":"price","range":{"endRow":9,"startRow":9,"endColumn":32,"startColumn":27},"id":89,"token":{"kind":"identifier("price")","trailingTrivia":"","leadingTrivia":""},"structure":[],"parent":88},{"type":"other","text":":","range":{"endRow":9,"startRow":9,"endColumn":33,"startColumn":32},"id":90,"token":{"kind":"colon","trailingTrivia":"␣<\/span>","leadingTrivia":""},"structure":[],"parent":88},{"id":91,"range":{"endRow":9,"startRow":9,"endColumn":36,"startColumn":34},"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"kind":"integerLiteral("12")","text":"12"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"type":"expr","text":"IntegerLiteralExpr","parent":88},{"type":"other","text":"12","range":{"startColumn":34,"endRow":9,"endColumn":36,"startRow":9},"id":92,"token":{"kind":"integerLiteral("12")","leadingTrivia":"","trailingTrivia":""},"structure":[],"parent":91},{"type":"other","text":",","range":{"startColumn":36,"endRow":9,"endColumn":37,"startRow":9},"id":93,"token":{"kind":"comma","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"structure":[],"parent":88},{"id":94,"range":{"startColumn":38,"endRow":9,"endColumn":46,"startRow":9},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"count","kind":"identifier("count")"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"kind":"colon","text":":"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"IntegerLiteralExprSyntax"},"name":"expression","ref":"IntegerLiteralExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"LabeledExpr","parent":87},{"type":"other","text":"count","range":{"startRow":9,"endColumn":43,"startColumn":38,"endRow":9},"id":95,"token":{"kind":"identifier("count")","trailingTrivia":"","leadingTrivia":""},"structure":[],"parent":94},{"type":"other","text":":","range":{"startRow":9,"endColumn":44,"startColumn":43,"endRow":9},"id":96,"token":{"kind":"colon","trailingTrivia":"␣<\/span>","leadingTrivia":""},"structure":[],"parent":94},{"type":"expr","structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"7","kind":"integerLiteral("7")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"id":97,"text":"IntegerLiteralExpr","parent":94,"range":{"startRow":9,"endColumn":46,"startColumn":45,"endRow":9}},{"type":"other","text":"7","range":{"startRow":9,"startColumn":45,"endColumn":46,"endRow":9},"id":98,"token":{"leadingTrivia":"","kind":"integerLiteral("7")","trailingTrivia":""},"structure":[],"parent":97},{"type":"other","text":")","range":{"startRow":9,"startColumn":46,"endColumn":47,"endRow":9},"id":99,"token":{"leadingTrivia":"","kind":"rightParen","trailingTrivia":""},"structure":[],"parent":83},{"type":"collection","structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"value":{"text":"0"},"name":"Count"}],"parent":83,"text":"MultipleTrailingClosureElementList","range":{"startColumn":47,"endColumn":47,"startRow":9,"endRow":9},"id":100},{"type":"other","text":",","range":{"endRow":9,"startColumn":47,"startRow":9,"endColumn":48},"id":101,"token":{"kind":"comma","leadingTrivia":"","trailingTrivia":""},"structure":[],"parent":75},{"type":"other","structure":[{"name":"unexpectedBeforeKey","value":{"text":"nil"}},{"name":"key","value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax"},{"name":"unexpectedBetweenKeyAndColon","value":{"text":"nil"}},{"name":"colon","value":{"kind":"colon","text":":"}},{"name":"unexpectedBetweenColonAndValue","value":{"text":"nil"}},{"name":"value","value":{"text":"FunctionCallExprSyntax"},"ref":"FunctionCallExprSyntax"},{"name":"unexpectedBetweenValueAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":",","kind":"comma"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"parent":74,"range":{"endRow":10,"startColumn":9,"startRow":10,"endColumn":44},"text":"DictionaryElement","id":102},{"type":"expr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"kind":"stringQuote","text":"""},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"ref":"StringLiteralSegmentListSyntax","name":"segments","value":{"text":"StringLiteralSegmentListSyntax"}},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"kind":"stringQuote","text":"""}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"parent":102,"range":{"startRow":10,"startColumn":9,"endColumn":16,"endRow":10},"text":"StringLiteralExpr","id":103},{"text":""","type":"other","range":{"startColumn":9,"startRow":10,"endRow":10,"endColumn":10},"id":104,"token":{"kind":"stringQuote","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":""},"structure":[],"parent":103},{"range":{"startColumn":10,"startRow":10,"endRow":10,"endColumn":15},"id":105,"parent":103,"text":"StringLiteralSegmentList","structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"1"}}],"type":"collection"},{"range":{"startRow":10,"endRow":10,"endColumn":15,"startColumn":10},"id":106,"parent":105,"text":"StringSegment","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"Chips","kind":"stringSegment("Chips")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other"},{"text":"Chips","type":"other","range":{"endColumn":15,"endRow":10,"startColumn":10,"startRow":10},"id":107,"token":{"trailingTrivia":"","kind":"stringSegment("Chips")","leadingTrivia":""},"structure":[],"parent":106},{"text":""","type":"other","range":{"endColumn":16,"endRow":10,"startColumn":15,"startRow":10},"id":108,"token":{"trailingTrivia":"","kind":"stringQuote","leadingTrivia":""},"structure":[],"parent":103},{"text":":","type":"other","range":{"endRow":10,"startColumn":16,"startRow":10,"endColumn":17},"id":109,"token":{"kind":"colon","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"structure":[],"parent":102},{"parent":102,"id":110,"range":{"startRow":10,"startColumn":18,"endColumn":43,"endRow":10},"text":"FunctionCallExpr","structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"kind":"leftParen","text":"("}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"ref":"LabeledExprListSyntax","name":"arguments","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"kind":"rightParen","text":")"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"type":"expr"},{"parent":110,"id":111,"range":{"startRow":10,"endColumn":22,"endRow":10,"startColumn":18},"text":"DeclReferenceExpr","structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("Item")","text":"Item"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"type":"expr"},{"type":"other","text":"Item","range":{"endColumn":22,"startColumn":18,"endRow":10,"startRow":10},"id":112,"token":{"trailingTrivia":"","leadingTrivia":"","kind":"identifier("Item")"},"structure":[],"parent":111},{"type":"other","text":"(","range":{"endColumn":23,"startColumn":22,"endRow":10,"startRow":10},"id":113,"token":{"trailingTrivia":"","leadingTrivia":"","kind":"leftParen"},"structure":[],"parent":110},{"type":"collection","text":"LabeledExprList","id":114,"parent":110,"range":{"endColumn":42,"startColumn":23,"endRow":10,"startRow":10},"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"2"}}]},{"type":"other","text":"LabeledExpr","id":115,"parent":114,"range":{"startColumn":23,"endColumn":33,"endRow":10,"startRow":10},"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"price","kind":"identifier("price")"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"kind":"colon","text":":"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"kind":"comma","text":","}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}]},{"type":"other","text":"price","range":{"endColumn":28,"startRow":10,"startColumn":23,"endRow":10},"id":116,"token":{"kind":"identifier("price")","leadingTrivia":"","trailingTrivia":""},"structure":[],"parent":115},{"text":":","type":"other","range":{"endRow":10,"startRow":10,"startColumn":28,"endColumn":29},"id":117,"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"colon"},"structure":[],"parent":115},{"parent":115,"text":"IntegerLiteralExpr","range":{"endRow":10,"startRow":10,"startColumn":30,"endColumn":32},"id":118,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"10","kind":"integerLiteral("10")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr"},{"type":"other","range":{"startRow":10,"endRow":10,"startColumn":30,"endColumn":32},"structure":[],"id":119,"text":"10","parent":118,"token":{"kind":"integerLiteral("10")","leadingTrivia":"","trailingTrivia":""}},{"type":"other","range":{"startRow":10,"endRow":10,"startColumn":32,"endColumn":33},"structure":[],"id":120,"text":",","parent":115,"token":{"kind":"comma","leadingTrivia":"","trailingTrivia":"␣<\/span>"}},{"parent":114,"text":"LabeledExpr","range":{"startRow":10,"endRow":10,"startColumn":34,"endColumn":42},"id":121,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"count","kind":"identifier("count")"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":":","kind":"colon"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"IntegerLiteralExprSyntax"},"name":"expression","ref":"IntegerLiteralExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other"},{"type":"other","range":{"endRow":10,"endColumn":39,"startColumn":34,"startRow":10},"structure":[],"id":122,"text":"count","parent":121,"token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("count")"}},{"type":"other","range":{"endRow":10,"endColumn":40,"startColumn":39,"startRow":10},"structure":[],"id":123,"text":":","parent":121,"token":{"kind":"colon","leadingTrivia":"","trailingTrivia":"␣<\/span>"}},{"text":"IntegerLiteralExpr","id":124,"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"4","kind":"integerLiteral("4")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"range":{"endRow":10,"endColumn":42,"startColumn":41,"startRow":10},"parent":121,"type":"expr"},{"type":"other","range":{"endColumn":42,"startColumn":41,"endRow":10,"startRow":10},"structure":[],"id":125,"text":"4","parent":124,"token":{"kind":"integerLiteral("4")","leadingTrivia":"","trailingTrivia":""}},{"type":"other","range":{"endColumn":43,"startColumn":42,"endRow":10,"startRow":10},"structure":[],"id":126,"text":")","parent":110,"token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":""}},{"text":"MultipleTrailingClosureElementList","id":127,"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"range":{"endColumn":43,"startColumn":43,"endRow":10,"startRow":10},"parent":110,"type":"collection"},{"type":"other","range":{"endRow":10,"endColumn":44,"startRow":10,"startColumn":43},"structure":[],"id":128,"text":",","parent":102,"token":{"leadingTrivia":"","kind":"comma","trailingTrivia":""}},{"text":"DictionaryElement","id":129,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeKey"},{"value":{"text":"StringLiteralExprSyntax"},"name":"key","ref":"StringLiteralExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenKeyAndColon"},{"value":{"kind":"colon","text":":"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndValue"},{"value":{"text":"FunctionCallExprSyntax"},"name":"value","ref":"FunctionCallExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenValueAndTrailingComma"},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"range":{"endRow":11,"endColumn":46,"startRow":11,"startColumn":9},"parent":74,"type":"other"},{"range":{"startColumn":9,"endRow":11,"endColumn":19,"startRow":11},"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"name":"segments","value":{"text":"StringLiteralSegmentListSyntax"},"ref":"StringLiteralSegmentListSyntax"},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"id":130,"text":"StringLiteralExpr","type":"expr","parent":129},{"type":"other","range":{"endRow":11,"startColumn":9,"startRow":11,"endColumn":10},"structure":[],"id":131,"text":""","parent":130,"token":{"kind":"stringQuote","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":""}},{"range":{"endRow":11,"startColumn":10,"startRow":11,"endColumn":18},"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"1"}}],"id":132,"text":"StringLiteralSegmentList","type":"collection","parent":130},{"id":133,"text":"StringSegment","structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"kind":"stringSegment("Pretzels")","text":"Pretzels"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"type":"other","range":{"startRow":11,"startColumn":10,"endRow":11,"endColumn":18},"parent":132},{"type":"other","range":{"startRow":11,"startColumn":10,"endRow":11,"endColumn":18},"structure":[],"id":134,"text":"Pretzels","parent":133,"token":{"trailingTrivia":"","kind":"stringSegment("Pretzels")","leadingTrivia":""}},{"type":"other","range":{"startRow":11,"startColumn":18,"endRow":11,"endColumn":19},"structure":[],"id":135,"text":""","parent":130,"token":{"trailingTrivia":"","kind":"stringQuote","leadingTrivia":""}},{"type":"other","range":{"startRow":11,"startColumn":19,"endRow":11,"endColumn":20},"structure":[],"id":136,"text":":","parent":129,"token":{"trailingTrivia":"␣<\/span>","kind":"colon","leadingTrivia":""}},{"id":137,"text":"FunctionCallExpr","structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"kind":"leftParen","text":"("}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"name":"arguments","ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"type":"expr","range":{"startRow":11,"startColumn":21,"endRow":11,"endColumn":46},"parent":129},{"parent":137,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"Item","kind":"identifier("Item")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","range":{"endRow":11,"endColumn":25,"startRow":11,"startColumn":21},"id":138,"text":"DeclReferenceExpr"},{"type":"other","range":{"startRow":11,"endColumn":25,"endRow":11,"startColumn":21},"structure":[],"id":139,"text":"Item","parent":138,"token":{"kind":"identifier("Item")","leadingTrivia":"","trailingTrivia":""}},{"type":"other","range":{"startRow":11,"endColumn":26,"endRow":11,"startColumn":25},"structure":[],"id":140,"text":"(","parent":137,"token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""}},{"parent":137,"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"2"},"name":"Count"}],"type":"collection","range":{"startRow":11,"endColumn":45,"endRow":11,"startColumn":26},"id":141,"text":"LabeledExprList"},{"parent":141,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"kind":"identifier("price")","text":"price"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"value":{"text":":","kind":"colon"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":",","kind":"comma"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","range":{"startColumn":26,"endColumn":35,"startRow":11,"endRow":11},"id":142,"text":"LabeledExpr"},{"type":"other","range":{"endColumn":31,"startRow":11,"startColumn":26,"endRow":11},"structure":[],"id":143,"text":"price","parent":142,"token":{"trailingTrivia":"","kind":"identifier("price")","leadingTrivia":""}},{"type":"other","range":{"endColumn":32,"startRow":11,"startColumn":31,"endRow":11},"structure":[],"id":144,"text":":","parent":142,"token":{"trailingTrivia":"␣<\/span>","kind":"colon","leadingTrivia":""}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"7","kind":"integerLiteral("7")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"id":145,"type":"expr","text":"IntegerLiteralExpr","range":{"endColumn":34,"startRow":11,"startColumn":33,"endRow":11},"parent":142},{"type":"other","range":{"endRow":11,"startColumn":33,"endColumn":34,"startRow":11},"structure":[],"id":146,"text":"7","parent":145,"token":{"leadingTrivia":"","trailingTrivia":"","kind":"integerLiteral("7")"}},{"type":"other","range":{"endRow":11,"startColumn":34,"endColumn":35,"startRow":11},"structure":[],"id":147,"text":",","parent":142,"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"comma"}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"kind":"identifier("count")","text":"count"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":":","kind":"colon"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"id":148,"type":"other","text":"LabeledExpr","range":{"endRow":11,"startColumn":36,"endColumn":45,"startRow":11},"parent":141},{"type":"other","range":{"startRow":11,"endRow":11,"startColumn":36,"endColumn":41},"structure":[],"id":149,"text":"count","parent":148,"token":{"trailingTrivia":"","kind":"identifier("count")","leadingTrivia":""}},{"type":"other","range":{"startRow":11,"endRow":11,"startColumn":41,"endColumn":42},"structure":[],"id":150,"text":":","parent":148,"token":{"trailingTrivia":"␣<\/span>","kind":"colon","leadingTrivia":""}},{"type":"expr","id":151,"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"kind":"integerLiteral("11")","text":"11"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"range":{"startRow":11,"endRow":11,"startColumn":43,"endColumn":45},"parent":148,"text":"IntegerLiteralExpr"},{"type":"other","range":{"endRow":11,"endColumn":45,"startRow":11,"startColumn":43},"structure":[],"id":152,"text":"11","parent":151,"token":{"trailingTrivia":"","leadingTrivia":"","kind":"integerLiteral("11")"}},{"type":"other","range":{"endRow":11,"endColumn":46,"startRow":11,"startColumn":45},"structure":[],"id":153,"text":")","parent":137,"token":{"trailingTrivia":"","leadingTrivia":"","kind":"rightParen"}},{"type":"collection","id":154,"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"range":{"endRow":11,"endColumn":46,"startRow":11,"startColumn":46},"parent":137,"text":"MultipleTrailingClosureElementList"},{"type":"other","structure":[],"parent":72,"token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"","kind":"rightSquare"},"id":155,"range":{"startRow":12,"startColumn":5,"endRow":12,"endColumn":6},"text":"]"},{"range":{"startRow":13,"endColumn":27,"startColumn":5,"endRow":13},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeDecl"},{"value":{"text":"VariableDeclSyntax"},"name":"decl","ref":"VariableDeclSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenDeclAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"id":156,"parent":60,"text":"MemberBlockItem","type":"other"},{"range":{"startColumn":5,"startRow":13,"endColumn":27,"endRow":13},"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","value":{"text":"AttributeListSyntax"},"ref":"AttributeListSyntax"},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax"},{"name":"unexpectedBetweenModifiersAndBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"kind":"keyword(SwiftSyntax.Keyword.var)","text":"var"}},{"name":"unexpectedBetweenBindingSpecifierAndBindings","value":{"text":"nil"}},{"name":"bindings","value":{"text":"PatternBindingListSyntax"},"ref":"PatternBindingListSyntax"},{"name":"unexpectedAfterBindings","value":{"text":"nil"}}],"id":157,"parent":156,"text":"VariableDecl","type":"decl"},{"range":{"startRow":12,"endColumn":6,"endRow":12,"startColumn":6},"structure":[{"value":{"text":"Element"},"name":"Element"},{"name":"Count","value":{"text":"0"}}],"id":158,"parent":157,"text":"AttributeList","type":"collection"},{"text":"DeclModifierList","range":{"endColumn":6,"startColumn":6,"endRow":12,"startRow":12},"structure":[{"value":{"text":"DeclModifierSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection","parent":157,"id":159},{"type":"other","structure":[],"parent":157,"token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.var)"},"range":{"startRow":13,"endColumn":8,"endRow":13,"startColumn":5},"id":160,"text":"var"},{"text":"PatternBindingList","range":{"startRow":13,"endColumn":27,"endRow":13,"startColumn":9},"structure":[{"name":"Element","value":{"text":"PatternBindingSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection","parent":157,"id":161},{"text":"PatternBinding","range":{"endRow":13,"startColumn":9,"endColumn":27,"startRow":13},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"ref":"IdentifierPatternSyntax","value":{"text":"IdentifierPatternSyntax"},"name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTypeAnnotation"},{"value":{"text":"nil"},"name":"typeAnnotation"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAnnotationAndInitializer"},{"ref":"InitializerClauseSyntax","value":{"text":"InitializerClauseSyntax"},"name":"initializer"},{"value":{"text":"nil"},"name":"unexpectedBetweenInitializerAndAccessorBlock"},{"value":{"text":"nil"},"name":"accessorBlock"},{"value":{"text":"nil"},"name":"unexpectedBetweenAccessorBlockAndTrailingComma"},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other","parent":161,"id":162},{"type":"pattern","range":{"endColumn":23,"startRow":13,"startColumn":9,"endRow":13},"parent":162,"id":163,"text":"IdentifierPattern","structure":[{"name":"unexpectedBeforeIdentifier","value":{"text":"nil"}},{"name":"identifier","value":{"text":"coinsDeposited","kind":"identifier("coinsDeposited")"}},{"name":"unexpectedAfterIdentifier","value":{"text":"nil"}}]},{"type":"other","structure":[],"parent":163,"token":{"trailingTrivia":"␣<\/span>","kind":"identifier("coinsDeposited")","leadingTrivia":""},"range":{"endRow":13,"endColumn":23,"startRow":13,"startColumn":9},"id":164,"text":"coinsDeposited"},{"type":"other","range":{"endRow":13,"endColumn":27,"startRow":13,"startColumn":24},"parent":162,"id":165,"text":"InitializerClause","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeEqual"},{"value":{"kind":"equal","text":"="},"name":"equal"},{"value":{"text":"nil"},"name":"unexpectedBetweenEqualAndValue"},{"ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"},"name":"value"},{"value":{"text":"nil"},"name":"unexpectedAfterValue"}]},{"type":"other","structure":[],"parent":165,"token":{"leadingTrivia":"","kind":"equal","trailingTrivia":"␣<\/span>"},"range":{"startColumn":24,"endColumn":25,"startRow":13,"endRow":13},"id":166,"text":"="},{"type":"expr","range":{"startColumn":26,"endColumn":27,"startRow":13,"endRow":13},"parent":165,"id":167,"text":"IntegerLiteralExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"0","kind":"integerLiteral("0")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}]},{"type":"other","structure":[],"parent":167,"token":{"kind":"integerLiteral("0")","trailingTrivia":"","leadingTrivia":""},"range":{"startColumn":26,"endRow":13,"endColumn":27,"startRow":13},"id":168,"text":"0"},{"range":{"startColumn":5,"endRow":41,"endColumn":6,"startRow":16},"structure":[{"name":"unexpectedBeforeDecl","value":{"text":"nil"}},{"name":"decl","value":{"text":"FunctionDeclSyntax"},"ref":"FunctionDeclSyntax"},{"name":"unexpectedBetweenDeclAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":169,"type":"other","text":"MemberBlockItem","parent":60},{"range":{"endColumn":6,"startRow":16,"startColumn":5,"endRow":41},"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"ref":"AttributeListSyntax","name":"attributes","value":{"text":"AttributeListSyntax"}},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"ref":"DeclModifierListSyntax","name":"modifiers","value":{"text":"DeclModifierListSyntax"}},{"name":"unexpectedBetweenModifiersAndFuncKeyword","value":{"text":"nil"}},{"name":"funcKeyword","value":{"kind":"keyword(SwiftSyntax.Keyword.func)","text":"func"}},{"name":"unexpectedBetweenFuncKeywordAndName","value":{"text":"nil"}},{"name":"name","value":{"kind":"identifier("vend")","text":"vend"}},{"name":"unexpectedBetweenNameAndGenericParameterClause","value":{"text":"nil"}},{"name":"genericParameterClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericParameterClauseAndSignature","value":{"text":"nil"}},{"name":"signature","ref":"FunctionSignatureSyntax","value":{"text":"FunctionSignatureSyntax"}},{"name":"unexpectedBetweenSignatureAndGenericWhereClause","value":{"text":"nil"}},{"name":"genericWhereClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericWhereClauseAndBody","value":{"text":"nil"}},{"name":"body","ref":"CodeBlockSyntax","value":{"text":"CodeBlockSyntax"}},{"name":"unexpectedAfterBody","value":{"text":"nil"}}],"id":170,"type":"decl","text":"FunctionDecl","parent":169},{"text":"AttributeList","parent":170,"range":{"endColumn":27,"endRow":13,"startColumn":27,"startRow":13},"type":"collection","id":171,"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}]},{"text":"DeclModifierList","parent":170,"range":{"startColumn":27,"endRow":13,"startRow":13,"endColumn":27},"type":"collection","id":172,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}]},{"type":"other","structure":[],"parent":170,"token":{"kind":"keyword(SwiftSyntax.Keyword.func)","trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>↲<\/span>↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"range":{"endColumn":9,"startRow":16,"endRow":16,"startColumn":5},"id":173,"text":"func"},{"type":"other","structure":[],"parent":170,"token":{"kind":"identifier("vend")","trailingTrivia":"","leadingTrivia":""},"range":{"endColumn":14,"startRow":16,"endRow":16,"startColumn":10},"id":174,"text":"vend"},{"text":"FunctionSignature","parent":170,"range":{"endColumn":45,"startRow":16,"endRow":16,"startColumn":14},"type":"other","id":175,"structure":[{"name":"unexpectedBeforeParameterClause","value":{"text":"nil"}},{"name":"parameterClause","ref":"FunctionParameterClauseSyntax","value":{"text":"FunctionParameterClauseSyntax"}},{"value":{"text":"nil"},"name":"unexpectedBetweenParameterClauseAndEffectSpecifiers"},{"value":{"text":"FunctionEffectSpecifiersSyntax"},"ref":"FunctionEffectSpecifiersSyntax","name":"effectSpecifiers"},{"value":{"text":"nil"},"name":"unexpectedBetweenEffectSpecifiersAndReturnClause"},{"value":{"text":"nil"},"name":"returnClause"},{"value":{"text":"nil"},"name":"unexpectedAfterReturnClause"}]},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndParameters"},{"value":{"text":"FunctionParameterListSyntax"},"ref":"FunctionParameterListSyntax","name":"parameters"},{"value":{"text":"nil"},"name":"unexpectedBetweenParametersAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"text":"FunctionParameterClause","parent":175,"type":"other","id":176,"range":{"endRow":16,"startRow":16,"startColumn":14,"endColumn":38}},{"type":"other","structure":[],"parent":176,"token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""},"id":177,"range":{"endRow":16,"startRow":16,"startColumn":14,"endColumn":15},"text":"("},{"structure":[{"name":"Element","value":{"text":"FunctionParameterSyntax"}},{"name":"Count","value":{"text":"1"}}],"text":"FunctionParameterList","parent":176,"type":"collection","id":178,"range":{"endRow":16,"startRow":16,"startColumn":15,"endColumn":37}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttributes"},{"ref":"AttributeListSyntax","value":{"text":"AttributeListSyntax"},"name":"attributes"},{"value":{"text":"nil"},"name":"unexpectedBetweenAttributesAndModifiers"},{"ref":"DeclModifierListSyntax","value":{"text":"DeclModifierListSyntax"},"name":"modifiers"},{"value":{"text":"nil"},"name":"unexpectedBetweenModifiersAndFirstName"},{"value":{"text":"itemNamed","kind":"identifier("itemNamed")"},"name":"firstName"},{"value":{"text":"nil"},"name":"unexpectedBetweenFirstNameAndSecondName"},{"value":{"text":"name","kind":"identifier("name")"},"name":"secondName"},{"value":{"text":"nil"},"name":"unexpectedBetweenSecondNameAndColon"},{"value":{"text":":","kind":"colon"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndType"},{"ref":"IdentifierTypeSyntax","value":{"text":"IdentifierTypeSyntax"},"name":"type"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAndEllipsis"},{"value":{"text":"nil"},"name":"ellipsis"},{"value":{"text":"nil"},"name":"unexpectedBetweenEllipsisAndDefaultValue"},{"value":{"text":"nil"},"name":"defaultValue"},{"value":{"text":"nil"},"name":"unexpectedBetweenDefaultValueAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"text":"FunctionParameter","parent":178,"type":"other","id":179,"range":{"endRow":16,"startRow":16,"endColumn":37,"startColumn":15}},{"type":"collection","id":180,"parent":179,"range":{"startRow":16,"endColumn":15,"startColumn":15,"endRow":16},"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"text":"AttributeList"},{"type":"collection","id":181,"parent":179,"range":{"startColumn":15,"startRow":16,"endColumn":15,"endRow":16},"structure":[{"value":{"text":"DeclModifierSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"text":"DeclModifierList"},{"type":"other","structure":[],"parent":179,"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"identifier("itemNamed")"},"id":182,"range":{"startColumn":15,"endRow":16,"startRow":16,"endColumn":24},"text":"itemNamed"},{"type":"other","structure":[],"parent":179,"token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("name")"},"id":183,"range":{"startColumn":25,"endRow":16,"startRow":16,"endColumn":29},"text":"name"},{"type":"other","structure":[],"parent":179,"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"colon"},"id":184,"range":{"startColumn":29,"endRow":16,"startRow":16,"endColumn":30},"text":":"},{"type":"type","id":185,"parent":179,"range":{"startColumn":31,"endRow":16,"startRow":16,"endColumn":37},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeName"},{"value":{"kind":"identifier("String")","text":"String"},"name":"name"},{"value":{"text":"nil"},"name":"unexpectedBetweenNameAndGenericArgumentClause"},{"value":{"text":"nil"},"name":"genericArgumentClause"},{"value":{"text":"nil"},"name":"unexpectedAfterGenericArgumentClause"}],"text":"IdentifierType"},{"type":"other","structure":[],"parent":185,"token":{"trailingTrivia":"","kind":"identifier("String")","leadingTrivia":""},"id":186,"range":{"endRow":16,"startRow":16,"endColumn":37,"startColumn":31},"text":"String"},{"type":"other","structure":[],"parent":176,"token":{"kind":"rightParen","trailingTrivia":"␣<\/span>","leadingTrivia":""},"range":{"endRow":16,"startRow":16,"startColumn":37,"endColumn":38},"id":187,"text":")"},{"parent":175,"text":"FunctionEffectSpecifiers","range":{"endRow":16,"startRow":16,"startColumn":39,"endColumn":45},"type":"other","id":188,"structure":[{"name":"unexpectedBeforeAsyncSpecifier","value":{"text":"nil"}},{"name":"asyncSpecifier","value":{"text":"nil"}},{"name":"unexpectedBetweenAsyncSpecifierAndThrowsClause","value":{"text":"nil"}},{"name":"throwsClause","ref":"ThrowsClauseSyntax","value":{"text":"ThrowsClauseSyntax"}},{"name":"unexpectedAfterThrowsClause","value":{"text":"nil"}}]},{"parent":188,"text":"ThrowsClause","range":{"endColumn":45,"startRow":16,"startColumn":39,"endRow":16},"type":"other","id":189,"structure":[{"name":"unexpectedBeforeThrowsSpecifier","value":{"text":"nil"}},{"name":"throwsSpecifier","value":{"text":"throws","kind":"keyword(SwiftSyntax.Keyword.throws)"}},{"name":"unexpectedBetweenThrowsSpecifierAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"nil"}},{"name":"unexpectedBetweenLeftParenAndType","value":{"text":"nil"}},{"name":"type","value":{"text":"nil"}},{"name":"unexpectedBetweenTypeAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":"nil"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}]},{"type":"other","structure":[],"parent":189,"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.throws)"},"range":{"startRow":16,"startColumn":39,"endRow":16,"endColumn":45},"id":190,"text":"throws"},{"parent":170,"text":"CodeBlock","range":{"endRow":41,"endColumn":6,"startRow":16,"startColumn":46},"type":"other","structure":[{"name":"unexpectedBeforeLeftBrace","value":{"text":"nil"}},{"name":"leftBrace","value":{"kind":"leftBrace","text":"{"}},{"name":"unexpectedBetweenLeftBraceAndStatements","value":{"text":"nil"}},{"name":"statements","value":{"text":"CodeBlockItemListSyntax"},"ref":"CodeBlockItemListSyntax"},{"name":"unexpectedBetweenStatementsAndRightBrace","value":{"text":"nil"}},{"name":"rightBrace","value":{"kind":"rightBrace","text":"}"}},{"name":"unexpectedAfterRightBrace","value":{"text":"nil"}}],"id":191},{"type":"other","structure":[],"parent":191,"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftBrace"},"range":{"startColumn":46,"startRow":16,"endColumn":47,"endRow":16},"id":192,"text":"{"},{"parent":191,"text":"CodeBlockItemList","range":{"startColumn":9,"startRow":17,"endColumn":36,"endRow":40},"type":"collection","structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"8"}}],"id":193},{"parent":193,"text":"CodeBlockItem","range":{"endColumn":10,"endRow":19,"startColumn":9,"startRow":17},"type":"other","structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","ref":"GuardStmtSyntax","value":{"text":"GuardStmtSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":194},{"parent":194,"text":"GuardStmt","range":{"endRow":19,"startColumn":9,"startRow":17,"endColumn":10},"type":"other","structure":[{"name":"unexpectedBeforeGuardKeyword","value":{"text":"nil"}},{"name":"guardKeyword","value":{"kind":"keyword(SwiftSyntax.Keyword.guard)","text":"guard"}},{"name":"unexpectedBetweenGuardKeywordAndConditions","value":{"text":"nil"}},{"name":"conditions","value":{"text":"ConditionElementListSyntax"},"ref":"ConditionElementListSyntax"},{"name":"unexpectedBetweenConditionsAndElseKeyword","value":{"text":"nil"}},{"name":"elseKeyword","value":{"text":"else","kind":"keyword(SwiftSyntax.Keyword.else)"}},{"name":"unexpectedBetweenElseKeywordAndBody","value":{"text":"nil"}},{"name":"body","value":{"text":"CodeBlockSyntax"},"ref":"CodeBlockSyntax"},{"name":"unexpectedAfterBody","value":{"text":"nil"}}],"id":195},{"type":"other","structure":[],"parent":195,"token":{"kind":"keyword(SwiftSyntax.Keyword.guard)","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"␣<\/span>"},"id":196,"range":{"endRow":17,"startColumn":9,"endColumn":14,"startRow":17},"text":"guard"},{"parent":195,"structure":[{"name":"Element","value":{"text":"ConditionElementSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection","text":"ConditionElementList","id":197,"range":{"endRow":17,"startColumn":15,"endColumn":41,"startRow":17}},{"parent":197,"structure":[{"name":"unexpectedBeforeCondition","value":{"text":"nil"}},{"name":"condition","value":{"text":"OptionalBindingConditionSyntax"},"ref":"OptionalBindingConditionSyntax"},{"name":"unexpectedBetweenConditionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"ConditionElement","id":198,"range":{"endRow":17,"startColumn":15,"startRow":17,"endColumn":41}},{"type":"other","structure":[{"name":"unexpectedBeforeBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"text":"let","kind":"keyword(SwiftSyntax.Keyword.let)"}},{"name":"unexpectedBetweenBindingSpecifierAndPattern","value":{"text":"nil"}},{"name":"pattern","ref":"IdentifierPatternSyntax","value":{"text":"IdentifierPatternSyntax"}},{"name":"unexpectedBetweenPatternAndTypeAnnotation","value":{"text":"nil"}},{"name":"typeAnnotation","value":{"text":"nil"}},{"name":"unexpectedBetweenTypeAnnotationAndInitializer","value":{"text":"nil"}},{"name":"initializer","ref":"InitializerClauseSyntax","value":{"text":"InitializerClauseSyntax"}},{"name":"unexpectedAfterInitializer","value":{"text":"nil"}}],"range":{"endRow":17,"startColumn":15,"endColumn":41,"startRow":17},"id":199,"parent":198,"text":"OptionalBindingCondition"},{"type":"other","structure":[],"parent":199,"token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"keyword(SwiftSyntax.Keyword.let)"},"range":{"endRow":17,"startColumn":15,"startRow":17,"endColumn":18},"id":200,"text":"let"},{"type":"pattern","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"kind":"identifier("item")","text":"item"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"range":{"endRow":17,"startColumn":19,"startRow":17,"endColumn":23},"id":201,"parent":199,"text":"IdentifierPattern"},{"type":"other","structure":[],"parent":201,"token":{"kind":"identifier("item")","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"startRow":17,"endRow":17,"endColumn":23,"startColumn":19},"id":202,"text":"item"},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeEqual"},{"value":{"kind":"equal","text":"="},"name":"equal"},{"value":{"text":"nil"},"name":"unexpectedBetweenEqualAndValue"},{"value":{"text":"SubscriptCallExprSyntax"},"ref":"SubscriptCallExprSyntax","name":"value"},{"value":{"text":"nil"},"name":"unexpectedAfterValue"}],"type":"other","parent":199,"id":203,"text":"InitializerClause","range":{"startColumn":24,"startRow":17,"endColumn":41,"endRow":17}},{"type":"other","structure":[],"parent":203,"token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"equal"},"id":204,"range":{"endRow":17,"endColumn":25,"startColumn":24,"startRow":17},"text":"="},{"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftSquare","value":{"text":"nil"}},{"name":"leftSquare","value":{"text":"[","kind":"leftSquare"}},{"name":"unexpectedBetweenLeftSquareAndArguments","value":{"text":"nil"}},{"name":"arguments","ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightSquare","value":{"text":"nil"}},{"name":"rightSquare","value":{"kind":"rightSquare","text":"]"}},{"name":"unexpectedBetweenRightSquareAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"name":"additionalTrailingClosures","ref":"MultipleTrailingClosureElementListSyntax","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"type":"expr","parent":203,"id":205,"text":"SubscriptCallExpr","range":{"endRow":17,"endColumn":41,"startColumn":26,"startRow":17}},{"range":{"endColumn":35,"endRow":17,"startColumn":26,"startRow":17},"id":206,"parent":205,"text":"DeclReferenceExpr","structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"inventory","kind":"identifier("inventory")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"type":"expr"},{"type":"other","structure":[],"parent":206,"token":{"trailingTrivia":"","leadingTrivia":"","kind":"identifier("inventory")"},"range":{"endColumn":35,"endRow":17,"startRow":17,"startColumn":26},"id":207,"text":"inventory"},{"type":"other","structure":[],"parent":205,"token":{"trailingTrivia":"","leadingTrivia":"","kind":"leftSquare"},"range":{"endColumn":36,"endRow":17,"startRow":17,"startColumn":35},"id":208,"text":"["},{"range":{"endColumn":40,"endRow":17,"startRow":17,"startColumn":36},"id":209,"parent":205,"text":"LabeledExprList","structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection"},{"range":{"endRow":17,"startRow":17,"startColumn":36,"endColumn":40},"id":210,"parent":209,"text":"LabeledExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other"},{"text":"DeclReferenceExpr","id":211,"range":{"startColumn":36,"startRow":17,"endColumn":40,"endRow":17},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"name","kind":"identifier("name")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","parent":210},{"text":"name","parent":211,"range":{"startRow":17,"startColumn":36,"endRow":17,"endColumn":40},"token":{"trailingTrivia":"","kind":"identifier("name")","leadingTrivia":""},"id":212,"type":"other","structure":[]},{"text":"]","parent":205,"range":{"startRow":17,"startColumn":40,"endRow":17,"endColumn":41},"token":{"trailingTrivia":"␣<\/span>","kind":"rightSquare","leadingTrivia":""},"id":213,"type":"other","structure":[]},{"text":"MultipleTrailingClosureElementList","id":214,"range":{"startRow":17,"startColumn":42,"endRow":17,"endColumn":42},"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection","parent":205},{"text":"else","parent":195,"range":{"startRow":17,"startColumn":42,"endColumn":46,"endRow":17},"token":{"leadingTrivia":"","kind":"keyword(SwiftSyntax.Keyword.else)","trailingTrivia":"␣<\/span>"},"id":215,"type":"other","structure":[]},{"range":{"endRow":19,"endColumn":10,"startRow":17,"startColumn":47},"type":"other","structure":[{"name":"unexpectedBeforeLeftBrace","value":{"text":"nil"}},{"name":"leftBrace","value":{"kind":"leftBrace","text":"{"}},{"name":"unexpectedBetweenLeftBraceAndStatements","value":{"text":"nil"}},{"name":"statements","ref":"CodeBlockItemListSyntax","value":{"text":"CodeBlockItemListSyntax"}},{"name":"unexpectedBetweenStatementsAndRightBrace","value":{"text":"nil"}},{"name":"rightBrace","value":{"kind":"rightBrace","text":"}"}},{"name":"unexpectedAfterRightBrace","value":{"text":"nil"}}],"text":"CodeBlock","id":216,"parent":195},{"text":"{","parent":216,"range":{"startColumn":47,"startRow":17,"endColumn":48,"endRow":17},"token":{"kind":"leftBrace","trailingTrivia":"","leadingTrivia":""},"id":217,"type":"other","structure":[]},{"range":{"startColumn":13,"startRow":18,"endColumn":55,"endRow":18},"type":"collection","structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"text":"CodeBlockItemList","id":218,"parent":216},{"range":{"startColumn":13,"endRow":18,"endColumn":55,"startRow":18},"type":"other","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"ThrowStmtSyntax","value":{"text":"ThrowStmtSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"text":"CodeBlockItem","id":219,"parent":218},{"range":{"endRow":18,"endColumn":55,"startRow":18,"startColumn":13},"type":"other","structure":[{"name":"unexpectedBeforeThrowKeyword","value":{"text":"nil"}},{"name":"throwKeyword","value":{"text":"throw","kind":"keyword(SwiftSyntax.Keyword.throw)"}},{"name":"unexpectedBetweenThrowKeywordAndExpression","value":{"text":"nil"}},{"name":"expression","ref":"MemberAccessExprSyntax","value":{"text":"MemberAccessExprSyntax"}},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}],"text":"ThrowStmt","id":220,"parent":219},{"text":"throw","parent":220,"range":{"startColumn":13,"startRow":18,"endColumn":18,"endRow":18},"token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.throw)"},"id":221,"type":"other","structure":[]},{"id":222,"parent":220,"type":"expr","text":"MemberAccessExpr","range":{"startColumn":19,"startRow":18,"endColumn":55,"endRow":18},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBase"},{"value":{"text":"DeclReferenceExprSyntax"},"name":"base","ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseAndPeriod"},{"value":{"text":".","kind":"period"},"name":"period"},{"value":{"text":"nil"},"name":"unexpectedBetweenPeriodAndDeclName"},{"value":{"text":"DeclReferenceExprSyntax"},"name":"declName","ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterDeclName"}]},{"id":223,"parent":222,"type":"expr","text":"DeclReferenceExpr","range":{"endRow":18,"startColumn":19,"endColumn":38,"startRow":18},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("VendingMachineError")","text":"VendingMachineError"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"text":"VendingMachineError","parent":223,"range":{"startRow":18,"endRow":18,"endColumn":38,"startColumn":19},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("VendingMachineError")"},"id":224,"type":"other","structure":[]},{"text":".","parent":222,"range":{"startRow":18,"endRow":18,"endColumn":39,"startColumn":38},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"period"},"id":225,"type":"other","structure":[]},{"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"invalidSelection","kind":"identifier("invalidSelection")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"text":"DeclReferenceExpr","range":{"startRow":18,"endRow":18,"endColumn":55,"startColumn":39},"type":"expr","parent":222,"id":226},{"text":"invalidSelection","parent":226,"range":{"endRow":18,"startColumn":39,"endColumn":55,"startRow":18},"token":{"leadingTrivia":"","kind":"identifier("invalidSelection")","trailingTrivia":""},"id":227,"type":"other","structure":[]},{"text":"}","parent":216,"range":{"endRow":19,"startColumn":9,"endColumn":10,"startRow":19},"token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","kind":"rightBrace","trailingTrivia":""},"id":228,"type":"other","structure":[]},{"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"GuardStmtSyntax"},"ref":"GuardStmtSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"text":"CodeBlockItem","range":{"endRow":24,"startColumn":9,"endColumn":10,"startRow":22},"type":"other","parent":193,"id":229},{"text":"GuardStmt","structure":[{"name":"unexpectedBeforeGuardKeyword","value":{"text":"nil"}},{"name":"guardKeyword","value":{"text":"guard","kind":"keyword(SwiftSyntax.Keyword.guard)"}},{"name":"unexpectedBetweenGuardKeywordAndConditions","value":{"text":"nil"}},{"name":"conditions","value":{"text":"ConditionElementListSyntax"},"ref":"ConditionElementListSyntax"},{"name":"unexpectedBetweenConditionsAndElseKeyword","value":{"text":"nil"}},{"name":"elseKeyword","value":{"text":"else","kind":"keyword(SwiftSyntax.Keyword.else)"}},{"name":"unexpectedBetweenElseKeywordAndBody","value":{"text":"nil"}},{"name":"body","value":{"text":"CodeBlockSyntax"},"ref":"CodeBlockSyntax"},{"name":"unexpectedAfterBody","value":{"text":"nil"}}],"type":"other","parent":229,"id":230,"range":{"startRow":22,"endColumn":10,"startColumn":9,"endRow":24}},{"text":"guard","parent":230,"range":{"startColumn":9,"endRow":22,"startRow":22,"endColumn":14},"token":{"kind":"keyword(SwiftSyntax.Keyword.guard)","trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>↲<\/span>↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"id":231,"type":"other","structure":[]},{"text":"ConditionElementList","structure":[{"value":{"text":"ConditionElementSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","parent":230,"id":232,"range":{"startColumn":15,"endRow":22,"startRow":22,"endColumn":29}},{"text":"ConditionElement","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCondition"},{"ref":"InfixOperatorExprSyntax","value":{"text":"InfixOperatorExprSyntax"},"name":"condition"},{"value":{"text":"nil"},"name":"unexpectedBetweenConditionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","parent":232,"id":233,"range":{"endColumn":29,"startColumn":15,"startRow":22,"endRow":22}},{"text":"InfixOperatorExpr","parent":233,"range":{"endColumn":29,"endRow":22,"startRow":22,"startColumn":15},"structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"name":"leftOperand","value":{"text":"MemberAccessExprSyntax"},"ref":"MemberAccessExprSyntax"},{"name":"unexpectedBetweenLeftOperandAndOperator","value":{"text":"nil"}},{"name":"operator","value":{"text":"BinaryOperatorExprSyntax"},"ref":"BinaryOperatorExprSyntax"},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"name":"rightOperand","value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax"},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}],"type":"expr","id":234},{"text":"MemberAccessExpr","parent":234,"range":{"startColumn":15,"endRow":22,"endColumn":25,"startRow":22},"structure":[{"name":"unexpectedBeforeBase","value":{"text":"nil"}},{"name":"base","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedBetweenBaseAndPeriod","value":{"text":"nil"}},{"name":"period","value":{"kind":"period","text":"."}},{"name":"unexpectedBetweenPeriodAndDeclName","value":{"text":"nil"}},{"name":"declName","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedAfterDeclName","value":{"text":"nil"}}],"type":"expr","id":235},{"parent":235,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("item")","text":"item"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"text":"DeclReferenceExpr","type":"expr","id":236,"range":{"endRow":22,"startColumn":15,"endColumn":19,"startRow":22}},{"text":"item","parent":236,"range":{"startColumn":15,"endRow":22,"startRow":22,"endColumn":19},"token":{"leadingTrivia":"","kind":"identifier("item")","trailingTrivia":""},"id":237,"type":"other","structure":[]},{"text":".","parent":235,"range":{"startColumn":19,"endRow":22,"startRow":22,"endColumn":20},"token":{"leadingTrivia":"","kind":"period","trailingTrivia":""},"id":238,"type":"other","structure":[]},{"parent":235,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("count")","text":"count"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"text":"DeclReferenceExpr","type":"expr","id":239,"range":{"startColumn":20,"endRow":22,"startRow":22,"endColumn":25}},{"text":"count","parent":239,"range":{"startColumn":20,"startRow":22,"endRow":22,"endColumn":25},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"identifier("count")"},"id":240,"type":"other","structure":[]},{"parent":234,"structure":[{"name":"unexpectedBeforeOperator","value":{"text":"nil"}},{"name":"operator","value":{"kind":"binaryOperator(">")","text":">"}},{"value":{"text":"nil"},"name":"unexpectedAfterOperator"}],"text":"BinaryOperatorExpr","type":"expr","id":241,"range":{"startColumn":26,"startRow":22,"endRow":22,"endColumn":27}},{"text":">","parent":241,"range":{"startColumn":26,"startRow":22,"endColumn":27,"endRow":22},"token":{"trailingTrivia":"␣<\/span>","kind":"binaryOperator(">")","leadingTrivia":""},"id":242,"type":"other","structure":[]},{"text":"IntegerLiteralExpr","id":243,"parent":234,"range":{"startColumn":28,"startRow":22,"endColumn":29,"endRow":22},"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"0","kind":"integerLiteral("0")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"type":"expr"},{"text":"0","parent":243,"range":{"endRow":22,"startRow":22,"endColumn":29,"startColumn":28},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"integerLiteral("0")"},"id":244,"type":"other","structure":[]},{"text":"else","parent":230,"range":{"endRow":22,"startRow":22,"endColumn":34,"startColumn":30},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.else)"},"id":245,"type":"other","structure":[]},{"text":"CodeBlock","id":246,"parent":230,"range":{"endRow":24,"startRow":22,"endColumn":10,"startColumn":35},"structure":[{"name":"unexpectedBeforeLeftBrace","value":{"text":"nil"}},{"name":"leftBrace","value":{"text":"{","kind":"leftBrace"}},{"name":"unexpectedBetweenLeftBraceAndStatements","value":{"text":"nil"}},{"ref":"CodeBlockItemListSyntax","name":"statements","value":{"text":"CodeBlockItemListSyntax"}},{"name":"unexpectedBetweenStatementsAndRightBrace","value":{"text":"nil"}},{"name":"rightBrace","value":{"kind":"rightBrace","text":"}"}},{"name":"unexpectedAfterRightBrace","value":{"text":"nil"}}],"type":"other"},{"text":"{","parent":246,"range":{"startColumn":35,"endRow":22,"endColumn":36,"startRow":22},"token":{"kind":"leftBrace","leadingTrivia":"","trailingTrivia":""},"id":247,"type":"other","structure":[]},{"structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection","id":248,"parent":246,"text":"CodeBlockItemList","range":{"endColumn":49,"startColumn":13,"endRow":23,"startRow":23}},{"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","ref":"ThrowStmtSyntax","value":{"text":"ThrowStmtSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"type":"other","id":249,"parent":248,"text":"CodeBlockItem","range":{"endRow":23,"endColumn":49,"startColumn":13,"startRow":23}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeThrowKeyword"},{"value":{"kind":"keyword(SwiftSyntax.Keyword.throw)","text":"throw"},"name":"throwKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenThrowKeywordAndExpression"},{"value":{"text":"MemberAccessExprSyntax"},"ref":"MemberAccessExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedAfterExpression"}],"type":"other","id":250,"parent":249,"text":"ThrowStmt","range":{"endColumn":49,"startColumn":13,"startRow":23,"endRow":23}},{"text":"throw","parent":250,"range":{"startRow":23,"endColumn":18,"startColumn":13,"endRow":23},"token":{"kind":"keyword(SwiftSyntax.Keyword.throw)","trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"id":251,"type":"other","structure":[]},{"structure":[{"name":"unexpectedBeforeBase","value":{"text":"nil"}},{"name":"base","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseAndPeriod"},{"value":{"text":".","kind":"period"},"name":"period"},{"value":{"text":"nil"},"name":"unexpectedBetweenPeriodAndDeclName"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"declName"},{"value":{"text":"nil"},"name":"unexpectedAfterDeclName"}],"type":"expr","id":252,"parent":250,"text":"MemberAccessExpr","range":{"startRow":23,"endColumn":49,"startColumn":19,"endRow":23}},{"range":{"startColumn":19,"endRow":23,"endColumn":38,"startRow":23},"parent":252,"text":"DeclReferenceExpr","id":253,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("VendingMachineError")","text":"VendingMachineError"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"type":"expr"},{"text":"VendingMachineError","parent":253,"range":{"startColumn":19,"startRow":23,"endRow":23,"endColumn":38},"token":{"trailingTrivia":"","leadingTrivia":"","kind":"identifier("VendingMachineError")"},"id":254,"type":"other","structure":[]},{"text":".","parent":252,"range":{"startColumn":38,"startRow":23,"endRow":23,"endColumn":39},"token":{"trailingTrivia":"","leadingTrivia":"","kind":"period"},"id":255,"type":"other","structure":[]},{"range":{"startColumn":39,"startRow":23,"endRow":23,"endColumn":49},"parent":252,"text":"DeclReferenceExpr","id":256,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"outOfStock","kind":"identifier("outOfStock")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"type":"expr"},{"text":"outOfStock","parent":256,"range":{"endColumn":49,"startColumn":39,"endRow":23,"startRow":23},"token":{"trailingTrivia":"","kind":"identifier("outOfStock")","leadingTrivia":""},"id":257,"type":"other","structure":[]},{"parent":246,"id":258,"type":"other","token":{"trailingTrivia":"","kind":"rightBrace","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"structure":[],"range":{"endColumn":10,"startColumn":9,"endRow":24,"startRow":24},"text":"}"},{"range":{"endColumn":10,"startColumn":9,"endRow":29,"startRow":27},"id":259,"text":"CodeBlockItem","parent":193,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"GuardStmtSyntax"},"ref":"GuardStmtSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"type":"other"},{"range":{"endRow":29,"endColumn":10,"startColumn":9,"startRow":27},"id":260,"text":"GuardStmt","parent":259,"structure":[{"name":"unexpectedBeforeGuardKeyword","value":{"text":"nil"}},{"name":"guardKeyword","value":{"text":"guard","kind":"keyword(SwiftSyntax.Keyword.guard)"}},{"name":"unexpectedBetweenGuardKeywordAndConditions","value":{"text":"nil"}},{"name":"conditions","value":{"text":"ConditionElementListSyntax"},"ref":"ConditionElementListSyntax"},{"name":"unexpectedBetweenConditionsAndElseKeyword","value":{"text":"nil"}},{"name":"elseKeyword","value":{"text":"else","kind":"keyword(SwiftSyntax.Keyword.else)"}},{"name":"unexpectedBetweenElseKeywordAndBody","value":{"text":"nil"}},{"name":"body","value":{"text":"CodeBlockSyntax"},"ref":"CodeBlockSyntax"},{"name":"unexpectedAfterBody","value":{"text":"nil"}}],"type":"other"},{"parent":260,"id":261,"type":"other","token":{"kind":"keyword(SwiftSyntax.Keyword.guard)","leadingTrivia":"↲<\/span>↲<\/span>↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"␣<\/span>"},"structure":[],"range":{"startColumn":9,"startRow":27,"endRow":27,"endColumn":14},"text":"guard"},{"parent":260,"type":"collection","id":262,"structure":[{"name":"Element","value":{"text":"ConditionElementSyntax"}},{"name":"Count","value":{"text":"1"}}],"range":{"startColumn":15,"startRow":27,"endRow":27,"endColumn":43},"text":"ConditionElementList"},{"parent":262,"type":"other","id":263,"structure":[{"name":"unexpectedBeforeCondition","value":{"text":"nil"}},{"name":"condition","value":{"text":"InfixOperatorExprSyntax"},"ref":"InfixOperatorExprSyntax"},{"name":"unexpectedBetweenConditionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"range":{"endRow":27,"startRow":27,"startColumn":15,"endColumn":43},"text":"ConditionElement"},{"parent":263,"type":"expr","id":264,"structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"name":"leftOperand","value":{"text":"MemberAccessExprSyntax"},"ref":"MemberAccessExprSyntax"},{"name":"unexpectedBetweenLeftOperandAndOperator","value":{"text":"nil"}},{"name":"operator","value":{"text":"BinaryOperatorExprSyntax"},"ref":"BinaryOperatorExprSyntax"},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"name":"rightOperand","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}],"range":{"startColumn":15,"startRow":27,"endColumn":43,"endRow":27},"text":"InfixOperatorExpr"},{"parent":264,"text":"MemberAccessExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBase"},{"value":{"text":"DeclReferenceExprSyntax"},"name":"base","ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseAndPeriod"},{"value":{"kind":"period","text":"."},"name":"period"},{"value":{"text":"nil"},"name":"unexpectedBetweenPeriodAndDeclName"},{"value":{"text":"DeclReferenceExprSyntax"},"name":"declName","ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterDeclName"}],"type":"expr","range":{"startRow":27,"endColumn":25,"endRow":27,"startColumn":15},"id":265},{"parent":265,"text":"DeclReferenceExpr","structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"item","kind":"identifier("item")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"type":"expr","range":{"startColumn":15,"endRow":27,"endColumn":19,"startRow":27},"id":266},{"parent":266,"id":267,"type":"other","token":{"kind":"identifier("item")","leadingTrivia":"","trailingTrivia":""},"structure":[],"range":{"startColumn":15,"startRow":27,"endColumn":19,"endRow":27},"text":"item"},{"parent":265,"id":268,"type":"other","token":{"kind":"period","leadingTrivia":"","trailingTrivia":""},"structure":[],"range":{"startRow":27,"endRow":27,"startColumn":19,"endColumn":20},"text":"."},{"parent":265,"text":"DeclReferenceExpr","id":269,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("price")","text":"price"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","range":{"endColumn":25,"startRow":27,"endRow":27,"startColumn":20}},{"parent":269,"id":270,"type":"other","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"identifier("price")"},"structure":[],"range":{"startColumn":20,"endColumn":25,"startRow":27,"endRow":27},"text":"price"},{"parent":264,"text":"BinaryOperatorExpr","id":271,"structure":[{"name":"unexpectedBeforeOperator","value":{"text":"nil"}},{"name":"operator","value":{"text":"<=","kind":"binaryOperator("<=")"}},{"name":"unexpectedAfterOperator","value":{"text":"nil"}}],"type":"expr","range":{"startColumn":26,"endColumn":28,"startRow":27,"endRow":27}},{"parent":271,"id":272,"type":"other","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"binaryOperator("<=")"},"structure":[],"range":{"startRow":27,"endRow":27,"startColumn":26,"endColumn":28},"text":"<="},{"parent":264,"text":"DeclReferenceExpr","id":273,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("coinsDeposited")","text":"coinsDeposited"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","range":{"startRow":27,"endRow":27,"startColumn":29,"endColumn":43}},{"parent":273,"id":274,"type":"other","token":{"trailingTrivia":"␣<\/span>","kind":"identifier("coinsDeposited")","leadingTrivia":""},"structure":[],"range":{"startRow":27,"startColumn":29,"endRow":27,"endColumn":43},"text":"coinsDeposited"},{"parent":260,"id":275,"type":"other","token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"keyword(SwiftSyntax.Keyword.else)"},"structure":[],"range":{"startColumn":44,"startRow":27,"endRow":27,"endColumn":48},"text":"else"},{"text":"CodeBlock","range":{"startColumn":49,"startRow":27,"endRow":29,"endColumn":10},"parent":260,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftBrace"},{"value":{"text":"{","kind":"leftBrace"},"name":"leftBrace"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftBraceAndStatements"},{"value":{"text":"CodeBlockItemListSyntax"},"name":"statements","ref":"CodeBlockItemListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenStatementsAndRightBrace"},{"value":{"kind":"rightBrace","text":"}"},"name":"rightBrace"},{"value":{"text":"nil"},"name":"unexpectedAfterRightBrace"}],"type":"other","id":276},{"parent":276,"id":277,"type":"other","token":{"kind":"leftBrace","trailingTrivia":"","leadingTrivia":""},"structure":[],"range":{"startColumn":49,"endColumn":50,"startRow":27,"endRow":27},"text":"{"},{"text":"CodeBlockItemList","range":{"startColumn":13,"endColumn":98,"startRow":28,"endRow":28},"parent":276,"structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection","id":278},{"text":"CodeBlockItem","range":{"startColumn":13,"endColumn":98,"endRow":28,"startRow":28},"parent":278,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"ThrowStmtSyntax","value":{"text":"ThrowStmtSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","id":279},{"range":{"startRow":28,"endRow":28,"endColumn":98,"startColumn":13},"parent":279,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeThrowKeyword"},{"value":{"text":"throw","kind":"keyword(SwiftSyntax.Keyword.throw)"},"name":"throwKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenThrowKeywordAndExpression"},{"ref":"FunctionCallExprSyntax","value":{"text":"FunctionCallExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedAfterExpression"}],"type":"other","text":"ThrowStmt","id":280},{"parent":280,"id":281,"type":"other","token":{"kind":"keyword(SwiftSyntax.Keyword.throw)","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"␣<\/span>"},"structure":[],"range":{"startRow":28,"endRow":28,"endColumn":18,"startColumn":13},"text":"throw"},{"range":{"startRow":28,"endRow":28,"endColumn":98,"startColumn":19},"parent":280,"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","ref":"MemberAccessExprSyntax","value":{"text":"MemberAccessExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"name":"arguments","ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"kind":"rightParen","text":")"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"name":"additionalTrailingClosures","ref":"MultipleTrailingClosureElementListSyntax","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"type":"expr","text":"FunctionCallExpr","id":282},{"text":"MemberAccessExpr","id":283,"parent":282,"range":{"startColumn":19,"endRow":28,"startRow":28,"endColumn":56},"type":"expr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBase"},{"value":{"text":"DeclReferenceExprSyntax"},"name":"base","ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseAndPeriod"},{"value":{"kind":"period","text":"."},"name":"period"},{"value":{"text":"nil"},"name":"unexpectedBetweenPeriodAndDeclName"},{"value":{"text":"DeclReferenceExprSyntax"},"name":"declName","ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterDeclName"}]},{"text":"DeclReferenceExpr","id":284,"parent":283,"range":{"endRow":28,"endColumn":38,"startColumn":19,"startRow":28},"type":"expr","structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"VendingMachineError","kind":"identifier("VendingMachineError")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"parent":284,"id":285,"type":"other","token":{"trailingTrivia":"","kind":"identifier("VendingMachineError")","leadingTrivia":""},"structure":[],"range":{"endColumn":38,"startRow":28,"startColumn":19,"endRow":28},"text":"VendingMachineError"},{"parent":283,"id":286,"type":"other","token":{"trailingTrivia":"","kind":"period","leadingTrivia":""},"structure":[],"range":{"endColumn":39,"startRow":28,"startColumn":38,"endRow":28},"text":"."},{"text":"DeclReferenceExpr","id":287,"parent":283,"range":{"endColumn":56,"startRow":28,"startColumn":39,"endRow":28},"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"insufficientFunds","kind":"identifier("insufficientFunds")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"type":"expr"},{"parent":287,"id":288,"type":"other","token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("insufficientFunds")"},"structure":[],"range":{"startRow":28,"endRow":28,"startColumn":39,"endColumn":56},"text":"insufficientFunds"},{"parent":282,"id":289,"type":"other","token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"structure":[],"range":{"startRow":28,"endRow":28,"startColumn":56,"endColumn":57},"text":"("},{"text":"LabeledExprList","id":290,"parent":282,"range":{"startRow":28,"endRow":28,"startColumn":57,"endColumn":97},"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection"},{"text":"LabeledExpr","id":291,"parent":290,"range":{"startRow":28,"startColumn":57,"endRow":28,"endColumn":97},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"kind":"identifier("coinsNeeded")","text":"coinsNeeded"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"kind":"colon","text":":"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"InfixOperatorExprSyntax"},"ref":"InfixOperatorExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other"},{"parent":291,"id":292,"type":"other","token":{"trailingTrivia":"","kind":"identifier("coinsNeeded")","leadingTrivia":""},"structure":[],"range":{"startRow":28,"endRow":28,"startColumn":57,"endColumn":68},"text":"coinsNeeded"},{"parent":291,"id":293,"type":"other","token":{"trailingTrivia":"␣<\/span>","kind":"colon","leadingTrivia":""},"structure":[],"range":{"startRow":28,"endRow":28,"startColumn":68,"endColumn":69},"text":":"},{"id":294,"structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"name":"leftOperand","ref":"MemberAccessExprSyntax","value":{"text":"MemberAccessExprSyntax"}},{"name":"unexpectedBetweenLeftOperandAndOperator","value":{"text":"nil"}},{"name":"operator","ref":"BinaryOperatorExprSyntax","value":{"text":"BinaryOperatorExprSyntax"}},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"name":"rightOperand","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}],"type":"expr","range":{"startRow":28,"endRow":28,"startColumn":70,"endColumn":97},"parent":291,"text":"InfixOperatorExpr"},{"id":295,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBase"},{"value":{"text":"DeclReferenceExprSyntax"},"name":"base","ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseAndPeriod"},{"value":{"kind":"period","text":"."},"name":"period"},{"value":{"text":"nil"},"name":"unexpectedBetweenPeriodAndDeclName"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"declName"},{"value":{"text":"nil"},"name":"unexpectedAfterDeclName"}],"type":"expr","range":{"startRow":28,"endColumn":80,"endRow":28,"startColumn":70},"parent":294,"text":"MemberAccessExpr"},{"parent":295,"id":296,"text":"DeclReferenceExpr","range":{"startColumn":70,"startRow":28,"endRow":28,"endColumn":74},"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"item","kind":"identifier("item")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"type":"expr"},{"parent":296,"id":297,"type":"other","token":{"leadingTrivia":"","kind":"identifier("item")","trailingTrivia":""},"structure":[],"range":{"startColumn":70,"startRow":28,"endColumn":74,"endRow":28},"text":"item"},{"parent":295,"id":298,"type":"other","token":{"leadingTrivia":"","kind":"period","trailingTrivia":""},"structure":[],"range":{"startColumn":74,"startRow":28,"endColumn":75,"endRow":28},"text":"."},{"parent":295,"id":299,"text":"DeclReferenceExpr","range":{"startColumn":75,"startRow":28,"endColumn":80,"endRow":28},"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"price","kind":"identifier("price")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr"},{"parent":299,"id":300,"type":"other","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"identifier("price")"},"structure":[],"range":{"startRow":28,"startColumn":75,"endRow":28,"endColumn":80},"text":"price"},{"type":"expr","id":301,"text":"BinaryOperatorExpr","range":{"startRow":28,"startColumn":81,"endRow":28,"endColumn":82},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOperator"},{"value":{"kind":"binaryOperator("-")","text":"-"},"name":"operator"},{"value":{"text":"nil"},"name":"unexpectedAfterOperator"}],"parent":294},{"parent":301,"id":302,"type":"other","token":{"leadingTrivia":"","kind":"binaryOperator("-")","trailingTrivia":"␣<\/span>"},"structure":[],"range":{"endColumn":82,"startRow":28,"startColumn":81,"endRow":28},"text":"-"},{"type":"expr","id":303,"text":"DeclReferenceExpr","range":{"endColumn":97,"startRow":28,"startColumn":83,"endRow":28},"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("coinsDeposited")","text":"coinsDeposited"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"parent":294},{"parent":303,"id":304,"type":"other","token":{"kind":"identifier("coinsDeposited")","leadingTrivia":"","trailingTrivia":""},"structure":[],"range":{"endRow":28,"startColumn":83,"endColumn":97,"startRow":28},"text":"coinsDeposited"},{"parent":282,"type":"other","range":{"endRow":28,"startColumn":97,"endColumn":98,"startRow":28},"structure":[],"text":")","id":305,"token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":""}},{"type":"collection","id":306,"text":"MultipleTrailingClosureElementList","range":{"endRow":28,"startColumn":98,"endColumn":98,"startRow":28},"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"parent":282},{"parent":276,"type":"other","range":{"endColumn":10,"endRow":29,"startRow":29,"startColumn":9},"structure":[],"text":"}","id":307,"token":{"kind":"rightBrace","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":""}},{"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","ref":"InfixOperatorExprSyntax","value":{"text":"InfixOperatorExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"type":"other","parent":193,"text":"CodeBlockItem","range":{"endColumn":37,"endRow":32,"startRow":32,"startColumn":9},"id":308},{"structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"name":"leftOperand","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenLeftOperandAndOperator","value":{"text":"nil"}},{"name":"operator","ref":"BinaryOperatorExprSyntax","value":{"text":"BinaryOperatorExprSyntax"}},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"name":"rightOperand","ref":"MemberAccessExprSyntax","value":{"text":"MemberAccessExprSyntax"}},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}],"type":"expr","parent":308,"text":"InfixOperatorExpr","range":{"startRow":32,"endRow":32,"startColumn":9,"endColumn":37},"id":309},{"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("coinsDeposited")","text":"coinsDeposited"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"type":"expr","parent":309,"text":"DeclReferenceExpr","range":{"startRow":32,"startColumn":9,"endRow":32,"endColumn":23},"id":310},{"parent":310,"type":"other","range":{"endRow":32,"endColumn":23,"startRow":32,"startColumn":9},"structure":[],"text":"coinsDeposited","id":311,"token":{"trailingTrivia":"␣<\/span>","kind":"identifier("coinsDeposited")","leadingTrivia":"↲<\/span>↲<\/span>↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"}},{"structure":[{"name":"unexpectedBeforeOperator","value":{"text":"nil"}},{"name":"operator","value":{"text":"-=","kind":"binaryOperator("-=")"}},{"name":"unexpectedAfterOperator","value":{"text":"nil"}}],"type":"expr","id":312,"range":{"endRow":32,"endColumn":26,"startRow":32,"startColumn":24},"parent":309,"text":"BinaryOperatorExpr"},{"parent":312,"type":"other","range":{"endColumn":26,"endRow":32,"startRow":32,"startColumn":24},"structure":[],"text":"-=","id":313,"token":{"kind":"binaryOperator("-=")","leadingTrivia":"","trailingTrivia":"␣<\/span>"}},{"structure":[{"name":"unexpectedBeforeBase","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"base","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenBaseAndPeriod","value":{"text":"nil"}},{"name":"period","value":{"kind":"period","text":"."}},{"name":"unexpectedBetweenPeriodAndDeclName","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"declName","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedAfterDeclName","value":{"text":"nil"}}],"type":"expr","id":314,"range":{"endColumn":37,"endRow":32,"startRow":32,"startColumn":27},"parent":309,"text":"MemberAccessExpr"},{"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"item","kind":"identifier("item")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"type":"expr","id":315,"range":{"startColumn":27,"endRow":32,"startRow":32,"endColumn":31},"parent":314,"text":"DeclReferenceExpr"},{"parent":315,"type":"other","range":{"endColumn":31,"endRow":32,"startColumn":27,"startRow":32},"structure":[],"text":"item","id":316,"token":{"trailingTrivia":"","leadingTrivia":"","kind":"identifier("item")"}},{"parent":314,"type":"other","range":{"endColumn":32,"endRow":32,"startColumn":31,"startRow":32},"structure":[],"text":".","id":317,"token":{"trailingTrivia":"","leadingTrivia":"","kind":"period"}},{"range":{"endColumn":37,"endRow":32,"startColumn":32,"startRow":32},"id":318,"parent":314,"text":"DeclReferenceExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"price","kind":"identifier("price")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr"},{"parent":318,"type":"other","range":{"endRow":32,"startRow":32,"startColumn":32,"endColumn":37},"structure":[],"text":"price","id":319,"token":{"leadingTrivia":"","kind":"identifier("price")","trailingTrivia":""}},{"range":{"endRow":35,"startRow":35,"startColumn":9,"endColumn":27},"id":320,"parent":193,"text":"CodeBlockItem","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"VariableDeclSyntax","value":{"text":"VariableDeclSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other"},{"text":"VariableDecl","id":321,"range":{"startRow":35,"startColumn":9,"endColumn":27,"endRow":35},"type":"decl","structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","value":{"text":"AttributeListSyntax"},"ref":"AttributeListSyntax"},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax"},{"name":"unexpectedBetweenModifiersAndBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"text":"var","kind":"keyword(SwiftSyntax.Keyword.var)"}},{"name":"unexpectedBetweenBindingSpecifierAndBindings","value":{"text":"nil"}},{"name":"bindings","value":{"text":"PatternBindingListSyntax"},"ref":"PatternBindingListSyntax"},{"name":"unexpectedAfterBindings","value":{"text":"nil"}}],"parent":320},{"text":"AttributeList","id":322,"range":{"endRow":32,"startRow":32,"endColumn":37,"startColumn":37},"type":"collection","structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"parent":321},{"text":"DeclModifierList","id":323,"range":{"startRow":32,"startColumn":37,"endRow":32,"endColumn":37},"type":"collection","structure":[{"value":{"text":"DeclModifierSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"parent":321},{"parent":321,"type":"other","range":{"startColumn":9,"endColumn":12,"endRow":35,"startRow":35},"structure":[],"text":"var","id":324,"token":{"leadingTrivia":"↲<\/span>↲<\/span>↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.var)"}},{"parent":321,"range":{"startColumn":13,"endColumn":27,"endRow":35,"startRow":35},"structure":[{"value":{"text":"PatternBindingSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"text":"PatternBindingList","type":"collection","id":325},{"parent":325,"range":{"startRow":35,"startColumn":13,"endRow":35,"endColumn":27},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"ref":"IdentifierPatternSyntax","value":{"text":"IdentifierPatternSyntax"},"name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTypeAnnotation"},{"value":{"text":"nil"},"name":"typeAnnotation"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAnnotationAndInitializer"},{"ref":"InitializerClauseSyntax","value":{"text":"InitializerClauseSyntax"},"name":"initializer"},{"value":{"text":"nil"},"name":"unexpectedBetweenInitializerAndAccessorBlock"},{"value":{"text":"nil"},"name":"accessorBlock"},{"value":{"text":"nil"},"name":"unexpectedBetweenAccessorBlockAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"text":"PatternBinding","type":"other","id":326},{"parent":326,"range":{"startRow":35,"endRow":35,"startColumn":13,"endColumn":20},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"name":"identifier","value":{"kind":"identifier("newItem")","text":"newItem"}},{"name":"unexpectedAfterIdentifier","value":{"text":"nil"}}],"text":"IdentifierPattern","type":"pattern","id":327},{"parent":327,"type":"other","range":{"startColumn":13,"endRow":35,"endColumn":20,"startRow":35},"structure":[],"text":"newItem","id":328,"token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"identifier("newItem")"}},{"type":"other","text":"InitializerClause","parent":326,"range":{"startColumn":21,"endRow":35,"endColumn":27,"startRow":35},"id":329,"structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"kind":"equal","text":"="}},{"name":"unexpectedBetweenEqualAndValue","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"value","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedAfterValue","value":{"text":"nil"}}]},{"parent":329,"type":"other","range":{"startRow":35,"endRow":35,"endColumn":22,"startColumn":21},"structure":[],"text":"=","id":330,"token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"equal"}},{"type":"expr","text":"DeclReferenceExpr","parent":329,"range":{"startRow":35,"endRow":35,"endColumn":27,"startColumn":23},"id":331,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"item","kind":"identifier("item")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}]},{"parent":331,"type":"other","range":{"endColumn":27,"endRow":35,"startColumn":23,"startRow":35},"structure":[],"text":"item","id":332,"token":{"kind":"identifier("item")","leadingTrivia":"","trailingTrivia":""}},{"parent":193,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"InfixOperatorExprSyntax"},"name":"item","ref":"InfixOperatorExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","text":"CodeBlockItem","range":{"startColumn":9,"startRow":36,"endColumn":27,"endRow":36},"id":333},{"parent":333,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftOperand"},{"value":{"text":"MemberAccessExprSyntax"},"ref":"MemberAccessExprSyntax","name":"leftOperand"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftOperandAndOperator"},{"value":{"text":"BinaryOperatorExprSyntax"},"ref":"BinaryOperatorExprSyntax","name":"operator"},{"value":{"text":"nil"},"name":"unexpectedBetweenOperatorAndRightOperand"},{"value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax","name":"rightOperand"},{"value":{"text":"nil"},"name":"unexpectedAfterRightOperand"}],"type":"expr","text":"InfixOperatorExpr","range":{"startRow":36,"endRow":36,"endColumn":27,"startColumn":9},"id":334},{"parent":334,"structure":[{"name":"unexpectedBeforeBase","value":{"text":"nil"}},{"name":"base","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedBetweenBaseAndPeriod","value":{"text":"nil"}},{"name":"period","value":{"kind":"period","text":"."}},{"name":"unexpectedBetweenPeriodAndDeclName","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"declName","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedAfterDeclName","value":{"text":"nil"}}],"type":"expr","text":"MemberAccessExpr","range":{"startRow":36,"endColumn":22,"endRow":36,"startColumn":9},"id":335},{"type":"expr","parent":335,"id":336,"text":"DeclReferenceExpr","range":{"endRow":36,"startRow":36,"startColumn":9,"endColumn":16},"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"newItem","kind":"identifier("newItem")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"parent":336,"type":"other","range":{"startColumn":9,"endRow":36,"startRow":36,"endColumn":16},"structure":[],"text":"newItem","id":337,"token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"","kind":"identifier("newItem")"}},{"parent":335,"type":"other","range":{"startColumn":16,"endRow":36,"startRow":36,"endColumn":17},"structure":[],"text":".","id":338,"token":{"leadingTrivia":"","trailingTrivia":"","kind":"period"}},{"type":"expr","parent":335,"id":339,"text":"DeclReferenceExpr","range":{"startColumn":17,"endRow":36,"startRow":36,"endColumn":22},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"count","kind":"identifier("count")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}]},{"parent":339,"type":"other","range":{"endColumn":22,"startColumn":17,"startRow":36,"endRow":36},"structure":[],"text":"count","id":340,"token":{"kind":"identifier("count")","leadingTrivia":"","trailingTrivia":"␣<\/span>"}},{"structure":[{"name":"unexpectedBeforeOperator","value":{"text":"nil"}},{"name":"operator","value":{"text":"-=","kind":"binaryOperator("-=")"}},{"name":"unexpectedAfterOperator","value":{"text":"nil"}}],"type":"expr","id":341,"parent":334,"text":"BinaryOperatorExpr","range":{"startRow":36,"endRow":36,"startColumn":23,"endColumn":25}},{"parent":341,"type":"other","range":{"endRow":36,"startRow":36,"startColumn":23,"endColumn":25},"structure":[],"text":"-=","id":342,"token":{"kind":"binaryOperator("-=")","trailingTrivia":"␣<\/span>","leadingTrivia":""}},{"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"kind":"integerLiteral("1")","text":"1"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"type":"expr","id":343,"parent":334,"text":"IntegerLiteralExpr","range":{"endRow":36,"startRow":36,"startColumn":26,"endColumn":27}},{"parent":343,"type":"other","range":{"startColumn":26,"startRow":36,"endColumn":27,"endRow":36},"structure":[],"text":"1","id":344,"token":{"trailingTrivia":"","kind":"integerLiteral("1")","leadingTrivia":""}},{"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"InfixOperatorExprSyntax"},"ref":"InfixOperatorExprSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"type":"other","id":345,"parent":193,"text":"CodeBlockItem","range":{"startColumn":9,"startRow":37,"endColumn":34,"endRow":37}},{"structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"name":"leftOperand","value":{"text":"SubscriptCallExprSyntax"},"ref":"SubscriptCallExprSyntax"},{"name":"unexpectedBetweenLeftOperandAndOperator","value":{"text":"nil"}},{"name":"operator","value":{"text":"AssignmentExprSyntax"},"ref":"AssignmentExprSyntax"},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"name":"rightOperand","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}],"type":"expr","id":346,"parent":345,"text":"InfixOperatorExpr","range":{"startRow":37,"startColumn":9,"endRow":37,"endColumn":34}},{"id":347,"text":"SubscriptCallExpr","type":"expr","range":{"startColumn":9,"endRow":37,"endColumn":24,"startRow":37},"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedBetweenCalledExpressionAndLeftSquare","value":{"text":"nil"}},{"name":"leftSquare","value":{"kind":"leftSquare","text":"["}},{"name":"unexpectedBetweenLeftSquareAndArguments","value":{"text":"nil"}},{"name":"arguments","value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax"},{"name":"unexpectedBetweenArgumentsAndRightSquare","value":{"text":"nil"}},{"name":"rightSquare","value":{"kind":"rightSquare","text":"]"}},{"name":"unexpectedBetweenRightSquareAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"value":{"text":"MultipleTrailingClosureElementListSyntax"},"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}],"parent":346},{"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"inventory","kind":"identifier("inventory")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"type":"expr","parent":347,"id":348,"text":"DeclReferenceExpr","range":{"startColumn":9,"endRow":37,"endColumn":18,"startRow":37}},{"parent":348,"type":"other","range":{"endRow":37,"startRow":37,"startColumn":9,"endColumn":18},"structure":[],"text":"inventory","id":349,"token":{"kind":"identifier("inventory")","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":""}},{"parent":347,"type":"other","range":{"endRow":37,"startRow":37,"startColumn":18,"endColumn":19},"structure":[],"text":"[","id":350,"token":{"kind":"leftSquare","leadingTrivia":"","trailingTrivia":""}},{"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection","parent":347,"id":351,"text":"LabeledExprList","range":{"endRow":37,"startRow":37,"startColumn":19,"endColumn":23}},{"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"name":"expression","ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","parent":351,"id":352,"text":"LabeledExpr","range":{"startRow":37,"endRow":37,"startColumn":19,"endColumn":23}},{"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("name")","text":"name"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":353,"type":"expr","parent":352,"range":{"startColumn":19,"startRow":37,"endRow":37,"endColumn":23},"text":"DeclReferenceExpr"},{"parent":353,"type":"other","range":{"startRow":37,"endRow":37,"startColumn":19,"endColumn":23},"structure":[],"text":"name","id":354,"token":{"trailingTrivia":"","kind":"identifier("name")","leadingTrivia":""}},{"parent":347,"type":"other","range":{"startRow":37,"endRow":37,"startColumn":23,"endColumn":24},"structure":[],"text":"]","id":355,"token":{"trailingTrivia":"␣<\/span>","kind":"rightSquare","leadingTrivia":""}},{"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":356,"type":"collection","parent":347,"range":{"startRow":37,"endRow":37,"startColumn":25,"endColumn":25},"text":"MultipleTrailingClosureElementList"},{"structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"value":{"text":"=","kind":"equal"},"name":"equal"},{"value":{"text":"nil"},"name":"unexpectedAfterEqual"}],"id":357,"type":"expr","parent":346,"range":{"endColumn":26,"startRow":37,"startColumn":25,"endRow":37},"text":"AssignmentExpr"},{"parent":357,"type":"other","range":{"startColumn":25,"endRow":37,"endColumn":26,"startRow":37},"structure":[],"text":"=","id":358,"token":{"kind":"equal","leadingTrivia":"","trailingTrivia":"␣<\/span>"}},{"id":359,"text":"DeclReferenceExpr","range":{"startColumn":27,"endRow":37,"endColumn":34,"startRow":37},"type":"expr","parent":346,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"newItem","kind":"identifier("newItem")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"text":"newItem","range":{"endRow":37,"endColumn":34,"startRow":37,"startColumn":27},"parent":359,"token":{"kind":"identifier("newItem")","leadingTrivia":"","trailingTrivia":""},"type":"other","structure":[],"id":360},{"id":361,"text":"CodeBlockItem","range":{"endRow":40,"endColumn":36,"startRow":40,"startColumn":9},"type":"other","parent":193,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","ref":"FunctionCallExprSyntax","value":{"text":"FunctionCallExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}]},{"id":362,"text":"FunctionCallExpr","range":{"endRow":40,"startColumn":9,"startRow":40,"endColumn":36},"type":"expr","parent":361,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"name":"calledExpression","ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"value":{"text":"LabeledExprListSyntax"},"name":"arguments","ref":"LabeledExprListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"value":{"text":"MultipleTrailingClosureElementListSyntax"},"name":"additionalTrailingClosures","ref":"MultipleTrailingClosureElementListSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}]},{"id":363,"text":"DeclReferenceExpr","parent":362,"range":{"endColumn":14,"endRow":40,"startColumn":9,"startRow":40},"type":"expr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("print")","text":"print"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}]},{"text":"print","parent":363,"range":{"startColumn":9,"startRow":40,"endRow":40,"endColumn":14},"token":{"kind":"identifier("print")","leadingTrivia":"↲<\/span>↲<\/span>↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":""},"type":"other","structure":[],"id":364},{"text":"(","parent":362,"range":{"startColumn":14,"startRow":40,"endRow":40,"endColumn":15},"token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""},"type":"other","structure":[],"id":365},{"text":"LabeledExprList","structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":366,"parent":362,"range":{"startColumn":15,"startRow":40,"endRow":40,"endColumn":35},"type":"collection"},{"text":"LabeledExpr","structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":367,"parent":366,"range":{"startColumn":15,"endColumn":35,"endRow":40,"startRow":40},"type":"other"},{"text":"StringLiteralExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"name":"segments","ref":"StringLiteralSegmentListSyntax","value":{"text":"StringLiteralSegmentListSyntax"}},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"id":368,"parent":367,"range":{"endColumn":35,"startRow":40,"startColumn":15,"endRow":40},"type":"expr"},{"parent":368,"text":""","range":{"startRow":40,"endColumn":16,"startColumn":15,"endRow":40},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"type":"other","structure":[],"id":369},{"id":370,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"3"}}],"type":"collection","parent":368,"text":"StringLiteralSegmentList","range":{"startRow":40,"endColumn":34,"startColumn":16,"endRow":40}},{"id":371,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"kind":"stringSegment("Dispensing ")","text":"Dispensing "},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","parent":370,"text":"StringSegment","range":{"startColumn":16,"endRow":40,"endColumn":27,"startRow":40}},{"parent":371,"text":"Dispensing␣<\/span>","range":{"endColumn":27,"startRow":40,"startColumn":16,"endRow":40},"token":{"trailingTrivia":"","leadingTrivia":"","kind":"stringSegment("Dispensing ")"},"type":"other","structure":[],"id":372},{"text":"ExpressionSegment","id":373,"range":{"startRow":40,"startColumn":27,"endRow":40,"endColumn":34},"structure":[{"name":"unexpectedBeforeBackslash","value":{"text":"nil"}},{"name":"backslash","value":{"text":"\\","kind":"backslash"}},{"name":"unexpectedBetweenBackslashAndPounds","value":{"text":"nil"}},{"name":"pounds","value":{"text":"nil"}},{"name":"unexpectedBetweenPoundsAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"kind":"leftParen","text":"("}},{"name":"unexpectedBetweenLeftParenAndExpressions","value":{"text":"nil"}},{"name":"expressions","ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenExpressionsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"kind":"rightParen","text":")"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}],"parent":370,"type":"other"},{"text":"\\","range":{"startRow":40,"startColumn":27,"endColumn":28,"endRow":40},"parent":373,"token":{"kind":"backslash","leadingTrivia":"","trailingTrivia":""},"type":"other","structure":[],"id":374},{"text":"(","range":{"startRow":40,"startColumn":28,"endColumn":29,"endRow":40},"parent":373,"token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""},"type":"other","structure":[],"id":375},{"text":"LabeledExprList","id":376,"range":{"startRow":40,"startColumn":29,"endColumn":33,"endRow":40},"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"parent":373,"type":"collection"},{"text":"LabeledExpr","id":377,"range":{"startRow":40,"endColumn":33,"startColumn":29,"endRow":40},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"parent":376,"type":"other"},{"type":"expr","id":378,"parent":377,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("name")","text":"name"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"text":"DeclReferenceExpr","range":{"startColumn":29,"endRow":40,"startRow":40,"endColumn":33}},{"parent":378,"text":"name","range":{"startRow":40,"endRow":40,"endColumn":33,"startColumn":29},"token":{"kind":"identifier("name")","leadingTrivia":"","trailingTrivia":""},"type":"other","structure":[],"id":379},{"parent":373,"text":")","range":{"startRow":40,"endRow":40,"endColumn":34,"startColumn":33},"token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":""},"type":"other","structure":[],"id":380},{"parent":370,"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":"","kind":"stringSegment("")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"type":"other","id":381,"range":{"endRow":40,"endColumn":34,"startRow":40,"startColumn":34},"text":"StringSegment"},{"parent":381,"range":{"startRow":40,"endRow":40,"endColumn":34,"startColumn":34},"text":"","token":{"leadingTrivia":"","kind":"stringSegment("")","trailingTrivia":""},"type":"other","structure":[],"id":382},{"parent":368,"range":{"startRow":40,"endRow":40,"endColumn":35,"startColumn":34},"text":""","token":{"leadingTrivia":"","kind":"stringQuote","trailingTrivia":""},"type":"other","structure":[],"id":383},{"parent":362,"range":{"startRow":40,"endRow":40,"endColumn":36,"startColumn":35},"text":")","token":{"leadingTrivia":"","kind":"rightParen","trailingTrivia":""},"type":"other","structure":[],"id":384},{"parent":362,"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection","id":385,"range":{"startRow":40,"endRow":40,"endColumn":36,"startColumn":36},"text":"MultipleTrailingClosureElementList"},{"parent":191,"range":{"startRow":41,"endColumn":6,"startColumn":5,"endRow":41},"text":"}","token":{"kind":"rightBrace","trailingTrivia":"","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"type":"other","structure":[],"id":386},{"parent":58,"range":{"startRow":42,"endColumn":2,"startColumn":1,"endRow":42},"text":"}","token":{"kind":"rightBrace","trailingTrivia":"","leadingTrivia":"↲<\/span>"},"type":"other","structure":[],"id":387},{"parent":0,"range":{"startRow":42,"endColumn":2,"startColumn":2,"endRow":42},"text":"","token":{"kind":"endOfFile","trailingTrivia":"","leadingTrivia":""},"type":"other","structure":[],"id":388}] diff --git a/Examples/Completed/conditionals/code.swift b/Examples/Completed/conditionals/code.swift new file mode 100644 index 0000000..23b9ab1 --- /dev/null +++ b/Examples/Completed/conditionals/code.swift @@ -0,0 +1,154 @@ +// Simple if statement +let temperature = 25 +if temperature > 30 { + print("It's hot outside!") +} + +// If-else statement +let score = 85 +if score >= 90 { + print("Excellent!") +} else if score >= 80 { + print("Good job!") +} else if score >= 70 { + print("Passing") +} else { + print("Needs improvement") +} + +// MARK: - Optional Binding with If + +// Using if let for optional binding +let possibleNumber = "123" +if let actualNumber = Int(possibleNumber) { + print("The string \"\(possibleNumber)\" has an integer value of \(actualNumber)") +} else { + print("The string \"\(possibleNumber)\" could not be converted to an integer") +} + +// Multiple optional bindings +let possibleName: String? = "John" +let possibleAge: Int? = 30 +if let name = possibleName, let age = possibleAge { + print("\(name) is \(age) years old") +} + +// MARK: - Guard Statements +func greet(person: [String: String]) { + guard let name = person["name"] else { + print("No name provided") + return + } + + guard let age = person["age"], let ageInt = Int(age) else { + print("Invalid age provided") + return + } + + print("Hello \(name), you are \(ageInt) years old") +} + +// MARK: - Switch Statements +// Switch with range matching +let approximateCount = 62 +let countedThings = "moons orbiting Saturn" +let naturalCount: String +switch approximateCount { +case 0: + naturalCount = "no" +case 1..<5: + naturalCount = "a few" +case 5..<12: + naturalCount = "several" +case 12..<100: + naturalCount = "dozens of" +case 100..<1000: + naturalCount = "hundreds of" +default: + naturalCount = "many" +} +print("There are \(naturalCount) \(countedThings).") + +// Switch with tuple matching +let somePoint = (1, 1) +switch somePoint { +case (0, 0): + print("(0, 0) is at the origin") +case (_, 0): + print("(\(somePoint.0), 0) is on the x-axis") +case (0, _): + print("(0, \(somePoint.1)) is on the y-axis") +case (-2...2, -2...2): + print("(\(somePoint.0), \(somePoint.1)) is inside the box") +default: + print("(\(somePoint.0), \(somePoint.1)) is outside of the box") +} + +// Switch with value binding +let anotherPoint = (2, 0) +switch anotherPoint { +case (let x, 0): + print("on the x-axis with an x value of \(x)") +case (0, let y): + print("on the y-axis with a y value of \(y)") +case let (x, y): + print("somewhere else at (\(x), \(y))") +} + +// MARK: - Fallthrough +// Using fallthrough in switch +let integerToDescribe = 5 +var description = "The number \(integerToDescribe) is" +switch integerToDescribe { +case 2, 3, 5, 7, 11, 13, 17, 19: + description += " a prime number, and also" + fallthrough +default: + description += " an integer." +} +print(description) + +// MARK: - Labeled Statements +// Using labeled statements with break +let finalSquare = 25 +var board = [Int](repeating: 0, count: finalSquare + 1) +board[03] = 8 +board[06] = 11 +board[09] = 9 +board[10] = 2 +board[14] = -10 +board[19] = -11 +board[22] = -2 +board[24] = -8 + +var square = 0 +var diceRoll = 0 +while square != finalSquare { + diceRoll += 1 + if diceRoll == 7 { diceRoll = 1 } + switch square + diceRoll { + case finalSquare: + break + case let newSquare where newSquare > finalSquare: + continue + default: + square += diceRoll + square += board[square] + } +} + +// MARK: - For Loops +// For-in loop with enumerated() to get index and value +print("\n=== For-in with Enumerated ===") +for (index, name) in names.enumerated() { + print("\(index): \(name)") +} + +// For-in loop with where clause +print("\n=== For-in with Where Clause ===") +let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] +for number in numbers where number % 2 == 0 { + print("Even number: \(number)") +} + + diff --git a/Examples/Completed/conditionals/dsl.swift b/Examples/Completed/conditionals/dsl.swift new file mode 100644 index 0000000..a666c2a --- /dev/null +++ b/Examples/Completed/conditionals/dsl.swift @@ -0,0 +1,222 @@ +Group { + Variable(.let, name: "temperature", equals: Literal.integer(25)) + .comment { + Line("Simple if statement") + } + If { + Infix("temperature", ">", 30) + } then: { + Call("print", "It's hot outside!") + } + Variable(.let, name: "score", equals: Literal.integer(85)) + .comment { + Line("If-else statement") + } + If { + Infix("score", ">=", 90) + } then: { + Call("print", "Excellent!") + } else: { + If { + Infix("score", ">=", 80) + } then: { + Call("print", "Good job!") + } + If { + Infix("score", ">=", 70) + } then: { + Call("print", "Passing") + } + Then { + Call("print", "Needs improvement") + } + } + + Variable(.let, name: "possibleNumber", equals: Literal.string("123")) + .comment { + Line("MARK: - Optional Binding with If") + Line("Using if let for optional binding") + } + If(Let("actualNumber", Init("Int") { + ParameterExp(name: "", value: "possibleNumber") + }), then: { + Call("print", "The string \"\\(possibleNumber)\" has an integer value of \\(actualNumber)") + }, else: { + Call("print", "The string \"\\(possibleNumber)\" could not be converted to an integer") + }) + + Variable(.let, name: "possibleName", type: "String?", equals: Literal.string("John")).withExplicitType() + .comment { + Line("Multiple optional bindings") + } + Variable(.let, name: "possibleAge", type: "Int?", equals: Literal.integer(30)).withExplicitType() + If { + Let("name", "possibleName") + Let("age", "possibleAge") + } then: { + Call("print", "\\(name) is \\(age) years old") + } + + Function("greet", parameters: [Parameter("person", type: "[String: String]")]) { + Guard { + Let("name", "person[\"name\"]") + } else: { + Call("print", "No name provided") + } + Guard { + Let("age", "person[\"age\"]") + Let("ageInt", Init("Int") { + ParameterExp(name: "", value: "age") + }) + } else: { + Call("print", "Invalid age provided") + } + Call("print", "Hello \\(name), you are \\(ageInt) years old") + } +}.comment { + Line("MARK: - Guard Statements") +} + +Variable(.let, name: "approximateCount", equals: Literal.integer(62)) + .comment { + Line("MARK: - Switch Statements") + Line("Switch with range matching") + } +Variable(.let, name: "countedThings", equals: Literal.string("moons orbiting Saturn")) +Variable(.let, name: "naturalCount", type: "String").withExplicitType() +Switch("approximateCount") { + SwitchCase(0) { + Assignment("naturalCount", Literal.string("no")) + } + SwitchCase(1..<5) { + Assignment("naturalCount", Literal.string("a few")) + } + SwitchCase(5..<12) { + Assignment("naturalCount", Literal.string("several")) + } + SwitchCase(12..<100) { + Assignment("naturalCount", Literal.string("dozens of")) + } + SwitchCase(100..<1000) { + Assignment("naturalCount", Literal.string("hundreds of")) + } + Default { + Assignment("naturalCount", Literal.string("many")) + } +} +Call("print", "There are \\(naturalCount) \\(countedThings).") +Variable(.let, name: "somePoint", type: "(Int, Int)", equals: VariableExp("(1, 1)"), explicitType: true) +.comment { + Line("Switch with tuple matching") +} +Switch("somePoint") { + SwitchCase(Tuple.pattern([0, 0])) { + Call("print", "(0, 0) is at the origin") + } + SwitchCase(Tuple.pattern([nil, 0])) { + Call("print", "(\(somePoint.0), 0) is on the x-axis") + } + SwitchCase(Tuple.pattern([0, nil])) { + Call("print", "(0, \(somePoint.1)) is on the y-axis") + } + SwitchCase(Tuple.pattern([(-2...2), (-2...2)])) { + Call("print", "(\(somePoint.0), \(somePoint.1)) is inside the box") + } + Default { + Call("print", "(\(somePoint.0), \(somePoint.1)) is outside of the box") + } +} +Variable(.let, name: "anotherPoint", type: "(Int, Int)", equals: VariableExp("(2, 0)"), explicitType: true) +.comment { + Line("Switch with value binding") +} +Switch("anotherPoint") { + SwitchCase(Tuple.pattern([.let("x"), 0])) { + Call("print", "on the x-axis with an x value of \(x)") + + } + SwitchCase(Tuple.pattern([0, .let("y")])) { + Call("print", "on the y-axis with a y value of \(y)") + + } + SwitchCase(Tuple.pattern([.let("x"), .let("y")])) { + Call("print", "somewhere else at (\(x), \(y))") + + } +} +Variable(.let, name: "integerToDescribe", equals: 5) +Variable(.var, name: "description", equals: "The number \(integerToDescribe) is") +Switch("integerToDescribe") { + SwitchCase(2, 3, 5, 7, 11, 13, 17, 19) { + PlusAssign("description", "a prime number, and also") + Fallthrough() + } + Default { + PlusAssign("description", "an integer.") + } +} +Call("print", "description") + +Variable(.let, name: "finalSquare", equals: 25) +Variable(.var, name: "board", equals: Literal.array(Array(repeating: Literal.integer(0), count: 26))) + +Infix("board[03]", "+=", 8) +Infix("board[06]", "+=", 11) +Infix("board[09]", "+=", 9) +Infix("board[10]", "+=", 2) +Infix("board[14]", "-=", 10) +Infix("board[19]", "-=", 11) +Infix("board[22]", "-=", 2) +Infix("board[24]", "-=", 8) + +Variable(.var, name: "square", equals: 0) +Variable(.var, name: "diceRoll", equals: 0) +While { + Infix("square", "!=", "finalSquare") +} then: { + Assignment("diceRoll", "+", 1) + If { + Infix("diceRoll", "==", 7) + } then: { + Assignment("diceRoll", 1) + } + Switch(Infix("square", "+", "diceRoll")) { + SwitchCase("finalSquare") { + Break() + } + SwitchCase(Infix("newSquare", ">", "finalSquare")) { + Continue() + } + Default { + Infix("square", "+=", "diceRoll") + Infix("square", "+=", "board[square]") + } + } +} + +Call("print", "\n=== For-in with Enumerated ===") +.comment { + Line("MARK: - For Loops") + Line("For-in loop with enumerated() to get index and value") +} +For { + Tuple.pattern([VariableExp("index"), VariableExp("name")]) +} in: { + VariableExp("names").call("enumerated") +} then: { + Call("print", "Index: \\(index), Name: \\(name)") +} + +Call("print", "\n=== For-in with Where Clause ===") +.comment { + Line("For-in loop with where clause") +} +For { + VariableExp("numbers") +} in: { + Literal.array([Literal.integer(1), Literal.integer(2), Literal.integer(3), Literal.integer(4), Literal.integer(5), Literal.integer(6), Literal.integer(7), Literal.integer(8), Literal.integer(9), Literal.integer(10)]) +} where: { + Infix("number", "%", 2) +} then: { + Call("print", "Even number: \\(number)") +} diff --git a/Examples/Completed/conditionals/syntax.json b/Examples/Completed/conditionals/syntax.json new file mode 100644 index 0000000..a1dc6cc --- /dev/null +++ b/Examples/Completed/conditionals/syntax.json @@ -0,0 +1 @@ +[{"range":{"endColumn":1,"startRow":2,"startColumn":1,"endRow":155},"text":"SourceFile","type":"other","id":0,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeShebang"},{"value":{"text":"nil"},"name":"shebang"},{"value":{"text":"nil"},"name":"unexpectedBetweenShebangAndStatements"},{"ref":"CodeBlockItemListSyntax","value":{"text":"CodeBlockItemListSyntax"},"name":"statements"},{"value":{"text":"nil"},"name":"unexpectedBetweenStatementsAndEndOfFileToken"},{"value":{"text":"","kind":"endOfFile"},"name":"endOfFileToken"},{"value":{"text":"nil"},"name":"unexpectedAfterEndOfFileToken"}]},{"range":{"startColumn":1,"endColumn":2,"startRow":2,"endRow":152},"text":"CodeBlockItemList","type":"collection","id":1,"parent":0,"structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"41"}}]},{"range":{"startRow":2,"endColumn":21,"endRow":2,"startColumn":1},"text":"CodeBlockItem","type":"other","id":2,"parent":1,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"VariableDeclSyntax"},"ref":"VariableDeclSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}]},{"parent":2,"type":"decl","id":3,"range":{"startColumn":1,"endRow":2,"endColumn":21,"startRow":2},"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","ref":"AttributeListSyntax","value":{"text":"AttributeListSyntax"}},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","ref":"DeclModifierListSyntax","value":{"text":"DeclModifierListSyntax"}},{"name":"unexpectedBetweenModifiersAndBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"text":"let","kind":"keyword(SwiftSyntax.Keyword.let)"}},{"name":"unexpectedBetweenBindingSpecifierAndBindings","value":{"text":"nil"}},{"name":"bindings","ref":"PatternBindingListSyntax","value":{"text":"PatternBindingListSyntax"}},{"name":"unexpectedAfterBindings","value":{"text":"nil"}}],"text":"VariableDecl"},{"parent":3,"type":"collection","id":4,"range":{"startRow":1,"endColumn":1,"endRow":1,"startColumn":1},"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"text":"AttributeList"},{"parent":3,"type":"collection","id":5,"range":{"startColumn":1,"endRow":1,"startRow":1,"endColumn":1},"structure":[{"value":{"text":"DeclModifierSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"text":"DeclModifierList"},{"structure":[],"range":{"endColumn":4,"startColumn":1,"endRow":2,"startRow":2},"text":"let","token":{"kind":"keyword(SwiftSyntax.Keyword.let)","leadingTrivia":"\/\/␣<\/span>Simple␣<\/span>if␣<\/span>statement<\/span>↲<\/span>","trailingTrivia":"␣<\/span>"},"parent":3,"id":6,"type":"other"},{"type":"collection","text":"PatternBindingList","range":{"startRow":2,"startColumn":5,"endRow":2,"endColumn":21},"id":7,"structure":[{"value":{"text":"PatternBindingSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"parent":3},{"type":"other","text":"PatternBinding","range":{"endColumn":21,"startRow":2,"startColumn":5,"endRow":2},"id":8,"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"ref":"IdentifierPatternSyntax","name":"pattern","value":{"text":"IdentifierPatternSyntax"}},{"name":"unexpectedBetweenPatternAndTypeAnnotation","value":{"text":"nil"}},{"name":"typeAnnotation","value":{"text":"nil"}},{"name":"unexpectedBetweenTypeAnnotationAndInitializer","value":{"text":"nil"}},{"ref":"InitializerClauseSyntax","name":"initializer","value":{"text":"InitializerClauseSyntax"}},{"name":"unexpectedBetweenInitializerAndAccessorBlock","value":{"text":"nil"}},{"name":"accessorBlock","value":{"text":"nil"}},{"name":"unexpectedBetweenAccessorBlockAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"parent":7},{"type":"pattern","text":"IdentifierPattern","range":{"endColumn":16,"endRow":2,"startColumn":5,"startRow":2},"id":9,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"text":"temperature","kind":"identifier("temperature")"},"name":"identifier"},{"name":"unexpectedAfterIdentifier","value":{"text":"nil"}}],"parent":8},{"structure":[],"range":{"endRow":2,"endColumn":16,"startRow":2,"startColumn":5},"text":"temperature","token":{"kind":"identifier("temperature")","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"parent":9,"id":10,"type":"other"},{"id":11,"type":"other","parent":8,"range":{"endRow":2,"endColumn":21,"startRow":2,"startColumn":17},"text":"InitializerClause","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeEqual"},{"value":{"text":"=","kind":"equal"},"name":"equal"},{"value":{"text":"nil"},"name":"unexpectedBetweenEqualAndValue"},{"value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax","name":"value"},{"value":{"text":"nil"},"name":"unexpectedAfterValue"}]},{"structure":[],"range":{"endColumn":18,"endRow":2,"startColumn":17,"startRow":2},"text":"=","token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"equal"},"parent":11,"id":12,"type":"other"},{"id":13,"type":"expr","parent":11,"range":{"endColumn":21,"endRow":2,"startColumn":19,"startRow":2},"text":"IntegerLiteralExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"25","kind":"integerLiteral("25")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}]},{"structure":[],"range":{"startRow":2,"startColumn":19,"endRow":2,"endColumn":21},"text":"25","token":{"kind":"integerLiteral("25")","trailingTrivia":"","leadingTrivia":""},"parent":13,"id":14,"type":"other"},{"id":15,"type":"other","parent":1,"range":{"startRow":3,"startColumn":1,"endRow":5,"endColumn":2},"text":"CodeBlockItem","structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","ref":"ExpressionStmtSyntax","value":{"text":"ExpressionStmtSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}]},{"id":16,"type":"other","range":{"endColumn":2,"endRow":5,"startRow":3,"startColumn":1},"parent":15,"text":"ExpressionStmt","structure":[{"name":"unexpectedBeforeExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"IfExprSyntax"},"ref":"IfExprSyntax"},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}]},{"id":17,"type":"expr","range":{"endRow":5,"startColumn":1,"startRow":3,"endColumn":2},"parent":16,"text":"IfExpr","structure":[{"name":"unexpectedBeforeIfKeyword","value":{"text":"nil"}},{"name":"ifKeyword","value":{"text":"if","kind":"keyword(SwiftSyntax.Keyword.if)"}},{"name":"unexpectedBetweenIfKeywordAndConditions","value":{"text":"nil"}},{"name":"conditions","value":{"text":"ConditionElementListSyntax"},"ref":"ConditionElementListSyntax"},{"name":"unexpectedBetweenConditionsAndBody","value":{"text":"nil"}},{"name":"body","value":{"text":"CodeBlockSyntax"},"ref":"CodeBlockSyntax"},{"name":"unexpectedBetweenBodyAndElseKeyword","value":{"text":"nil"}},{"name":"elseKeyword","value":{"text":"nil"}},{"name":"unexpectedBetweenElseKeywordAndElseBody","value":{"text":"nil"}},{"name":"elseBody","value":{"text":"nil"}},{"name":"unexpectedAfterElseBody","value":{"text":"nil"}}]},{"structure":[],"range":{"startRow":3,"startColumn":1,"endRow":3,"endColumn":3},"text":"if","token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.if)"},"parent":17,"id":18,"type":"other"},{"range":{"startRow":3,"startColumn":4,"endRow":3,"endColumn":20},"structure":[{"value":{"text":"ConditionElementSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","parent":17,"text":"ConditionElementList","id":19},{"range":{"endRow":3,"endColumn":20,"startRow":3,"startColumn":4},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCondition"},{"ref":"InfixOperatorExprSyntax","value":{"text":"InfixOperatorExprSyntax"},"name":"condition"},{"value":{"text":"nil"},"name":"unexpectedBetweenConditionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","parent":19,"text":"ConditionElement","id":20},{"range":{"endColumn":20,"endRow":3,"startRow":3,"startColumn":4},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftOperand"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"leftOperand"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftOperandAndOperator"},{"ref":"BinaryOperatorExprSyntax","value":{"text":"BinaryOperatorExprSyntax"},"name":"operator"},{"value":{"text":"nil"},"name":"unexpectedBetweenOperatorAndRightOperand"},{"ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"},"name":"rightOperand"},{"value":{"text":"nil"},"name":"unexpectedAfterRightOperand"}],"type":"expr","parent":20,"text":"InfixOperatorExpr","id":21},{"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"temperature","kind":"identifier("temperature")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"range":{"endRow":3,"startColumn":4,"endColumn":15,"startRow":3},"text":"DeclReferenceExpr","type":"expr","id":22,"parent":21},{"structure":[],"range":{"startColumn":4,"endRow":3,"endColumn":15,"startRow":3},"text":"temperature","token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"identifier("temperature")"},"parent":22,"id":23,"type":"other"},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOperator"},{"value":{"kind":"binaryOperator(">")","text":">"},"name":"operator"},{"value":{"text":"nil"},"name":"unexpectedAfterOperator"}],"range":{"startColumn":16,"endRow":3,"endColumn":17,"startRow":3},"text":"BinaryOperatorExpr","type":"expr","id":24,"parent":21},{"structure":[],"range":{"endColumn":17,"startRow":3,"startColumn":16,"endRow":3},"text":">","token":{"leadingTrivia":"","kind":"binaryOperator(">")","trailingTrivia":"␣<\/span>"},"parent":24,"id":25,"type":"other"},{"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"kind":"integerLiteral("30")","text":"30"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"range":{"endColumn":20,"startRow":3,"startColumn":18,"endRow":3},"text":"IntegerLiteralExpr","type":"expr","id":26,"parent":21},{"structure":[],"range":{"startColumn":18,"startRow":3,"endRow":3,"endColumn":20},"text":"30","token":{"kind":"integerLiteral("30")","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"parent":26,"id":27,"type":"other"},{"type":"other","text":"CodeBlock","id":28,"parent":17,"range":{"startColumn":21,"endRow":5,"endColumn":2,"startRow":3},"structure":[{"name":"unexpectedBeforeLeftBrace","value":{"text":"nil"}},{"name":"leftBrace","value":{"kind":"leftBrace","text":"{"}},{"name":"unexpectedBetweenLeftBraceAndStatements","value":{"text":"nil"}},{"name":"statements","value":{"text":"CodeBlockItemListSyntax"},"ref":"CodeBlockItemListSyntax"},{"name":"unexpectedBetweenStatementsAndRightBrace","value":{"text":"nil"}},{"name":"rightBrace","value":{"text":"}","kind":"rightBrace"}},{"name":"unexpectedAfterRightBrace","value":{"text":"nil"}}]},{"structure":[],"range":{"endColumn":22,"startRow":3,"startColumn":21,"endRow":3},"text":"{","token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftBrace"},"parent":28,"id":29,"type":"other"},{"type":"collection","text":"CodeBlockItemList","id":30,"parent":28,"range":{"endColumn":31,"startRow":4,"startColumn":5,"endRow":4},"structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"type":"other","text":"CodeBlockItem","id":31,"parent":30,"range":{"endColumn":31,"endRow":4,"startRow":4,"startColumn":5},"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"FunctionCallExprSyntax","name":"item","value":{"text":"FunctionCallExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}]},{"type":"expr","text":"FunctionCallExpr","id":32,"parent":31,"range":{"endColumn":31,"startRow":4,"endRow":4,"startColumn":5},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"calledExpression"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax","name":"arguments"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"value":{"text":"MultipleTrailingClosureElementListSyntax"},"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}]},{"id":33,"range":{"startRow":4,"startColumn":5,"endRow":4,"endColumn":10},"type":"expr","parent":32,"text":"DeclReferenceExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"print","kind":"identifier("print")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"structure":[],"range":{"startRow":4,"endColumn":10,"startColumn":5,"endRow":4},"text":"print","token":{"kind":"identifier("print")","trailingTrivia":"","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"parent":33,"id":34,"type":"other"},{"structure":[],"range":{"startRow":4,"endColumn":11,"startColumn":10,"endRow":4},"text":"(","token":{"kind":"leftParen","trailingTrivia":"","leadingTrivia":""},"parent":32,"id":35,"type":"other"},{"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"text":"LabeledExprList","parent":32,"range":{"startRow":4,"endColumn":30,"startColumn":11,"endRow":4},"id":36,"type":"collection"},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"ref":"StringLiteralExprSyntax","value":{"text":"StringLiteralExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"text":"LabeledExpr","parent":36,"range":{"startRow":4,"startColumn":11,"endRow":4,"endColumn":30},"id":37,"type":"other"},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"value":{"text":"StringLiteralSegmentListSyntax"},"name":"segments","ref":"StringLiteralSegmentListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"text":"StringLiteralExpr","parent":37,"range":{"startRow":4,"startColumn":11,"endRow":4,"endColumn":30},"id":38,"type":"expr"},{"structure":[],"range":{"endRow":4,"startRow":4,"startColumn":11,"endColumn":12},"text":""","token":{"kind":"stringQuote","leadingTrivia":"","trailingTrivia":""},"parent":38,"id":39,"type":"other"},{"parent":38,"type":"collection","text":"StringLiteralSegmentList","range":{"endRow":4,"startRow":4,"startColumn":12,"endColumn":29},"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"1"}}],"id":40},{"parent":40,"type":"other","text":"StringSegment","range":{"startRow":4,"endRow":4,"startColumn":12,"endColumn":29},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"It's hot outside!","kind":"stringSegment("It\\'s hot outside!")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"id":41},{"structure":[],"range":{"startRow":4,"endRow":4,"endColumn":29,"startColumn":12},"text":"It's␣<\/span>hot␣<\/span>outside!","token":{"leadingTrivia":"","kind":"stringSegment("It\\'s hot outside!")","trailingTrivia":""},"parent":41,"id":42,"type":"other"},{"structure":[],"range":{"startRow":4,"endRow":4,"endColumn":30,"startColumn":29},"text":""","token":{"leadingTrivia":"","kind":"stringQuote","trailingTrivia":""},"parent":38,"id":43,"type":"other"},{"structure":[],"range":{"startRow":4,"endRow":4,"endColumn":31,"startColumn":30},"text":")","token":{"leadingTrivia":"","kind":"rightParen","trailingTrivia":""},"parent":32,"id":44,"type":"other"},{"parent":32,"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"text":"MultipleTrailingClosureElementList","type":"collection","id":45,"range":{"startRow":4,"endRow":4,"endColumn":31,"startColumn":31}},{"structure":[],"range":{"startColumn":1,"endRow":5,"startRow":5,"endColumn":2},"text":"}","token":{"kind":"rightBrace","leadingTrivia":"↲<\/span>","trailingTrivia":""},"parent":28,"id":46,"type":"other"},{"parent":1,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"VariableDeclSyntax"},"ref":"VariableDeclSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"text":"CodeBlockItem","type":"other","id":47,"range":{"startColumn":1,"endRow":8,"startRow":8,"endColumn":15}},{"parent":47,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttributes"},{"ref":"AttributeListSyntax","value":{"text":"AttributeListSyntax"},"name":"attributes"},{"value":{"text":"nil"},"name":"unexpectedBetweenAttributesAndModifiers"},{"ref":"DeclModifierListSyntax","value":{"text":"DeclModifierListSyntax"},"name":"modifiers"},{"value":{"text":"nil"},"name":"unexpectedBetweenModifiersAndBindingSpecifier"},{"value":{"kind":"keyword(SwiftSyntax.Keyword.let)","text":"let"},"name":"bindingSpecifier"},{"value":{"text":"nil"},"name":"unexpectedBetweenBindingSpecifierAndBindings"},{"value":{"text":"PatternBindingListSyntax"},"ref":"PatternBindingListSyntax","name":"bindings"},{"value":{"text":"nil"},"name":"unexpectedAfterBindings"}],"text":"VariableDecl","type":"decl","id":48,"range":{"startRow":8,"endRow":8,"endColumn":15,"startColumn":1}},{"range":{"endRow":5,"endColumn":2,"startColumn":2,"startRow":5},"text":"AttributeList","id":49,"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"parent":48,"type":"collection"},{"range":{"startColumn":2,"endRow":5,"startRow":5,"endColumn":2},"text":"DeclModifierList","id":50,"structure":[{"value":{"text":"DeclModifierSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"parent":48,"type":"collection"},{"structure":[],"range":{"endColumn":4,"startColumn":1,"endRow":8,"startRow":8},"text":"let","token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>↲<\/span>\/\/␣<\/span>If-else␣<\/span>statement<\/span>↲<\/span>","kind":"keyword(SwiftSyntax.Keyword.let)"},"parent":48,"id":51,"type":"other"},{"range":{"endColumn":15,"startColumn":5,"endRow":8,"startRow":8},"text":"PatternBindingList","id":52,"structure":[{"name":"Element","value":{"text":"PatternBindingSyntax"}},{"name":"Count","value":{"text":"1"}}],"parent":48,"type":"collection"},{"range":{"startRow":8,"endRow":8,"startColumn":5,"endColumn":15},"text":"PatternBinding","id":53,"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"name":"pattern","value":{"text":"IdentifierPatternSyntax"},"ref":"IdentifierPatternSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTypeAnnotation"},{"value":{"text":"nil"},"name":"typeAnnotation"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAnnotationAndInitializer"},{"value":{"text":"InitializerClauseSyntax"},"name":"initializer","ref":"InitializerClauseSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenInitializerAndAccessorBlock"},{"value":{"text":"nil"},"name":"accessorBlock"},{"value":{"text":"nil"},"name":"unexpectedBetweenAccessorBlockAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"parent":52,"type":"other"},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"kind":"identifier("score")","text":"score"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"id":54,"parent":53,"text":"IdentifierPattern","range":{"endRow":8,"endColumn":10,"startRow":8,"startColumn":5},"type":"pattern"},{"structure":[],"range":{"endRow":8,"startColumn":5,"endColumn":10,"startRow":8},"text":"score","token":{"trailingTrivia":"␣<\/span>","kind":"identifier("score")","leadingTrivia":""},"parent":54,"id":55,"type":"other"},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeEqual"},{"value":{"kind":"equal","text":"="},"name":"equal"},{"value":{"text":"nil"},"name":"unexpectedBetweenEqualAndValue"},{"name":"value","ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedAfterValue","value":{"text":"nil"}}],"id":56,"parent":53,"text":"InitializerClause","range":{"endRow":8,"startColumn":11,"endColumn":15,"startRow":8},"type":"other"},{"structure":[],"range":{"startColumn":11,"endColumn":12,"startRow":8,"endRow":8},"text":"=","token":{"kind":"equal","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"parent":56,"id":57,"type":"other"},{"range":{"startColumn":13,"endColumn":15,"startRow":8,"endRow":8},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"85","kind":"integerLiteral("85")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr","parent":56,"text":"IntegerLiteralExpr","id":58},{"id":59,"range":{"startColumn":13,"endRow":8,"startRow":8,"endColumn":15},"structure":[],"parent":58,"text":"85","type":"other","token":{"leadingTrivia":"","kind":"integerLiteral("85")","trailingTrivia":""}},{"range":{"startColumn":1,"endRow":17,"startRow":9,"endColumn":2},"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"ExpressionStmtSyntax"},"ref":"ExpressionStmtSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"type":"other","parent":1,"text":"CodeBlockItem","id":60},{"range":{"startRow":9,"startColumn":1,"endColumn":2,"endRow":17},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"value":{"text":"IfExprSyntax"},"name":"expression","ref":"IfExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterExpression"}],"type":"other","parent":60,"text":"ExpressionStmt","id":61},{"id":62,"structure":[{"name":"unexpectedBeforeIfKeyword","value":{"text":"nil"}},{"name":"ifKeyword","value":{"kind":"keyword(SwiftSyntax.Keyword.if)","text":"if"}},{"name":"unexpectedBetweenIfKeywordAndConditions","value":{"text":"nil"}},{"name":"conditions","value":{"text":"ConditionElementListSyntax"},"ref":"ConditionElementListSyntax"},{"name":"unexpectedBetweenConditionsAndBody","value":{"text":"nil"}},{"name":"body","value":{"text":"CodeBlockSyntax"},"ref":"CodeBlockSyntax"},{"name":"unexpectedBetweenBodyAndElseKeyword","value":{"text":"nil"}},{"name":"elseKeyword","value":{"text":"else","kind":"keyword(SwiftSyntax.Keyword.else)"}},{"name":"unexpectedBetweenElseKeywordAndElseBody","value":{"text":"nil"}},{"name":"elseBody","value":{"text":"IfExprSyntax"},"ref":"IfExprSyntax"},{"name":"unexpectedAfterElseBody","value":{"text":"nil"}}],"type":"expr","parent":61,"text":"IfExpr","range":{"startColumn":1,"startRow":9,"endRow":17,"endColumn":2}},{"id":63,"range":{"startColumn":1,"endColumn":3,"startRow":9,"endRow":9},"structure":[],"parent":62,"text":"if","type":"other","token":{"leadingTrivia":"↲<\/span>","kind":"keyword(SwiftSyntax.Keyword.if)","trailingTrivia":"␣<\/span>"}},{"id":64,"structure":[{"value":{"text":"ConditionElementSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","parent":62,"text":"ConditionElementList","range":{"startColumn":4,"endColumn":15,"startRow":9,"endRow":9}},{"id":65,"structure":[{"name":"unexpectedBeforeCondition","value":{"text":"nil"}},{"value":{"text":"InfixOperatorExprSyntax"},"ref":"InfixOperatorExprSyntax","name":"condition"},{"value":{"text":"nil"},"name":"unexpectedBetweenConditionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","parent":64,"text":"ConditionElement","range":{"endColumn":15,"startRow":9,"startColumn":4,"endRow":9}},{"text":"InfixOperatorExpr","type":"expr","id":66,"range":{"startColumn":4,"endRow":9,"startRow":9,"endColumn":15},"structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"name":"leftOperand","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenLeftOperandAndOperator","value":{"text":"nil"}},{"name":"operator","ref":"BinaryOperatorExprSyntax","value":{"text":"BinaryOperatorExprSyntax"}},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"name":"rightOperand","ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}],"parent":65},{"text":"DeclReferenceExpr","type":"expr","id":67,"range":{"endColumn":9,"endRow":9,"startRow":9,"startColumn":4},"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("score")","text":"score"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"parent":66},{"id":68,"range":{"endColumn":9,"startRow":9,"endRow":9,"startColumn":4},"structure":[],"text":"score","parent":67,"type":"other","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"identifier("score")"}},{"range":{"endColumn":12,"startRow":9,"endRow":9,"startColumn":10},"structure":[{"name":"unexpectedBeforeOperator","value":{"text":"nil"}},{"name":"operator","value":{"text":">=","kind":"binaryOperator(">=")"}},{"name":"unexpectedAfterOperator","value":{"text":"nil"}}],"type":"expr","text":"BinaryOperatorExpr","id":69,"parent":66},{"id":70,"range":{"startRow":9,"startColumn":10,"endColumn":12,"endRow":9},"structure":[],"text":">=","parent":69,"type":"other","token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"binaryOperator(">=")"}},{"range":{"startRow":9,"startColumn":13,"endColumn":15,"endRow":9},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"90","kind":"integerLiteral("90")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr","text":"IntegerLiteralExpr","id":71,"parent":66},{"id":72,"range":{"startColumn":13,"startRow":9,"endRow":9,"endColumn":15},"structure":[],"text":"90","parent":71,"type":"other","token":{"kind":"integerLiteral("90")","trailingTrivia":"␣<\/span>","leadingTrivia":""}},{"range":{"startColumn":16,"startRow":9,"endRow":11,"endColumn":2},"structure":[{"name":"unexpectedBeforeLeftBrace","value":{"text":"nil"}},{"name":"leftBrace","value":{"kind":"leftBrace","text":"{"}},{"name":"unexpectedBetweenLeftBraceAndStatements","value":{"text":"nil"}},{"name":"statements","value":{"text":"CodeBlockItemListSyntax"},"ref":"CodeBlockItemListSyntax"},{"name":"unexpectedBetweenStatementsAndRightBrace","value":{"text":"nil"}},{"name":"rightBrace","value":{"text":"}","kind":"rightBrace"}},{"name":"unexpectedAfterRightBrace","value":{"text":"nil"}}],"type":"other","text":"CodeBlock","id":73,"parent":62},{"id":74,"range":{"startRow":9,"endColumn":17,"endRow":9,"startColumn":16},"parent":73,"structure":[],"text":"{","type":"other","token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftBrace"}},{"parent":73,"id":75,"structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","range":{"startRow":10,"endColumn":24,"endRow":10,"startColumn":5},"text":"CodeBlockItemList"},{"parent":75,"id":76,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"FunctionCallExprSyntax","name":"item","value":{"text":"FunctionCallExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"type":"other","range":{"startColumn":5,"startRow":10,"endColumn":24,"endRow":10},"text":"CodeBlockItem"},{"parent":76,"id":77,"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"name":"arguments","ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"}},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"value":{"text":"MultipleTrailingClosureElementListSyntax"},"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}],"type":"expr","range":{"endRow":10,"endColumn":24,"startRow":10,"startColumn":5},"text":"FunctionCallExpr"},{"text":"DeclReferenceExpr","structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("print")","text":"print"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"parent":77,"type":"expr","id":78,"range":{"startRow":10,"startColumn":5,"endRow":10,"endColumn":10}},{"id":79,"range":{"endRow":10,"startColumn":5,"endColumn":10,"startRow":10},"structure":[],"text":"print","parent":78,"type":"other","token":{"kind":"identifier("print")","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":""}},{"id":80,"range":{"endRow":10,"startColumn":10,"endColumn":11,"startRow":10},"structure":[],"text":"(","parent":77,"type":"other","token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""}},{"text":"LabeledExprList","structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"parent":77,"type":"collection","id":81,"range":{"endRow":10,"startColumn":11,"endColumn":23,"startRow":10}},{"range":{"startColumn":11,"endColumn":23,"endRow":10,"startRow":10},"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other","id":82,"text":"LabeledExpr","parent":81},{"range":{"endColumn":23,"startRow":10,"endRow":10,"startColumn":11},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"ref":"StringLiteralSegmentListSyntax","value":{"text":"StringLiteralSegmentListSyntax"},"name":"segments"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"name":"closingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"type":"expr","id":83,"text":"StringLiteralExpr","parent":82},{"id":84,"range":{"endColumn":12,"endRow":10,"startRow":10,"startColumn":11},"structure":[],"parent":83,"text":""","type":"other","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"}},{"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","parent":83,"id":85,"text":"StringLiteralSegmentList","range":{"endColumn":22,"endRow":10,"startRow":10,"startColumn":12}},{"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"kind":"stringSegment("Excellent!")","text":"Excellent!"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"type":"other","parent":85,"id":86,"text":"StringSegment","range":{"startColumn":12,"endRow":10,"startRow":10,"endColumn":22}},{"id":87,"range":{"endColumn":22,"endRow":10,"startColumn":12,"startRow":10},"structure":[],"parent":86,"text":"Excellent!","type":"other","token":{"kind":"stringSegment("Excellent!")","leadingTrivia":"","trailingTrivia":""}},{"id":88,"range":{"endColumn":23,"endRow":10,"startColumn":22,"startRow":10},"structure":[],"parent":83,"text":""","type":"other","token":{"kind":"stringQuote","leadingTrivia":"","trailingTrivia":""}},{"id":89,"range":{"endColumn":24,"endRow":10,"startColumn":23,"startRow":10},"structure":[],"parent":77,"text":")","type":"other","token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":""}},{"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection","parent":77,"id":90,"text":"MultipleTrailingClosureElementList","range":{"endColumn":24,"endRow":10,"startColumn":24,"startRow":10}},{"id":91,"range":{"endRow":11,"startRow":11,"startColumn":1,"endColumn":2},"parent":73,"text":"}","structure":[],"type":"other","token":{"kind":"rightBrace","leadingTrivia":"↲<\/span>","trailingTrivia":"␣<\/span>"}},{"id":92,"range":{"endRow":11,"startRow":11,"startColumn":3,"endColumn":7},"parent":62,"text":"else","structure":[],"type":"other","token":{"kind":"keyword(SwiftSyntax.Keyword.else)","leadingTrivia":"","trailingTrivia":"␣<\/span>"}},{"id":93,"type":"expr","text":"IfExpr","range":{"endRow":17,"startRow":11,"startColumn":8,"endColumn":2},"parent":62,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIfKeyword"},{"value":{"kind":"keyword(SwiftSyntax.Keyword.if)","text":"if"},"name":"ifKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenIfKeywordAndConditions"},{"value":{"text":"ConditionElementListSyntax"},"ref":"ConditionElementListSyntax","name":"conditions"},{"value":{"text":"nil"},"name":"unexpectedBetweenConditionsAndBody"},{"value":{"text":"CodeBlockSyntax"},"ref":"CodeBlockSyntax","name":"body"},{"value":{"text":"nil"},"name":"unexpectedBetweenBodyAndElseKeyword"},{"value":{"text":"else","kind":"keyword(SwiftSyntax.Keyword.else)"},"name":"elseKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenElseKeywordAndElseBody"},{"value":{"text":"IfExprSyntax"},"ref":"IfExprSyntax","name":"elseBody"},{"value":{"text":"nil"},"name":"unexpectedAfterElseBody"}]},{"id":94,"range":{"startColumn":8,"endRow":11,"endColumn":10,"startRow":11},"parent":93,"text":"if","structure":[],"type":"other","token":{"kind":"keyword(SwiftSyntax.Keyword.if)","trailingTrivia":"␣<\/span>","leadingTrivia":""}},{"id":95,"type":"collection","text":"ConditionElementList","range":{"startColumn":11,"endRow":11,"endColumn":22,"startRow":11},"parent":93,"structure":[{"name":"Element","value":{"text":"ConditionElementSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"parent":95,"text":"ConditionElement","id":96,"type":"other","range":{"startRow":11,"endColumn":22,"endRow":11,"startColumn":11},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCondition"},{"value":{"text":"InfixOperatorExprSyntax"},"name":"condition","ref":"InfixOperatorExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenConditionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}]},{"parent":96,"text":"InfixOperatorExpr","id":97,"type":"expr","range":{"startRow":11,"startColumn":11,"endRow":11,"endColumn":22},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftOperand"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"leftOperand"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftOperandAndOperator"},{"ref":"BinaryOperatorExprSyntax","value":{"text":"BinaryOperatorExprSyntax"},"name":"operator"},{"value":{"text":"nil"},"name":"unexpectedBetweenOperatorAndRightOperand"},{"ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"},"name":"rightOperand"},{"value":{"text":"nil"},"name":"unexpectedAfterRightOperand"}]},{"parent":97,"text":"DeclReferenceExpr","id":98,"type":"expr","range":{"startColumn":11,"endColumn":16,"startRow":11,"endRow":11},"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"score","kind":"identifier("score")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"id":99,"range":{"startRow":11,"startColumn":11,"endRow":11,"endColumn":16},"structure":[],"parent":98,"text":"score","type":"other","token":{"trailingTrivia":"␣<\/span>","kind":"identifier("score")","leadingTrivia":""}},{"id":100,"structure":[{"name":"unexpectedBeforeOperator","value":{"text":"nil"}},{"name":"operator","value":{"text":">=","kind":"binaryOperator(">=")"}},{"name":"unexpectedAfterOperator","value":{"text":"nil"}}],"parent":97,"text":"BinaryOperatorExpr","type":"expr","range":{"startRow":11,"startColumn":17,"endRow":11,"endColumn":19}},{"id":101,"range":{"endRow":11,"endColumn":19,"startRow":11,"startColumn":17},"structure":[],"parent":100,"text":">=","type":"other","token":{"kind":"binaryOperator(">=")","leadingTrivia":"","trailingTrivia":"␣<\/span>"}},{"id":102,"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"80","kind":"integerLiteral("80")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"parent":97,"text":"IntegerLiteralExpr","type":"expr","range":{"endRow":11,"endColumn":22,"startRow":11,"startColumn":20}},{"id":103,"range":{"endRow":11,"startRow":11,"startColumn":20,"endColumn":22},"structure":[],"parent":102,"text":"80","type":"other","token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"integerLiteral("80")"}},{"id":104,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftBrace"},{"value":{"kind":"leftBrace","text":"{"},"name":"leftBrace"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftBraceAndStatements"},{"value":{"text":"CodeBlockItemListSyntax"},"ref":"CodeBlockItemListSyntax","name":"statements"},{"value":{"text":"nil"},"name":"unexpectedBetweenStatementsAndRightBrace"},{"value":{"kind":"rightBrace","text":"}"},"name":"rightBrace"},{"value":{"text":"nil"},"name":"unexpectedAfterRightBrace"}],"parent":93,"text":"CodeBlock","type":"other","range":{"endRow":13,"startRow":11,"startColumn":23,"endColumn":2}},{"id":105,"range":{"endColumn":24,"startColumn":23,"startRow":11,"endRow":11},"parent":104,"text":"{","structure":[],"type":"other","token":{"leadingTrivia":"","kind":"leftBrace","trailingTrivia":""}},{"type":"collection","range":{"endColumn":23,"startColumn":5,"startRow":12,"endRow":12},"parent":104,"text":"CodeBlockItemList","id":106,"structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"type":"other","range":{"startRow":12,"startColumn":5,"endRow":12,"endColumn":23},"parent":106,"text":"CodeBlockItem","id":107,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"FunctionCallExprSyntax","value":{"text":"FunctionCallExprSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}]},{"type":"expr","range":{"startColumn":5,"endRow":12,"startRow":12,"endColumn":23},"parent":107,"text":"FunctionCallExpr","id":108,"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax","name":"arguments"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"value":{"text":"MultipleTrailingClosureElementListSyntax"},"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}]},{"id":109,"type":"expr","parent":108,"range":{"startColumn":5,"startRow":12,"endColumn":10,"endRow":12},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("print")","text":"print"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"text":"DeclReferenceExpr"},{"id":110,"range":{"endRow":12,"endColumn":10,"startColumn":5,"startRow":12},"parent":109,"structure":[],"text":"print","type":"other","token":{"trailingTrivia":"","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","kind":"identifier("print")"}},{"id":111,"range":{"endRow":12,"endColumn":11,"startColumn":10,"startRow":12},"structure":[],"text":"(","parent":108,"type":"other","token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"}},{"parent":108,"text":"LabeledExprList","range":{"endRow":12,"endColumn":22,"startRow":12,"startColumn":11},"id":112,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection"},{"parent":112,"text":"LabeledExpr","range":{"startRow":12,"endColumn":22,"endRow":12,"startColumn":11},"id":113,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other"},{"parent":113,"text":"StringLiteralExpr","range":{"endRow":12,"endColumn":22,"startColumn":11,"startRow":12},"id":114,"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"value":{"text":"StringLiteralSegmentListSyntax"},"ref":"StringLiteralSegmentListSyntax","name":"segments"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"type":"expr"},{"id":115,"type":"other","text":""","token":{"trailingTrivia":"","kind":"stringQuote","leadingTrivia":""},"structure":[],"parent":114,"range":{"startColumn":11,"endColumn":12,"startRow":12,"endRow":12}},{"id":116,"type":"collection","structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"1"}}],"text":"StringLiteralSegmentList","parent":114,"range":{"startColumn":12,"endColumn":21,"startRow":12,"endRow":12}},{"id":117,"type":"other","structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":"Good job!","kind":"stringSegment("Good job!")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"text":"StringSegment","parent":116,"range":{"startRow":12,"endRow":12,"startColumn":12,"endColumn":21}},{"id":118,"type":"other","text":"Good␣<\/span>job!","token":{"kind":"stringSegment("Good job!")","leadingTrivia":"","trailingTrivia":""},"structure":[],"parent":117,"range":{"startColumn":12,"endRow":12,"endColumn":21,"startRow":12}},{"id":119,"type":"other","text":""","token":{"kind":"stringQuote","leadingTrivia":"","trailingTrivia":""},"structure":[],"parent":114,"range":{"startColumn":21,"endRow":12,"endColumn":22,"startRow":12}},{"id":120,"text":")","type":"other","token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":""},"structure":[],"parent":108,"range":{"startRow":12,"startColumn":22,"endColumn":23,"endRow":12}},{"parent":108,"range":{"endRow":12,"startRow":12,"endColumn":23,"startColumn":23},"type":"collection","id":121,"text":"MultipleTrailingClosureElementList","structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}]},{"id":122,"type":"other","text":"}","token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"␣<\/span>","kind":"rightBrace"},"structure":[],"parent":104,"range":{"startRow":13,"startColumn":1,"endColumn":2,"endRow":13}},{"id":123,"type":"other","text":"else","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.else)"},"structure":[],"parent":93,"range":{"startRow":13,"startColumn":3,"endColumn":7,"endRow":13}},{"parent":93,"range":{"startRow":13,"startColumn":8,"endColumn":2,"endRow":17},"type":"expr","id":124,"text":"IfExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIfKeyword"},{"value":{"text":"if","kind":"keyword(SwiftSyntax.Keyword.if)"},"name":"ifKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenIfKeywordAndConditions"},{"value":{"text":"ConditionElementListSyntax"},"name":"conditions","ref":"ConditionElementListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenConditionsAndBody"},{"value":{"text":"CodeBlockSyntax"},"name":"body","ref":"CodeBlockSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenBodyAndElseKeyword"},{"value":{"kind":"keyword(SwiftSyntax.Keyword.else)","text":"else"},"name":"elseKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenElseKeywordAndElseBody"},{"value":{"text":"CodeBlockSyntax"},"name":"elseBody","ref":"CodeBlockSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterElseBody"}]},{"id":125,"type":"other","text":"if","token":{"kind":"keyword(SwiftSyntax.Keyword.if)","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"structure":[],"parent":124,"range":{"endRow":13,"endColumn":10,"startColumn":8,"startRow":13}},{"range":{"startRow":13,"startColumn":11,"endColumn":22,"endRow":13},"type":"collection","structure":[{"name":"Element","value":{"text":"ConditionElementSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":126,"text":"ConditionElementList","parent":124},{"range":{"startRow":13,"startColumn":11,"endColumn":22,"endRow":13},"type":"other","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCondition"},{"ref":"InfixOperatorExprSyntax","value":{"text":"InfixOperatorExprSyntax"},"name":"condition"},{"value":{"text":"nil"},"name":"unexpectedBetweenConditionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"id":127,"text":"ConditionElement","parent":126},{"range":{"startRow":13,"endRow":13,"startColumn":11,"endColumn":22},"type":"expr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftOperand"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"leftOperand"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftOperandAndOperator"},{"ref":"BinaryOperatorExprSyntax","value":{"text":"BinaryOperatorExprSyntax"},"name":"operator"},{"value":{"text":"nil"},"name":"unexpectedBetweenOperatorAndRightOperand"},{"ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"},"name":"rightOperand"},{"value":{"text":"nil"},"name":"unexpectedAfterRightOperand"}],"id":128,"text":"InfixOperatorExpr","parent":127},{"range":{"endRow":13,"endColumn":16,"startRow":13,"startColumn":11},"type":"expr","structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("score")","text":"score"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":129,"text":"DeclReferenceExpr","parent":128},{"id":130,"text":"score","type":"other","token":{"leadingTrivia":"","kind":"identifier("score")","trailingTrivia":"␣<\/span>"},"structure":[],"parent":129,"range":{"endRow":13,"startColumn":11,"startRow":13,"endColumn":16}},{"text":"BinaryOperatorExpr","range":{"endRow":13,"startColumn":17,"startRow":13,"endColumn":19},"id":131,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOperator"},{"value":{"kind":"binaryOperator(">=")","text":">="},"name":"operator"},{"value":{"text":"nil"},"name":"unexpectedAfterOperator"}],"type":"expr","parent":128},{"id":132,"text":">=","type":"other","token":{"trailingTrivia":"␣<\/span>","kind":"binaryOperator(">=")","leadingTrivia":""},"structure":[],"parent":131,"range":{"endColumn":19,"startRow":13,"startColumn":17,"endRow":13}},{"text":"IntegerLiteralExpr","range":{"endColumn":22,"startRow":13,"startColumn":20,"endRow":13},"id":133,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"70","kind":"integerLiteral("70")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr","parent":128},{"id":134,"text":"70","type":"other","token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"integerLiteral("70")"},"structure":[],"parent":133,"range":{"startRow":13,"endRow":13,"endColumn":22,"startColumn":20}},{"text":"CodeBlock","range":{"startRow":13,"endRow":15,"endColumn":2,"startColumn":23},"id":135,"structure":[{"name":"unexpectedBeforeLeftBrace","value":{"text":"nil"}},{"name":"leftBrace","value":{"text":"{","kind":"leftBrace"}},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftBraceAndStatements"},{"value":{"text":"CodeBlockItemListSyntax"},"name":"statements","ref":"CodeBlockItemListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenStatementsAndRightBrace"},{"value":{"text":"}","kind":"rightBrace"},"name":"rightBrace"},{"value":{"text":"nil"},"name":"unexpectedAfterRightBrace"}],"type":"other","parent":124},{"id":136,"text":"{","type":"other","token":{"kind":"leftBrace","leadingTrivia":"","trailingTrivia":""},"structure":[],"parent":135,"range":{"endColumn":24,"startColumn":23,"startRow":13,"endRow":13}},{"id":137,"text":"CodeBlockItemList","range":{"endColumn":21,"startColumn":5,"startRow":14,"endRow":14},"structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","parent":135},{"id":138,"text":"CodeBlockItem","range":{"endColumn":21,"startRow":14,"startColumn":5,"endRow":14},"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"FunctionCallExprSyntax"},"ref":"FunctionCallExprSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"type":"other","parent":137},{"id":139,"text":"FunctionCallExpr","range":{"startRow":14,"endColumn":21,"endRow":14,"startColumn":5},"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"kind":"leftParen","text":"("},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax","name":"arguments"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"value":{"text":"MultipleTrailingClosureElementListSyntax"},"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}],"type":"expr","parent":138},{"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("print")","text":"print"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":140,"parent":139,"text":"DeclReferenceExpr","type":"expr","range":{"startRow":14,"startColumn":5,"endColumn":10,"endRow":14}},{"id":141,"text":"print","type":"other","token":{"kind":"identifier("print")","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":""},"structure":[],"parent":140,"range":{"endRow":14,"endColumn":10,"startRow":14,"startColumn":5}},{"id":142,"type":"other","text":"(","token":{"leadingTrivia":"","kind":"leftParen","trailingTrivia":""},"structure":[],"parent":139,"range":{"startRow":14,"endColumn":11,"startColumn":10,"endRow":14}},{"type":"collection","text":"LabeledExprList","parent":139,"range":{"startRow":14,"endColumn":20,"startColumn":11,"endRow":14},"id":143,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"type":"other","text":"LabeledExpr","parent":143,"range":{"startRow":14,"startColumn":11,"endColumn":20,"endRow":14},"id":144,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"ref":"StringLiteralExprSyntax","name":"expression","value":{"text":"StringLiteralExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}]},{"type":"expr","text":"StringLiteralExpr","parent":144,"range":{"startRow":14,"startColumn":11,"endRow":14,"endColumn":20},"id":145,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"name":"openingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"ref":"StringLiteralSegmentListSyntax","name":"segments","value":{"text":"StringLiteralSegmentListSyntax"}},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}]},{"id":146,"text":""","type":"other","token":{"trailingTrivia":"","leadingTrivia":"","kind":"stringQuote"},"structure":[],"parent":145,"range":{"endColumn":12,"startColumn":11,"startRow":14,"endRow":14}},{"range":{"endColumn":19,"startColumn":12,"startRow":14,"endRow":14},"parent":145,"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"text":"StringLiteralSegmentList","type":"collection","id":147},{"range":{"startRow":14,"endRow":14,"startColumn":12,"endColumn":19},"parent":147,"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"kind":"stringSegment("Passing")","text":"Passing"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"text":"StringSegment","type":"other","id":148},{"id":149,"text":"Passing","type":"other","token":{"kind":"stringSegment("Passing")","leadingTrivia":"","trailingTrivia":""},"structure":[],"parent":148,"range":{"endRow":14,"endColumn":19,"startRow":14,"startColumn":12}},{"id":150,"type":"other","text":""","token":{"trailingTrivia":"","leadingTrivia":"","kind":"stringQuote"},"structure":[],"parent":145,"range":{"startColumn":19,"startRow":14,"endRow":14,"endColumn":20}},{"id":151,"type":"other","text":")","token":{"trailingTrivia":"","leadingTrivia":"","kind":"rightParen"},"structure":[],"parent":139,"range":{"startColumn":20,"startRow":14,"endRow":14,"endColumn":21}},{"range":{"startColumn":21,"startRow":14,"endRow":14,"endColumn":21},"type":"collection","parent":139,"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"text":"MultipleTrailingClosureElementList","id":152},{"id":153,"type":"other","text":"}","token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"␣<\/span>","kind":"rightBrace"},"structure":[],"parent":135,"range":{"startRow":15,"endRow":15,"startColumn":1,"endColumn":2}},{"id":154,"type":"other","text":"else","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.else)"},"structure":[],"parent":124,"range":{"startRow":15,"endRow":15,"startColumn":3,"endColumn":7}},{"range":{"startRow":15,"endRow":17,"startColumn":8,"endColumn":2},"type":"other","parent":124,"structure":[{"name":"unexpectedBeforeLeftBrace","value":{"text":"nil"}},{"name":"leftBrace","value":{"kind":"leftBrace","text":"{"}},{"name":"unexpectedBetweenLeftBraceAndStatements","value":{"text":"nil"}},{"name":"statements","ref":"CodeBlockItemListSyntax","value":{"text":"CodeBlockItemListSyntax"}},{"name":"unexpectedBetweenStatementsAndRightBrace","value":{"text":"nil"}},{"name":"rightBrace","value":{"kind":"rightBrace","text":"}"}},{"name":"unexpectedAfterRightBrace","value":{"text":"nil"}}],"text":"CodeBlock","id":155},{"id":156,"type":"other","text":"{","token":{"trailingTrivia":"","kind":"leftBrace","leadingTrivia":""},"structure":[],"parent":155,"range":{"startRow":15,"endColumn":9,"startColumn":8,"endRow":15}},{"range":{"startRow":16,"endColumn":31,"startColumn":5,"endRow":16},"type":"collection","parent":155,"structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"1"}}],"text":"CodeBlockItemList","id":157},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"FunctionCallExprSyntax"},"ref":"FunctionCallExprSyntax","name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","id":158,"parent":157,"text":"CodeBlockItem","range":{"endRow":16,"startRow":16,"endColumn":31,"startColumn":5}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"name":"calledExpression","ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"value":{"text":"LabeledExprListSyntax"},"name":"arguments","ref":"LabeledExprListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"type":"expr","id":159,"parent":158,"text":"FunctionCallExpr","range":{"endRow":16,"startRow":16,"startColumn":5,"endColumn":31}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"print","kind":"identifier("print")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"parent":159,"type":"expr","id":160,"text":"DeclReferenceExpr","range":{"endColumn":10,"startColumn":5,"startRow":16,"endRow":16}},{"id":161,"type":"other","text":"print","token":{"trailingTrivia":"","kind":"identifier("print")","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"structure":[],"parent":160,"range":{"endRow":16,"startRow":16,"startColumn":5,"endColumn":10}},{"text":"(","range":{"endRow":16,"startRow":16,"startColumn":10,"endColumn":11},"parent":159,"type":"other","id":162,"structure":[],"token":{"trailingTrivia":"","kind":"leftParen","leadingTrivia":""}},{"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"parent":159,"type":"collection","id":163,"text":"LabeledExprList","range":{"endRow":16,"startRow":16,"startColumn":11,"endColumn":30}},{"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"StringLiteralExprSyntax"},"name":"expression","ref":"StringLiteralExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"parent":163,"type":"other","id":164,"text":"LabeledExpr","range":{"endColumn":30,"startColumn":11,"startRow":16,"endRow":16}},{"range":{"endRow":16,"startColumn":11,"endColumn":30,"startRow":16},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"value":{"text":"StringLiteralSegmentListSyntax"},"ref":"StringLiteralSegmentListSyntax","name":"segments"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"kind":"stringQuote","text":"""},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"type":"expr","id":165,"parent":164,"text":"StringLiteralExpr"},{"text":""","range":{"endRow":16,"endColumn":12,"startRow":16,"startColumn":11},"parent":165,"type":"other","id":166,"structure":[],"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"}},{"id":167,"range":{"endColumn":29,"startRow":16,"startColumn":12,"endRow":16},"parent":165,"text":"StringLiteralSegmentList","structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"1"}}],"type":"collection"},{"id":168,"range":{"endColumn":29,"startColumn":12,"endRow":16,"startRow":16},"parent":167,"text":"StringSegment","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"Needs improvement","kind":"stringSegment("Needs improvement")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other"},{"text":"Needs␣<\/span>improvement","range":{"startRow":16,"startColumn":12,"endColumn":29,"endRow":16},"parent":168,"type":"other","id":169,"structure":[],"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("Needs improvement")"}},{"text":""","range":{"startRow":16,"startColumn":29,"endColumn":30,"endRow":16},"parent":165,"type":"other","id":170,"structure":[],"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"}},{"text":")","range":{"startRow":16,"startColumn":30,"endColumn":31,"endRow":16},"parent":159,"type":"other","id":171,"structure":[],"token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"}},{"id":172,"range":{"startRow":16,"startColumn":31,"endColumn":31,"endRow":16},"parent":159,"text":"MultipleTrailingClosureElementList","structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"type":"collection"},{"text":"}","range":{"startColumn":1,"startRow":17,"endRow":17,"endColumn":2},"parent":155,"type":"other","id":173,"structure":[],"token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"","kind":"rightBrace"}},{"id":174,"range":{"startColumn":1,"startRow":22,"endRow":22,"endColumn":27},"parent":1,"text":"CodeBlockItem","structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","ref":"VariableDeclSyntax","value":{"text":"VariableDeclSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other"},{"id":175,"range":{"endRow":22,"endColumn":27,"startColumn":1,"startRow":22},"text":"VariableDecl","parent":174,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttributes"},{"ref":"AttributeListSyntax","value":{"text":"AttributeListSyntax"},"name":"attributes"},{"value":{"text":"nil"},"name":"unexpectedBetweenAttributesAndModifiers"},{"ref":"DeclModifierListSyntax","value":{"text":"DeclModifierListSyntax"},"name":"modifiers"},{"value":{"text":"nil"},"name":"unexpectedBetweenModifiersAndBindingSpecifier"},{"value":{"text":"let","kind":"keyword(SwiftSyntax.Keyword.let)"},"name":"bindingSpecifier"},{"value":{"text":"nil"},"name":"unexpectedBetweenBindingSpecifierAndBindings"},{"ref":"PatternBindingListSyntax","value":{"text":"PatternBindingListSyntax"},"name":"bindings"},{"value":{"text":"nil"},"name":"unexpectedAfterBindings"}],"type":"decl"},{"id":176,"range":{"endRow":17,"startRow":17,"endColumn":2,"startColumn":2},"text":"AttributeList","parent":175,"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection"},{"id":177,"range":{"startColumn":2,"endRow":17,"endColumn":2,"startRow":17},"text":"DeclModifierList","parent":175,"structure":[{"value":{"text":"DeclModifierSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection"},{"text":"let","range":{"endRow":22,"endColumn":4,"startRow":22,"startColumn":1},"parent":175,"type":"other","id":178,"structure":[],"token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>↲<\/span>\/\/␣<\/span>MARK:␣<\/span>-␣<\/span>Optional␣<\/span>Binding␣<\/span>with␣<\/span>If<\/span>↲<\/span>↲<\/span>\/\/␣<\/span>Using␣<\/span>if␣<\/span>let␣<\/span>for␣<\/span>optional␣<\/span>binding<\/span>↲<\/span>","kind":"keyword(SwiftSyntax.Keyword.let)"}},{"type":"collection","range":{"endRow":22,"endColumn":27,"startRow":22,"startColumn":5},"structure":[{"name":"Element","value":{"text":"PatternBindingSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":179,"text":"PatternBindingList","parent":175},{"type":"other","range":{"startColumn":5,"endColumn":27,"startRow":22,"endRow":22},"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"ref":"IdentifierPatternSyntax","name":"pattern","value":{"text":"IdentifierPatternSyntax"}},{"name":"unexpectedBetweenPatternAndTypeAnnotation","value":{"text":"nil"}},{"name":"typeAnnotation","value":{"text":"nil"}},{"name":"unexpectedBetweenTypeAnnotationAndInitializer","value":{"text":"nil"}},{"ref":"InitializerClauseSyntax","name":"initializer","value":{"text":"InitializerClauseSyntax"}},{"name":"unexpectedBetweenInitializerAndAccessorBlock","value":{"text":"nil"}},{"name":"accessorBlock","value":{"text":"nil"}},{"name":"unexpectedBetweenAccessorBlockAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":180,"text":"PatternBinding","parent":179},{"type":"pattern","range":{"startColumn":5,"endColumn":19,"startRow":22,"endRow":22},"structure":[{"name":"unexpectedBeforeIdentifier","value":{"text":"nil"}},{"value":{"kind":"identifier("possibleNumber")","text":"possibleNumber"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"id":181,"text":"IdentifierPattern","parent":180},{"text":"possibleNumber","range":{"endColumn":19,"endRow":22,"startColumn":5,"startRow":22},"parent":181,"type":"other","id":182,"structure":[],"token":{"kind":"identifier("possibleNumber")","leadingTrivia":"","trailingTrivia":"␣<\/span>"}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeEqual"},{"value":{"text":"=","kind":"equal"},"name":"equal"},{"value":{"text":"nil"},"name":"unexpectedBetweenEqualAndValue"},{"value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax","name":"value"},{"value":{"text":"nil"},"name":"unexpectedAfterValue"}],"range":{"endColumn":27,"endRow":22,"startColumn":20,"startRow":22},"parent":180,"type":"other","id":183,"text":"InitializerClause"},{"text":"=","range":{"endRow":22,"endColumn":21,"startColumn":20,"startRow":22},"parent":183,"type":"other","id":184,"structure":[],"token":{"trailingTrivia":"␣<\/span>","kind":"equal","leadingTrivia":""}},{"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"kind":"stringQuote","text":"""}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"ref":"StringLiteralSegmentListSyntax","name":"segments","value":{"text":"StringLiteralSegmentListSyntax"}},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"kind":"stringQuote","text":"""}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"range":{"endRow":22,"endColumn":27,"startColumn":22,"startRow":22},"parent":183,"type":"expr","id":185,"text":"StringLiteralExpr"},{"text":""","range":{"endRow":22,"startColumn":22,"endColumn":23,"startRow":22},"parent":185,"type":"other","id":186,"structure":[],"token":{"kind":"stringQuote","leadingTrivia":"","trailingTrivia":""}},{"parent":185,"range":{"endRow":22,"startColumn":23,"endColumn":26,"startRow":22},"text":"StringLiteralSegmentList","structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","id":187},{"parent":187,"range":{"startColumn":23,"endColumn":26,"endRow":22,"startRow":22},"text":"StringSegment","structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":"123","kind":"stringSegment("123")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"type":"other","id":188},{"text":"123","range":{"startColumn":23,"startRow":22,"endRow":22,"endColumn":26},"parent":188,"type":"other","id":189,"structure":[],"token":{"kind":"stringSegment("123")","leadingTrivia":"","trailingTrivia":""}},{"text":""","range":{"startColumn":26,"startRow":22,"endRow":22,"endColumn":27},"parent":185,"type":"other","id":190,"structure":[],"token":{"kind":"stringQuote","leadingTrivia":"","trailingTrivia":""}},{"parent":1,"range":{"startColumn":1,"startRow":23,"endRow":27,"endColumn":2},"text":"CodeBlockItem","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"ExpressionStmtSyntax","value":{"text":"ExpressionStmtSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","id":191},{"range":{"endRow":27,"startColumn":1,"startRow":23,"endColumn":2},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"value":{"text":"IfExprSyntax"},"ref":"IfExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedAfterExpression"}],"type":"other","parent":191,"text":"ExpressionStmt","id":192},{"range":{"startRow":23,"startColumn":1,"endRow":27,"endColumn":2},"structure":[{"name":"unexpectedBeforeIfKeyword","value":{"text":"nil"}},{"name":"ifKeyword","value":{"text":"if","kind":"keyword(SwiftSyntax.Keyword.if)"}},{"name":"unexpectedBetweenIfKeywordAndConditions","value":{"text":"nil"}},{"name":"conditions","ref":"ConditionElementListSyntax","value":{"text":"ConditionElementListSyntax"}},{"name":"unexpectedBetweenConditionsAndBody","value":{"text":"nil"}},{"name":"body","ref":"CodeBlockSyntax","value":{"text":"CodeBlockSyntax"}},{"name":"unexpectedBetweenBodyAndElseKeyword","value":{"text":"nil"}},{"name":"elseKeyword","value":{"text":"else","kind":"keyword(SwiftSyntax.Keyword.else)"}},{"name":"unexpectedBetweenElseKeywordAndElseBody","value":{"text":"nil"}},{"name":"elseBody","ref":"CodeBlockSyntax","value":{"text":"CodeBlockSyntax"}},{"name":"unexpectedAfterElseBody","value":{"text":"nil"}}],"type":"expr","parent":192,"text":"IfExpr","id":193},{"text":"if","range":{"endColumn":3,"startColumn":1,"endRow":23,"startRow":23},"parent":193,"type":"other","id":194,"structure":[],"token":{"leadingTrivia":"↲<\/span>","kind":"keyword(SwiftSyntax.Keyword.if)","trailingTrivia":"␣<\/span>"}},{"text":"ConditionElementList","structure":[{"value":{"text":"ConditionElementSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"parent":193,"range":{"endColumn":42,"startColumn":4,"endRow":23,"startRow":23},"type":"collection","id":195},{"text":"ConditionElement","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCondition"},{"ref":"OptionalBindingConditionSyntax","value":{"text":"OptionalBindingConditionSyntax"},"name":"condition"},{"value":{"text":"nil"},"name":"unexpectedBetweenConditionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"parent":195,"range":{"endRow":23,"endColumn":42,"startRow":23,"startColumn":4},"type":"other","id":196},{"text":"OptionalBindingCondition","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBindingSpecifier"},{"value":{"kind":"keyword(SwiftSyntax.Keyword.let)","text":"let"},"name":"bindingSpecifier"},{"value":{"text":"nil"},"name":"unexpectedBetweenBindingSpecifierAndPattern"},{"value":{"text":"IdentifierPatternSyntax"},"ref":"IdentifierPatternSyntax","name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTypeAnnotation"},{"value":{"text":"nil"},"name":"typeAnnotation"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAnnotationAndInitializer"},{"name":"initializer","ref":"InitializerClauseSyntax","value":{"text":"InitializerClauseSyntax"}},{"name":"unexpectedAfterInitializer","value":{"text":"nil"}}],"parent":196,"range":{"endColumn":42,"startRow":23,"endRow":23,"startColumn":4},"type":"other","id":197},{"text":"let","range":{"startRow":23,"startColumn":4,"endRow":23,"endColumn":7},"parent":197,"type":"other","id":198,"structure":[],"token":{"kind":"keyword(SwiftSyntax.Keyword.let)","trailingTrivia":"␣<\/span>","leadingTrivia":""}},{"range":{"startRow":23,"startColumn":8,"endRow":23,"endColumn":20},"parent":197,"text":"IdentifierPattern","id":199,"structure":[{"name":"unexpectedBeforeIdentifier","value":{"text":"nil"}},{"name":"identifier","value":{"kind":"identifier("actualNumber")","text":"actualNumber"}},{"name":"unexpectedAfterIdentifier","value":{"text":"nil"}}],"type":"pattern"},{"text":"actualNumber","range":{"endColumn":20,"startRow":23,"startColumn":8,"endRow":23},"parent":199,"type":"other","id":200,"structure":[],"token":{"trailingTrivia":"␣<\/span>","kind":"identifier("actualNumber")","leadingTrivia":""}},{"range":{"endColumn":42,"startRow":23,"startColumn":21,"endRow":23},"parent":197,"text":"InitializerClause","id":201,"structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"kind":"equal","text":"="}},{"name":"unexpectedBetweenEqualAndValue","value":{"text":"nil"}},{"ref":"FunctionCallExprSyntax","name":"value","value":{"text":"FunctionCallExprSyntax"}},{"name":"unexpectedAfterValue","value":{"text":"nil"}}],"type":"other"},{"text":"=","range":{"endRow":23,"endColumn":22,"startRow":23,"startColumn":21},"parent":201,"type":"other","id":202,"structure":[],"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"equal"}},{"range":{"endRow":23,"endColumn":42,"startRow":23,"startColumn":23},"parent":201,"text":"FunctionCallExpr","id":203,"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"kind":"leftParen","text":"("},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"},"name":"arguments"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"ref":"MultipleTrailingClosureElementListSyntax","value":{"text":"MultipleTrailingClosureElementListSyntax"},"name":"additionalTrailingClosures"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}],"type":"expr"},{"parent":203,"type":"expr","structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"Int","kind":"identifier("Int")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"text":"DeclReferenceExpr","range":{"startRow":23,"endRow":23,"startColumn":23,"endColumn":26},"id":204},{"text":"Int","range":{"startRow":23,"endRow":23,"startColumn":23,"endColumn":26},"parent":204,"type":"other","id":205,"structure":[],"token":{"trailingTrivia":"","kind":"identifier("Int")","leadingTrivia":""}},{"text":"(","range":{"endColumn":27,"startColumn":26,"endRow":23,"startRow":23},"parent":203,"type":"other","id":206,"structure":[],"token":{"trailingTrivia":"","kind":"leftParen","leadingTrivia":""}},{"type":"collection","range":{"endColumn":41,"startColumn":27,"endRow":23,"startRow":23},"id":207,"parent":203,"text":"LabeledExprList","structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"type":"other","range":{"endColumn":41,"endRow":23,"startColumn":27,"startRow":23},"id":208,"parent":207,"text":"LabeledExpr","structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"expression","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}]},{"type":"expr","range":{"endRow":23,"startRow":23,"startColumn":27,"endColumn":41},"id":209,"parent":208,"text":"DeclReferenceExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"possibleNumber","kind":"identifier("possibleNumber")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}]},{"text":"possibleNumber","range":{"startColumn":27,"endRow":23,"startRow":23,"endColumn":41},"parent":209,"type":"other","id":210,"structure":[],"token":{"kind":"identifier("possibleNumber")","trailingTrivia":"","leadingTrivia":""}},{"text":")","range":{"startColumn":41,"endRow":23,"startRow":23,"endColumn":42},"parent":203,"type":"other","id":211,"structure":[],"token":{"kind":"rightParen","trailingTrivia":"␣<\/span>","leadingTrivia":""}},{"range":{"startColumn":43,"endRow":23,"startRow":23,"endColumn":43},"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"parent":203,"type":"collection","id":212,"text":"MultipleTrailingClosureElementList"},{"range":{"startColumn":43,"endRow":25,"startRow":23,"endColumn":2},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftBrace"},{"value":{"kind":"leftBrace","text":"{"},"name":"leftBrace"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftBraceAndStatements"},{"ref":"CodeBlockItemListSyntax","value":{"text":"CodeBlockItemListSyntax"},"name":"statements"},{"value":{"text":"nil"},"name":"unexpectedBetweenStatementsAndRightBrace"},{"value":{"kind":"rightBrace","text":"}"},"name":"rightBrace"},{"value":{"text":"nil"},"name":"unexpectedAfterRightBrace"}],"parent":193,"type":"other","id":213,"text":"CodeBlock"},{"text":"{","range":{"startColumn":43,"endRow":23,"endColumn":44,"startRow":23},"parent":213,"type":"other","id":214,"structure":[],"token":{"trailingTrivia":"","kind":"leftBrace","leadingTrivia":""}},{"structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"1"}}],"parent":213,"type":"collection","id":215,"range":{"endColumn":86,"startRow":24,"startColumn":5,"endRow":24},"text":"CodeBlockItemList"},{"parent":215,"text":"CodeBlockItem","range":{"startRow":24,"startColumn":5,"endRow":24,"endColumn":86},"type":"other","structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"FunctionCallExprSyntax","name":"item","value":{"text":"FunctionCallExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":216},{"parent":216,"text":"FunctionCallExpr","range":{"startRow":24,"startColumn":5,"endRow":24,"endColumn":86},"type":"expr","structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"name":"arguments","value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax"},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"value":{"text":"MultipleTrailingClosureElementListSyntax"},"name":"additionalTrailingClosures","ref":"MultipleTrailingClosureElementListSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}],"id":217},{"id":218,"parent":217,"range":{"startRow":24,"startColumn":5,"endRow":24,"endColumn":10},"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"print","kind":"identifier("print")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"type":"expr","text":"DeclReferenceExpr"},{"range":{"startRow":24,"startColumn":5,"endRow":24,"endColumn":10},"id":219,"structure":[],"type":"other","text":"print","parent":218,"token":{"trailingTrivia":"","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","kind":"identifier("print")"}},{"range":{"startRow":24,"startColumn":10,"endRow":24,"endColumn":11},"id":220,"structure":[],"type":"other","text":"(","parent":217,"token":{"trailingTrivia":"","leadingTrivia":"","kind":"leftParen"}},{"id":221,"parent":217,"range":{"startRow":24,"startColumn":11,"endRow":24,"endColumn":85},"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection","text":"LabeledExprList"},{"id":222,"parent":221,"range":{"endColumn":85,"startRow":24,"startColumn":11,"endRow":24},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other","text":"LabeledExpr"},{"text":"StringLiteralExpr","type":"expr","parent":222,"range":{"startRow":24,"startColumn":11,"endColumn":85,"endRow":24},"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"kind":"stringQuote","text":"""}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"name":"segments","ref":"StringLiteralSegmentListSyntax","value":{"text":"StringLiteralSegmentListSyntax"}},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"id":223},{"range":{"endRow":24,"startColumn":11,"endColumn":12,"startRow":24},"type":"other","id":224,"structure":[],"text":""","parent":223,"token":{"kind":"stringQuote","trailingTrivia":"","leadingTrivia":""}},{"text":"StringLiteralSegmentList","type":"collection","id":225,"range":{"endRow":24,"startColumn":12,"endColumn":84,"startRow":24},"parent":223,"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"5"},"name":"Count"}]},{"text":"StringSegment","type":"other","id":226,"range":{"endColumn":25,"startRow":24,"startColumn":12,"endRow":24},"parent":225,"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":"The string \\"","kind":"stringSegment("The string \\\\\\"")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}]},{"range":{"endRow":24,"startRow":24,"endColumn":25,"startColumn":12},"type":"other","id":227,"structure":[],"text":"The␣<\/span>string␣<\/span>\\"","parent":226,"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("The string \\\\\\"")"}},{"text":"ExpressionSegment","type":"other","id":228,"range":{"endRow":24,"startRow":24,"endColumn":42,"startColumn":25},"parent":225,"structure":[{"name":"unexpectedBeforeBackslash","value":{"text":"nil"}},{"name":"backslash","value":{"kind":"backslash","text":"\\"}},{"name":"unexpectedBetweenBackslashAndPounds","value":{"text":"nil"}},{"name":"pounds","value":{"text":"nil"}},{"name":"unexpectedBetweenPoundsAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndExpressions","value":{"text":"nil"}},{"name":"expressions","value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax"},{"name":"unexpectedBetweenExpressionsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"kind":"rightParen","text":")"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}]},{"range":{"startColumn":25,"endColumn":26,"endRow":24,"startRow":24},"structure":[],"type":"other","id":229,"text":"\\","parent":228,"token":{"trailingTrivia":"","leadingTrivia":"","kind":"backslash"}},{"range":{"startColumn":26,"endColumn":27,"endRow":24,"startRow":24},"structure":[],"type":"other","id":230,"text":"(","parent":228,"token":{"trailingTrivia":"","leadingTrivia":"","kind":"leftParen"}},{"parent":228,"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","range":{"startColumn":27,"endColumn":41,"endRow":24,"startRow":24},"id":231,"text":"LabeledExprList"},{"parent":231,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other","range":{"startRow":24,"endColumn":41,"endRow":24,"startColumn":27},"id":232,"text":"LabeledExpr"},{"range":{"startRow":24,"endColumn":41,"startColumn":27,"endRow":24},"text":"DeclReferenceExpr","type":"expr","structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"possibleNumber","kind":"identifier("possibleNumber")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"parent":232,"id":233},{"range":{"startColumn":27,"endRow":24,"endColumn":41,"startRow":24},"type":"other","structure":[],"id":234,"text":"possibleNumber","parent":233,"token":{"leadingTrivia":"","kind":"identifier("possibleNumber")","trailingTrivia":""}},{"range":{"startColumn":41,"endRow":24,"endColumn":42,"startRow":24},"type":"other","structure":[],"id":235,"text":")","parent":228,"token":{"leadingTrivia":"","kind":"rightParen","trailingTrivia":""}},{"range":{"startColumn":42,"endRow":24,"endColumn":69,"startRow":24},"text":"StringSegment","type":"other","structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"kind":"stringSegment("\\\\\\" has an integer value of ")","text":"\\" has an integer value of "}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"parent":225,"id":236},{"range":{"startColumn":42,"endColumn":69,"startRow":24,"endRow":24},"type":"other","structure":[],"id":237,"text":"\\"␣<\/span>has␣<\/span>an␣<\/span>integer␣<\/span>value␣<\/span>of␣<\/span>","parent":236,"token":{"kind":"stringSegment("\\\\\\" has an integer value of ")","leadingTrivia":"","trailingTrivia":""}},{"range":{"startColumn":69,"endColumn":84,"startRow":24,"endRow":24},"text":"ExpressionSegment","type":"other","structure":[{"name":"unexpectedBeforeBackslash","value":{"text":"nil"}},{"name":"backslash","value":{"text":"\\","kind":"backslash"}},{"name":"unexpectedBetweenBackslashAndPounds","value":{"text":"nil"}},{"name":"pounds","value":{"text":"nil"}},{"value":{"text":"nil"},"name":"unexpectedBetweenPoundsAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndExpressions"},{"value":{"text":"LabeledExprListSyntax"},"name":"expressions","ref":"LabeledExprListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"parent":225,"id":238},{"range":{"endColumn":70,"startRow":24,"startColumn":69,"endRow":24},"structure":[],"type":"other","id":239,"text":"\\","parent":238,"token":{"kind":"backslash","trailingTrivia":"","leadingTrivia":""}},{"range":{"endColumn":71,"startRow":24,"startColumn":70,"endRow":24},"structure":[],"type":"other","id":240,"text":"(","parent":238,"token":{"kind":"leftParen","trailingTrivia":"","leadingTrivia":""}},{"text":"LabeledExprList","range":{"endColumn":83,"startRow":24,"startColumn":71,"endRow":24},"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","parent":238,"id":241},{"text":"LabeledExpr","range":{"endRow":24,"endColumn":83,"startRow":24,"startColumn":71},"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","parent":241,"id":242},{"text":"DeclReferenceExpr","id":243,"parent":242,"range":{"endRow":24,"endColumn":83,"startRow":24,"startColumn":71},"type":"expr","structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("actualNumber")","text":"actualNumber"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"range":{"endRow":24,"startRow":24,"startColumn":71,"endColumn":83},"id":244,"type":"other","structure":[],"text":"actualNumber","parent":243,"token":{"kind":"identifier("actualNumber")","trailingTrivia":"","leadingTrivia":""}},{"range":{"endRow":24,"startRow":24,"startColumn":83,"endColumn":84},"id":245,"type":"other","structure":[],"text":")","parent":238,"token":{"kind":"rightParen","trailingTrivia":"","leadingTrivia":""}},{"text":"StringSegment","id":246,"parent":225,"range":{"endRow":24,"startRow":24,"startColumn":84,"endColumn":84},"type":"other","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"","kind":"stringSegment("")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}]},{"range":{"startColumn":84,"endRow":24,"endColumn":84,"startRow":24},"id":247,"type":"other","structure":[],"text":"","parent":246,"token":{"kind":"stringSegment("")","leadingTrivia":"","trailingTrivia":""}},{"range":{"startColumn":84,"startRow":24,"endColumn":85,"endRow":24},"id":248,"structure":[],"type":"other","text":""","parent":223,"token":{"leadingTrivia":"","kind":"stringQuote","trailingTrivia":""}},{"range":{"startColumn":85,"startRow":24,"endColumn":86,"endRow":24},"id":249,"structure":[],"type":"other","text":")","parent":217,"token":{"leadingTrivia":"","kind":"rightParen","trailingTrivia":""}},{"parent":217,"id":250,"text":"MultipleTrailingClosureElementList","structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection","range":{"startColumn":86,"startRow":24,"endColumn":86,"endRow":24}},{"range":{"startColumn":1,"startRow":25,"endRow":25,"endColumn":2},"id":251,"structure":[],"type":"other","text":"}","parent":213,"token":{"kind":"rightBrace","leadingTrivia":"↲<\/span>","trailingTrivia":"␣<\/span>"}},{"range":{"startColumn":3,"startRow":25,"endRow":25,"endColumn":7},"id":252,"structure":[],"type":"other","text":"else","parent":193,"token":{"kind":"keyword(SwiftSyntax.Keyword.else)","leadingTrivia":"","trailingTrivia":"␣<\/span>"}},{"parent":193,"id":253,"text":"CodeBlock","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftBrace"},{"value":{"text":"{","kind":"leftBrace"},"name":"leftBrace"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftBraceAndStatements"},{"value":{"text":"CodeBlockItemListSyntax"},"name":"statements","ref":"CodeBlockItemListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenStatementsAndRightBrace"},{"value":{"text":"}","kind":"rightBrace"},"name":"rightBrace"},{"value":{"text":"nil"},"name":"unexpectedAfterRightBrace"}],"type":"other","range":{"startColumn":8,"startRow":25,"endRow":27,"endColumn":2}},{"range":{"startRow":25,"endColumn":9,"startColumn":8,"endRow":25},"id":254,"structure":[],"type":"other","text":"{","parent":253,"token":{"kind":"leftBrace","leadingTrivia":"","trailingTrivia":""}},{"parent":253,"id":255,"text":"CodeBlockItemList","structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection","range":{"startRow":26,"endColumn":83,"startColumn":5,"endRow":26}},{"range":{"endColumn":83,"startRow":26,"endRow":26,"startColumn":5},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"FunctionCallExprSyntax","value":{"text":"FunctionCallExprSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"parent":255,"text":"CodeBlockItem","type":"other","id":256},{"range":{"endRow":26,"startRow":26,"startColumn":5,"endColumn":83},"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"kind":"leftParen","text":"("}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"name":"arguments","value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax"},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"kind":"rightParen","text":")"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"name":"additionalTrailingClosures","ref":"MultipleTrailingClosureElementListSyntax","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"parent":256,"text":"FunctionCallExpr","type":"expr","id":257},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("print")","text":"print"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"id":258,"text":"DeclReferenceExpr","type":"expr","range":{"startRow":26,"endRow":26,"endColumn":10,"startColumn":5},"parent":257},{"range":{"endRow":26,"startRow":26,"endColumn":10,"startColumn":5},"structure":[],"id":259,"type":"other","text":"print","parent":258,"token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","kind":"identifier("print")","trailingTrivia":""}},{"range":{"endRow":26,"startRow":26,"endColumn":11,"startColumn":10},"structure":[],"id":260,"type":"other","text":"(","parent":257,"token":{"leadingTrivia":"","kind":"leftParen","trailingTrivia":""}},{"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":261,"text":"LabeledExprList","type":"collection","range":{"endRow":26,"startRow":26,"endColumn":82,"startColumn":11},"parent":257},{"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"StringLiteralExprSyntax"},"name":"expression","ref":"StringLiteralExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"id":262,"text":"LabeledExpr","type":"other","range":{"endRow":26,"endColumn":82,"startColumn":11,"startRow":26},"parent":261},{"type":"expr","id":263,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"value":{"text":"StringLiteralSegmentListSyntax"},"ref":"StringLiteralSegmentListSyntax","name":"segments"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"text":"StringLiteralExpr","range":{"startRow":26,"endRow":26,"startColumn":11,"endColumn":82},"parent":262},{"parent":263,"type":"other","range":{"endColumn":12,"startRow":26,"endRow":26,"startColumn":11},"id":264,"token":{"kind":"stringQuote","leadingTrivia":"","trailingTrivia":""},"structure":[],"text":"""},{"parent":263,"id":265,"range":{"startRow":26,"startColumn":12,"endColumn":81,"endRow":26},"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"3"},"name":"Count"}],"type":"collection","text":"StringLiteralSegmentList"},{"parent":265,"id":266,"range":{"startColumn":12,"endRow":26,"endColumn":25,"startRow":26},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"The string \\"","kind":"stringSegment("The string \\\\\\"")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","text":"StringSegment"},{"parent":266,"range":{"endColumn":25,"startColumn":12,"startRow":26,"endRow":26},"type":"other","id":267,"token":{"trailingTrivia":"","leadingTrivia":"","kind":"stringSegment("The string \\\\\\"")"},"structure":[],"text":"The␣<\/span>string␣<\/span>\\""},{"parent":265,"id":268,"range":{"endColumn":42,"startColumn":25,"startRow":26,"endRow":26},"structure":[{"name":"unexpectedBeforeBackslash","value":{"text":"nil"}},{"name":"backslash","value":{"kind":"backslash","text":"\\"}},{"name":"unexpectedBetweenBackslashAndPounds","value":{"text":"nil"}},{"name":"pounds","value":{"text":"nil"}},{"name":"unexpectedBetweenPoundsAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndExpressions","value":{"text":"nil"}},{"name":"expressions","value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax"},{"name":"unexpectedBetweenExpressionsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"kind":"rightParen","text":")"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}],"type":"other","text":"ExpressionSegment"},{"parent":268,"range":{"startRow":26,"endRow":26,"endColumn":26,"startColumn":25},"type":"other","id":269,"token":{"trailingTrivia":"","kind":"backslash","leadingTrivia":""},"structure":[],"text":"\\"},{"parent":268,"range":{"startRow":26,"endRow":26,"endColumn":27,"startColumn":26},"type":"other","id":270,"token":{"trailingTrivia":"","kind":"leftParen","leadingTrivia":""},"structure":[],"text":"("},{"parent":268,"id":271,"range":{"startRow":26,"endRow":26,"endColumn":41,"startColumn":27},"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","text":"LabeledExprList"},{"parent":271,"id":272,"range":{"startRow":26,"startColumn":27,"endColumn":41,"endRow":26},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"name":"expression","ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"LabeledExpr"},{"parent":272,"id":273,"range":{"endColumn":41,"startColumn":27,"startRow":26,"endRow":26},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"possibleNumber","kind":"identifier("possibleNumber")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","text":"DeclReferenceExpr"},{"parent":273,"type":"other","range":{"startColumn":27,"endRow":26,"endColumn":41,"startRow":26},"id":274,"token":{"leadingTrivia":"","kind":"identifier("possibleNumber")","trailingTrivia":""},"text":"possibleNumber","structure":[]},{"parent":268,"type":"other","range":{"startColumn":41,"endRow":26,"endColumn":42,"startRow":26},"id":275,"token":{"leadingTrivia":"","kind":"rightParen","trailingTrivia":""},"text":")","structure":[]},{"type":"other","parent":265,"text":"StringSegment","id":276,"range":{"startColumn":42,"endRow":26,"endColumn":81,"startRow":26},"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":"\\" could not be converted to an integer","kind":"stringSegment("\\\\\\" could not be converted to an integer")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}]},{"parent":276,"type":"other","range":{"startColumn":42,"endRow":26,"startRow":26,"endColumn":81},"id":277,"token":{"kind":"stringSegment("\\\\\\" could not be converted to an integer")","leadingTrivia":"","trailingTrivia":""},"text":"\\"␣<\/span>could␣<\/span>not␣<\/span>be␣<\/span>converted␣<\/span>to␣<\/span>an␣<\/span>integer","structure":[]},{"parent":263,"type":"other","range":{"startColumn":81,"endRow":26,"startRow":26,"endColumn":82},"id":278,"token":{"kind":"stringQuote","leadingTrivia":"","trailingTrivia":""},"text":""","structure":[]},{"parent":257,"type":"other","range":{"startColumn":82,"endRow":26,"startRow":26,"endColumn":83},"id":279,"token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":""},"text":")","structure":[]},{"type":"collection","parent":257,"text":"MultipleTrailingClosureElementList","id":280,"range":{"startColumn":83,"endRow":26,"startRow":26,"endColumn":83},"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}]},{"parent":253,"type":"other","range":{"endColumn":2,"startRow":27,"endRow":27,"startColumn":1},"id":281,"token":{"trailingTrivia":"","leadingTrivia":"↲<\/span>","kind":"rightBrace"},"text":"}","structure":[]},{"type":"other","parent":1,"id":282,"text":"CodeBlockItem","range":{"endRow":30,"startColumn":1,"endColumn":35,"startRow":30},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"VariableDeclSyntax"},"ref":"VariableDeclSyntax","name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}]},{"type":"decl","parent":282,"id":283,"text":"VariableDecl","range":{"endColumn":35,"startColumn":1,"endRow":30,"startRow":30},"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","value":{"text":"AttributeListSyntax"},"ref":"AttributeListSyntax"},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax"},{"name":"unexpectedBetweenModifiersAndBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"kind":"keyword(SwiftSyntax.Keyword.let)","text":"let"}},{"name":"unexpectedBetweenBindingSpecifierAndBindings","value":{"text":"nil"}},{"name":"bindings","value":{"text":"PatternBindingListSyntax"},"ref":"PatternBindingListSyntax"},{"name":"unexpectedAfterBindings","value":{"text":"nil"}}]},{"type":"collection","parent":283,"id":284,"text":"AttributeList","range":{"startRow":27,"startColumn":2,"endRow":27,"endColumn":2},"structure":[{"value":{"text":"Element"},"name":"Element"},{"name":"Count","value":{"text":"0"}}]},{"range":{"startColumn":2,"startRow":27,"endRow":27,"endColumn":2},"type":"collection","structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"parent":283,"id":285,"text":"DeclModifierList"},{"parent":283,"range":{"startRow":30,"endColumn":4,"startColumn":1,"endRow":30},"type":"other","id":286,"token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>↲<\/span>\/\/␣<\/span>Multiple␣<\/span>optional␣<\/span>bindings<\/span>↲<\/span>","kind":"keyword(SwiftSyntax.Keyword.let)"},"structure":[],"text":"let"},{"range":{"startRow":30,"endColumn":35,"startColumn":5,"endRow":30},"type":"collection","structure":[{"name":"Element","value":{"text":"PatternBindingSyntax"}},{"name":"Count","value":{"text":"1"}}],"parent":283,"id":287,"text":"PatternBindingList"},{"range":{"endColumn":35,"startRow":30,"endRow":30,"startColumn":5},"type":"other","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"value":{"text":"IdentifierPatternSyntax"},"name":"pattern","ref":"IdentifierPatternSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTypeAnnotation"},{"value":{"text":"TypeAnnotationSyntax"},"name":"typeAnnotation","ref":"TypeAnnotationSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAnnotationAndInitializer"},{"value":{"text":"InitializerClauseSyntax"},"name":"initializer","ref":"InitializerClauseSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenInitializerAndAccessorBlock"},{"value":{"text":"nil"},"name":"accessorBlock"},{"value":{"text":"nil"},"name":"unexpectedBetweenAccessorBlockAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"parent":287,"id":288,"text":"PatternBinding"},{"range":{"endColumn":17,"startRow":30,"endRow":30,"startColumn":5},"text":"IdentifierPattern","parent":288,"type":"pattern","id":289,"structure":[{"name":"unexpectedBeforeIdentifier","value":{"text":"nil"}},{"name":"identifier","value":{"text":"possibleName","kind":"identifier("possibleName")"}},{"name":"unexpectedAfterIdentifier","value":{"text":"nil"}}]},{"parent":289,"range":{"startRow":30,"startColumn":5,"endRow":30,"endColumn":17},"type":"other","id":290,"token":{"trailingTrivia":"","leadingTrivia":"","kind":"identifier("possibleName")"},"text":"possibleName","structure":[]},{"range":{"startRow":30,"startColumn":17,"endRow":30,"endColumn":26},"text":"TypeAnnotation","parent":288,"type":"other","id":291,"structure":[{"name":"unexpectedBeforeColon","value":{"text":"nil"}},{"name":"colon","value":{"text":":","kind":"colon"}},{"name":"unexpectedBetweenColonAndType","value":{"text":"nil"}},{"name":"type","value":{"text":"OptionalTypeSyntax"},"ref":"OptionalTypeSyntax"},{"name":"unexpectedAfterType","value":{"text":"nil"}}]},{"parent":291,"range":{"startColumn":17,"startRow":30,"endRow":30,"endColumn":18},"type":"other","id":292,"token":{"leadingTrivia":"","kind":"colon","trailingTrivia":"␣<\/span>"},"text":":","structure":[]},{"range":{"startColumn":19,"startRow":30,"endRow":30,"endColumn":26},"text":"OptionalType","parent":291,"type":"type","id":293,"structure":[{"name":"unexpectedBeforeWrappedType","value":{"text":"nil"}},{"ref":"IdentifierTypeSyntax","name":"wrappedType","value":{"text":"IdentifierTypeSyntax"}},{"name":"unexpectedBetweenWrappedTypeAndQuestionMark","value":{"text":"nil"}},{"value":{"text":"?","kind":"postfixQuestionMark"},"name":"questionMark"},{"value":{"text":"nil"},"name":"unexpectedAfterQuestionMark"}]},{"parent":293,"text":"IdentifierType","id":294,"range":{"endRow":30,"endColumn":25,"startRow":30,"startColumn":19},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeName"},{"value":{"kind":"identifier("String")","text":"String"},"name":"name"},{"value":{"text":"nil"},"name":"unexpectedBetweenNameAndGenericArgumentClause"},{"value":{"text":"nil"},"name":"genericArgumentClause"},{"value":{"text":"nil"},"name":"unexpectedAfterGenericArgumentClause"}],"type":"type"},{"parent":294,"range":{"endRow":30,"endColumn":25,"startColumn":19,"startRow":30},"type":"other","id":295,"token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("String")"},"text":"String","structure":[]},{"parent":293,"range":{"endRow":30,"endColumn":26,"startColumn":25,"startRow":30},"type":"other","id":296,"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"postfixQuestionMark"},"text":"?","structure":[]},{"parent":288,"text":"InitializerClause","id":297,"range":{"endRow":30,"endColumn":35,"startColumn":27,"startRow":30},"structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"kind":"equal","text":"="}},{"name":"unexpectedBetweenEqualAndValue","value":{"text":"nil"}},{"name":"value","value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax"},{"name":"unexpectedAfterValue","value":{"text":"nil"}}],"type":"other"},{"parent":297,"range":{"startRow":30,"endRow":30,"endColumn":28,"startColumn":27},"type":"other","id":298,"token":{"trailingTrivia":"␣<\/span>","kind":"equal","leadingTrivia":""},"text":"=","structure":[]},{"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"name":"segments","ref":"StringLiteralSegmentListSyntax","value":{"text":"StringLiteralSegmentListSyntax"}},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"kind":"stringQuote","text":"""}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"type":"expr","parent":297,"id":299,"text":"StringLiteralExpr","range":{"endColumn":35,"startRow":30,"startColumn":29,"endRow":30}},{"parent":299,"type":"other","range":{"endColumn":30,"startRow":30,"startColumn":29,"endRow":30},"id":300,"token":{"trailingTrivia":"","kind":"stringQuote","leadingTrivia":""},"structure":[],"text":"""},{"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","parent":299,"id":301,"text":"StringLiteralSegmentList","range":{"endColumn":34,"startRow":30,"startColumn":30,"endRow":30}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"kind":"stringSegment("John")","text":"John"},"name":"content"},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"type":"other","parent":301,"id":302,"text":"StringSegment","range":{"endRow":30,"startColumn":30,"endColumn":34,"startRow":30}},{"parent":302,"type":"other","range":{"startRow":30,"startColumn":30,"endColumn":34,"endRow":30},"id":303,"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("John")"},"text":"John","structure":[]},{"parent":299,"type":"other","range":{"startRow":30,"startColumn":34,"endColumn":35,"endRow":30},"id":304,"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"text":""","structure":[]},{"parent":1,"type":"other","id":305,"text":"CodeBlockItem","range":{"startRow":31,"startColumn":1,"endColumn":27,"endRow":31},"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"VariableDeclSyntax","name":"item","value":{"text":"VariableDeclSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}]},{"parent":305,"type":"decl","id":306,"text":"VariableDecl","range":{"startColumn":1,"endRow":31,"endColumn":27,"startRow":31},"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","ref":"AttributeListSyntax","value":{"text":"AttributeListSyntax"}},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","ref":"DeclModifierListSyntax","value":{"text":"DeclModifierListSyntax"}},{"name":"unexpectedBetweenModifiersAndBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"kind":"keyword(SwiftSyntax.Keyword.let)","text":"let"}},{"name":"unexpectedBetweenBindingSpecifierAndBindings","value":{"text":"nil"}},{"name":"bindings","ref":"PatternBindingListSyntax","value":{"text":"PatternBindingListSyntax"}},{"value":{"text":"nil"},"name":"unexpectedAfterBindings"}]},{"type":"collection","text":"AttributeList","id":307,"parent":306,"range":{"startRow":30,"endRow":30,"startColumn":35,"endColumn":35},"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}]},{"type":"collection","text":"DeclModifierList","id":308,"parent":306,"range":{"startColumn":35,"endColumn":35,"endRow":30,"startRow":30},"structure":[{"value":{"text":"DeclModifierSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}]},{"parent":306,"type":"other","range":{"endRow":31,"startRow":31,"endColumn":4,"startColumn":1},"id":309,"token":{"kind":"keyword(SwiftSyntax.Keyword.let)","leadingTrivia":"↲<\/span>","trailingTrivia":"␣<\/span>"},"text":"let","structure":[]},{"type":"collection","text":"PatternBindingList","id":310,"parent":306,"range":{"endRow":31,"startRow":31,"endColumn":27,"startColumn":5},"structure":[{"name":"Element","value":{"text":"PatternBindingSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"type":"other","text":"PatternBinding","id":311,"parent":310,"range":{"endRow":31,"startColumn":5,"startRow":31,"endColumn":27},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"value":{"text":"IdentifierPatternSyntax"},"name":"pattern","ref":"IdentifierPatternSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTypeAnnotation"},{"value":{"text":"TypeAnnotationSyntax"},"name":"typeAnnotation","ref":"TypeAnnotationSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAnnotationAndInitializer"},{"value":{"text":"InitializerClauseSyntax"},"name":"initializer","ref":"InitializerClauseSyntax"},{"name":"unexpectedBetweenInitializerAndAccessorBlock","value":{"text":"nil"}},{"name":"accessorBlock","value":{"text":"nil"}},{"name":"unexpectedBetweenAccessorBlockAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}]},{"id":312,"parent":311,"structure":[{"name":"unexpectedBeforeIdentifier","value":{"text":"nil"}},{"name":"identifier","value":{"kind":"identifier("possibleAge")","text":"possibleAge"}},{"name":"unexpectedAfterIdentifier","value":{"text":"nil"}}],"text":"IdentifierPattern","type":"pattern","range":{"startColumn":5,"endRow":31,"startRow":31,"endColumn":16}},{"parent":312,"type":"other","range":{"startColumn":5,"startRow":31,"endRow":31,"endColumn":16},"id":313,"token":{"kind":"identifier("possibleAge")","leadingTrivia":"","trailingTrivia":""},"structure":[],"text":"possibleAge"},{"id":314,"parent":311,"structure":[{"name":"unexpectedBeforeColon","value":{"text":"nil"}},{"name":"colon","value":{"kind":"colon","text":":"}},{"name":"unexpectedBetweenColonAndType","value":{"text":"nil"}},{"ref":"OptionalTypeSyntax","name":"type","value":{"text":"OptionalTypeSyntax"}},{"name":"unexpectedAfterType","value":{"text":"nil"}}],"text":"TypeAnnotation","type":"other","range":{"startColumn":16,"startRow":31,"endRow":31,"endColumn":22}},{"token":{"trailingTrivia":"␣<\/span>","kind":"colon","leadingTrivia":""},"text":":","structure":[],"id":315,"type":"other","range":{"endRow":31,"startRow":31,"startColumn":16,"endColumn":17},"parent":314},{"range":{"startRow":31,"endColumn":22,"startColumn":18,"endRow":31},"text":"OptionalType","type":"type","parent":314,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeWrappedType"},{"value":{"text":"IdentifierTypeSyntax"},"ref":"IdentifierTypeSyntax","name":"wrappedType"},{"value":{"text":"nil"},"name":"unexpectedBetweenWrappedTypeAndQuestionMark"},{"value":{"kind":"postfixQuestionMark","text":"?"},"name":"questionMark"},{"value":{"text":"nil"},"name":"unexpectedAfterQuestionMark"}],"id":316},{"range":{"endRow":31,"endColumn":21,"startColumn":18,"startRow":31},"text":"IdentifierType","type":"type","parent":316,"structure":[{"name":"unexpectedBeforeName","value":{"text":"nil"}},{"name":"name","value":{"kind":"identifier("Int")","text":"Int"}},{"name":"unexpectedBetweenNameAndGenericArgumentClause","value":{"text":"nil"}},{"name":"genericArgumentClause","value":{"text":"nil"}},{"name":"unexpectedAfterGenericArgumentClause","value":{"text":"nil"}}],"id":317},{"token":{"trailingTrivia":"","kind":"identifier("Int")","leadingTrivia":""},"text":"Int","structure":[],"range":{"endRow":31,"endColumn":21,"startRow":31,"startColumn":18},"type":"other","id":318,"parent":317},{"token":{"trailingTrivia":"␣<\/span>","kind":"postfixQuestionMark","leadingTrivia":""},"text":"?","structure":[],"range":{"endRow":31,"endColumn":22,"startRow":31,"startColumn":21},"type":"other","id":319,"parent":316},{"range":{"endRow":31,"endColumn":27,"startRow":31,"startColumn":23},"text":"InitializerClause","type":"other","parent":311,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeEqual"},{"value":{"text":"=","kind":"equal"},"name":"equal"},{"value":{"text":"nil"},"name":"unexpectedBetweenEqualAndValue"},{"value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax","name":"value"},{"name":"unexpectedAfterValue","value":{"text":"nil"}}],"id":320},{"token":{"kind":"equal","trailingTrivia":"␣<\/span>","leadingTrivia":""},"text":"=","structure":[],"type":"other","range":{"startColumn":23,"startRow":31,"endRow":31,"endColumn":24},"id":321,"parent":320},{"text":"IntegerLiteralExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"kind":"integerLiteral("30")","text":"30"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr","range":{"startColumn":25,"startRow":31,"endRow":31,"endColumn":27},"id":322,"parent":320},{"token":{"trailingTrivia":"","kind":"integerLiteral("30")","leadingTrivia":""},"text":"30","structure":[],"type":"other","range":{"startColumn":25,"endRow":31,"endColumn":27,"startRow":31},"id":323,"parent":322},{"text":"CodeBlockItem","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"ExpressionStmtSyntax"},"ref":"ExpressionStmtSyntax","name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","range":{"startColumn":1,"endRow":34,"endColumn":2,"startRow":32},"id":324,"parent":1},{"text":"ExpressionStmt","structure":[{"name":"unexpectedBeforeExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"IfExprSyntax"},"ref":"IfExprSyntax"},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}],"type":"other","range":{"endColumn":2,"endRow":34,"startColumn":1,"startRow":32},"id":325,"parent":324},{"text":"IfExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIfKeyword"},{"value":{"text":"if","kind":"keyword(SwiftSyntax.Keyword.if)"},"name":"ifKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenIfKeywordAndConditions"},{"value":{"text":"ConditionElementListSyntax"},"name":"conditions","ref":"ConditionElementListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenConditionsAndBody"},{"value":{"text":"CodeBlockSyntax"},"name":"body","ref":"CodeBlockSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenBodyAndElseKeyword"},{"value":{"text":"nil"},"name":"elseKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenElseKeywordAndElseBody"},{"value":{"text":"nil"},"name":"elseBody"},{"value":{"text":"nil"},"name":"unexpectedAfterElseBody"}],"type":"expr","range":{"startRow":32,"endColumn":2,"startColumn":1,"endRow":34},"id":326,"parent":325},{"token":{"leadingTrivia":"↲<\/span>","kind":"keyword(SwiftSyntax.Keyword.if)","trailingTrivia":"␣<\/span>"},"text":"if","structure":[],"id":327,"type":"other","range":{"startRow":32,"endRow":32,"startColumn":1,"endColumn":3},"parent":326},{"id":328,"parent":326,"structure":[{"name":"Element","value":{"text":"ConditionElementSyntax"}},{"name":"Count","value":{"text":"2"}}],"type":"collection","range":{"startRow":32,"endRow":32,"startColumn":4,"endColumn":50},"text":"ConditionElementList"},{"id":329,"parent":328,"structure":[{"name":"unexpectedBeforeCondition","value":{"text":"nil"}},{"name":"condition","value":{"text":"OptionalBindingConditionSyntax"},"ref":"OptionalBindingConditionSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenConditionAndTrailingComma"},{"value":{"text":",","kind":"comma"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","range":{"startRow":32,"startColumn":4,"endRow":32,"endColumn":28},"text":"ConditionElement"},{"id":330,"parent":329,"range":{"endRow":32,"startRow":32,"endColumn":27,"startColumn":4},"structure":[{"name":"unexpectedBeforeBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"kind":"keyword(SwiftSyntax.Keyword.let)","text":"let"}},{"name":"unexpectedBetweenBindingSpecifierAndPattern","value":{"text":"nil"}},{"name":"pattern","value":{"text":"IdentifierPatternSyntax"},"ref":"IdentifierPatternSyntax"},{"name":"unexpectedBetweenPatternAndTypeAnnotation","value":{"text":"nil"}},{"name":"typeAnnotation","value":{"text":"nil"}},{"name":"unexpectedBetweenTypeAnnotationAndInitializer","value":{"text":"nil"}},{"name":"initializer","value":{"text":"InitializerClauseSyntax"},"ref":"InitializerClauseSyntax"},{"name":"unexpectedAfterInitializer","value":{"text":"nil"}}],"type":"other","text":"OptionalBindingCondition"},{"token":{"leadingTrivia":"","kind":"keyword(SwiftSyntax.Keyword.let)","trailingTrivia":"␣<\/span>"},"text":"let","structure":[],"id":331,"range":{"startColumn":4,"endRow":32,"startRow":32,"endColumn":7},"type":"other","parent":330},{"id":332,"parent":330,"range":{"startColumn":8,"endRow":32,"startRow":32,"endColumn":12},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"kind":"identifier("name")","text":"name"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"type":"pattern","text":"IdentifierPattern"},{"token":{"kind":"identifier("name")","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"text":"name","structure":[],"range":{"startColumn":8,"startRow":32,"endRow":32,"endColumn":12},"id":333,"type":"other","parent":332},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeEqual"},{"value":{"text":"=","kind":"equal"},"name":"equal"},{"value":{"text":"nil"},"name":"unexpectedBetweenEqualAndValue"},{"value":{"text":"DeclReferenceExprSyntax"},"name":"value","ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterValue"}],"text":"InitializerClause","parent":330,"range":{"startColumn":13,"startRow":32,"endRow":32,"endColumn":27},"id":334,"type":"other"},{"token":{"leadingTrivia":"","kind":"equal","trailingTrivia":"␣<\/span>"},"text":"=","structure":[],"range":{"startRow":32,"endRow":32,"startColumn":13,"endColumn":14},"id":335,"type":"other","parent":334},{"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"possibleName","kind":"identifier("possibleName")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"text":"DeclReferenceExpr","parent":334,"range":{"startRow":32,"endRow":32,"startColumn":15,"endColumn":27},"id":336,"type":"expr"},{"token":{"kind":"identifier("possibleName")","leadingTrivia":"","trailingTrivia":""},"text":"possibleName","structure":[],"range":{"endRow":32,"endColumn":27,"startColumn":15,"startRow":32},"id":337,"type":"other","parent":336},{"token":{"kind":"comma","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"text":",","structure":[],"range":{"endRow":32,"endColumn":28,"startColumn":27,"startRow":32},"id":338,"type":"other","parent":329},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCondition"},{"name":"condition","value":{"text":"OptionalBindingConditionSyntax"},"ref":"OptionalBindingConditionSyntax"},{"name":"unexpectedBetweenConditionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"text":"ConditionElement","id":339,"parent":328,"range":{"startRow":32,"startColumn":29,"endRow":32,"endColumn":50},"type":"other"},{"parent":339,"range":{"startRow":32,"endColumn":50,"startColumn":29,"endRow":32},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBindingSpecifier"},{"value":{"text":"let","kind":"keyword(SwiftSyntax.Keyword.let)"},"name":"bindingSpecifier"},{"value":{"text":"nil"},"name":"unexpectedBetweenBindingSpecifierAndPattern"},{"value":{"text":"IdentifierPatternSyntax"},"ref":"IdentifierPatternSyntax","name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTypeAnnotation"},{"value":{"text":"nil"},"name":"typeAnnotation"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAnnotationAndInitializer"},{"value":{"text":"InitializerClauseSyntax"},"ref":"InitializerClauseSyntax","name":"initializer"},{"value":{"text":"nil"},"name":"unexpectedAfterInitializer"}],"id":340,"type":"other","text":"OptionalBindingCondition"},{"token":{"leadingTrivia":"","kind":"keyword(SwiftSyntax.Keyword.let)","trailingTrivia":"␣<\/span>"},"text":"let","structure":[],"range":{"startRow":32,"endRow":32,"endColumn":32,"startColumn":29},"id":341,"type":"other","parent":340},{"parent":340,"range":{"startRow":32,"endRow":32,"endColumn":36,"startColumn":33},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"text":"age","kind":"identifier("age")"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"id":342,"type":"pattern","text":"IdentifierPattern"},{"token":{"trailingTrivia":"␣<\/span>","kind":"identifier("age")","leadingTrivia":""},"text":"age","structure":[],"range":{"startRow":32,"endColumn":36,"startColumn":33,"endRow":32},"id":343,"type":"other","parent":342},{"text":"InitializerClause","range":{"startRow":32,"endColumn":50,"startColumn":37,"endRow":32},"parent":340,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeEqual"},{"value":{"kind":"equal","text":"="},"name":"equal"},{"value":{"text":"nil"},"name":"unexpectedBetweenEqualAndValue"},{"value":{"text":"DeclReferenceExprSyntax"},"name":"value","ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterValue"}],"id":344,"type":"other"},{"token":{"trailingTrivia":"␣<\/span>","kind":"equal","leadingTrivia":""},"text":"=","structure":[],"range":{"endRow":32,"endColumn":38,"startColumn":37,"startRow":32},"id":345,"type":"other","parent":344},{"text":"DeclReferenceExpr","range":{"endRow":32,"endColumn":50,"startColumn":39,"startRow":32},"parent":344,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"possibleAge","kind":"identifier("possibleAge")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"id":346,"type":"expr"},{"token":{"kind":"identifier("possibleAge")","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"text":"possibleAge","structure":[],"range":{"startRow":32,"endRow":32,"endColumn":50,"startColumn":39},"id":347,"type":"other","parent":346},{"parent":326,"range":{"startRow":32,"startColumn":51,"endRow":34,"endColumn":2},"text":"CodeBlock","type":"other","structure":[{"name":"unexpectedBeforeLeftBrace","value":{"text":"nil"}},{"name":"leftBrace","value":{"kind":"leftBrace","text":"{"}},{"name":"unexpectedBetweenLeftBraceAndStatements","value":{"text":"nil"}},{"ref":"CodeBlockItemListSyntax","name":"statements","value":{"text":"CodeBlockItemListSyntax"}},{"name":"unexpectedBetweenStatementsAndRightBrace","value":{"text":"nil"}},{"name":"rightBrace","value":{"text":"}","kind":"rightBrace"}},{"name":"unexpectedAfterRightBrace","value":{"text":"nil"}}],"id":348},{"token":{"kind":"leftBrace","leadingTrivia":"","trailingTrivia":""},"text":"{","structure":[],"id":349,"range":{"endRow":32,"startRow":32,"startColumn":51,"endColumn":52},"type":"other","parent":348},{"id":350,"range":{"endRow":33,"startRow":33,"startColumn":5,"endColumn":41},"parent":348,"text":"CodeBlockItemList","structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection"},{"id":351,"range":{"endColumn":41,"startRow":33,"startColumn":5,"endRow":33},"parent":350,"text":"CodeBlockItem","structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"FunctionCallExprSyntax","name":"item","value":{"text":"FunctionCallExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"type":"other"},{"id":352,"range":{"startRow":33,"endRow":33,"endColumn":41,"startColumn":5},"parent":351,"text":"FunctionCallExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"name":"arguments","value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax"},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"},"ref":"MultipleTrailingClosureElementListSyntax"},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"type":"expr"},{"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("print")","text":"print"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"text":"DeclReferenceExpr","parent":352,"range":{"endRow":33,"endColumn":10,"startRow":33,"startColumn":5},"type":"expr","id":353},{"token":{"kind":"identifier("print")","trailingTrivia":"","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"text":"print","structure":[],"range":{"endColumn":10,"endRow":33,"startColumn":5,"startRow":33},"type":"other","id":354,"parent":353},{"token":{"kind":"leftParen","trailingTrivia":"","leadingTrivia":""},"text":"(","structure":[],"range":{"endColumn":11,"endRow":33,"startColumn":10,"startRow":33},"type":"other","id":355,"parent":352},{"range":{"endColumn":40,"endRow":33,"startColumn":11,"startRow":33},"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection","parent":352,"id":356,"text":"LabeledExprList"},{"range":{"startColumn":11,"endRow":33,"endColumn":40,"startRow":33},"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other","parent":356,"id":357,"text":"LabeledExpr"},{"range":{"startColumn":11,"endRow":33,"startRow":33,"endColumn":40},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"name":"segments","ref":"StringLiteralSegmentListSyntax","value":{"text":"StringLiteralSegmentListSyntax"}},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"kind":"stringQuote","text":"""}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"type":"expr","parent":357,"id":358,"text":"StringLiteralExpr"},{"token":{"leadingTrivia":"","kind":"stringQuote","trailingTrivia":""},"text":""","structure":[],"range":{"startColumn":11,"endColumn":12,"startRow":33,"endRow":33},"id":359,"type":"other","parent":358},{"text":"StringLiteralSegmentList","range":{"startColumn":12,"endColumn":39,"startRow":33,"endRow":33},"id":360,"parent":358,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"5"}}],"type":"collection"},{"text":"StringSegment","range":{"startRow":33,"endRow":33,"endColumn":12,"startColumn":12},"id":361,"parent":360,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"kind":"stringSegment("")","text":""},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other"},{"token":{"trailingTrivia":"","leadingTrivia":"","kind":"stringSegment("")"},"text":"","structure":[],"range":{"startColumn":12,"startRow":33,"endColumn":12,"endRow":33},"id":362,"type":"other","parent":361},{"id":363,"parent":360,"type":"other","range":{"startColumn":12,"startRow":33,"endRow":33,"endColumn":19},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBackslash"},{"value":{"kind":"backslash","text":"\\"},"name":"backslash"},{"value":{"text":"nil"},"name":"unexpectedBetweenBackslashAndPounds"},{"value":{"text":"nil"},"name":"pounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenPoundsAndLeftParen"},{"value":{"kind":"leftParen","text":"("},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndExpressions"},{"value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax","name":"expressions"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"text":"ExpressionSegment"},{"token":{"trailingTrivia":"","leadingTrivia":"","kind":"backslash"},"text":"\\","structure":[],"id":364,"type":"other","range":{"endRow":33,"endColumn":13,"startRow":33,"startColumn":12},"parent":363},{"id":365,"text":"(","range":{"endRow":33,"endColumn":14,"startRow":33,"startColumn":13},"parent":363,"type":"other","token":{"trailingTrivia":"","leadingTrivia":"","kind":"leftParen"},"structure":[]},{"id":366,"parent":363,"type":"collection","range":{"endRow":33,"endColumn":18,"startRow":33,"startColumn":14},"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"text":"LabeledExprList"},{"id":367,"parent":366,"type":"other","range":{"endRow":33,"endColumn":18,"startRow":33,"startColumn":14},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"text":"LabeledExpr"},{"text":"DeclReferenceExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"name","kind":"identifier("name")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"id":368,"parent":367,"range":{"startRow":33,"startColumn":14,"endRow":33,"endColumn":18},"type":"expr"},{"text":"name","id":369,"range":{"startColumn":14,"endRow":33,"endColumn":18,"startRow":33},"parent":368,"type":"other","token":{"trailingTrivia":"","leadingTrivia":"","kind":"identifier("name")"},"structure":[]},{"text":")","id":370,"range":{"startColumn":18,"endRow":33,"endColumn":19,"startRow":33},"parent":363,"type":"other","token":{"trailingTrivia":"","leadingTrivia":"","kind":"rightParen"},"structure":[]},{"text":"StringSegment","parent":360,"id":371,"range":{"endColumn":23,"endRow":33,"startRow":33,"startColumn":19},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":" is ","kind":"stringSegment(" is ")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other"},{"text":"␣<\/span>is␣<\/span>","id":372,"range":{"startColumn":19,"endRow":33,"endColumn":23,"startRow":33},"parent":371,"type":"other","token":{"leadingTrivia":"","kind":"stringSegment(" is ")","trailingTrivia":""},"structure":[]},{"text":"ExpressionSegment","parent":360,"id":373,"range":{"startColumn":23,"endRow":33,"endColumn":29,"startRow":33},"structure":[{"name":"unexpectedBeforeBackslash","value":{"text":"nil"}},{"name":"backslash","value":{"text":"\\","kind":"backslash"}},{"name":"unexpectedBetweenBackslashAndPounds","value":{"text":"nil"}},{"name":"pounds","value":{"text":"nil"}},{"name":"unexpectedBetweenPoundsAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndExpressions","value":{"text":"nil"}},{"ref":"LabeledExprListSyntax","name":"expressions","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenExpressionsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"kind":"rightParen","text":")"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}],"type":"other"},{"text":"\\","id":374,"range":{"endRow":33,"startColumn":23,"startRow":33,"endColumn":24},"parent":373,"type":"other","token":{"trailingTrivia":"","kind":"backslash","leadingTrivia":""},"structure":[]},{"id":375,"text":"(","range":{"startRow":33,"startColumn":24,"endRow":33,"endColumn":25},"parent":373,"type":"other","token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""},"structure":[]},{"id":376,"type":"collection","text":"LabeledExprList","range":{"startRow":33,"startColumn":25,"endRow":33,"endColumn":28},"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"parent":373},{"id":377,"type":"other","text":"LabeledExpr","range":{"startRow":33,"endRow":33,"endColumn":28,"startColumn":25},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"name":"expression","ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"parent":376},{"id":378,"type":"expr","text":"DeclReferenceExpr","range":{"endColumn":28,"endRow":33,"startColumn":25,"startRow":33},"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("age")","text":"age"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"parent":377},{"text":"age","id":379,"range":{"startColumn":25,"endRow":33,"endColumn":28,"startRow":33},"parent":378,"type":"other","token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("age")"},"structure":[]},{"text":")","id":380,"range":{"startColumn":28,"endRow":33,"endColumn":29,"startRow":33},"parent":373,"type":"other","token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"structure":[]},{"text":"StringSegment","id":381,"range":{"startColumn":29,"endRow":33,"endColumn":39,"startRow":33},"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":" years old","kind":"stringSegment(" years old")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"type":"other","parent":360},{"text":"␣<\/span>years␣<\/span>old","id":382,"range":{"startColumn":29,"endRow":33,"endColumn":39,"startRow":33},"parent":381,"type":"other","token":{"kind":"stringSegment(" years old")","leadingTrivia":"","trailingTrivia":""},"structure":[]},{"text":""","id":383,"range":{"startColumn":39,"endRow":33,"endColumn":40,"startRow":33},"parent":358,"type":"other","token":{"kind":"stringQuote","leadingTrivia":"","trailingTrivia":""},"structure":[]},{"text":")","id":384,"range":{"startColumn":40,"endRow":33,"endColumn":41,"startRow":33},"parent":352,"type":"other","token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":""},"structure":[]},{"text":"MultipleTrailingClosureElementList","id":385,"range":{"startColumn":41,"endRow":33,"endColumn":41,"startRow":33},"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection","parent":352},{"text":"}","id":386,"range":{"startRow":34,"endRow":34,"endColumn":2,"startColumn":1},"parent":348,"type":"other","token":{"kind":"rightBrace","leadingTrivia":"↲<\/span>","trailingTrivia":""},"structure":[]},{"text":"CodeBlockItem","id":387,"range":{"startRow":37,"endRow":49,"endColumn":2,"startColumn":1},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"FunctionDeclSyntax"},"name":"item","ref":"FunctionDeclSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","parent":1},{"range":{"startRow":37,"endRow":49,"endColumn":2,"startColumn":1},"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","ref":"AttributeListSyntax","value":{"text":"AttributeListSyntax"}},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","ref":"DeclModifierListSyntax","value":{"text":"DeclModifierListSyntax"}},{"name":"unexpectedBetweenModifiersAndFuncKeyword","value":{"text":"nil"}},{"name":"funcKeyword","value":{"kind":"keyword(SwiftSyntax.Keyword.func)","text":"func"}},{"name":"unexpectedBetweenFuncKeywordAndName","value":{"text":"nil"}},{"name":"name","value":{"text":"greet","kind":"identifier("greet")"}},{"name":"unexpectedBetweenNameAndGenericParameterClause","value":{"text":"nil"}},{"name":"genericParameterClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericParameterClauseAndSignature","value":{"text":"nil"}},{"name":"signature","ref":"FunctionSignatureSyntax","value":{"text":"FunctionSignatureSyntax"}},{"name":"unexpectedBetweenSignatureAndGenericWhereClause","value":{"text":"nil"}},{"name":"genericWhereClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericWhereClauseAndBody","value":{"text":"nil"}},{"ref":"CodeBlockSyntax","name":"body","value":{"text":"CodeBlockSyntax"}},{"name":"unexpectedAfterBody","value":{"text":"nil"}}],"id":388,"type":"decl","parent":387,"text":"FunctionDecl"},{"type":"collection","parent":388,"id":389,"text":"AttributeList","range":{"startColumn":2,"endRow":34,"startRow":34,"endColumn":2},"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}]},{"type":"collection","parent":388,"id":390,"text":"DeclModifierList","range":{"endRow":34,"endColumn":2,"startColumn":2,"startRow":34},"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}]},{"id":391,"text":"func","range":{"endRow":37,"startRow":37,"startColumn":1,"endColumn":5},"parent":388,"type":"other","token":{"kind":"keyword(SwiftSyntax.Keyword.func)","leadingTrivia":"↲<\/span>↲<\/span>\/\/␣<\/span>MARK:␣<\/span>-␣<\/span>Guard␣<\/span>Statements<\/span>↲<\/span>","trailingTrivia":"␣<\/span>"},"structure":[]},{"id":392,"text":"greet","range":{"endRow":37,"startRow":37,"startColumn":6,"endColumn":11},"parent":388,"type":"other","token":{"kind":"identifier("greet")","leadingTrivia":"","trailingTrivia":""},"structure":[]},{"type":"other","parent":388,"id":393,"text":"FunctionSignature","range":{"endRow":37,"startRow":37,"startColumn":11,"endColumn":37},"structure":[{"name":"unexpectedBeforeParameterClause","value":{"text":"nil"}},{"name":"parameterClause","ref":"FunctionParameterClauseSyntax","value":{"text":"FunctionParameterClauseSyntax"}},{"name":"unexpectedBetweenParameterClauseAndEffectSpecifiers","value":{"text":"nil"}},{"name":"effectSpecifiers","value":{"text":"nil"}},{"name":"unexpectedBetweenEffectSpecifiersAndReturnClause","value":{"text":"nil"}},{"name":"returnClause","value":{"text":"nil"}},{"name":"unexpectedAfterReturnClause","value":{"text":"nil"}}]},{"type":"other","id":394,"parent":393,"text":"FunctionParameterClause","range":{"endRow":37,"startColumn":11,"endColumn":37,"startRow":37},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndParameters"},{"value":{"text":"FunctionParameterListSyntax"},"ref":"FunctionParameterListSyntax","name":"parameters"},{"value":{"text":"nil"},"name":"unexpectedBetweenParametersAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}]},{"id":395,"text":"(","range":{"startColumn":11,"startRow":37,"endRow":37,"endColumn":12},"parent":394,"type":"other","token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""},"structure":[]},{"type":"collection","id":396,"parent":394,"text":"FunctionParameterList","range":{"startColumn":12,"startRow":37,"endRow":37,"endColumn":36},"structure":[{"name":"Element","value":{"text":"FunctionParameterSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"type":"other","id":397,"parent":396,"text":"FunctionParameter","range":{"startRow":37,"endRow":37,"startColumn":12,"endColumn":36},"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"ref":"AttributeListSyntax","name":"attributes","value":{"text":"AttributeListSyntax"}},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"ref":"DeclModifierListSyntax","name":"modifiers","value":{"text":"DeclModifierListSyntax"}},{"name":"unexpectedBetweenModifiersAndFirstName","value":{"text":"nil"}},{"value":{"kind":"identifier("person")","text":"person"},"name":"firstName"},{"value":{"text":"nil"},"name":"unexpectedBetweenFirstNameAndSecondName"},{"value":{"text":"nil"},"name":"secondName"},{"value":{"text":"nil"},"name":"unexpectedBetweenSecondNameAndColon"},{"value":{"text":":","kind":"colon"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndType"},{"value":{"text":"DictionaryTypeSyntax"},"ref":"DictionaryTypeSyntax","name":"type"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAndEllipsis"},{"value":{"text":"nil"},"name":"ellipsis"},{"value":{"text":"nil"},"name":"unexpectedBetweenEllipsisAndDefaultValue"},{"value":{"text":"nil"},"name":"defaultValue"},{"value":{"text":"nil"},"name":"unexpectedBetweenDefaultValueAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}]},{"range":{"startRow":37,"startColumn":12,"endRow":37,"endColumn":12},"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"type":"collection","id":398,"parent":397,"text":"AttributeList"},{"range":{"startColumn":12,"endRow":37,"endColumn":12,"startRow":37},"structure":[{"value":{"text":"DeclModifierSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection","id":399,"parent":397,"text":"DeclModifierList"},{"id":400,"text":"person","range":{"endRow":37,"endColumn":18,"startRow":37,"startColumn":12},"parent":397,"type":"other","token":{"kind":"identifier("person")","trailingTrivia":"","leadingTrivia":""},"structure":[]},{"id":401,"text":":","range":{"endRow":37,"endColumn":19,"startRow":37,"startColumn":18},"parent":397,"type":"other","token":{"kind":"colon","trailingTrivia":"␣<\/span>","leadingTrivia":""},"structure":[]},{"range":{"endRow":37,"endColumn":36,"startRow":37,"startColumn":20},"id":402,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftSquare"},{"value":{"kind":"leftSquare","text":"["},"name":"leftSquare"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftSquareAndKey"},{"ref":"IdentifierTypeSyntax","value":{"text":"IdentifierTypeSyntax"},"name":"key"},{"value":{"text":"nil"},"name":"unexpectedBetweenKeyAndColon"},{"value":{"kind":"colon","text":":"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndValue"},{"ref":"IdentifierTypeSyntax","value":{"text":"IdentifierTypeSyntax"},"name":"value"},{"value":{"text":"nil"},"name":"unexpectedBetweenValueAndRightSquare"},{"value":{"kind":"rightSquare","text":"]"},"name":"rightSquare"},{"value":{"text":"nil"},"name":"unexpectedAfterRightSquare"}],"parent":397,"type":"type","text":"DictionaryType"},{"id":403,"text":"[","range":{"endColumn":21,"startRow":37,"startColumn":20,"endRow":37},"parent":402,"type":"other","token":{"leadingTrivia":"","kind":"leftSquare","trailingTrivia":""},"structure":[]},{"structure":[{"name":"unexpectedBeforeName","value":{"text":"nil"}},{"name":"name","value":{"text":"String","kind":"identifier("String")"}},{"name":"unexpectedBetweenNameAndGenericArgumentClause","value":{"text":"nil"}},{"name":"genericArgumentClause","value":{"text":"nil"}},{"name":"unexpectedAfterGenericArgumentClause","value":{"text":"nil"}}],"type":"type","parent":402,"range":{"endRow":37,"startColumn":21,"endColumn":27,"startRow":37},"id":404,"text":"IdentifierType"},{"id":405,"text":"String","range":{"endRow":37,"endColumn":27,"startRow":37,"startColumn":21},"parent":404,"type":"other","token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("String")"},"structure":[]},{"id":406,"text":":","range":{"endRow":37,"endColumn":28,"startRow":37,"startColumn":27},"parent":402,"type":"other","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"colon"},"structure":[]},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeName"},{"value":{"kind":"identifier("String")","text":"String"},"name":"name"},{"value":{"text":"nil"},"name":"unexpectedBetweenNameAndGenericArgumentClause"},{"value":{"text":"nil"},"name":"genericArgumentClause"},{"value":{"text":"nil"},"name":"unexpectedAfterGenericArgumentClause"}],"type":"type","parent":402,"range":{"endRow":37,"endColumn":35,"startRow":37,"startColumn":29},"id":407,"text":"IdentifierType"},{"id":408,"text":"String","range":{"startRow":37,"startColumn":29,"endColumn":35,"endRow":37},"parent":407,"type":"other","token":{"kind":"identifier("String")","leadingTrivia":"","trailingTrivia":""},"structure":[]},{"range":{"startRow":37,"startColumn":35,"endColumn":36,"endRow":37},"structure":[],"text":"]","token":{"kind":"rightSquare","leadingTrivia":"","trailingTrivia":""},"type":"other","parent":402,"id":409},{"range":{"startRow":37,"startColumn":36,"endColumn":37,"endRow":37},"structure":[],"text":")","token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"type":"other","parent":394,"id":410},{"id":411,"parent":388,"text":"CodeBlock","range":{"startRow":37,"endColumn":2,"startColumn":38,"endRow":49},"type":"other","structure":[{"name":"unexpectedBeforeLeftBrace","value":{"text":"nil"}},{"name":"leftBrace","value":{"kind":"leftBrace","text":"{"}},{"name":"unexpectedBetweenLeftBraceAndStatements","value":{"text":"nil"}},{"name":"statements","value":{"text":"CodeBlockItemListSyntax"},"ref":"CodeBlockItemListSyntax"},{"name":"unexpectedBetweenStatementsAndRightBrace","value":{"text":"nil"}},{"name":"rightBrace","value":{"text":"}","kind":"rightBrace"}},{"name":"unexpectedAfterRightBrace","value":{"text":"nil"}}]},{"range":{"startColumn":38,"endRow":37,"endColumn":39,"startRow":37},"structure":[],"text":"{","token":{"leadingTrivia":"","kind":"leftBrace","trailingTrivia":""},"type":"other","parent":411,"id":412},{"range":{"startColumn":5,"endRow":48,"endColumn":56,"startRow":38},"structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"3"}}],"id":413,"type":"collection","text":"CodeBlockItemList","parent":411},{"range":{"endColumn":6,"startColumn":5,"endRow":41,"startRow":38},"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"GuardStmtSyntax"},"ref":"GuardStmtSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":414,"type":"other","text":"CodeBlockItem","parent":413},{"range":{"endColumn":6,"startRow":38,"startColumn":5,"endRow":41},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeGuardKeyword"},{"name":"guardKeyword","value":{"text":"guard","kind":"keyword(SwiftSyntax.Keyword.guard)"}},{"name":"unexpectedBetweenGuardKeywordAndConditions","value":{"text":"nil"}},{"name":"conditions","value":{"text":"ConditionElementListSyntax"},"ref":"ConditionElementListSyntax"},{"name":"unexpectedBetweenConditionsAndElseKeyword","value":{"text":"nil"}},{"name":"elseKeyword","value":{"text":"else","kind":"keyword(SwiftSyntax.Keyword.else)"}},{"name":"unexpectedBetweenElseKeywordAndBody","value":{"text":"nil"}},{"name":"body","value":{"text":"CodeBlockSyntax"},"ref":"CodeBlockSyntax"},{"name":"unexpectedAfterBody","value":{"text":"nil"}}],"id":415,"type":"other","text":"GuardStmt","parent":414},{"range":{"endColumn":10,"endRow":38,"startColumn":5,"startRow":38},"structure":[],"text":"guard","token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.guard)"},"parent":415,"type":"other","id":416},{"structure":[{"name":"Element","value":{"text":"ConditionElementSyntax"}},{"name":"Count","value":{"text":"1"}}],"parent":415,"type":"collection","text":"ConditionElementList","id":417,"range":{"endColumn":36,"endRow":38,"startColumn":11,"startRow":38}},{"structure":[{"name":"unexpectedBeforeCondition","value":{"text":"nil"}},{"name":"condition","ref":"OptionalBindingConditionSyntax","value":{"text":"OptionalBindingConditionSyntax"}},{"name":"unexpectedBetweenConditionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"parent":417,"type":"other","text":"ConditionElement","id":418,"range":{"startRow":38,"startColumn":11,"endRow":38,"endColumn":36}},{"text":"OptionalBindingCondition","type":"other","parent":418,"range":{"startColumn":11,"endColumn":36,"startRow":38,"endRow":38},"structure":[{"name":"unexpectedBeforeBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"text":"let","kind":"keyword(SwiftSyntax.Keyword.let)"}},{"name":"unexpectedBetweenBindingSpecifierAndPattern","value":{"text":"nil"}},{"ref":"IdentifierPatternSyntax","name":"pattern","value":{"text":"IdentifierPatternSyntax"}},{"name":"unexpectedBetweenPatternAndTypeAnnotation","value":{"text":"nil"}},{"name":"typeAnnotation","value":{"text":"nil"}},{"name":"unexpectedBetweenTypeAnnotationAndInitializer","value":{"text":"nil"}},{"ref":"InitializerClauseSyntax","name":"initializer","value":{"text":"InitializerClauseSyntax"}},{"name":"unexpectedAfterInitializer","value":{"text":"nil"}}],"id":419},{"range":{"startColumn":11,"startRow":38,"endColumn":14,"endRow":38},"structure":[],"text":"let","token":{"trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.let)","leadingTrivia":""},"type":"other","parent":419,"id":420},{"text":"IdentifierPattern","type":"pattern","parent":419,"range":{"startColumn":15,"startRow":38,"endColumn":19,"endRow":38},"structure":[{"name":"unexpectedBeforeIdentifier","value":{"text":"nil"}},{"name":"identifier","value":{"kind":"identifier("name")","text":"name"}},{"name":"unexpectedAfterIdentifier","value":{"text":"nil"}}],"id":421},{"range":{"endRow":38,"startRow":38,"startColumn":15,"endColumn":19},"structure":[],"text":"name","token":{"kind":"identifier("name")","trailingTrivia":"␣<\/span>","leadingTrivia":""},"type":"other","parent":421,"id":422},{"text":"InitializerClause","type":"other","range":{"startRow":38,"startColumn":20,"endColumn":36,"endRow":38},"id":423,"parent":419,"structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"text":"=","kind":"equal"}},{"name":"unexpectedBetweenEqualAndValue","value":{"text":"nil"}},{"name":"value","ref":"SubscriptCallExprSyntax","value":{"text":"SubscriptCallExprSyntax"}},{"name":"unexpectedAfterValue","value":{"text":"nil"}}]},{"range":{"startRow":38,"endColumn":21,"endRow":38,"startColumn":20},"structure":[],"text":"=","token":{"trailingTrivia":"␣<\/span>","kind":"equal","leadingTrivia":""},"type":"other","parent":423,"id":424},{"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftSquare","value":{"text":"nil"}},{"name":"leftSquare","value":{"text":"[","kind":"leftSquare"}},{"name":"unexpectedBetweenLeftSquareAndArguments","value":{"text":"nil"}},{"name":"arguments","ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightSquare","value":{"text":"nil"}},{"name":"rightSquare","value":{"text":"]","kind":"rightSquare"}},{"name":"unexpectedBetweenRightSquareAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"name":"additionalTrailingClosures","ref":"MultipleTrailingClosureElementListSyntax","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"type":"expr","text":"SubscriptCallExpr","parent":423,"range":{"startRow":38,"endColumn":36,"endRow":38,"startColumn":22},"id":425},{"parent":425,"type":"expr","text":"DeclReferenceExpr","id":426,"range":{"startRow":38,"endRow":38,"startColumn":22,"endColumn":28},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("person")","text":"person"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}]},{"range":{"startColumn":22,"startRow":38,"endRow":38,"endColumn":28},"structure":[],"text":"person","token":{"trailingTrivia":"","leadingTrivia":"","kind":"identifier("person")"},"parent":426,"type":"other","id":427},{"range":{"startColumn":28,"startRow":38,"endRow":38,"endColumn":29},"structure":[],"text":"[","token":{"trailingTrivia":"","leadingTrivia":"","kind":"leftSquare"},"parent":425,"type":"other","id":428},{"parent":425,"type":"collection","text":"LabeledExprList","id":429,"range":{"startColumn":29,"startRow":38,"endRow":38,"endColumn":35},"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"parent":429,"type":"other","text":"LabeledExpr","id":430,"range":{"startColumn":29,"endRow":38,"endColumn":35,"startRow":38},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"ref":"StringLiteralExprSyntax","value":{"text":"StringLiteralExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}]},{"text":"StringLiteralExpr","id":431,"range":{"startRow":38,"endRow":38,"endColumn":35,"startColumn":29},"type":"expr","structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"ref":"StringLiteralSegmentListSyntax","name":"segments","value":{"text":"StringLiteralSegmentListSyntax"}},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"parent":430},{"range":{"endRow":38,"endColumn":30,"startColumn":29,"startRow":38},"structure":[],"text":""","token":{"leadingTrivia":"","kind":"stringQuote","trailingTrivia":""},"type":"other","parent":431,"id":432},{"type":"collection","id":433,"parent":431,"range":{"startRow":38,"startColumn":30,"endRow":38,"endColumn":34},"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"text":"StringLiteralSegmentList"},{"type":"other","id":434,"parent":433,"range":{"endColumn":34,"endRow":38,"startRow":38,"startColumn":30},"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"kind":"stringSegment("name")","text":"name"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"text":"StringSegment"},{"range":{"startRow":38,"startColumn":30,"endRow":38,"endColumn":34},"structure":[],"text":"name","token":{"trailingTrivia":"","kind":"stringSegment("name")","leadingTrivia":""},"type":"other","parent":434,"id":435},{"range":{"startRow":38,"startColumn":34,"endRow":38,"endColumn":35},"structure":[],"text":""","token":{"trailingTrivia":"","kind":"stringQuote","leadingTrivia":""},"type":"other","parent":431,"id":436},{"range":{"startRow":38,"startColumn":35,"endRow":38,"endColumn":36},"structure":[],"text":"]","token":{"trailingTrivia":"␣<\/span>","kind":"rightSquare","leadingTrivia":""},"type":"other","parent":425,"id":437},{"type":"collection","id":438,"parent":425,"range":{"startRow":38,"startColumn":37,"endRow":38,"endColumn":37},"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"text":"MultipleTrailingClosureElementList"},{"range":{"endColumn":41,"startRow":38,"startColumn":37,"endRow":38},"structure":[],"text":"else","token":{"kind":"keyword(SwiftSyntax.Keyword.else)","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"type":"other","parent":415,"id":439},{"type":"other","id":440,"parent":415,"range":{"endColumn":6,"startRow":38,"startColumn":42,"endRow":41},"structure":[{"name":"unexpectedBeforeLeftBrace","value":{"text":"nil"}},{"name":"leftBrace","value":{"text":"{","kind":"leftBrace"}},{"name":"unexpectedBetweenLeftBraceAndStatements","value":{"text":"nil"}},{"ref":"CodeBlockItemListSyntax","name":"statements","value":{"text":"CodeBlockItemListSyntax"}},{"value":{"text":"nil"},"name":"unexpectedBetweenStatementsAndRightBrace"},{"value":{"text":"}","kind":"rightBrace"},"name":"rightBrace"},{"value":{"text":"nil"},"name":"unexpectedAfterRightBrace"}],"text":"CodeBlock"},{"range":{"endRow":38,"endColumn":43,"startColumn":42,"startRow":38},"structure":[],"text":"{","token":{"trailingTrivia":"","leadingTrivia":"","kind":"leftBrace"},"parent":440,"type":"other","id":441},{"text":"CodeBlockItemList","range":{"endRow":40,"endColumn":15,"startColumn":9,"startRow":39},"parent":440,"type":"collection","structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"2"}}],"id":442},{"text":"CodeBlockItem","range":{"startColumn":9,"startRow":39,"endColumn":34,"endRow":39},"parent":442,"type":"other","structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"FunctionCallExprSyntax","name":"item","value":{"text":"FunctionCallExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":443},{"text":"FunctionCallExpr","range":{"startColumn":9,"startRow":39,"endRow":39,"endColumn":34},"parent":443,"type":"expr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"calledExpression"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"kind":"leftParen","text":"("},"name":"leftParen"},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"name":"arguments","ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"kind":"rightParen","text":")"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"name":"additionalTrailingClosures","ref":"MultipleTrailingClosureElementListSyntax","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"id":444},{"parent":444,"range":{"endRow":39,"startColumn":9,"startRow":39,"endColumn":14},"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"print","kind":"identifier("print")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"text":"DeclReferenceExpr","type":"expr","id":445},{"range":{"startRow":39,"startColumn":9,"endRow":39,"endColumn":14},"structure":[],"text":"print","token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","kind":"identifier("print")","trailingTrivia":""},"parent":445,"type":"other","id":446},{"range":{"endColumn":15,"endRow":39,"startRow":39,"startColumn":14},"structure":[],"text":"(","token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""},"parent":444,"type":"other","id":447},{"type":"collection","text":"LabeledExprList","id":448,"parent":444,"range":{"startColumn":15,"endRow":39,"startRow":39,"endColumn":33},"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"type":"other","text":"LabeledExpr","id":449,"parent":448,"range":{"endRow":39,"endColumn":33,"startRow":39,"startColumn":15},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"StringLiteralExprSyntax"},"name":"expression","ref":"StringLiteralExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}]},{"type":"expr","text":"StringLiteralExpr","id":450,"parent":449,"range":{"startRow":39,"endRow":39,"startColumn":15,"endColumn":33},"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"name":"segments","ref":"StringLiteralSegmentListSyntax","value":{"text":"StringLiteralSegmentListSyntax"}},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"kind":"stringQuote","text":"""}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}]},{"range":{"startRow":39,"endRow":39,"endColumn":16,"startColumn":15},"structure":[],"text":""","token":{"kind":"stringQuote","leadingTrivia":"","trailingTrivia":""},"parent":450,"type":"other","id":451},{"text":"StringLiteralSegmentList","id":452,"parent":450,"range":{"startRow":39,"endRow":39,"endColumn":32,"startColumn":16},"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"1"}}],"type":"collection"},{"text":"StringSegment","id":453,"parent":452,"range":{"startRow":39,"startColumn":16,"endRow":39,"endColumn":32},"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":"No name provided","kind":"stringSegment("No name provided")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"type":"other"},{"range":{"endRow":39,"startColumn":16,"startRow":39,"endColumn":32},"structure":[],"text":"No␣<\/span>name␣<\/span>provided","token":{"kind":"stringSegment("No name provided")","trailingTrivia":"","leadingTrivia":""},"parent":453,"type":"other","id":454},{"range":{"endRow":39,"startColumn":32,"startRow":39,"endColumn":33},"structure":[],"text":""","token":{"kind":"stringQuote","trailingTrivia":"","leadingTrivia":""},"parent":450,"type":"other","id":455},{"range":{"endRow":39,"startColumn":33,"endColumn":34,"startRow":39},"structure":[],"text":")","token":{"kind":"rightParen","trailingTrivia":"","leadingTrivia":""},"type":"other","parent":444,"id":456},{"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"range":{"startColumn":34,"startRow":39,"endRow":39,"endColumn":34},"text":"MultipleTrailingClosureElementList","type":"collection","parent":444,"id":457},{"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"ReturnStmtSyntax"},"ref":"ReturnStmtSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"range":{"startRow":40,"startColumn":9,"endRow":40,"endColumn":15},"text":"CodeBlockItem","type":"other","parent":442,"id":458},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeReturnKeyword"},{"value":{"kind":"keyword(SwiftSyntax.Keyword.return)","text":"return"},"name":"returnKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenReturnKeywordAndExpression"},{"value":{"text":"nil"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedAfterExpression"}],"range":{"endRow":40,"endColumn":15,"startRow":40,"startColumn":9},"text":"ReturnStmt","type":"other","parent":458,"id":459},{"type":"other","id":460,"range":{"endColumn":15,"startColumn":9,"startRow":40,"endRow":40},"parent":459,"token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"","kind":"keyword(SwiftSyntax.Keyword.return)"},"structure":[],"text":"return"},{"type":"other","id":461,"range":{"endColumn":6,"startColumn":5,"startRow":41,"endRow":41},"parent":440,"token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"","kind":"rightBrace"},"structure":[],"text":"}"},{"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"GuardStmtSyntax","value":{"text":"GuardStmtSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"range":{"endColumn":6,"startColumn":5,"startRow":43,"endRow":46},"text":"CodeBlockItem","type":"other","parent":413,"id":462},{"type":"other","range":{"endColumn":6,"endRow":46,"startRow":43,"startColumn":5},"parent":462,"text":"GuardStmt","id":463,"structure":[{"name":"unexpectedBeforeGuardKeyword","value":{"text":"nil"}},{"name":"guardKeyword","value":{"kind":"keyword(SwiftSyntax.Keyword.guard)","text":"guard"}},{"name":"unexpectedBetweenGuardKeywordAndConditions","value":{"text":"nil"}},{"name":"conditions","ref":"ConditionElementListSyntax","value":{"text":"ConditionElementListSyntax"}},{"name":"unexpectedBetweenConditionsAndElseKeyword","value":{"text":"nil"}},{"name":"elseKeyword","value":{"kind":"keyword(SwiftSyntax.Keyword.else)","text":"else"}},{"name":"unexpectedBetweenElseKeywordAndBody","value":{"text":"nil"}},{"name":"body","ref":"CodeBlockSyntax","value":{"text":"CodeBlockSyntax"}},{"name":"unexpectedAfterBody","value":{"text":"nil"}}]},{"id":464,"structure":[],"range":{"startRow":43,"startColumn":5,"endRow":43,"endColumn":10},"parent":463,"token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.guard)"},"text":"guard","type":"other"},{"type":"collection","range":{"startRow":43,"startColumn":11,"endRow":43,"endColumn":57},"parent":463,"text":"ConditionElementList","id":465,"structure":[{"name":"Element","value":{"text":"ConditionElementSyntax"}},{"name":"Count","value":{"text":"2"}}]},{"range":{"endRow":43,"startRow":43,"endColumn":35,"startColumn":11},"type":"other","text":"ConditionElement","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCondition"},{"value":{"text":"OptionalBindingConditionSyntax"},"name":"condition","ref":"OptionalBindingConditionSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenConditionAndTrailingComma"},{"value":{"text":",","kind":"comma"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"id":466,"parent":465},{"range":{"endColumn":34,"startColumn":11,"endRow":43,"startRow":43},"type":"other","text":"OptionalBindingCondition","structure":[{"name":"unexpectedBeforeBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"text":"let","kind":"keyword(SwiftSyntax.Keyword.let)"}},{"name":"unexpectedBetweenBindingSpecifierAndPattern","value":{"text":"nil"}},{"name":"pattern","ref":"IdentifierPatternSyntax","value":{"text":"IdentifierPatternSyntax"}},{"name":"unexpectedBetweenPatternAndTypeAnnotation","value":{"text":"nil"}},{"name":"typeAnnotation","value":{"text":"nil"}},{"name":"unexpectedBetweenTypeAnnotationAndInitializer","value":{"text":"nil"}},{"name":"initializer","ref":"InitializerClauseSyntax","value":{"text":"InitializerClauseSyntax"}},{"name":"unexpectedAfterInitializer","value":{"text":"nil"}}],"id":467,"parent":466},{"structure":[],"id":468,"range":{"startColumn":11,"endRow":43,"startRow":43,"endColumn":14},"parent":467,"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.let)"},"text":"let","type":"other"},{"text":"IdentifierPattern","id":469,"structure":[{"name":"unexpectedBeforeIdentifier","value":{"text":"nil"}},{"name":"identifier","value":{"kind":"identifier("age")","text":"age"}},{"name":"unexpectedAfterIdentifier","value":{"text":"nil"}}],"type":"pattern","parent":467,"range":{"startColumn":15,"endColumn":18,"endRow":43,"startRow":43}},{"id":470,"type":"other","parent":469,"range":{"endColumn":18,"startRow":43,"startColumn":15,"endRow":43},"token":{"kind":"identifier("age")","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"text":"age","structure":[]},{"text":"InitializerClause","id":471,"structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"text":"=","kind":"equal"}},{"name":"unexpectedBetweenEqualAndValue","value":{"text":"nil"}},{"name":"value","value":{"text":"SubscriptCallExprSyntax"},"ref":"SubscriptCallExprSyntax"},{"name":"unexpectedAfterValue","value":{"text":"nil"}}],"type":"other","parent":467,"range":{"endColumn":34,"startRow":43,"startColumn":19,"endRow":43}},{"id":472,"type":"other","parent":471,"range":{"endRow":43,"endColumn":20,"startColumn":19,"startRow":43},"token":{"kind":"equal","trailingTrivia":"␣<\/span>","leadingTrivia":""},"text":"=","structure":[]},{"text":"SubscriptCallExpr","id":473,"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedBetweenCalledExpressionAndLeftSquare","value":{"text":"nil"}},{"name":"leftSquare","value":{"kind":"leftSquare","text":"["}},{"name":"unexpectedBetweenLeftSquareAndArguments","value":{"text":"nil"}},{"name":"arguments","value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax"},{"name":"unexpectedBetweenArgumentsAndRightSquare","value":{"text":"nil"}},{"name":"rightSquare","value":{"kind":"rightSquare","text":"]"}},{"name":"unexpectedBetweenRightSquareAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"type":"expr","parent":471,"range":{"endRow":43,"endColumn":34,"startColumn":21,"startRow":43}},{"parent":473,"range":{"startColumn":21,"endRow":43,"endColumn":27,"startRow":43},"id":474,"text":"DeclReferenceExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("person")","text":"person"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr"},{"id":475,"type":"other","parent":474,"range":{"startRow":43,"endRow":43,"endColumn":27,"startColumn":21},"token":{"trailingTrivia":"","kind":"identifier("person")","leadingTrivia":""},"text":"person","structure":[]},{"id":476,"type":"other","parent":473,"range":{"startRow":43,"endRow":43,"endColumn":28,"startColumn":27},"token":{"trailingTrivia":"","kind":"leftSquare","leadingTrivia":""},"text":"[","structure":[]},{"parent":473,"range":{"startRow":43,"endRow":43,"endColumn":33,"startColumn":28},"id":477,"text":"LabeledExprList","structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection"},{"parent":477,"text":"LabeledExpr","range":{"endRow":43,"startRow":43,"endColumn":33,"startColumn":28},"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other","id":478},{"parent":478,"text":"StringLiteralExpr","range":{"endColumn":33,"startRow":43,"endRow":43,"startColumn":28},"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"kind":"stringQuote","text":"""}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"name":"segments","value":{"text":"StringLiteralSegmentListSyntax"},"ref":"StringLiteralSegmentListSyntax"},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"type":"expr","id":479},{"id":480,"text":""","parent":479,"range":{"endColumn":29,"startColumn":28,"endRow":43,"startRow":43},"token":{"kind":"stringQuote","trailingTrivia":"","leadingTrivia":""},"structure":[],"type":"other"},{"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"parent":479,"type":"collection","range":{"endColumn":32,"startColumn":29,"endRow":43,"startRow":43},"id":481,"text":"StringLiteralSegmentList"},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"age","kind":"stringSegment("age")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"parent":481,"type":"other","range":{"startRow":43,"startColumn":29,"endRow":43,"endColumn":32},"id":482,"text":"StringSegment"},{"id":483,"text":"age","parent":482,"range":{"startRow":43,"endRow":43,"startColumn":29,"endColumn":32},"token":{"kind":"stringSegment("age")","leadingTrivia":"","trailingTrivia":""},"structure":[],"type":"other"},{"id":484,"text":""","parent":479,"range":{"startRow":43,"endRow":43,"startColumn":32,"endColumn":33},"token":{"kind":"stringQuote","leadingTrivia":"","trailingTrivia":""},"structure":[],"type":"other"},{"id":485,"text":"]","parent":473,"range":{"startRow":43,"endRow":43,"startColumn":33,"endColumn":34},"token":{"kind":"rightSquare","leadingTrivia":"","trailingTrivia":""},"structure":[],"type":"other"},{"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"parent":473,"type":"collection","range":{"startRow":43,"endRow":43,"startColumn":34,"endColumn":34},"id":486,"text":"MultipleTrailingClosureElementList"},{"id":487,"text":",","parent":466,"range":{"startRow":43,"endRow":43,"startColumn":34,"endColumn":35},"token":{"trailingTrivia":"␣<\/span>","kind":"comma","leadingTrivia":""},"structure":[],"type":"other"},{"parent":465,"id":488,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCondition"},{"value":{"text":"OptionalBindingConditionSyntax"},"name":"condition","ref":"OptionalBindingConditionSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenConditionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"ConditionElement","range":{"startRow":43,"endRow":43,"startColumn":36,"endColumn":57}},{"parent":488,"id":489,"structure":[{"name":"unexpectedBeforeBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"kind":"keyword(SwiftSyntax.Keyword.let)","text":"let"}},{"name":"unexpectedBetweenBindingSpecifierAndPattern","value":{"text":"nil"}},{"name":"pattern","value":{"text":"IdentifierPatternSyntax"},"ref":"IdentifierPatternSyntax"},{"name":"unexpectedBetweenPatternAndTypeAnnotation","value":{"text":"nil"}},{"name":"typeAnnotation","value":{"text":"nil"}},{"name":"unexpectedBetweenTypeAnnotationAndInitializer","value":{"text":"nil"}},{"name":"initializer","value":{"text":"InitializerClauseSyntax"},"ref":"InitializerClauseSyntax"},{"name":"unexpectedAfterInitializer","value":{"text":"nil"}}],"type":"other","text":"OptionalBindingCondition","range":{"startColumn":36,"startRow":43,"endColumn":57,"endRow":43}},{"id":490,"text":"let","parent":489,"range":{"endColumn":39,"startColumn":36,"endRow":43,"startRow":43},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.let)"},"structure":[],"type":"other"},{"text":"IdentifierPattern","parent":489,"id":491,"range":{"endColumn":46,"startColumn":40,"endRow":43,"startRow":43},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"kind":"identifier("ageInt")","text":"ageInt"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"type":"pattern"},{"id":492,"type":"other","parent":491,"range":{"endRow":43,"startColumn":40,"startRow":43,"endColumn":46},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"identifier("ageInt")"},"text":"ageInt","structure":[]},{"text":"InitializerClause","parent":489,"id":493,"range":{"endRow":43,"startColumn":47,"startRow":43,"endColumn":57},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeEqual"},{"value":{"kind":"equal","text":"="},"name":"equal"},{"value":{"text":"nil"},"name":"unexpectedBetweenEqualAndValue"},{"value":{"text":"FunctionCallExprSyntax"},"name":"value","ref":"FunctionCallExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterValue"}],"type":"other"},{"id":494,"type":"other","parent":493,"range":{"startColumn":47,"endRow":43,"endColumn":48,"startRow":43},"token":{"trailingTrivia":"␣<\/span>","kind":"equal","leadingTrivia":""},"text":"=","structure":[]},{"text":"FunctionCallExpr","parent":493,"id":495,"range":{"startColumn":49,"endRow":43,"endColumn":57,"startRow":43},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"calledExpression"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"},"name":"arguments"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"ref":"MultipleTrailingClosureElementListSyntax","value":{"text":"MultipleTrailingClosureElementListSyntax"},"name":"additionalTrailingClosures"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}],"type":"expr"},{"id":496,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("Int")","text":"Int"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"text":"DeclReferenceExpr","range":{"endColumn":52,"startRow":43,"startColumn":49,"endRow":43},"parent":495,"type":"expr"},{"id":497,"type":"other","range":{"startRow":43,"endRow":43,"endColumn":52,"startColumn":49},"parent":496,"token":{"kind":"identifier("Int")","trailingTrivia":"","leadingTrivia":""},"structure":[],"text":"Int"},{"id":498,"type":"other","range":{"startRow":43,"endRow":43,"endColumn":53,"startColumn":52},"parent":495,"token":{"kind":"leftParen","trailingTrivia":"","leadingTrivia":""},"structure":[],"text":"("},{"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","parent":495,"text":"LabeledExprList","id":499,"range":{"startColumn":53,"endColumn":56,"endRow":43,"startRow":43}},{"id":500,"parent":499,"range":{"startRow":43,"endRow":43,"startColumn":53,"endColumn":56},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"LabeledExpr"},{"id":501,"parent":500,"range":{"startRow":43,"endColumn":56,"startColumn":53,"endRow":43},"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"age","kind":"identifier("age")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"type":"expr","text":"DeclReferenceExpr"},{"id":502,"text":"age","parent":501,"range":{"endRow":43,"startRow":43,"startColumn":53,"endColumn":56},"token":{"leadingTrivia":"","kind":"identifier("age")","trailingTrivia":""},"structure":[],"type":"other"},{"type":"other","id":503,"range":{"endRow":43,"startRow":43,"endColumn":57,"startColumn":56},"parent":495,"token":{"kind":"rightParen","trailingTrivia":"␣<\/span>","leadingTrivia":""},"text":")","structure":[]},{"text":"MultipleTrailingClosureElementList","range":{"endRow":43,"startRow":43,"endColumn":58,"startColumn":58},"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"parent":495,"type":"collection","id":504},{"type":"other","id":505,"range":{"startColumn":58,"startRow":43,"endRow":43,"endColumn":62},"parent":463,"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.else)"},"text":"else","structure":[]},{"text":"CodeBlock","range":{"startColumn":63,"startRow":43,"endRow":46,"endColumn":6},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftBrace"},{"value":{"kind":"leftBrace","text":"{"},"name":"leftBrace"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftBraceAndStatements"},{"value":{"text":"CodeBlockItemListSyntax"},"name":"statements","ref":"CodeBlockItemListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenStatementsAndRightBrace"},{"value":{"text":"}","kind":"rightBrace"},"name":"rightBrace"},{"value":{"text":"nil"},"name":"unexpectedAfterRightBrace"}],"parent":463,"type":"other","id":506},{"range":{"endRow":43,"startColumn":63,"startRow":43,"endColumn":64},"text":"{","structure":[],"parent":506,"type":"other","token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftBrace"},"id":507},{"text":"CodeBlockItemList","range":{"endRow":45,"startColumn":9,"startRow":44,"endColumn":15},"structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"2"},"name":"Count"}],"parent":506,"type":"collection","id":508},{"text":"CodeBlockItem","range":{"endColumn":38,"endRow":44,"startColumn":9,"startRow":44},"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"FunctionCallExprSyntax","name":"item","value":{"text":"FunctionCallExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"parent":508,"type":"other","id":509},{"range":{"startColumn":9,"endRow":44,"startRow":44,"endColumn":38},"id":510,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"name":"calledExpression","ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"kind":"leftParen","text":"("},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"value":{"text":"LabeledExprListSyntax"},"name":"arguments","ref":"LabeledExprListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"value":{"text":"MultipleTrailingClosureElementListSyntax"},"name":"additionalTrailingClosures","ref":"MultipleTrailingClosureElementListSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}],"text":"FunctionCallExpr","type":"expr","parent":509},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"print","kind":"identifier("print")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"id":511,"parent":510,"text":"DeclReferenceExpr","type":"expr","range":{"startRow":44,"endRow":44,"startColumn":9,"endColumn":14}},{"structure":[],"text":"print","parent":511,"type":"other","range":{"endColumn":14,"endRow":44,"startColumn":9,"startRow":44},"token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"","kind":"identifier("print")"},"id":512},{"structure":[],"text":"(","parent":510,"type":"other","range":{"endColumn":15,"endRow":44,"startColumn":14,"startRow":44},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"id":513},{"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":514,"parent":510,"text":"LabeledExprList","type":"collection","range":{"endColumn":37,"endRow":44,"startColumn":15,"startRow":44}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"ref":"StringLiteralExprSyntax","name":"expression","value":{"text":"StringLiteralExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":515,"parent":514,"text":"LabeledExpr","type":"other","range":{"endColumn":37,"startColumn":15,"endRow":44,"startRow":44}},{"id":516,"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"name":"segments","value":{"text":"StringLiteralSegmentListSyntax"},"ref":"StringLiteralSegmentListSyntax"},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"kind":"stringQuote","text":"""}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"range":{"endRow":44,"startRow":44,"startColumn":15,"endColumn":37},"text":"StringLiteralExpr","type":"expr","parent":515},{"structure":[],"range":{"endColumn":16,"startRow":44,"startColumn":15,"endRow":44},"text":""","type":"other","parent":516,"token":{"leadingTrivia":"","kind":"stringQuote","trailingTrivia":""},"id":517},{"range":{"startRow":44,"startColumn":16,"endColumn":36,"endRow":44},"id":518,"parent":516,"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"text":"StringLiteralSegmentList","type":"collection"},{"range":{"startColumn":16,"startRow":44,"endRow":44,"endColumn":36},"id":519,"parent":518,"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"kind":"stringSegment("Invalid age provided")","text":"Invalid age provided"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"text":"StringSegment","type":"other"},{"range":{"startRow":44,"endColumn":36,"startColumn":16,"endRow":44},"structure":[],"parent":519,"text":"Invalid␣<\/span>age␣<\/span>provided","type":"other","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("Invalid age provided")"},"id":520},{"range":{"startRow":44,"endColumn":37,"startColumn":36,"endRow":44},"structure":[],"parent":516,"text":""","type":"other","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"id":521},{"range":{"startRow":44,"endColumn":38,"startColumn":37,"endRow":44},"structure":[],"parent":510,"text":")","type":"other","token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"id":522},{"range":{"startRow":44,"endColumn":38,"startColumn":38,"endRow":44},"id":523,"parent":510,"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"text":"MultipleTrailingClosureElementList","type":"collection"},{"range":{"endColumn":15,"startColumn":9,"startRow":45,"endRow":45},"id":524,"parent":508,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"ReturnStmtSyntax","name":"item","value":{"text":"ReturnStmtSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"text":"CodeBlockItem","type":"other"},{"text":"ReturnStmt","range":{"endRow":45,"startColumn":9,"endColumn":15,"startRow":45},"structure":[{"name":"unexpectedBeforeReturnKeyword","value":{"text":"nil"}},{"name":"returnKeyword","value":{"kind":"keyword(SwiftSyntax.Keyword.return)","text":"return"}},{"name":"unexpectedBetweenReturnKeywordAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"nil"}},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}],"type":"other","parent":524,"id":525},{"range":{"endRow":45,"startRow":45,"startColumn":9,"endColumn":15},"text":"return","structure":[],"type":"other","parent":525,"token":{"kind":"keyword(SwiftSyntax.Keyword.return)","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":""},"id":526},{"range":{"endRow":46,"startRow":46,"startColumn":5,"endColumn":6},"text":"}","structure":[],"type":"other","parent":506,"token":{"kind":"rightBrace","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":""},"id":527},{"text":"CodeBlockItem","range":{"endRow":48,"startRow":48,"startColumn":5,"endColumn":56},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"FunctionCallExprSyntax","value":{"text":"FunctionCallExprSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","parent":413,"id":528},{"text":"FunctionCallExpr","range":{"endRow":48,"startRow":48,"startColumn":5,"endColumn":56},"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"name":"arguments","ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"name":"additionalTrailingClosures","ref":"MultipleTrailingClosureElementListSyntax","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"type":"expr","parent":528,"id":529},{"id":530,"parent":529,"range":{"startRow":48,"startColumn":5,"endRow":48,"endColumn":10},"text":"DeclReferenceExpr","structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"print","kind":"identifier("print")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"type":"expr"},{"range":{"startColumn":5,"endColumn":10,"endRow":48,"startRow":48},"text":"print","parent":530,"structure":[],"type":"other","token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"","kind":"identifier("print")"},"id":531},{"range":{"startRow":48,"startColumn":10,"endRow":48,"endColumn":11},"type":"other","parent":529,"text":"(","structure":[],"token":{"trailingTrivia":"","leadingTrivia":"","kind":"leftParen"},"id":532},{"type":"collection","id":533,"range":{"startRow":48,"startColumn":11,"endRow":48,"endColumn":55},"parent":529,"text":"LabeledExprList","structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}]},{"type":"other","id":534,"range":{"startRow":48,"startColumn":11,"endRow":48,"endColumn":55},"parent":533,"text":"LabeledExpr","structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}]},{"type":"expr","id":535,"range":{"startRow":48,"startColumn":11,"endRow":48,"endColumn":55},"parent":534,"text":"StringLiteralExpr","structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"kind":"stringQuote","text":"""}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"name":"segments","ref":"StringLiteralSegmentListSyntax","value":{"text":"StringLiteralSegmentListSyntax"}},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"kind":"stringQuote","text":"""}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}]},{"range":{"startColumn":11,"endRow":48,"startRow":48,"endColumn":12},"type":"other","parent":535,"structure":[],"text":""","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"id":536},{"id":537,"type":"collection","parent":535,"range":{"startColumn":12,"endRow":48,"startRow":48,"endColumn":54},"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"5"}}],"text":"StringLiteralSegmentList"},{"id":538,"type":"other","parent":537,"range":{"startRow":48,"startColumn":12,"endRow":48,"endColumn":18},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"kind":"stringSegment("Hello ")","text":"Hello "},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"text":"StringSegment"},{"range":{"endColumn":18,"endRow":48,"startColumn":12,"startRow":48},"type":"other","parent":538,"structure":[],"text":"Hello␣<\/span>","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("Hello ")"},"id":539},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBackslash"},{"name":"backslash","value":{"text":"\\","kind":"backslash"}},{"name":"unexpectedBetweenBackslashAndPounds","value":{"text":"nil"}},{"name":"pounds","value":{"text":"nil"}},{"name":"unexpectedBetweenPoundsAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"kind":"leftParen","text":"("}},{"name":"unexpectedBetweenLeftParenAndExpressions","value":{"text":"nil"}},{"ref":"LabeledExprListSyntax","name":"expressions","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenExpressionsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}],"parent":537,"range":{"endRow":48,"startRow":48,"startColumn":18,"endColumn":25},"type":"other","id":540,"text":"ExpressionSegment"},{"range":{"endColumn":19,"startColumn":18,"endRow":48,"startRow":48},"type":"other","parent":540,"structure":[],"text":"\\","token":{"leadingTrivia":"","trailingTrivia":"","kind":"backslash"},"id":541},{"range":{"endColumn":20,"startColumn":19,"endRow":48,"startRow":48},"type":"other","parent":540,"structure":[],"text":"(","token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"id":542},{"type":"collection","parent":540,"range":{"endColumn":24,"startColumn":20,"endRow":48,"startRow":48},"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"id":543,"text":"LabeledExprList"},{"type":"other","parent":543,"range":{"endRow":48,"startRow":48,"endColumn":24,"startColumn":20},"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"name":"expression","ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"id":544,"text":"LabeledExpr"},{"type":"expr","id":545,"parent":544,"text":"DeclReferenceExpr","range":{"endColumn":24,"startColumn":20,"startRow":48,"endRow":48},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("name")","text":"name"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}]},{"range":{"endRow":48,"startRow":48,"startColumn":20,"endColumn":24},"type":"other","parent":545,"text":"name","structure":[],"token":{"kind":"identifier("name")","trailingTrivia":"","leadingTrivia":""},"id":546},{"range":{"endRow":48,"startRow":48,"startColumn":24,"endColumn":25},"type":"other","parent":540,"text":")","structure":[],"token":{"kind":"rightParen","trailingTrivia":"","leadingTrivia":""},"id":547},{"type":"other","id":548,"parent":537,"text":"StringSegment","range":{"endRow":48,"startRow":48,"startColumn":25,"endColumn":35},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"kind":"stringSegment(", you are ")","text":", you are "},"name":"content"},{"name":"unexpectedAfterContent","value":{"text":"nil"}}]},{"structure":[],"text":",␣<\/span>you␣<\/span>are␣<\/span>","parent":548,"range":{"endRow":48,"endColumn":35,"startRow":48,"startColumn":25},"type":"other","token":{"kind":"stringSegment(", you are ")","trailingTrivia":"","leadingTrivia":""},"id":549},{"id":550,"parent":537,"text":"ExpressionSegment","structure":[{"name":"unexpectedBeforeBackslash","value":{"text":"nil"}},{"name":"backslash","value":{"kind":"backslash","text":"\\"}},{"name":"unexpectedBetweenBackslashAndPounds","value":{"text":"nil"}},{"name":"pounds","value":{"text":"nil"}},{"name":"unexpectedBetweenPoundsAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndExpressions","value":{"text":"nil"}},{"ref":"LabeledExprListSyntax","name":"expressions","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenExpressionsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"kind":"rightParen","text":")"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}],"range":{"endRow":48,"endColumn":44,"startRow":48,"startColumn":35},"type":"other"},{"structure":[],"text":"\\","parent":550,"range":{"startColumn":35,"endRow":48,"startRow":48,"endColumn":36},"type":"other","token":{"kind":"backslash","trailingTrivia":"","leadingTrivia":""},"id":551},{"structure":[],"text":"(","parent":550,"range":{"startColumn":36,"endRow":48,"startRow":48,"endColumn":37},"type":"other","token":{"kind":"leftParen","trailingTrivia":"","leadingTrivia":""},"id":552},{"id":553,"text":"LabeledExprList","parent":550,"range":{"endColumn":43,"endRow":48,"startColumn":37,"startRow":48},"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection"},{"range":{"endColumn":43,"endRow":48,"startColumn":37,"startRow":48},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"name":"expression","ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"id":554,"type":"other","text":"LabeledExpr","parent":553},{"range":{"endRow":48,"startRow":48,"endColumn":43,"startColumn":37},"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"ageInt","kind":"identifier("ageInt")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":555,"type":"expr","text":"DeclReferenceExpr","parent":554},{"range":{"endRow":48,"startColumn":37,"endColumn":43,"startRow":48},"structure":[],"type":"other","text":"ageInt","parent":555,"token":{"leadingTrivia":"","kind":"identifier("ageInt")","trailingTrivia":""},"id":556},{"structure":[],"token":{"trailingTrivia":"","leadingTrivia":"","kind":"rightParen"},"range":{"endRow":48,"startColumn":43,"endColumn":44,"startRow":48},"type":"other","text":")","parent":550,"id":557},{"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"kind":"stringSegment(" years old")","text":" years old"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"text":"StringSegment","parent":537,"type":"other","range":{"endRow":48,"startColumn":44,"endColumn":54,"startRow":48},"id":558},{"structure":[],"token":{"kind":"stringSegment(" years old")","trailingTrivia":"","leadingTrivia":""},"range":{"endColumn":54,"startColumn":44,"endRow":48,"startRow":48},"type":"other","text":"␣<\/span>years␣<\/span>old","parent":558,"id":559},{"structure":[],"token":{"kind":"stringQuote","trailingTrivia":"","leadingTrivia":""},"range":{"endColumn":55,"startColumn":54,"endRow":48,"startRow":48},"type":"other","text":""","parent":535,"id":560},{"structure":[],"token":{"kind":"rightParen","trailingTrivia":"","leadingTrivia":""},"range":{"endColumn":56,"startColumn":55,"endRow":48,"startRow":48},"type":"other","text":")","parent":529,"id":561},{"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"text":"MultipleTrailingClosureElementList","parent":529,"type":"collection","range":{"endColumn":56,"startColumn":56,"endRow":48,"startRow":48},"id":562},{"structure":[],"token":{"kind":"rightBrace","leadingTrivia":"↲<\/span>","trailingTrivia":""},"range":{"endRow":49,"endColumn":2,"startColumn":1,"startRow":49},"type":"other","text":"}","parent":411,"id":563},{"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","ref":"VariableDeclSyntax","value":{"text":"VariableDeclSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"text":"CodeBlockItem","parent":1,"type":"other","range":{"endRow":53,"endColumn":26,"startColumn":1,"startRow":53},"id":564},{"text":"VariableDecl","id":565,"range":{"endColumn":26,"endRow":53,"startRow":53,"startColumn":1},"type":"decl","parent":564,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"ref":"AttributeListSyntax","name":"attributes","value":{"text":"AttributeListSyntax"}},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"ref":"DeclModifierListSyntax","name":"modifiers","value":{"text":"DeclModifierListSyntax"}},{"name":"unexpectedBetweenModifiersAndBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"text":"let","kind":"keyword(SwiftSyntax.Keyword.let)"}},{"name":"unexpectedBetweenBindingSpecifierAndBindings","value":{"text":"nil"}},{"ref":"PatternBindingListSyntax","name":"bindings","value":{"text":"PatternBindingListSyntax"}},{"name":"unexpectedAfterBindings","value":{"text":"nil"}}]},{"text":"AttributeList","id":566,"range":{"endRow":49,"startRow":49,"startColumn":2,"endColumn":2},"type":"collection","parent":565,"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}]},{"text":"DeclModifierList","id":567,"range":{"startRow":49,"endRow":49,"endColumn":2,"startColumn":2},"type":"collection","parent":565,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}]},{"structure":[],"token":{"leadingTrivia":"↲<\/span>↲<\/span>\/\/␣<\/span>MARK:␣<\/span>-␣<\/span>Switch␣<\/span>Statements<\/span>↲<\/span>\/\/␣<\/span>Switch␣<\/span>with␣<\/span>range␣<\/span>matching<\/span>↲<\/span>","kind":"keyword(SwiftSyntax.Keyword.let)","trailingTrivia":"␣<\/span>"},"range":{"endRow":53,"startColumn":1,"endColumn":4,"startRow":53},"type":"other","text":"let","parent":565,"id":568},{"type":"collection","parent":565,"id":569,"text":"PatternBindingList","structure":[{"name":"Element","value":{"text":"PatternBindingSyntax"}},{"name":"Count","value":{"text":"1"}}],"range":{"endColumn":26,"startRow":53,"startColumn":5,"endRow":53}},{"type":"other","parent":569,"id":570,"text":"PatternBinding","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"value":{"text":"IdentifierPatternSyntax"},"ref":"IdentifierPatternSyntax","name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTypeAnnotation"},{"value":{"text":"nil"},"name":"typeAnnotation"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAnnotationAndInitializer"},{"value":{"text":"InitializerClauseSyntax"},"ref":"InitializerClauseSyntax","name":"initializer"},{"value":{"text":"nil"},"name":"unexpectedBetweenInitializerAndAccessorBlock"},{"value":{"text":"nil"},"name":"accessorBlock"},{"value":{"text":"nil"},"name":"unexpectedBetweenAccessorBlockAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"range":{"startColumn":5,"startRow":53,"endRow":53,"endColumn":26}},{"type":"pattern","parent":570,"id":571,"text":"IdentifierPattern","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"text":"approximateCount","kind":"identifier("approximateCount")"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"range":{"startRow":53,"endColumn":21,"startColumn":5,"endRow":53}},{"structure":[],"token":{"trailingTrivia":"␣<\/span>","kind":"identifier("approximateCount")","leadingTrivia":""},"range":{"startRow":53,"startColumn":5,"endRow":53,"endColumn":21},"type":"other","text":"approximateCount","parent":571,"id":572},{"parent":570,"range":{"startRow":53,"startColumn":22,"endRow":53,"endColumn":26},"type":"other","structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"text":"=","kind":"equal"}},{"name":"unexpectedBetweenEqualAndValue","value":{"text":"nil"}},{"ref":"IntegerLiteralExprSyntax","name":"value","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedAfterValue","value":{"text":"nil"}}],"id":573,"text":"InitializerClause"},{"structure":[],"token":{"trailingTrivia":"␣<\/span>","kind":"equal","leadingTrivia":""},"range":{"startRow":53,"endColumn":23,"endRow":53,"startColumn":22},"type":"other","text":"=","parent":573,"id":574},{"parent":573,"range":{"startRow":53,"endColumn":26,"endRow":53,"startColumn":24},"type":"expr","structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"62","kind":"integerLiteral("62")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"id":575,"text":"IntegerLiteralExpr"},{"structure":[],"token":{"kind":"integerLiteral("62")","trailingTrivia":"","leadingTrivia":""},"range":{"startColumn":24,"endColumn":26,"endRow":53,"startRow":53},"type":"other","text":"62","parent":575,"id":576},{"parent":1,"range":{"startColumn":1,"endColumn":44,"endRow":54,"startRow":54},"type":"other","structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"VariableDeclSyntax"},"ref":"VariableDeclSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":577,"text":"CodeBlockItem"},{"type":"decl","range":{"startRow":54,"startColumn":1,"endRow":54,"endColumn":44},"text":"VariableDecl","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttributes"},{"value":{"text":"AttributeListSyntax"},"ref":"AttributeListSyntax","name":"attributes"},{"value":{"text":"nil"},"name":"unexpectedBetweenAttributesAndModifiers"},{"value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax","name":"modifiers"},{"value":{"text":"nil"},"name":"unexpectedBetweenModifiersAndBindingSpecifier"},{"value":{"kind":"keyword(SwiftSyntax.Keyword.let)","text":"let"},"name":"bindingSpecifier"},{"value":{"text":"nil"},"name":"unexpectedBetweenBindingSpecifierAndBindings"},{"value":{"text":"PatternBindingListSyntax"},"ref":"PatternBindingListSyntax","name":"bindings"},{"value":{"text":"nil"},"name":"unexpectedAfterBindings"}],"id":578,"parent":577},{"type":"collection","range":{"startRow":53,"startColumn":26,"endRow":53,"endColumn":26},"text":"AttributeList","structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"id":579,"parent":578},{"type":"collection","range":{"endColumn":26,"endRow":53,"startColumn":26,"startRow":53},"text":"DeclModifierList","structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":580,"parent":578},{"structure":[],"token":{"kind":"keyword(SwiftSyntax.Keyword.let)","trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>"},"range":{"endRow":54,"startColumn":1,"startRow":54,"endColumn":4},"type":"other","text":"let","parent":578,"id":581},{"type":"collection","parent":578,"id":582,"text":"PatternBindingList","range":{"endRow":54,"startRow":54,"endColumn":44,"startColumn":5},"structure":[{"name":"Element","value":{"text":"PatternBindingSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"type":"other","parent":582,"id":583,"text":"PatternBinding","range":{"endRow":54,"startColumn":5,"endColumn":44,"startRow":54},"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"name":"pattern","value":{"text":"IdentifierPatternSyntax"},"ref":"IdentifierPatternSyntax"},{"name":"unexpectedBetweenPatternAndTypeAnnotation","value":{"text":"nil"}},{"name":"typeAnnotation","value":{"text":"nil"}},{"name":"unexpectedBetweenTypeAnnotationAndInitializer","value":{"text":"nil"}},{"name":"initializer","value":{"text":"InitializerClauseSyntax"},"ref":"InitializerClauseSyntax"},{"name":"unexpectedBetweenInitializerAndAccessorBlock","value":{"text":"nil"}},{"name":"accessorBlock","value":{"text":"nil"}},{"name":"unexpectedBetweenAccessorBlockAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}]},{"type":"pattern","parent":583,"id":584,"text":"IdentifierPattern","range":{"endColumn":18,"startRow":54,"startColumn":5,"endRow":54},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"text":"countedThings","kind":"identifier("countedThings")"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}]},{"structure":[],"token":{"kind":"identifier("countedThings")","trailingTrivia":"␣<\/span>","leadingTrivia":""},"range":{"startColumn":5,"endRow":54,"startRow":54,"endColumn":18},"type":"other","text":"countedThings","parent":584,"id":585},{"type":"other","structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"kind":"equal","text":"="}},{"name":"unexpectedBetweenEqualAndValue","value":{"text":"nil"}},{"ref":"StringLiteralExprSyntax","name":"value","value":{"text":"StringLiteralExprSyntax"}},{"name":"unexpectedAfterValue","value":{"text":"nil"}}],"id":586,"text":"InitializerClause","parent":583,"range":{"startColumn":19,"endRow":54,"startRow":54,"endColumn":44}},{"structure":[],"token":{"kind":"equal","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"startRow":54,"endRow":54,"startColumn":19,"endColumn":20},"type":"other","text":"=","parent":586,"id":587},{"type":"expr","structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"kind":"stringQuote","text":"""}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"ref":"StringLiteralSegmentListSyntax","name":"segments","value":{"text":"StringLiteralSegmentListSyntax"}},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"text":""","kind":"stringQuote"}},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"id":588,"text":"StringLiteralExpr","parent":586,"range":{"startRow":54,"endRow":54,"startColumn":21,"endColumn":44}},{"structure":[],"token":{"trailingTrivia":"","leadingTrivia":"","kind":"stringQuote"},"range":{"endColumn":22,"startColumn":21,"startRow":54,"endRow":54},"type":"other","text":""","parent":588,"id":589},{"type":"collection","parent":588,"id":590,"range":{"endColumn":43,"startColumn":22,"startRow":54,"endRow":54},"text":"StringLiteralSegmentList","structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"1"}}]},{"type":"other","parent":590,"id":591,"range":{"startColumn":22,"endRow":54,"endColumn":43,"startRow":54},"text":"StringSegment","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"kind":"stringSegment("moons orbiting Saturn")","text":"moons orbiting Saturn"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}]},{"structure":[],"token":{"kind":"stringSegment("moons orbiting Saturn")","trailingTrivia":"","leadingTrivia":""},"range":{"startColumn":22,"endRow":54,"startRow":54,"endColumn":43},"type":"other","text":"moons␣<\/span>orbiting␣<\/span>Saturn","parent":591,"id":592},{"structure":[],"token":{"kind":"stringQuote","trailingTrivia":"","leadingTrivia":""},"range":{"startColumn":43,"endRow":54,"startRow":54,"endColumn":44},"type":"other","text":""","parent":588,"id":593},{"type":"other","parent":1,"id":594,"range":{"startColumn":1,"endRow":55,"startRow":55,"endColumn":25},"text":"CodeBlockItem","structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"VariableDeclSyntax"},"ref":"VariableDeclSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}]},{"range":{"startRow":55,"endRow":55,"endColumn":25,"startColumn":1},"type":"decl","structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","ref":"AttributeListSyntax","value":{"text":"AttributeListSyntax"}},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","ref":"DeclModifierListSyntax","value":{"text":"DeclModifierListSyntax"}},{"name":"unexpectedBetweenModifiersAndBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"text":"let","kind":"keyword(SwiftSyntax.Keyword.let)"}},{"name":"unexpectedBetweenBindingSpecifierAndBindings","value":{"text":"nil"}},{"name":"bindings","ref":"PatternBindingListSyntax","value":{"text":"PatternBindingListSyntax"}},{"name":"unexpectedAfterBindings","value":{"text":"nil"}}],"text":"VariableDecl","id":595,"parent":594},{"range":{"endRow":54,"startRow":54,"endColumn":44,"startColumn":44},"type":"collection","structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"text":"AttributeList","id":596,"parent":595},{"range":{"endColumn":44,"startColumn":44,"startRow":54,"endRow":54},"type":"collection","structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"text":"DeclModifierList","id":597,"parent":595},{"structure":[],"token":{"leadingTrivia":"↲<\/span>","kind":"keyword(SwiftSyntax.Keyword.let)","trailingTrivia":"␣<\/span>"},"range":{"startColumn":1,"startRow":55,"endRow":55,"endColumn":4},"type":"other","text":"let","parent":595,"id":598},{"parent":595,"type":"collection","structure":[{"value":{"text":"PatternBindingSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"range":{"startRow":55,"endRow":55,"endColumn":25,"startColumn":5},"text":"PatternBindingList","id":599},{"parent":599,"type":"other","structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"ref":"IdentifierPatternSyntax","name":"pattern","value":{"text":"IdentifierPatternSyntax"}},{"name":"unexpectedBetweenPatternAndTypeAnnotation","value":{"text":"nil"}},{"ref":"TypeAnnotationSyntax","name":"typeAnnotation","value":{"text":"TypeAnnotationSyntax"}},{"name":"unexpectedBetweenTypeAnnotationAndInitializer","value":{"text":"nil"}},{"name":"initializer","value":{"text":"nil"}},{"name":"unexpectedBetweenInitializerAndAccessorBlock","value":{"text":"nil"}},{"name":"accessorBlock","value":{"text":"nil"}},{"name":"unexpectedBetweenAccessorBlockAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"range":{"endRow":55,"endColumn":25,"startRow":55,"startColumn":5},"text":"PatternBinding","id":600},{"parent":600,"type":"pattern","structure":[{"name":"unexpectedBeforeIdentifier","value":{"text":"nil"}},{"name":"identifier","value":{"kind":"identifier("naturalCount")","text":"naturalCount"}},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"range":{"startColumn":5,"endColumn":17,"endRow":55,"startRow":55},"text":"IdentifierPattern","id":601},{"structure":[],"token":{"leadingTrivia":"","kind":"identifier("naturalCount")","trailingTrivia":""},"range":{"startRow":55,"startColumn":5,"endColumn":17,"endRow":55},"type":"other","text":"naturalCount","parent":601,"id":602},{"parent":600,"text":"TypeAnnotation","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeColon"},{"value":{"kind":"colon","text":":"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndType"},{"value":{"text":"IdentifierTypeSyntax"},"ref":"IdentifierTypeSyntax","name":"type"},{"value":{"text":"nil"},"name":"unexpectedAfterType"}],"range":{"startRow":55,"startColumn":17,"endColumn":25,"endRow":55},"type":"other","id":603},{"structure":[],"token":{"kind":"colon","trailingTrivia":"␣<\/span>","leadingTrivia":""},"range":{"endColumn":18,"startRow":55,"startColumn":17,"endRow":55},"type":"other","text":":","parent":603,"id":604},{"parent":603,"text":"IdentifierType","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeName"},{"value":{"text":"String","kind":"identifier("String")"},"name":"name"},{"value":{"text":"nil"},"name":"unexpectedBetweenNameAndGenericArgumentClause"},{"value":{"text":"nil"},"name":"genericArgumentClause"},{"value":{"text":"nil"},"name":"unexpectedAfterGenericArgumentClause"}],"range":{"endColumn":25,"startRow":55,"startColumn":19,"endRow":55},"type":"type","id":605},{"structure":[],"token":{"kind":"identifier("String")","trailingTrivia":"","leadingTrivia":""},"range":{"endRow":55,"endColumn":25,"startRow":55,"startColumn":19},"type":"other","text":"String","parent":605,"id":606},{"parent":1,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"ExpressionStmtSyntax"},"ref":"ExpressionStmtSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"type":"other","text":"CodeBlockItem","id":607,"range":{"startRow":56,"startColumn":1,"endColumn":2,"endRow":69}},{"text":"ExpressionStmt","parent":607,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"value":{"text":"SwitchExprSyntax"},"ref":"SwitchExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedAfterExpression"}],"id":608,"range":{"endColumn":2,"startRow":56,"endRow":69,"startColumn":1},"type":"other"},{"text":"SwitchExpr","parent":608,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeSwitchKeyword"},{"value":{"kind":"keyword(SwiftSyntax.Keyword.switch)","text":"switch"},"name":"switchKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenSwitchKeywordAndSubject"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"subject"},{"value":{"text":"nil"},"name":"unexpectedBetweenSubjectAndLeftBrace"},{"value":{"kind":"leftBrace","text":"{"},"name":"leftBrace"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftBraceAndCases"},{"value":{"text":"SwitchCaseListSyntax"},"ref":"SwitchCaseListSyntax","name":"cases"},{"value":{"text":"nil"},"name":"unexpectedBetweenCasesAndRightBrace"},{"value":{"text":"}","kind":"rightBrace"},"name":"rightBrace"},{"value":{"text":"nil"},"name":"unexpectedAfterRightBrace"}],"id":609,"range":{"endColumn":2,"startColumn":1,"startRow":56,"endRow":69},"type":"expr"},{"structure":[],"token":{"kind":"keyword(SwiftSyntax.Keyword.switch)","trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>"},"range":{"startColumn":1,"endColumn":7,"startRow":56,"endRow":56},"type":"other","text":"switch","parent":609,"id":610},{"id":611,"type":"expr","text":"DeclReferenceExpr","parent":609,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"approximateCount","kind":"identifier("approximateCount")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"range":{"startColumn":8,"endColumn":24,"startRow":56,"endRow":56}},{"structure":[],"token":{"kind":"identifier("approximateCount")","trailingTrivia":"␣<\/span>","leadingTrivia":""},"range":{"startRow":56,"endColumn":24,"startColumn":8,"endRow":56},"type":"other","text":"approximateCount","parent":611,"id":612},{"text":"{","range":{"startRow":56,"endColumn":26,"startColumn":25,"endRow":56},"type":"other","id":613,"token":{"kind":"leftBrace","trailingTrivia":"","leadingTrivia":""},"structure":[],"parent":609},{"id":614,"type":"collection","text":"SwitchCaseList","parent":609,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"6"}}],"range":{"startRow":57,"endColumn":26,"startColumn":1,"endRow":68}},{"id":615,"type":"other","text":"SwitchCase","parent":614,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttribute"},{"value":{"text":"nil"},"name":"attribute"},{"value":{"text":"nil"},"name":"unexpectedBetweenAttributeAndLabel"},{"ref":"SwitchCaseLabelSyntax","value":{"text":"SwitchCaseLabelSyntax"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndStatements"},{"ref":"CodeBlockItemListSyntax","value":{"text":"CodeBlockItemListSyntax"},"name":"statements"},{"value":{"text":"nil"},"name":"unexpectedAfterStatements"}],"range":{"endRow":58,"startRow":57,"startColumn":1,"endColumn":24}},{"text":"SwitchCaseLabel","id":616,"parent":615,"range":{"startColumn":1,"endRow":57,"startRow":57,"endColumn":8},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCaseKeyword"},{"value":{"kind":"keyword(SwiftSyntax.Keyword.case)","text":"case"},"name":"caseKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenCaseKeywordAndCaseItems"},{"value":{"text":"SwitchCaseItemListSyntax"},"ref":"SwitchCaseItemListSyntax","name":"caseItems"},{"value":{"text":"nil"},"name":"unexpectedBetweenCaseItemsAndColon"},{"value":{"text":":","kind":"colon"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedAfterColon"}],"type":"other"},{"text":"case","range":{"startRow":57,"endRow":57,"endColumn":5,"startColumn":1},"type":"other","id":617,"token":{"leadingTrivia":"↲<\/span>","kind":"keyword(SwiftSyntax.Keyword.case)","trailingTrivia":"␣<\/span>"},"structure":[],"parent":616},{"text":"SwitchCaseItemList","id":618,"parent":616,"range":{"startRow":57,"endRow":57,"endColumn":7,"startColumn":6},"structure":[{"name":"Element","value":{"text":"SwitchCaseItemSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection"},{"text":"SwitchCaseItem","id":619,"parent":618,"range":{"startRow":57,"endRow":57,"endColumn":7,"startColumn":6},"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"value":{"text":"ExpressionPatternSyntax"},"ref":"ExpressionPatternSyntax","name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndWhereClause"},{"value":{"text":"nil"},"name":"whereClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenWhereClauseAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other"},{"parent":619,"id":620,"range":{"endRow":57,"startColumn":6,"startRow":57,"endColumn":7},"structure":[{"name":"unexpectedBeforeExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax"},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}],"text":"ExpressionPattern","type":"pattern"},{"parent":620,"id":621,"range":{"startColumn":6,"endColumn":7,"startRow":57,"endRow":57},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"0","kind":"integerLiteral("0")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"text":"IntegerLiteralExpr","type":"expr"},{"range":{"startRow":57,"startColumn":6,"endRow":57,"endColumn":7},"text":"0","type":"other","id":622,"token":{"kind":"integerLiteral("0")","trailingTrivia":"","leadingTrivia":""},"structure":[],"parent":621},{"range":{"startRow":57,"startColumn":7,"endRow":57,"endColumn":8},"text":":","type":"other","id":623,"token":{"kind":"colon","trailingTrivia":"","leadingTrivia":""},"structure":[],"parent":616},{"parent":615,"id":624,"range":{"startRow":58,"startColumn":5,"endRow":58,"endColumn":24},"structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"1"}}],"text":"CodeBlockItemList","type":"collection"},{"range":{"startColumn":5,"endColumn":24,"endRow":58,"startRow":58},"id":625,"type":"other","text":"CodeBlockItem","structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"InfixOperatorExprSyntax"},"ref":"InfixOperatorExprSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"parent":624},{"range":{"startRow":58,"startColumn":5,"endRow":58,"endColumn":24},"id":626,"type":"expr","text":"InfixOperatorExpr","structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"name":"leftOperand","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedBetweenLeftOperandAndOperator","value":{"text":"nil"}},{"name":"operator","value":{"text":"AssignmentExprSyntax"},"ref":"AssignmentExprSyntax"},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"name":"rightOperand","value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax"},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}],"parent":625},{"range":{"endColumn":17,"startColumn":5,"endRow":58,"startRow":58},"id":627,"type":"expr","text":"DeclReferenceExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"naturalCount","kind":"identifier("naturalCount")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"parent":626},{"text":"naturalCount","range":{"startColumn":5,"endColumn":17,"endRow":58,"startRow":58},"type":"other","id":628,"token":{"kind":"identifier("naturalCount")","trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"structure":[],"parent":627},{"text":"AssignmentExpr","range":{"startColumn":18,"endColumn":19,"endRow":58,"startRow":58},"structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"text":"=","kind":"equal"}},{"name":"unexpectedAfterEqual","value":{"text":"nil"}}],"parent":626,"type":"expr","id":629},{"text":"=","range":{"startColumn":18,"endColumn":19,"startRow":58,"endRow":58},"type":"other","id":630,"token":{"kind":"equal","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"structure":[],"parent":629},{"text":"StringLiteralExpr","range":{"startColumn":20,"endColumn":24,"startRow":58,"endRow":58},"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"kind":"stringQuote","text":"""}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"name":"segments","ref":"StringLiteralSegmentListSyntax","value":{"text":"StringLiteralSegmentListSyntax"}},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"text":""","kind":"stringQuote"}},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"parent":626,"type":"expr","id":631},{"text":""","range":{"startRow":58,"startColumn":20,"endRow":58,"endColumn":21},"type":"other","id":632,"token":{"kind":"stringQuote","trailingTrivia":"","leadingTrivia":""},"structure":[],"parent":631},{"text":"StringLiteralSegmentList","id":633,"range":{"startRow":58,"startColumn":21,"endRow":58,"endColumn":23},"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","parent":631},{"text":"StringSegment","id":634,"range":{"endRow":58,"endColumn":23,"startRow":58,"startColumn":21},"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"kind":"stringSegment("no")","text":"no"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"type":"other","parent":633},{"text":"no","range":{"startRow":58,"startColumn":21,"endRow":58,"endColumn":23},"type":"other","id":635,"token":{"kind":"stringSegment("no")","leadingTrivia":"","trailingTrivia":""},"structure":[],"parent":634},{"text":""","range":{"startRow":58,"startColumn":23,"endRow":58,"endColumn":24},"type":"other","id":636,"token":{"kind":"stringQuote","leadingTrivia":"","trailingTrivia":""},"structure":[],"parent":631},{"text":"SwitchCase","id":637,"range":{"startRow":59,"startColumn":1,"endRow":60,"endColumn":27},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttribute"},{"value":{"text":"nil"},"name":"attribute"},{"value":{"text":"nil"},"name":"unexpectedBetweenAttributeAndLabel"},{"value":{"text":"SwitchCaseLabelSyntax"},"ref":"SwitchCaseLabelSyntax","name":"label"},{"name":"unexpectedBetweenLabelAndStatements","value":{"text":"nil"}},{"name":"statements","value":{"text":"CodeBlockItemListSyntax"},"ref":"CodeBlockItemListSyntax"},{"name":"unexpectedAfterStatements","value":{"text":"nil"}}],"type":"other","parent":614},{"range":{"startRow":59,"startColumn":1,"endRow":59,"endColumn":12},"text":"SwitchCaseLabel","parent":637,"structure":[{"name":"unexpectedBeforeCaseKeyword","value":{"text":"nil"}},{"name":"caseKeyword","value":{"text":"case","kind":"keyword(SwiftSyntax.Keyword.case)"}},{"name":"unexpectedBetweenCaseKeywordAndCaseItems","value":{"text":"nil"}},{"ref":"SwitchCaseItemListSyntax","name":"caseItems","value":{"text":"SwitchCaseItemListSyntax"}},{"name":"unexpectedBetweenCaseItemsAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":":","kind":"colon"}},{"name":"unexpectedAfterColon","value":{"text":"nil"}}],"type":"other","id":638},{"range":{"startRow":59,"startColumn":1,"endRow":59,"endColumn":5},"text":"case","type":"other","id":639,"token":{"kind":"keyword(SwiftSyntax.Keyword.case)","trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>"},"structure":[],"parent":638},{"range":{"startRow":59,"startColumn":6,"endRow":59,"endColumn":11},"text":"SwitchCaseItemList","parent":638,"structure":[{"name":"Element","value":{"text":"SwitchCaseItemSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection","id":640},{"range":{"startColumn":6,"endRow":59,"endColumn":11,"startRow":59},"text":"SwitchCaseItem","parent":640,"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"name":"pattern","value":{"text":"ExpressionPatternSyntax"},"ref":"ExpressionPatternSyntax"},{"name":"unexpectedBetweenPatternAndWhereClause","value":{"text":"nil"}},{"name":"whereClause","value":{"text":"nil"}},{"name":"unexpectedBetweenWhereClauseAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other","id":641},{"type":"pattern","text":"ExpressionPattern","id":642,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"value":{"text":"InfixOperatorExprSyntax"},"name":"expression","ref":"InfixOperatorExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterExpression"}],"range":{"startColumn":6,"startRow":59,"endRow":59,"endColumn":11},"parent":641},{"type":"expr","text":"InfixOperatorExpr","id":643,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftOperand"},{"value":{"text":"IntegerLiteralExprSyntax"},"name":"leftOperand","ref":"IntegerLiteralExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftOperandAndOperator"},{"value":{"text":"BinaryOperatorExprSyntax"},"name":"operator","ref":"BinaryOperatorExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenOperatorAndRightOperand"},{"value":{"text":"IntegerLiteralExprSyntax"},"name":"rightOperand","ref":"IntegerLiteralExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterRightOperand"}],"range":{"startColumn":6,"endRow":59,"startRow":59,"endColumn":11},"parent":642},{"type":"expr","text":"IntegerLiteralExpr","id":644,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"1","kind":"integerLiteral("1")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"range":{"startColumn":6,"endColumn":7,"startRow":59,"endRow":59},"parent":643},{"text":"1","range":{"endColumn":7,"startColumn":6,"startRow":59,"endRow":59},"type":"other","id":645,"token":{"leadingTrivia":"","kind":"integerLiteral("1")","trailingTrivia":""},"structure":[],"parent":644},{"type":"expr","parent":643,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOperator"},{"value":{"kind":"binaryOperator("..<")","text":"..<"},"name":"operator"},{"value":{"text":"nil"},"name":"unexpectedAfterOperator"}],"id":646,"text":"BinaryOperatorExpr","range":{"endColumn":10,"startColumn":7,"startRow":59,"endRow":59}},{"text":"..<","range":{"startRow":59,"endColumn":10,"startColumn":7,"endRow":59},"type":"other","id":647,"token":{"kind":"binaryOperator("..<")","trailingTrivia":"","leadingTrivia":""},"structure":[],"parent":646},{"type":"expr","parent":643,"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"kind":"integerLiteral("5")","text":"5"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"id":648,"text":"IntegerLiteralExpr","range":{"startRow":59,"endColumn":11,"startColumn":10,"endRow":59}},{"text":"5","range":{"startRow":59,"endRow":59,"startColumn":10,"endColumn":11},"type":"other","id":649,"token":{"trailingTrivia":"","leadingTrivia":"","kind":"integerLiteral("5")"},"structure":[],"parent":648},{"text":":","range":{"startRow":59,"endRow":59,"startColumn":11,"endColumn":12},"type":"other","id":650,"token":{"trailingTrivia":"","leadingTrivia":"","kind":"colon"},"structure":[],"parent":638},{"type":"collection","parent":637,"structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":651,"text":"CodeBlockItemList","range":{"startRow":60,"endRow":60,"startColumn":5,"endColumn":27}},{"range":{"endColumn":27,"startRow":60,"startColumn":5,"endRow":60},"parent":651,"id":652,"text":"CodeBlockItem","structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"InfixOperatorExprSyntax"},"ref":"InfixOperatorExprSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"type":"other"},{"range":{"startColumn":5,"endColumn":27,"endRow":60,"startRow":60},"parent":652,"id":653,"text":"InfixOperatorExpr","structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"leftOperand","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenLeftOperandAndOperator","value":{"text":"nil"}},{"ref":"AssignmentExprSyntax","name":"operator","value":{"text":"AssignmentExprSyntax"}},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"ref":"StringLiteralExprSyntax","name":"rightOperand","value":{"text":"StringLiteralExprSyntax"}},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}],"type":"expr"},{"range":{"startRow":60,"endRow":60,"endColumn":17,"startColumn":5},"parent":653,"id":654,"text":"DeclReferenceExpr","structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("naturalCount")","text":"naturalCount"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"type":"expr"},{"range":{"startRow":60,"endColumn":17,"endRow":60,"startColumn":5},"text":"naturalCount","type":"other","id":655,"token":{"kind":"identifier("naturalCount")","trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"structure":[],"parent":654},{"range":{"startRow":60,"endColumn":19,"endRow":60,"startColumn":18},"text":"AssignmentExpr","parent":653,"id":656,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeEqual"},{"value":{"text":"=","kind":"equal"},"name":"equal"},{"value":{"text":"nil"},"name":"unexpectedAfterEqual"}],"type":"expr"},{"range":{"startColumn":18,"endColumn":19,"startRow":60,"endRow":60},"text":"=","type":"other","id":657,"token":{"kind":"equal","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"structure":[],"parent":656},{"range":{"startColumn":20,"endColumn":27,"startRow":60,"endRow":60},"text":"StringLiteralExpr","parent":653,"id":658,"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"name":"segments","ref":"StringLiteralSegmentListSyntax","value":{"text":"StringLiteralSegmentListSyntax"}},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"kind":"stringQuote","text":"""}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"type":"expr"},{"range":{"endRow":60,"endColumn":21,"startRow":60,"startColumn":20},"text":""","type":"other","id":659,"token":{"kind":"stringQuote","leadingTrivia":"","trailingTrivia":""},"structure":[],"parent":658},{"id":660,"range":{"endRow":60,"endColumn":26,"startRow":60,"startColumn":21},"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"text":"StringLiteralSegmentList","type":"collection","parent":658},{"id":661,"range":{"endColumn":26,"startRow":60,"endRow":60,"startColumn":21},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"a few","kind":"stringSegment("a few")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"text":"StringSegment","type":"other","parent":660},{"range":{"endRow":60,"startColumn":21,"endColumn":26,"startRow":60},"text":"a␣<\/span>few","type":"other","id":662,"token":{"leadingTrivia":"","kind":"stringSegment("a few")","trailingTrivia":""},"structure":[],"parent":661},{"range":{"endRow":60,"startColumn":26,"endColumn":27,"startRow":60},"text":""","type":"other","id":663,"token":{"leadingTrivia":"","kind":"stringQuote","trailingTrivia":""},"structure":[],"parent":658},{"id":664,"range":{"endRow":62,"startColumn":1,"endColumn":29,"startRow":61},"structure":[{"name":"unexpectedBeforeAttribute","value":{"text":"nil"}},{"name":"attribute","value":{"text":"nil"}},{"name":"unexpectedBetweenAttributeAndLabel","value":{"text":"nil"}},{"ref":"SwitchCaseLabelSyntax","name":"label","value":{"text":"SwitchCaseLabelSyntax"}},{"name":"unexpectedBetweenLabelAndStatements","value":{"text":"nil"}},{"ref":"CodeBlockItemListSyntax","name":"statements","value":{"text":"CodeBlockItemListSyntax"}},{"name":"unexpectedAfterStatements","value":{"text":"nil"}}],"text":"SwitchCase","type":"other","parent":614},{"parent":664,"range":{"endColumn":13,"startRow":61,"startColumn":1,"endRow":61},"type":"other","id":665,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCaseKeyword"},{"value":{"kind":"keyword(SwiftSyntax.Keyword.case)","text":"case"},"name":"caseKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenCaseKeywordAndCaseItems"},{"value":{"text":"SwitchCaseItemListSyntax"},"name":"caseItems","ref":"SwitchCaseItemListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenCaseItemsAndColon"},{"value":{"kind":"colon","text":":"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedAfterColon"}],"text":"SwitchCaseLabel"},{"range":{"startRow":61,"startColumn":1,"endColumn":5,"endRow":61},"text":"case","type":"other","id":666,"token":{"trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.case)","leadingTrivia":"↲<\/span>"},"structure":[],"parent":665},{"parent":665,"range":{"startRow":61,"startColumn":6,"endColumn":12,"endRow":61},"type":"collection","id":667,"structure":[{"value":{"text":"SwitchCaseItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"text":"SwitchCaseItemList"},{"parent":667,"range":{"startRow":61,"endRow":61,"startColumn":6,"endColumn":12},"type":"other","id":668,"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"ref":"ExpressionPatternSyntax","name":"pattern","value":{"text":"ExpressionPatternSyntax"}},{"name":"unexpectedBetweenPatternAndWhereClause","value":{"text":"nil"}},{"name":"whereClause","value":{"text":"nil"}},{"name":"unexpectedBetweenWhereClauseAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"text":"SwitchCaseItem"},{"parent":668,"text":"ExpressionPattern","structure":[{"name":"unexpectedBeforeExpression","value":{"text":"nil"}},{"name":"expression","ref":"InfixOperatorExprSyntax","value":{"text":"InfixOperatorExprSyntax"}},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}],"type":"pattern","range":{"startRow":61,"startColumn":6,"endRow":61,"endColumn":12},"id":669},{"parent":669,"text":"InfixOperatorExpr","structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"name":"leftOperand","ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedBetweenLeftOperandAndOperator","value":{"text":"nil"}},{"name":"operator","ref":"BinaryOperatorExprSyntax","value":{"text":"BinaryOperatorExprSyntax"}},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"name":"rightOperand","ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}],"type":"expr","range":{"startRow":61,"endColumn":12,"startColumn":6,"endRow":61},"id":670},{"parent":670,"text":"IntegerLiteralExpr","structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"kind":"integerLiteral("5")","text":"5"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"type":"expr","range":{"startRow":61,"startColumn":6,"endColumn":7,"endRow":61},"id":671},{"range":{"endColumn":7,"startColumn":6,"startRow":61,"endRow":61},"text":"5","type":"other","id":672,"token":{"kind":"integerLiteral("5")","leadingTrivia":"","trailingTrivia":""},"structure":[],"parent":671},{"range":{"endColumn":10,"startColumn":7,"startRow":61,"endRow":61},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOperator"},{"value":{"text":"..<","kind":"binaryOperator("..<")"},"name":"operator"},{"value":{"text":"nil"},"name":"unexpectedAfterOperator"}],"parent":670,"text":"BinaryOperatorExpr","type":"expr","id":673},{"type":"other","range":{"startRow":61,"startColumn":7,"endRow":61,"endColumn":10},"text":"..<","token":{"kind":"binaryOperator("..<")","leadingTrivia":"","trailingTrivia":""},"structure":[],"parent":673,"id":674},{"range":{"startRow":61,"startColumn":10,"endRow":61,"endColumn":12},"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"kind":"integerLiteral("12")","text":"12"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"parent":670,"text":"IntegerLiteralExpr","type":"expr","id":675},{"type":"other","range":{"startColumn":10,"startRow":61,"endColumn":12,"endRow":61},"text":"12","token":{"trailingTrivia":"","kind":"integerLiteral("12")","leadingTrivia":""},"structure":[],"parent":675,"id":676},{"type":"other","range":{"startColumn":12,"startRow":61,"endColumn":13,"endRow":61},"text":":","token":{"trailingTrivia":"","kind":"colon","leadingTrivia":""},"structure":[],"parent":665,"id":677},{"range":{"startColumn":5,"startRow":62,"endColumn":29,"endRow":62},"structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"parent":664,"text":"CodeBlockItemList","type":"collection","id":678},{"range":{"endColumn":29,"startRow":62,"endRow":62,"startColumn":5},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"InfixOperatorExprSyntax"},"name":"item","ref":"InfixOperatorExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"parent":678,"text":"CodeBlockItem","type":"other","id":679},{"parent":679,"text":"InfixOperatorExpr","type":"expr","id":680,"range":{"startColumn":5,"endRow":62,"endColumn":29,"startRow":62},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftOperand"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"leftOperand"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftOperandAndOperator"},{"ref":"AssignmentExprSyntax","value":{"text":"AssignmentExprSyntax"},"name":"operator"},{"value":{"text":"nil"},"name":"unexpectedBetweenOperatorAndRightOperand"},{"ref":"StringLiteralExprSyntax","value":{"text":"StringLiteralExprSyntax"},"name":"rightOperand"},{"value":{"text":"nil"},"name":"unexpectedAfterRightOperand"}]},{"parent":680,"text":"DeclReferenceExpr","type":"expr","id":681,"range":{"startColumn":5,"endColumn":17,"startRow":62,"endRow":62},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"naturalCount","kind":"identifier("naturalCount")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"type":"other","range":{"startRow":62,"endColumn":17,"startColumn":5,"endRow":62},"text":"naturalCount","token":{"trailingTrivia":"␣<\/span>","kind":"identifier("naturalCount")","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"structure":[],"parent":681,"id":682},{"structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"kind":"equal","text":"="}},{"name":"unexpectedAfterEqual","value":{"text":"nil"}}],"id":683,"range":{"startRow":62,"endColumn":19,"startColumn":18,"endRow":62},"type":"expr","parent":680,"text":"AssignmentExpr"},{"type":"other","range":{"startColumn":18,"startRow":62,"endRow":62,"endColumn":19},"text":"=","token":{"kind":"equal","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"structure":[],"parent":683,"id":684},{"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"kind":"stringQuote","text":"""}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"name":"segments","ref":"StringLiteralSegmentListSyntax","value":{"text":"StringLiteralSegmentListSyntax"}},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"kind":"stringQuote","text":"""}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"id":685,"range":{"startColumn":20,"startRow":62,"endRow":62,"endColumn":29},"type":"expr","parent":680,"text":"StringLiteralExpr"},{"type":"other","range":{"endColumn":21,"endRow":62,"startRow":62,"startColumn":20},"text":""","token":{"kind":"stringQuote","leadingTrivia":"","trailingTrivia":""},"structure":[],"parent":685,"id":686},{"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"1"}}],"id":687,"range":{"endColumn":28,"endRow":62,"startRow":62,"startColumn":21},"text":"StringLiteralSegmentList","parent":685,"type":"collection"},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"kind":"stringSegment("several")","text":"several"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"id":688,"range":{"startColumn":21,"startRow":62,"endRow":62,"endColumn":28},"text":"StringSegment","parent":687,"type":"other"},{"type":"other","range":{"startRow":62,"startColumn":21,"endRow":62,"endColumn":28},"text":"several","token":{"leadingTrivia":"","kind":"stringSegment("several")","trailingTrivia":""},"structure":[],"parent":688,"id":689},{"type":"other","range":{"startRow":62,"startColumn":28,"endRow":62,"endColumn":29},"text":""","token":{"leadingTrivia":"","kind":"stringQuote","trailingTrivia":""},"structure":[],"parent":685,"id":690},{"structure":[{"name":"unexpectedBeforeAttribute","value":{"text":"nil"}},{"name":"attribute","value":{"text":"nil"}},{"name":"unexpectedBetweenAttributeAndLabel","value":{"text":"nil"}},{"name":"label","ref":"SwitchCaseLabelSyntax","value":{"text":"SwitchCaseLabelSyntax"}},{"name":"unexpectedBetweenLabelAndStatements","value":{"text":"nil"}},{"name":"statements","ref":"CodeBlockItemListSyntax","value":{"text":"CodeBlockItemListSyntax"}},{"name":"unexpectedAfterStatements","value":{"text":"nil"}}],"id":691,"range":{"startRow":63,"startColumn":1,"endRow":64,"endColumn":31},"text":"SwitchCase","parent":614,"type":"other"},{"parent":691,"type":"other","id":692,"range":{"startColumn":1,"endColumn":15,"endRow":63,"startRow":63},"text":"SwitchCaseLabel","structure":[{"name":"unexpectedBeforeCaseKeyword","value":{"text":"nil"}},{"name":"caseKeyword","value":{"kind":"keyword(SwiftSyntax.Keyword.case)","text":"case"}},{"name":"unexpectedBetweenCaseKeywordAndCaseItems","value":{"text":"nil"}},{"name":"caseItems","ref":"SwitchCaseItemListSyntax","value":{"text":"SwitchCaseItemListSyntax"}},{"name":"unexpectedBetweenCaseItemsAndColon","value":{"text":"nil"}},{"name":"colon","value":{"kind":"colon","text":":"}},{"name":"unexpectedAfterColon","value":{"text":"nil"}}]},{"type":"other","range":{"endColumn":5,"startRow":63,"startColumn":1,"endRow":63},"text":"case","token":{"leadingTrivia":"↲<\/span>","kind":"keyword(SwiftSyntax.Keyword.case)","trailingTrivia":"␣<\/span>"},"structure":[],"parent":692,"id":693},{"parent":692,"type":"collection","id":694,"range":{"endColumn":14,"startRow":63,"startColumn":6,"endRow":63},"text":"SwitchCaseItemList","structure":[{"name":"Element","value":{"text":"SwitchCaseItemSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"parent":694,"type":"other","id":695,"range":{"endColumn":14,"startRow":63,"endRow":63,"startColumn":6},"text":"SwitchCaseItem","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"ref":"ExpressionPatternSyntax","value":{"text":"ExpressionPatternSyntax"},"name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndWhereClause"},{"value":{"text":"nil"},"name":"whereClause"},{"name":"unexpectedBetweenWhereClauseAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}]},{"range":{"endColumn":14,"startRow":63,"endRow":63,"startColumn":6},"id":696,"parent":695,"structure":[{"name":"unexpectedBeforeExpression","value":{"text":"nil"}},{"name":"expression","ref":"InfixOperatorExprSyntax","value":{"text":"InfixOperatorExprSyntax"}},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}],"text":"ExpressionPattern","type":"pattern"},{"range":{"startColumn":6,"startRow":63,"endRow":63,"endColumn":14},"id":697,"parent":696,"structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"name":"leftOperand","ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedBetweenLeftOperandAndOperator","value":{"text":"nil"}},{"name":"operator","ref":"BinaryOperatorExprSyntax","value":{"text":"BinaryOperatorExprSyntax"}},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"name":"rightOperand","ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}],"text":"InfixOperatorExpr","type":"expr"},{"range":{"startColumn":6,"endRow":63,"startRow":63,"endColumn":8},"id":698,"parent":697,"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"12","kind":"integerLiteral("12")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"text":"IntegerLiteralExpr","type":"expr"},{"type":"other","range":{"endColumn":8,"startColumn":6,"startRow":63,"endRow":63},"text":"12","token":{"trailingTrivia":"","kind":"integerLiteral("12")","leadingTrivia":""},"structure":[],"parent":698,"id":699},{"range":{"endColumn":11,"startColumn":8,"startRow":63,"endRow":63},"parent":697,"structure":[{"name":"unexpectedBeforeOperator","value":{"text":"nil"}},{"name":"operator","value":{"kind":"binaryOperator("..<")","text":"..<"}},{"name":"unexpectedAfterOperator","value":{"text":"nil"}}],"type":"expr","text":"BinaryOperatorExpr","id":700},{"type":"other","range":{"endRow":63,"endColumn":11,"startRow":63,"startColumn":8},"text":"..<","token":{"leadingTrivia":"","trailingTrivia":"","kind":"binaryOperator("..<")"},"structure":[],"parent":700,"id":701},{"range":{"endRow":63,"endColumn":14,"startRow":63,"startColumn":11},"parent":697,"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"kind":"integerLiteral("100")","text":"100"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"type":"expr","text":"IntegerLiteralExpr","id":702},{"type":"other","range":{"startColumn":11,"startRow":63,"endColumn":14,"endRow":63},"text":"100","token":{"trailingTrivia":"","leadingTrivia":"","kind":"integerLiteral("100")"},"structure":[],"parent":702,"id":703},{"type":"other","range":{"startColumn":14,"startRow":63,"endColumn":15,"endRow":63},"text":":","token":{"trailingTrivia":"","leadingTrivia":"","kind":"colon"},"structure":[],"parent":692,"id":704},{"range":{"startColumn":5,"startRow":64,"endColumn":31,"endRow":64},"parent":691,"structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection","text":"CodeBlockItemList","id":705},{"range":{"startColumn":5,"startRow":64,"endColumn":31,"endRow":64},"parent":705,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"InfixOperatorExprSyntax","value":{"text":"InfixOperatorExprSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","text":"CodeBlockItem","id":706},{"range":{"endColumn":31,"startColumn":5,"startRow":64,"endRow":64},"structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"leftOperand","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenLeftOperandAndOperator","value":{"text":"nil"}},{"ref":"AssignmentExprSyntax","name":"operator","value":{"text":"AssignmentExprSyntax"}},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"ref":"StringLiteralExprSyntax","name":"rightOperand","value":{"text":"StringLiteralExprSyntax"}},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}],"type":"expr","parent":706,"id":707,"text":"InfixOperatorExpr"},{"range":{"startColumn":5,"startRow":64,"endColumn":17,"endRow":64},"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("naturalCount")","text":"naturalCount"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"type":"expr","parent":707,"id":708,"text":"DeclReferenceExpr"},{"type":"other","text":"naturalCount","range":{"startColumn":5,"startRow":64,"endRow":64,"endColumn":17},"token":{"trailingTrivia":"␣<\/span>","kind":"identifier("naturalCount")","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"structure":[],"parent":708,"id":709},{"id":710,"text":"AssignmentExpr","type":"expr","range":{"startColumn":18,"startRow":64,"endRow":64,"endColumn":19},"structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"kind":"equal","text":"="}},{"name":"unexpectedAfterEqual","value":{"text":"nil"}}],"parent":707},{"type":"other","text":"=","range":{"endRow":64,"startColumn":18,"startRow":64,"endColumn":19},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"equal"},"structure":[],"parent":710,"id":711},{"id":712,"text":"StringLiteralExpr","type":"expr","range":{"endRow":64,"startColumn":20,"startRow":64,"endColumn":31},"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"kind":"stringQuote","text":"""}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"ref":"StringLiteralSegmentListSyntax","name":"segments","value":{"text":"StringLiteralSegmentListSyntax"}},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"parent":707},{"type":"other","range":{"startColumn":20,"endRow":64,"endColumn":21,"startRow":64},"text":""","token":{"leadingTrivia":"","kind":"stringQuote","trailingTrivia":""},"structure":[],"parent":712,"id":713},{"range":{"startColumn":21,"endRow":64,"endColumn":30,"startRow":64},"id":714,"parent":712,"text":"StringLiteralSegmentList","type":"collection","structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}]},{"range":{"endColumn":30,"startRow":64,"endRow":64,"startColumn":21},"id":715,"parent":714,"text":"StringSegment","type":"other","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"kind":"stringSegment("dozens of")","text":"dozens of"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}]},{"type":"other","range":{"startColumn":21,"endColumn":30,"endRow":64,"startRow":64},"text":"dozens␣<\/span>of","token":{"trailingTrivia":"","kind":"stringSegment("dozens of")","leadingTrivia":""},"structure":[],"parent":715,"id":716},{"type":"other","range":{"startColumn":30,"endColumn":31,"endRow":64,"startRow":64},"text":""","token":{"trailingTrivia":"","kind":"stringQuote","leadingTrivia":""},"structure":[],"parent":712,"id":717},{"range":{"startColumn":1,"endColumn":33,"endRow":66,"startRow":65},"id":718,"parent":614,"text":"SwitchCase","type":"other","structure":[{"name":"unexpectedBeforeAttribute","value":{"text":"nil"}},{"name":"attribute","value":{"text":"nil"}},{"name":"unexpectedBetweenAttributeAndLabel","value":{"text":"nil"}},{"name":"label","ref":"SwitchCaseLabelSyntax","value":{"text":"SwitchCaseLabelSyntax"}},{"name":"unexpectedBetweenLabelAndStatements","value":{"text":"nil"}},{"name":"statements","ref":"CodeBlockItemListSyntax","value":{"text":"CodeBlockItemListSyntax"}},{"name":"unexpectedAfterStatements","value":{"text":"nil"}}]},{"parent":718,"range":{"endColumn":17,"startColumn":1,"startRow":65,"endRow":65},"text":"SwitchCaseLabel","structure":[{"name":"unexpectedBeforeCaseKeyword","value":{"text":"nil"}},{"name":"caseKeyword","value":{"kind":"keyword(SwiftSyntax.Keyword.case)","text":"case"}},{"name":"unexpectedBetweenCaseKeywordAndCaseItems","value":{"text":"nil"}},{"name":"caseItems","ref":"SwitchCaseItemListSyntax","value":{"text":"SwitchCaseItemListSyntax"}},{"name":"unexpectedBetweenCaseItemsAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":":","kind":"colon"}},{"name":"unexpectedAfterColon","value":{"text":"nil"}}],"type":"other","id":719},{"type":"other","range":{"endRow":65,"startColumn":1,"startRow":65,"endColumn":5},"text":"case","token":{"kind":"keyword(SwiftSyntax.Keyword.case)","trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>"},"structure":[],"parent":719,"id":720},{"parent":719,"range":{"endRow":65,"startColumn":6,"startRow":65,"endColumn":16},"text":"SwitchCaseItemList","structure":[{"value":{"text":"SwitchCaseItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","id":721},{"parent":721,"range":{"startRow":65,"endColumn":16,"endRow":65,"startColumn":6},"text":"SwitchCaseItem","structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"ref":"ExpressionPatternSyntax","name":"pattern","value":{"text":"ExpressionPatternSyntax"}},{"name":"unexpectedBetweenPatternAndWhereClause","value":{"text":"nil"}},{"name":"whereClause","value":{"text":"nil"}},{"name":"unexpectedBetweenWhereClauseAndTrailingComma","value":{"text":"nil"}},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","id":722},{"structure":[{"name":"unexpectedBeforeExpression","value":{"text":"nil"}},{"ref":"InfixOperatorExprSyntax","name":"expression","value":{"text":"InfixOperatorExprSyntax"}},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}],"type":"pattern","text":"ExpressionPattern","range":{"endColumn":16,"startRow":65,"endRow":65,"startColumn":6},"id":723,"parent":722},{"structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"name":"leftOperand","ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedBetweenLeftOperandAndOperator","value":{"text":"nil"}},{"name":"operator","ref":"BinaryOperatorExprSyntax","value":{"text":"BinaryOperatorExprSyntax"}},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"name":"rightOperand","ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}],"type":"expr","text":"InfixOperatorExpr","range":{"endColumn":16,"startRow":65,"endRow":65,"startColumn":6},"id":724,"parent":723},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"100","kind":"integerLiteral("100")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr","text":"IntegerLiteralExpr","range":{"startRow":65,"endRow":65,"startColumn":6,"endColumn":9},"id":725,"parent":724},{"type":"other","range":{"endColumn":9,"startRow":65,"endRow":65,"startColumn":6},"text":"100","token":{"leadingTrivia":"","kind":"integerLiteral("100")","trailingTrivia":""},"structure":[],"parent":725,"id":726},{"range":{"endColumn":12,"startRow":65,"endRow":65,"startColumn":9},"id":727,"structure":[{"name":"unexpectedBeforeOperator","value":{"text":"nil"}},{"name":"operator","value":{"kind":"binaryOperator("..<")","text":"..<"}},{"name":"unexpectedAfterOperator","value":{"text":"nil"}}],"type":"expr","parent":724,"text":"BinaryOperatorExpr"},{"type":"other","range":{"startRow":65,"startColumn":9,"endColumn":12,"endRow":65},"text":"..<","token":{"leadingTrivia":"","kind":"binaryOperator("..<")","trailingTrivia":""},"structure":[],"parent":727,"id":728},{"range":{"startRow":65,"startColumn":12,"endColumn":16,"endRow":65},"id":729,"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"1000","kind":"integerLiteral("1000")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"type":"expr","parent":724,"text":"IntegerLiteralExpr"},{"text":"1000","parent":729,"id":730,"type":"other","token":{"trailingTrivia":"","kind":"integerLiteral("1000")","leadingTrivia":""},"range":{"startRow":65,"endRow":65,"endColumn":16,"startColumn":12},"structure":[]},{"text":":","parent":719,"id":731,"type":"other","token":{"trailingTrivia":"","kind":"colon","leadingTrivia":""},"range":{"startRow":65,"endRow":65,"endColumn":17,"startColumn":16},"structure":[]},{"range":{"startRow":66,"endRow":66,"endColumn":33,"startColumn":5},"id":732,"structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection","parent":718,"text":"CodeBlockItemList"},{"range":{"startRow":66,"startColumn":5,"endColumn":33,"endRow":66},"id":733,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"InfixOperatorExprSyntax"},"ref":"InfixOperatorExprSyntax","name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","parent":732,"text":"CodeBlockItem"},{"parent":733,"text":"InfixOperatorExpr","type":"expr","structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"leftOperand","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenLeftOperandAndOperator","value":{"text":"nil"}},{"ref":"AssignmentExprSyntax","name":"operator","value":{"text":"AssignmentExprSyntax"}},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"ref":"StringLiteralExprSyntax","name":"rightOperand","value":{"text":"StringLiteralExprSyntax"}},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}],"range":{"startRow":66,"endRow":66,"endColumn":33,"startColumn":5},"id":734},{"parent":734,"text":"DeclReferenceExpr","type":"expr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"naturalCount","kind":"identifier("naturalCount")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"range":{"startRow":66,"startColumn":5,"endColumn":17,"endRow":66},"id":735},{"text":"naturalCount","parent":735,"id":736,"type":"other","token":{"kind":"identifier("naturalCount")","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"␣<\/span>"},"range":{"startColumn":5,"endRow":66,"endColumn":17,"startRow":66},"structure":[]},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeEqual"},{"value":{"kind":"equal","text":"="},"name":"equal"},{"value":{"text":"nil"},"name":"unexpectedAfterEqual"}],"range":{"endRow":66,"startColumn":18,"endColumn":19,"startRow":66},"parent":734,"text":"AssignmentExpr","id":737,"type":"expr"},{"text":"=","parent":737,"id":738,"type":"other","token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"equal"},"range":{"startColumn":18,"endColumn":19,"endRow":66,"startRow":66},"structure":[]},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"value":{"text":"StringLiteralSegmentListSyntax"},"ref":"StringLiteralSegmentListSyntax","name":"segments"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"kind":"stringQuote","text":"""},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"range":{"startColumn":20,"endColumn":33,"endRow":66,"startRow":66},"parent":734,"text":"StringLiteralExpr","id":739,"type":"expr"},{"text":""","parent":739,"id":740,"type":"other","token":{"trailingTrivia":"","kind":"stringQuote","leadingTrivia":""},"range":{"endRow":66,"endColumn":21,"startColumn":20,"startRow":66},"structure":[]},{"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"1"}}],"type":"collection","id":741,"parent":739,"text":"StringLiteralSegmentList","range":{"startColumn":21,"endColumn":32,"endRow":66,"startRow":66}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"hundreds of","kind":"stringSegment("hundreds of")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","id":742,"parent":741,"text":"StringSegment","range":{"startRow":66,"startColumn":21,"endColumn":32,"endRow":66}},{"text":"hundreds␣<\/span>of","parent":742,"id":743,"type":"other","token":{"leadingTrivia":"","kind":"stringSegment("hundreds of")","trailingTrivia":""},"range":{"endRow":66,"endColumn":32,"startColumn":21,"startRow":66},"structure":[]},{"text":""","parent":739,"id":744,"type":"other","token":{"leadingTrivia":"","kind":"stringQuote","trailingTrivia":""},"range":{"endRow":66,"endColumn":33,"startColumn":32,"startRow":66},"structure":[]},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttribute"},{"value":{"text":"nil"},"name":"attribute"},{"value":{"text":"nil"},"name":"unexpectedBetweenAttributeAndLabel"},{"ref":"SwitchDefaultLabelSyntax","value":{"text":"SwitchDefaultLabelSyntax"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndStatements"},{"ref":"CodeBlockItemListSyntax","value":{"text":"CodeBlockItemListSyntax"},"name":"statements"},{"value":{"text":"nil"},"name":"unexpectedAfterStatements"}],"type":"other","id":745,"parent":614,"text":"SwitchCase","range":{"endRow":68,"endColumn":26,"startColumn":1,"startRow":67}},{"structure":[{"name":"unexpectedBeforeDefaultKeyword","value":{"text":"nil"}},{"name":"defaultKeyword","value":{"text":"default","kind":"keyword(SwiftSyntax.Keyword.default)"}},{"name":"unexpectedBetweenDefaultKeywordAndColon","value":{"text":"nil"}},{"name":"colon","value":{"kind":"colon","text":":"}},{"name":"unexpectedAfterColon","value":{"text":"nil"}}],"type":"other","id":746,"parent":745,"text":"SwitchDefaultLabel","range":{"startRow":67,"endRow":67,"endColumn":9,"startColumn":1}},{"text":"default","parent":746,"id":747,"type":"other","token":{"leadingTrivia":"↲<\/span>","kind":"keyword(SwiftSyntax.Keyword.default)","trailingTrivia":""},"range":{"endRow":67,"startColumn":1,"startRow":67,"endColumn":8},"structure":[]},{"text":":","parent":746,"id":748,"type":"other","token":{"leadingTrivia":"","kind":"colon","trailingTrivia":""},"range":{"endRow":67,"startColumn":8,"startRow":67,"endColumn":9},"structure":[]},{"structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":749,"type":"collection","parent":745,"range":{"endRow":68,"startColumn":5,"startRow":68,"endColumn":26},"text":"CodeBlockItemList"},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"InfixOperatorExprSyntax","value":{"text":"InfixOperatorExprSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"id":750,"type":"other","parent":749,"range":{"startRow":68,"endColumn":26,"endRow":68,"startColumn":5},"text":"CodeBlockItem"},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftOperand"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"leftOperand"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftOperandAndOperator"},{"value":{"text":"AssignmentExprSyntax"},"ref":"AssignmentExprSyntax","name":"operator"},{"value":{"text":"nil"},"name":"unexpectedBetweenOperatorAndRightOperand"},{"value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax","name":"rightOperand"},{"value":{"text":"nil"},"name":"unexpectedAfterRightOperand"}],"id":751,"type":"expr","parent":750,"range":{"endColumn":26,"startRow":68,"startColumn":5,"endRow":68},"text":"InfixOperatorExpr"},{"id":752,"parent":751,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("naturalCount")","text":"naturalCount"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"type":"expr","text":"DeclReferenceExpr","range":{"startRow":68,"endRow":68,"startColumn":5,"endColumn":17}},{"text":"naturalCount","parent":752,"id":753,"type":"other","token":{"kind":"identifier("naturalCount")","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"␣<\/span>"},"range":{"endRow":68,"startRow":68,"startColumn":5,"endColumn":17},"structure":[]},{"id":754,"parent":751,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeEqual"},{"value":{"text":"=","kind":"equal"},"name":"equal"},{"value":{"text":"nil"},"name":"unexpectedAfterEqual"}],"type":"expr","text":"AssignmentExpr","range":{"endRow":68,"startRow":68,"startColumn":18,"endColumn":19}},{"text":"=","parent":754,"id":755,"type":"other","token":{"trailingTrivia":"␣<\/span>","kind":"equal","leadingTrivia":""},"range":{"startColumn":18,"endColumn":19,"startRow":68,"endRow":68},"structure":[]},{"text":"StringLiteralExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"value":{"text":"StringLiteralSegmentListSyntax"},"ref":"StringLiteralSegmentListSyntax","name":"segments"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"kind":"stringQuote","text":"""},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"id":756,"range":{"startRow":68,"startColumn":20,"endRow":68,"endColumn":26},"parent":751,"type":"expr"},{"text":""","parent":756,"id":757,"type":"other","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"range":{"startRow":68,"endColumn":21,"endRow":68,"startColumn":20},"structure":[]},{"text":"StringLiteralSegmentList","structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"id":758,"range":{"startRow":68,"endColumn":25,"endRow":68,"startColumn":21},"parent":756,"type":"collection"},{"text":"StringSegment","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"name":"content","value":{"kind":"stringSegment("many")","text":"many"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"id":759,"range":{"startColumn":21,"startRow":68,"endRow":68,"endColumn":25},"parent":758,"type":"other"},{"text":"many","parent":759,"id":760,"type":"other","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("many")"},"range":{"endColumn":25,"startRow":68,"endRow":68,"startColumn":21},"structure":[]},{"text":""","parent":756,"id":761,"type":"other","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"range":{"endColumn":26,"startRow":68,"endRow":68,"startColumn":25},"structure":[]},{"text":"}","parent":609,"id":762,"type":"other","token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"","kind":"rightBrace"},"range":{"endColumn":2,"startRow":69,"endRow":69,"startColumn":1},"structure":[]},{"text":"CodeBlockItem","id":763,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"FunctionCallExprSyntax"},"name":"item","ref":"FunctionCallExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","range":{"endColumn":53,"startRow":70,"endRow":70,"startColumn":1},"parent":1},{"text":"FunctionCallExpr","id":764,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"name":"calledExpression","ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"value":{"text":"LabeledExprListSyntax"},"name":"arguments","ref":"LabeledExprListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"ref":"MultipleTrailingClosureElementListSyntax","value":{"text":"MultipleTrailingClosureElementListSyntax"},"name":"additionalTrailingClosures"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}],"type":"expr","range":{"startRow":70,"endColumn":53,"startColumn":1,"endRow":70},"parent":763},{"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"print","kind":"identifier("print")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":765,"type":"expr","range":{"startColumn":1,"endRow":70,"endColumn":6,"startRow":70},"parent":764,"text":"DeclReferenceExpr"},{"text":"print","parent":765,"id":766,"type":"other","token":{"kind":"identifier("print")","leadingTrivia":"↲<\/span>","trailingTrivia":""},"range":{"startRow":70,"startColumn":1,"endColumn":6,"endRow":70},"structure":[]},{"text":"(","parent":764,"id":767,"type":"other","token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""},"range":{"startRow":70,"startColumn":6,"endColumn":7,"endRow":70},"structure":[]},{"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":768,"type":"collection","range":{"startRow":70,"startColumn":7,"endColumn":52,"endRow":70},"parent":764,"text":"LabeledExprList"},{"id":769,"parent":768,"text":"LabeledExpr","range":{"endRow":70,"endColumn":52,"startRow":70,"startColumn":7},"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","ref":"StringLiteralExprSyntax","value":{"text":"StringLiteralExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other"},{"id":770,"parent":769,"text":"StringLiteralExpr","range":{"endColumn":52,"startRow":70,"startColumn":7,"endRow":70},"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"kind":"stringQuote","text":"""}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"name":"segments","ref":"StringLiteralSegmentListSyntax","value":{"text":"StringLiteralSegmentListSyntax"}},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"value":{"text":""","kind":"stringQuote"},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"type":"expr"},{"text":""","parent":770,"id":771,"type":"other","token":{"kind":"stringQuote","leadingTrivia":"","trailingTrivia":""},"range":{"startRow":70,"startColumn":7,"endColumn":8,"endRow":70},"structure":[]},{"type":"collection","id":772,"parent":770,"text":"StringLiteralSegmentList","structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"5"},"name":"Count"}],"range":{"startRow":70,"startColumn":8,"endColumn":51,"endRow":70}},{"type":"other","id":773,"parent":772,"text":"StringSegment","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"There are ","kind":"stringSegment("There are ")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"range":{"endColumn":18,"startRow":70,"endRow":70,"startColumn":8}},{"text":"There␣<\/span>are␣<\/span>","parent":773,"id":774,"type":"other","token":{"kind":"stringSegment("There are ")","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":18,"endRow":70,"startRow":70,"startColumn":8},"structure":[]},{"type":"other","id":775,"parent":772,"text":"ExpressionSegment","structure":[{"name":"unexpectedBeforeBackslash","value":{"text":"nil"}},{"name":"backslash","value":{"kind":"backslash","text":"\\"}},{"name":"unexpectedBetweenBackslashAndPounds","value":{"text":"nil"}},{"name":"pounds","value":{"text":"nil"}},{"name":"unexpectedBetweenPoundsAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndExpressions","value":{"text":"nil"}},{"name":"expressions","ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenExpressionsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"kind":"rightParen","text":")"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}],"range":{"endColumn":33,"endRow":70,"startRow":70,"startColumn":18}},{"text":"\\","parent":775,"id":776,"type":"other","token":{"trailingTrivia":"","leadingTrivia":"","kind":"backslash"},"range":{"startColumn":18,"endRow":70,"endColumn":19,"startRow":70},"structure":[]},{"text":"(","parent":775,"id":777,"type":"other","token":{"trailingTrivia":"","leadingTrivia":"","kind":"leftParen"},"range":{"startColumn":19,"endRow":70,"endColumn":20,"startRow":70},"structure":[]},{"parent":775,"text":"LabeledExprList","range":{"startColumn":20,"endRow":70,"endColumn":32,"startRow":70},"id":778,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection"},{"parent":778,"text":"LabeledExpr","range":{"startColumn":20,"endRow":70,"endColumn":32,"startRow":70},"id":779,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"name":"expression","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other"},{"parent":779,"range":{"endRow":70,"endColumn":32,"startRow":70,"startColumn":20},"text":"DeclReferenceExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"naturalCount","kind":"identifier("naturalCount")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"id":780,"type":"expr"},{"id":781,"token":{"leadingTrivia":"","kind":"identifier("naturalCount")","trailingTrivia":""},"text":"naturalCount","parent":780,"range":{"endColumn":32,"endRow":70,"startRow":70,"startColumn":20},"type":"other","structure":[]},{"id":782,"token":{"leadingTrivia":"","kind":"rightParen","trailingTrivia":""},"text":")","parent":775,"range":{"endColumn":33,"endRow":70,"startRow":70,"startColumn":32},"type":"other","structure":[]},{"parent":772,"range":{"endColumn":34,"endRow":70,"startRow":70,"startColumn":33},"text":"StringSegment","structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"kind":"stringSegment(" ")","text":" "}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"id":783,"type":"other"},{"id":784,"token":{"trailingTrivia":"","leadingTrivia":"","kind":"stringSegment(" ")"},"text":"␣<\/span>","parent":783,"range":{"endRow":70,"startRow":70,"endColumn":34,"startColumn":33},"type":"other","structure":[]},{"range":{"endRow":70,"endColumn":50,"startRow":70,"startColumn":34},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBackslash"},{"value":{"text":"\\","kind":"backslash"},"name":"backslash"},{"value":{"text":"nil"},"name":"unexpectedBetweenBackslashAndPounds"},{"value":{"text":"nil"},"name":"pounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenPoundsAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndExpressions"},{"value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax","name":"expressions"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"text":"ExpressionSegment","id":785,"type":"other","parent":772},{"id":786,"token":{"trailingTrivia":"","leadingTrivia":"","kind":"backslash"},"text":"\\","parent":785,"range":{"endColumn":35,"startRow":70,"startColumn":34,"endRow":70},"type":"other","structure":[]},{"id":787,"token":{"trailingTrivia":"","leadingTrivia":"","kind":"leftParen"},"text":"(","parent":785,"range":{"endColumn":36,"startRow":70,"startColumn":35,"endRow":70},"type":"other","structure":[]},{"range":{"endColumn":49,"startRow":70,"startColumn":36,"endRow":70},"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"text":"LabeledExprList","id":788,"type":"collection","parent":785},{"range":{"endRow":70,"startRow":70,"startColumn":36,"endColumn":49},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"text":"LabeledExpr","id":789,"type":"other","parent":788},{"id":790,"type":"expr","structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"countedThings","kind":"identifier("countedThings")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"parent":789,"text":"DeclReferenceExpr","range":{"startRow":70,"endRow":70,"endColumn":49,"startColumn":36}},{"structure":[],"token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("countedThings")"},"text":"countedThings","parent":790,"type":"other","range":{"endColumn":49,"startRow":70,"startColumn":36,"endRow":70},"id":791},{"structure":[],"token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"text":")","parent":785,"type":"other","range":{"endColumn":50,"startRow":70,"startColumn":49,"endRow":70},"id":792},{"id":793,"type":"other","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"name":"content","value":{"text":".","kind":"stringSegment(".")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"parent":772,"text":"StringSegment","range":{"endColumn":51,"startRow":70,"startColumn":50,"endRow":70}},{"structure":[],"token":{"leadingTrivia":"","kind":"stringSegment(".")","trailingTrivia":""},"text":".","parent":793,"range":{"endColumn":51,"startColumn":50,"startRow":70,"endRow":70},"type":"other","id":794},{"structure":[],"token":{"leadingTrivia":"","kind":"stringQuote","trailingTrivia":""},"text":""","parent":770,"range":{"endColumn":52,"startColumn":51,"startRow":70,"endRow":70},"type":"other","id":795},{"structure":[],"token":{"leadingTrivia":"","kind":"rightParen","trailingTrivia":""},"text":")","parent":764,"range":{"endColumn":53,"startColumn":52,"startRow":70,"endRow":70},"type":"other","id":796},{"text":"MultipleTrailingClosureElementList","id":797,"range":{"endColumn":53,"startColumn":53,"startRow":70,"endRow":70},"type":"collection","parent":764,"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}]},{"text":"CodeBlockItem","id":798,"range":{"startRow":73,"endColumn":23,"startColumn":1,"endRow":73},"type":"other","parent":1,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"VariableDeclSyntax"},"ref":"VariableDeclSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}]},{"text":"VariableDecl","id":799,"range":{"startColumn":1,"endRow":73,"startRow":73,"endColumn":23},"type":"decl","parent":798,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","ref":"AttributeListSyntax","value":{"text":"AttributeListSyntax"}},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax","name":"modifiers"},{"value":{"text":"nil"},"name":"unexpectedBetweenModifiersAndBindingSpecifier"},{"value":{"kind":"keyword(SwiftSyntax.Keyword.let)","text":"let"},"name":"bindingSpecifier"},{"value":{"text":"nil"},"name":"unexpectedBetweenBindingSpecifierAndBindings"},{"value":{"text":"PatternBindingListSyntax"},"ref":"PatternBindingListSyntax","name":"bindings"},{"value":{"text":"nil"},"name":"unexpectedAfterBindings"}]},{"range":{"startColumn":53,"endColumn":53,"startRow":70,"endRow":70},"parent":799,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"id":800,"type":"collection","text":"AttributeList"},{"range":{"startRow":70,"startColumn":53,"endRow":70,"endColumn":53},"parent":799,"structure":[{"value":{"text":"DeclModifierSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"id":801,"type":"collection","text":"DeclModifierList"},{"id":802,"token":{"leadingTrivia":"↲<\/span>↲<\/span>\/\/␣<\/span>Switch␣<\/span>with␣<\/span>tuple␣<\/span>matching<\/span>↲<\/span>","kind":"keyword(SwiftSyntax.Keyword.let)","trailingTrivia":"␣<\/span>"},"text":"let","parent":799,"range":{"startColumn":1,"endColumn":4,"startRow":73,"endRow":73},"type":"other","structure":[]},{"range":{"startColumn":5,"endColumn":23,"startRow":73,"endRow":73},"parent":799,"structure":[{"value":{"text":"PatternBindingSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"id":803,"type":"collection","text":"PatternBindingList"},{"range":{"startColumn":5,"endRow":73,"endColumn":23,"startRow":73},"parent":803,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"value":{"text":"IdentifierPatternSyntax"},"name":"pattern","ref":"IdentifierPatternSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTypeAnnotation"},{"value":{"text":"nil"},"name":"typeAnnotation"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAnnotationAndInitializer"},{"value":{"text":"InitializerClauseSyntax"},"name":"initializer","ref":"InitializerClauseSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenInitializerAndAccessorBlock"},{"value":{"text":"nil"},"name":"accessorBlock"},{"value":{"text":"nil"},"name":"unexpectedBetweenAccessorBlockAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"id":804,"type":"other","text":"PatternBinding"},{"parent":804,"text":"IdentifierPattern","structure":[{"name":"unexpectedBeforeIdentifier","value":{"text":"nil"}},{"name":"identifier","value":{"text":"somePoint","kind":"identifier("somePoint")"}},{"name":"unexpectedAfterIdentifier","value":{"text":"nil"}}],"type":"pattern","range":{"endColumn":14,"startColumn":5,"startRow":73,"endRow":73},"id":805},{"id":806,"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"identifier("somePoint")"},"text":"somePoint","parent":805,"type":"other","range":{"endRow":73,"startColumn":5,"startRow":73,"endColumn":14},"structure":[]},{"parent":804,"text":"InitializerClause","structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"text":"=","kind":"equal"}},{"name":"unexpectedBetweenEqualAndValue","value":{"text":"nil"}},{"name":"value","value":{"text":"TupleExprSyntax"},"ref":"TupleExprSyntax"},{"name":"unexpectedAfterValue","value":{"text":"nil"}}],"type":"other","range":{"endRow":73,"startColumn":15,"startRow":73,"endColumn":23},"id":807},{"id":808,"token":{"leadingTrivia":"","kind":"equal","trailingTrivia":"␣<\/span>"},"text":"=","parent":807,"range":{"endRow":73,"endColumn":16,"startRow":73,"startColumn":15},"type":"other","structure":[]},{"parent":807,"range":{"endRow":73,"endColumn":23,"startRow":73,"startColumn":17},"text":"TupleExpr","structure":[{"name":"unexpectedBeforeLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"kind":"leftParen","text":"("}},{"name":"unexpectedBetweenLeftParenAndElements","value":{"text":"nil"}},{"name":"elements","value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax"},{"name":"unexpectedBetweenElementsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"kind":"rightParen","text":")"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}],"id":809,"type":"expr"},{"id":810,"token":{"kind":"leftParen","trailingTrivia":"","leadingTrivia":""},"text":"(","parent":809,"range":{"startRow":73,"startColumn":17,"endColumn":18,"endRow":73},"type":"other","structure":[]},{"parent":809,"range":{"startRow":73,"startColumn":18,"endColumn":22,"endRow":73},"text":"LabeledExprList","structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"2"}}],"id":811,"type":"collection"},{"parent":811,"range":{"startColumn":18,"startRow":73,"endRow":73,"endColumn":20},"text":"LabeledExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"ref":"IntegerLiteralExprSyntax","name":"expression","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":",","kind":"comma"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":812,"type":"other"},{"text":"IntegerLiteralExpr","structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"kind":"integerLiteral("1")","text":"1"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"type":"expr","parent":812,"range":{"endColumn":19,"startRow":73,"endRow":73,"startColumn":18},"id":813},{"id":814,"token":{"leadingTrivia":"","kind":"integerLiteral("1")","trailingTrivia":""},"text":"1","parent":813,"type":"other","range":{"startColumn":18,"endRow":73,"startRow":73,"endColumn":19},"structure":[]},{"id":815,"token":{"leadingTrivia":"","kind":"comma","trailingTrivia":"␣<\/span>"},"text":",","parent":812,"type":"other","range":{"startColumn":19,"endRow":73,"startRow":73,"endColumn":20},"structure":[]},{"text":"LabeledExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","parent":811,"range":{"startColumn":21,"endRow":73,"startRow":73,"endColumn":22},"id":816},{"range":{"startColumn":21,"endRow":73,"startRow":73,"endColumn":22},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"kind":"integerLiteral("1")","text":"1"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr","id":817,"parent":816,"text":"IntegerLiteralExpr"},{"id":818,"token":{"leadingTrivia":"","kind":"integerLiteral("1")","trailingTrivia":""},"text":"1","parent":817,"range":{"startRow":73,"endRow":73,"endColumn":22,"startColumn":21},"type":"other","structure":[]},{"id":819,"token":{"leadingTrivia":"","kind":"rightParen","trailingTrivia":""},"text":")","parent":809,"range":{"startRow":73,"endRow":73,"endColumn":23,"startColumn":22},"type":"other","structure":[]},{"range":{"startRow":74,"endRow":85,"endColumn":2,"startColumn":1},"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"ExpressionStmtSyntax"},"ref":"ExpressionStmtSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"type":"other","id":820,"parent":1,"text":"CodeBlockItem"},{"text":"ExpressionStmt","parent":820,"id":821,"range":{"endColumn":2,"startColumn":1,"startRow":74,"endRow":85},"type":"other","structure":[{"name":"unexpectedBeforeExpression","value":{"text":"nil"}},{"ref":"SwitchExprSyntax","name":"expression","value":{"text":"SwitchExprSyntax"}},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}]},{"text":"SwitchExpr","parent":821,"id":822,"range":{"startColumn":1,"startRow":74,"endRow":85,"endColumn":2},"type":"expr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeSwitchKeyword"},{"value":{"kind":"keyword(SwiftSyntax.Keyword.switch)","text":"switch"},"name":"switchKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenSwitchKeywordAndSubject"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"subject"},{"value":{"text":"nil"},"name":"unexpectedBetweenSubjectAndLeftBrace"},{"value":{"text":"{","kind":"leftBrace"},"name":"leftBrace"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftBraceAndCases"},{"value":{"text":"SwitchCaseListSyntax"},"ref":"SwitchCaseListSyntax","name":"cases"},{"value":{"text":"nil"},"name":"unexpectedBetweenCasesAndRightBrace"},{"value":{"text":"}","kind":"rightBrace"},"name":"rightBrace"},{"value":{"text":"nil"},"name":"unexpectedAfterRightBrace"}]},{"structure":[],"token":{"leadingTrivia":"↲<\/span>","kind":"keyword(SwiftSyntax.Keyword.switch)","trailingTrivia":"␣<\/span>"},"text":"switch","parent":822,"range":{"endColumn":7,"startColumn":1,"startRow":74,"endRow":74},"type":"other","id":823},{"range":{"endRow":74,"startColumn":8,"startRow":74,"endColumn":17},"parent":822,"id":824,"text":"DeclReferenceExpr","structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("somePoint")","text":"somePoint"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"type":"expr"},{"structure":[],"token":{"leadingTrivia":"","kind":"identifier("somePoint")","trailingTrivia":"␣<\/span>"},"text":"somePoint","parent":824,"range":{"endColumn":17,"startRow":74,"endRow":74,"startColumn":8},"type":"other","id":825},{"structure":[],"token":{"leadingTrivia":"","kind":"leftBrace","trailingTrivia":""},"text":"{","parent":822,"range":{"endColumn":19,"startRow":74,"endRow":74,"startColumn":18},"type":"other","id":826},{"range":{"endColumn":68,"startRow":75,"endRow":84,"startColumn":1},"parent":822,"id":827,"text":"SwitchCaseList","structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"5"},"name":"Count"}],"type":"collection"},{"range":{"endColumn":37,"startRow":75,"startColumn":1,"endRow":76},"parent":827,"id":828,"text":"SwitchCase","structure":[{"name":"unexpectedBeforeAttribute","value":{"text":"nil"}},{"name":"attribute","value":{"text":"nil"}},{"name":"unexpectedBetweenAttributeAndLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"SwitchCaseLabelSyntax"},"ref":"SwitchCaseLabelSyntax"},{"name":"unexpectedBetweenLabelAndStatements","value":{"text":"nil"}},{"name":"statements","value":{"text":"CodeBlockItemListSyntax"},"ref":"CodeBlockItemListSyntax"},{"name":"unexpectedAfterStatements","value":{"text":"nil"}}],"type":"other"},{"type":"other","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCaseKeyword"},{"value":{"text":"case","kind":"keyword(SwiftSyntax.Keyword.case)"},"name":"caseKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenCaseKeywordAndCaseItems"},{"value":{"text":"SwitchCaseItemListSyntax"},"name":"caseItems","ref":"SwitchCaseItemListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenCaseItemsAndColon"},{"value":{"text":":","kind":"colon"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedAfterColon"}],"text":"SwitchCaseLabel","range":{"startRow":75,"endColumn":13,"endRow":75,"startColumn":1},"parent":828,"id":829},{"token":{"trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.case)","leadingTrivia":"↲<\/span>"},"parent":829,"id":830,"range":{"endRow":75,"endColumn":5,"startRow":75,"startColumn":1},"type":"other","structure":[],"text":"case"},{"type":"collection","structure":[{"name":"Element","value":{"text":"SwitchCaseItemSyntax"}},{"name":"Count","value":{"text":"1"}}],"text":"SwitchCaseItemList","range":{"endRow":75,"endColumn":12,"startRow":75,"startColumn":6},"parent":829,"id":831},{"type":"other","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"value":{"text":"ExpressionPatternSyntax"},"name":"pattern","ref":"ExpressionPatternSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndWhereClause"},{"value":{"text":"nil"},"name":"whereClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenWhereClauseAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"text":"SwitchCaseItem","range":{"endColumn":12,"startRow":75,"startColumn":6,"endRow":75},"parent":831,"id":832},{"id":833,"type":"pattern","parent":832,"range":{"startColumn":6,"endRow":75,"startRow":75,"endColumn":12},"text":"ExpressionPattern","structure":[{"name":"unexpectedBeforeExpression","value":{"text":"nil"}},{"name":"expression","ref":"TupleExprSyntax","value":{"text":"TupleExprSyntax"}},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}]},{"id":834,"type":"expr","parent":833,"range":{"startRow":75,"startColumn":6,"endRow":75,"endColumn":12},"text":"TupleExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndElements"},{"value":{"text":"LabeledExprListSyntax"},"name":"elements","ref":"LabeledExprListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenElementsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}]},{"token":{"trailingTrivia":"","kind":"leftParen","leadingTrivia":""},"id":835,"parent":834,"range":{"startRow":75,"endColumn":7,"startColumn":6,"endRow":75},"type":"other","text":"(","structure":[]},{"id":836,"type":"collection","parent":834,"range":{"startRow":75,"endColumn":11,"startColumn":7,"endRow":75},"text":"LabeledExprList","structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"2"},"name":"Count"}]},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"kind":"comma","text":","},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"text":"LabeledExpr","range":{"startColumn":7,"endRow":75,"startRow":75,"endColumn":9},"id":837,"type":"other","parent":836},{"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"0","kind":"integerLiteral("0")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"text":"IntegerLiteralExpr","range":{"startRow":75,"startColumn":7,"endRow":75,"endColumn":8},"id":838,"type":"expr","parent":837},{"token":{"kind":"integerLiteral("0")","leadingTrivia":"","trailingTrivia":""},"id":839,"parent":838,"range":{"startRow":75,"endRow":75,"endColumn":8,"startColumn":7},"type":"other","structure":[],"text":"0"},{"token":{"kind":"comma","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"id":840,"parent":837,"range":{"startRow":75,"endRow":75,"endColumn":9,"startColumn":8},"type":"other","structure":[],"text":","},{"text":"LabeledExpr","range":{"endRow":75,"endColumn":11,"startColumn":10,"startRow":75},"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other","parent":836,"id":841},{"range":{"endColumn":11,"startColumn":10,"endRow":75,"startRow":75},"parent":841,"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"kind":"integerLiteral("0")","text":"0"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"text":"IntegerLiteralExpr","id":842,"type":"expr"},{"token":{"leadingTrivia":"","trailingTrivia":"","kind":"integerLiteral("0")"},"parent":842,"id":843,"range":{"startColumn":10,"endColumn":11,"startRow":75,"endRow":75},"type":"other","structure":[],"text":"0"},{"token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"parent":834,"id":844,"range":{"startColumn":11,"endColumn":12,"startRow":75,"endRow":75},"type":"other","structure":[],"text":")"},{"token":{"leadingTrivia":"","trailingTrivia":"","kind":"colon"},"parent":829,"id":845,"range":{"startColumn":12,"endColumn":13,"startRow":75,"endRow":75},"type":"other","structure":[],"text":":"},{"range":{"startColumn":5,"endColumn":37,"startRow":76,"endRow":76},"parent":828,"structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"text":"CodeBlockItemList","id":846,"type":"collection"},{"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","ref":"FunctionCallExprSyntax","value":{"text":"FunctionCallExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":847,"range":{"endColumn":37,"endRow":76,"startColumn":5,"startRow":76},"text":"CodeBlockItem","type":"other","parent":846},{"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"name":"arguments","ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"kind":"rightParen","text":")"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"},"ref":"MultipleTrailingClosureElementListSyntax"},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"id":848,"range":{"endColumn":37,"startRow":76,"endRow":76,"startColumn":5},"text":"FunctionCallExpr","type":"expr","parent":847},{"text":"DeclReferenceExpr","structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("print")","text":"print"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"parent":848,"id":849,"range":{"endRow":76,"startColumn":5,"endColumn":10,"startRow":76},"type":"expr"},{"token":{"trailingTrivia":"","kind":"identifier("print")","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"parent":849,"id":850,"range":{"startColumn":5,"startRow":76,"endRow":76,"endColumn":10},"type":"other","text":"print","structure":[]},{"token":{"trailingTrivia":"","kind":"leftParen","leadingTrivia":""},"parent":848,"id":851,"range":{"startColumn":10,"startRow":76,"endRow":76,"endColumn":11},"type":"other","text":"(","structure":[]},{"text":"LabeledExprList","structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"parent":848,"id":852,"range":{"startColumn":11,"startRow":76,"endRow":76,"endColumn":36},"type":"collection"},{"text":"LabeledExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"StringLiteralExprSyntax"},"name":"expression","ref":"StringLiteralExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"parent":852,"id":853,"range":{"startColumn":11,"startRow":76,"endRow":76,"endColumn":36},"type":"other"},{"id":854,"parent":853,"type":"expr","text":"StringLiteralExpr","structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"name":"segments","value":{"text":"StringLiteralSegmentListSyntax"},"ref":"StringLiteralSegmentListSyntax"},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"range":{"endColumn":36,"startRow":76,"endRow":76,"startColumn":11}},{"token":{"leadingTrivia":"","kind":"stringQuote","trailingTrivia":""},"id":855,"parent":854,"range":{"startRow":76,"endRow":76,"endColumn":12,"startColumn":11},"type":"other","text":""","structure":[]},{"id":856,"parent":854,"range":{"endRow":76,"startColumn":12,"startRow":76,"endColumn":35},"text":"StringLiteralSegmentList","structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"1"}}],"type":"collection"},{"id":857,"parent":856,"range":{"endColumn":35,"startColumn":12,"startRow":76,"endRow":76},"text":"StringSegment","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"kind":"stringSegment("(0, 0) is at the origin")","text":"(0, 0) is at the origin"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other"},{"token":{"leadingTrivia":"","kind":"stringSegment("(0, 0) is at the origin")","trailingTrivia":""},"id":858,"parent":857,"range":{"startRow":76,"endRow":76,"endColumn":35,"startColumn":12},"type":"other","text":"(0,␣<\/span>0)␣<\/span>is␣<\/span>at␣<\/span>the␣<\/span>origin","structure":[]},{"token":{"leadingTrivia":"","kind":"stringQuote","trailingTrivia":""},"id":859,"parent":854,"range":{"startRow":76,"endRow":76,"endColumn":36,"startColumn":35},"type":"other","text":""","structure":[]},{"token":{"leadingTrivia":"","kind":"rightParen","trailingTrivia":""},"id":860,"parent":848,"range":{"startRow":76,"endRow":76,"endColumn":37,"startColumn":36},"type":"other","text":")","structure":[]},{"id":861,"parent":848,"range":{"startRow":76,"endRow":76,"endColumn":37,"startColumn":37},"text":"MultipleTrailingClosureElementList","structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection"},{"id":862,"parent":827,"range":{"endRow":78,"startColumn":1,"startRow":77,"endColumn":50},"text":"SwitchCase","structure":[{"name":"unexpectedBeforeAttribute","value":{"text":"nil"}},{"name":"attribute","value":{"text":"nil"}},{"name":"unexpectedBetweenAttributeAndLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"SwitchCaseLabelSyntax"},"ref":"SwitchCaseLabelSyntax"},{"name":"unexpectedBetweenLabelAndStatements","value":{"text":"nil"}},{"name":"statements","value":{"text":"CodeBlockItemListSyntax"},"ref":"CodeBlockItemListSyntax"},{"name":"unexpectedAfterStatements","value":{"text":"nil"}}],"type":"other"},{"text":"SwitchCaseLabel","type":"other","range":{"startColumn":1,"endColumn":13,"startRow":77,"endRow":77},"id":863,"parent":862,"structure":[{"name":"unexpectedBeforeCaseKeyword","value":{"text":"nil"}},{"name":"caseKeyword","value":{"text":"case","kind":"keyword(SwiftSyntax.Keyword.case)"}},{"name":"unexpectedBetweenCaseKeywordAndCaseItems","value":{"text":"nil"}},{"name":"caseItems","ref":"SwitchCaseItemListSyntax","value":{"text":"SwitchCaseItemListSyntax"}},{"name":"unexpectedBetweenCaseItemsAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":":","kind":"colon"}},{"name":"unexpectedAfterColon","value":{"text":"nil"}}]},{"token":{"kind":"keyword(SwiftSyntax.Keyword.case)","trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>"},"id":864,"parent":863,"range":{"endColumn":5,"startColumn":1,"endRow":77,"startRow":77},"type":"other","text":"case","structure":[]},{"text":"SwitchCaseItemList","type":"collection","range":{"endColumn":12,"startColumn":6,"endRow":77,"startRow":77},"id":865,"parent":863,"structure":[{"value":{"text":"SwitchCaseItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}]},{"text":"SwitchCaseItem","type":"other","range":{"startColumn":6,"endRow":77,"endColumn":12,"startRow":77},"id":866,"parent":865,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"ref":"ExpressionPatternSyntax","value":{"text":"ExpressionPatternSyntax"},"name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndWhereClause"},{"value":{"text":"nil"},"name":"whereClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenWhereClauseAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}]},{"id":867,"structure":[{"name":"unexpectedBeforeExpression","value":{"text":"nil"}},{"name":"expression","ref":"TupleExprSyntax","value":{"text":"TupleExprSyntax"}},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}],"range":{"startRow":77,"startColumn":6,"endColumn":12,"endRow":77},"type":"pattern","text":"ExpressionPattern","parent":866},{"id":868,"structure":[{"name":"unexpectedBeforeLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndElements","value":{"text":"nil"}},{"ref":"LabeledExprListSyntax","name":"elements","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenElementsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"kind":"rightParen","text":")"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}],"range":{"startRow":77,"endColumn":12,"startColumn":6,"endRow":77},"type":"expr","text":"TupleExpr","parent":867},{"token":{"trailingTrivia":"","kind":"leftParen","leadingTrivia":""},"id":869,"parent":868,"range":{"startRow":77,"startColumn":6,"endRow":77,"endColumn":7},"type":"other","structure":[],"text":"("},{"parent":868,"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"2"},"name":"Count"}],"id":870,"text":"LabeledExprList","range":{"endRow":77,"startRow":77,"startColumn":7,"endColumn":11},"type":"collection"},{"parent":870,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"DiscardAssignmentExprSyntax"},"ref":"DiscardAssignmentExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":",","kind":"comma"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"id":871,"text":"LabeledExpr","range":{"startColumn":7,"endColumn":9,"startRow":77,"endRow":77},"type":"other"},{"parent":871,"structure":[{"name":"unexpectedBeforeWildcard","value":{"text":"nil"}},{"name":"wildcard","value":{"text":"_","kind":"wildcard"}},{"name":"unexpectedAfterWildcard","value":{"text":"nil"}}],"id":872,"text":"DiscardAssignmentExpr","range":{"startRow":77,"endRow":77,"startColumn":7,"endColumn":8},"type":"expr"},{"token":{"trailingTrivia":"","leadingTrivia":"","kind":"wildcard"},"parent":872,"id":873,"range":{"startRow":77,"endRow":77,"endColumn":8,"startColumn":7},"type":"other","structure":[],"text":"_"},{"token":{"leadingTrivia":"","kind":"comma","trailingTrivia":"␣<\/span>"},"parent":871,"id":874,"range":{"startRow":77,"endRow":77,"endColumn":9,"startColumn":8},"type":"other","text":",","structure":[]},{"parent":870,"range":{"startRow":77,"endRow":77,"endColumn":11,"startColumn":10},"type":"other","id":875,"text":"LabeledExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}]},{"parent":875,"range":{"endRow":77,"startColumn":10,"startRow":77,"endColumn":11},"type":"expr","id":876,"text":"IntegerLiteralExpr","structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"0","kind":"integerLiteral("0")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}]},{"token":{"kind":"integerLiteral("0")","trailingTrivia":"","leadingTrivia":""},"parent":876,"id":877,"range":{"endRow":77,"startRow":77,"startColumn":10,"endColumn":11},"type":"other","text":"0","structure":[]},{"token":{"kind":"rightParen","trailingTrivia":"","leadingTrivia":""},"parent":868,"id":878,"range":{"endRow":77,"startRow":77,"startColumn":11,"endColumn":12},"type":"other","text":")","structure":[]},{"token":{"kind":"colon","leadingTrivia":"","trailingTrivia":""},"id":879,"parent":863,"range":{"startColumn":12,"endColumn":13,"endRow":77,"startRow":77},"type":"other","structure":[],"text":":"},{"range":{"startColumn":5,"endColumn":50,"endRow":78,"startRow":78},"type":"collection","structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"id":880,"parent":862,"text":"CodeBlockItemList"},{"range":{"endColumn":50,"endRow":78,"startColumn":5,"startRow":78},"type":"other","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"FunctionCallExprSyntax"},"ref":"FunctionCallExprSyntax","name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"id":881,"parent":880,"text":"CodeBlockItem"},{"range":{"endColumn":50,"startRow":78,"endRow":78,"startColumn":5},"type":"expr","structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"ref":"LabeledExprListSyntax","name":"arguments","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"},"ref":"MultipleTrailingClosureElementListSyntax"},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"id":882,"parent":881,"text":"FunctionCallExpr"},{"parent":882,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("print")","text":"print"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"id":883,"type":"expr","range":{"startRow":78,"startColumn":5,"endRow":78,"endColumn":10},"text":"DeclReferenceExpr"},{"token":{"kind":"identifier("print")","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":""},"parent":883,"id":884,"range":{"endColumn":10,"startRow":78,"startColumn":5,"endRow":78},"type":"other","structure":[],"text":"print"},{"token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""},"text":"(","id":885,"range":{"endColumn":11,"startRow":78,"startColumn":10,"endRow":78},"structure":[],"type":"other","parent":882},{"parent":882,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":886,"type":"collection","range":{"endColumn":49,"startRow":78,"startColumn":11,"endRow":78},"text":"LabeledExprList"},{"parent":886,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"ref":"StringLiteralExprSyntax","value":{"text":"StringLiteralExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"id":887,"type":"other","range":{"startRow":78,"startColumn":11,"endRow":78,"endColumn":49},"text":"LabeledExpr"},{"text":"StringLiteralExpr","type":"expr","range":{"endColumn":49,"endRow":78,"startColumn":11,"startRow":78},"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"name":"segments","value":{"text":"StringLiteralSegmentListSyntax"},"ref":"StringLiteralSegmentListSyntax"},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"id":888,"parent":887},{"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"text":""","id":889,"range":{"endColumn":12,"startColumn":11,"startRow":78,"endRow":78},"structure":[],"type":"other","parent":888},{"range":{"endColumn":48,"startColumn":12,"startRow":78,"endRow":78},"text":"StringLiteralSegmentList","structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"3"},"name":"Count"}],"id":890,"type":"collection","parent":888},{"range":{"startRow":78,"endColumn":13,"startColumn":12,"endRow":78},"text":"StringSegment","structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":"(","kind":"stringSegment("(")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"id":891,"type":"other","parent":890},{"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("(")"},"text":"(","id":892,"range":{"startRow":78,"endColumn":13,"endRow":78,"startColumn":12},"structure":[],"type":"other","parent":891},{"range":{"startRow":78,"endColumn":27,"endRow":78,"startColumn":13},"text":"ExpressionSegment","structure":[{"name":"unexpectedBeforeBackslash","value":{"text":"nil"}},{"name":"backslash","value":{"kind":"backslash","text":"\\"}},{"name":"unexpectedBetweenBackslashAndPounds","value":{"text":"nil"}},{"name":"pounds","value":{"text":"nil"}},{"name":"unexpectedBetweenPoundsAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"kind":"leftParen","text":"("}},{"name":"unexpectedBetweenLeftParenAndExpressions","value":{"text":"nil"}},{"name":"expressions","value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax"},{"name":"unexpectedBetweenExpressionsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"kind":"rightParen","text":")"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}],"id":893,"type":"other","parent":890},{"token":{"leadingTrivia":"","kind":"backslash","trailingTrivia":""},"text":"\\","id":894,"range":{"endRow":78,"endColumn":14,"startRow":78,"startColumn":13},"structure":[],"type":"other","parent":893},{"token":{"leadingTrivia":"","kind":"leftParen","trailingTrivia":""},"text":"(","id":895,"range":{"endRow":78,"endColumn":15,"startRow":78,"startColumn":14},"structure":[],"type":"other","parent":893},{"parent":893,"text":"LabeledExprList","structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"id":896,"range":{"endRow":78,"endColumn":26,"startRow":78,"startColumn":15},"type":"collection"},{"parent":896,"text":"LabeledExpr","structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"MemberAccessExprSyntax"},"ref":"MemberAccessExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"id":897,"range":{"startColumn":15,"endRow":78,"startRow":78,"endColumn":26},"type":"other"},{"range":{"endRow":78,"endColumn":26,"startColumn":15,"startRow":78},"text":"MemberAccessExpr","parent":897,"structure":[{"name":"unexpectedBeforeBase","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"base","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenBaseAndPeriod","value":{"text":"nil"}},{"name":"period","value":{"text":".","kind":"period"}},{"name":"unexpectedBetweenPeriodAndDeclName","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"declName","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedAfterDeclName","value":{"text":"nil"}}],"type":"expr","id":898},{"range":{"startRow":78,"endRow":78,"endColumn":24,"startColumn":15},"text":"DeclReferenceExpr","parent":898,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"somePoint","kind":"identifier("somePoint")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","id":899},{"token":{"kind":"identifier("somePoint")","leadingTrivia":"","trailingTrivia":""},"text":"somePoint","id":900,"range":{"startColumn":15,"endColumn":24,"endRow":78,"startRow":78},"structure":[],"type":"other","parent":899},{"token":{"trailingTrivia":"","leadingTrivia":"","kind":"period"},"text":".","id":901,"range":{"startColumn":24,"endRow":78,"endColumn":25,"startRow":78},"structure":[],"type":"other","parent":898},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"integerLiteral("0")","text":"0"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","parent":898,"id":902,"text":"DeclReferenceExpr","range":{"startColumn":25,"endRow":78,"endColumn":26,"startRow":78}},{"token":{"leadingTrivia":"","trailingTrivia":"","kind":"integerLiteral("0")"},"text":"0","id":903,"range":{"startColumn":25,"endRow":78,"endColumn":26,"startRow":78},"structure":[],"type":"other","parent":902},{"token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"text":")","id":904,"range":{"startColumn":26,"endRow":78,"endColumn":27,"startRow":78},"structure":[],"type":"other","parent":893},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"kind":"stringSegment(", 0) is on the x-axis")","text":", 0) is on the x-axis"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","parent":890,"id":905,"text":"StringSegment","range":{"startColumn":27,"endRow":78,"endColumn":48,"startRow":78}},{"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment(", 0) is on the x-axis")"},"text":",␣<\/span>0)␣<\/span>is␣<\/span>on␣<\/span>the␣<\/span>x-axis","id":906,"range":{"startColumn":27,"endColumn":48,"endRow":78,"startRow":78},"structure":[],"type":"other","parent":905},{"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"text":""","id":907,"range":{"startColumn":48,"endColumn":49,"endRow":78,"startRow":78},"structure":[],"type":"other","parent":888},{"token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"text":")","id":908,"range":{"startColumn":49,"endColumn":50,"endRow":78,"startRow":78},"structure":[],"type":"other","parent":882},{"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"type":"collection","parent":882,"id":909,"text":"MultipleTrailingClosureElementList","range":{"startColumn":50,"endColumn":50,"endRow":78,"startRow":78}},{"parent":827,"structure":[{"name":"unexpectedBeforeAttribute","value":{"text":"nil"}},{"name":"attribute","value":{"text":"nil"}},{"name":"unexpectedBetweenAttributeAndLabel","value":{"text":"nil"}},{"name":"label","ref":"SwitchCaseLabelSyntax","value":{"text":"SwitchCaseLabelSyntax"}},{"name":"unexpectedBetweenLabelAndStatements","value":{"text":"nil"}},{"name":"statements","ref":"CodeBlockItemListSyntax","value":{"text":"CodeBlockItemListSyntax"}},{"name":"unexpectedAfterStatements","value":{"text":"nil"}}],"type":"other","text":"SwitchCase","id":910,"range":{"startColumn":1,"endColumn":50,"startRow":79,"endRow":80}},{"parent":910,"structure":[{"name":"unexpectedBeforeCaseKeyword","value":{"text":"nil"}},{"name":"caseKeyword","value":{"kind":"keyword(SwiftSyntax.Keyword.case)","text":"case"}},{"name":"unexpectedBetweenCaseKeywordAndCaseItems","value":{"text":"nil"}},{"name":"caseItems","ref":"SwitchCaseItemListSyntax","value":{"text":"SwitchCaseItemListSyntax"}},{"name":"unexpectedBetweenCaseItemsAndColon","value":{"text":"nil"}},{"name":"colon","value":{"kind":"colon","text":":"}},{"name":"unexpectedAfterColon","value":{"text":"nil"}}],"type":"other","text":"SwitchCaseLabel","id":911,"range":{"startRow":79,"endRow":79,"startColumn":1,"endColumn":13}},{"token":{"trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.case)","leadingTrivia":"↲<\/span>"},"text":"case","id":912,"range":{"startColumn":1,"endColumn":5,"endRow":79,"startRow":79},"structure":[],"type":"other","parent":911},{"text":"SwitchCaseItemList","structure":[{"name":"Element","value":{"text":"SwitchCaseItemSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection","range":{"startRow":79,"startColumn":6,"endRow":79,"endColumn":12},"id":913,"parent":911},{"text":"SwitchCaseItem","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"value":{"text":"ExpressionPatternSyntax"},"ref":"ExpressionPatternSyntax","name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndWhereClause"},{"value":{"text":"nil"},"name":"whereClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenWhereClauseAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","range":{"startRow":79,"endColumn":12,"startColumn":6,"endRow":79},"id":914,"parent":913},{"text":"ExpressionPattern","structure":[{"name":"unexpectedBeforeExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"TupleExprSyntax"},"ref":"TupleExprSyntax"},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}],"type":"pattern","range":{"startColumn":6,"endColumn":12,"endRow":79,"startRow":79},"id":915,"parent":914},{"text":"TupleExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftParen"},{"value":{"kind":"leftParen","text":"("},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndElements"},{"name":"elements","value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax"},{"name":"unexpectedBetweenElementsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}],"type":"expr","range":{"startRow":79,"endRow":79,"startColumn":6,"endColumn":12},"id":916,"parent":915},{"token":{"kind":"leftParen","trailingTrivia":"","leadingTrivia":""},"text":"(","id":917,"range":{"endRow":79,"startColumn":6,"endColumn":7,"startRow":79},"structure":[],"type":"other","parent":916},{"id":918,"type":"collection","structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"2"}}],"parent":916,"text":"LabeledExprList","range":{"endRow":79,"startColumn":7,"endColumn":11,"startRow":79}},{"id":919,"type":"other","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"kind":"comma","text":","},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"parent":918,"text":"LabeledExpr","range":{"startRow":79,"startColumn":7,"endColumn":9,"endRow":79}},{"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"kind":"integerLiteral("0")","text":"0"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"type":"expr","range":{"startRow":79,"endColumn":8,"startColumn":7,"endRow":79},"parent":919,"id":920,"text":"IntegerLiteralExpr"},{"token":{"leadingTrivia":"","kind":"integerLiteral("0")","trailingTrivia":""},"text":"0","id":921,"range":{"startColumn":7,"endColumn":8,"endRow":79,"startRow":79},"structure":[],"type":"other","parent":920},{"token":{"leadingTrivia":"","kind":"comma","trailingTrivia":"␣<\/span>"},"text":",","id":922,"range":{"startColumn":8,"endColumn":9,"endRow":79,"startRow":79},"structure":[],"type":"other","parent":919},{"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"ref":"DiscardAssignmentExprSyntax","name":"expression","value":{"text":"DiscardAssignmentExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other","range":{"startColumn":10,"endColumn":11,"endRow":79,"startRow":79},"parent":918,"id":923,"text":"LabeledExpr"},{"structure":[{"name":"unexpectedBeforeWildcard","value":{"text":"nil"}},{"name":"wildcard","value":{"kind":"wildcard","text":"_"}},{"name":"unexpectedAfterWildcard","value":{"text":"nil"}}],"type":"expr","range":{"startRow":79,"startColumn":10,"endRow":79,"endColumn":11},"parent":923,"id":924,"text":"DiscardAssignmentExpr"},{"token":{"kind":"wildcard","trailingTrivia":"","leadingTrivia":""},"text":"_","id":925,"range":{"endColumn":11,"startColumn":10,"endRow":79,"startRow":79},"structure":[],"type":"other","parent":924},{"token":{"kind":"rightParen","trailingTrivia":"","leadingTrivia":""},"text":")","id":926,"range":{"endColumn":12,"startColumn":11,"endRow":79,"startRow":79},"structure":[],"type":"other","parent":916},{"token":{"kind":"colon","trailingTrivia":"","leadingTrivia":""},"text":":","id":927,"range":{"endColumn":13,"startColumn":12,"endRow":79,"startRow":79},"structure":[],"type":"other","parent":911},{"range":{"endColumn":50,"startColumn":5,"endRow":80,"startRow":80},"parent":910,"id":928,"text":"CodeBlockItemList","structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection"},{"range":{"endColumn":50,"startColumn":5,"startRow":80,"endRow":80},"parent":928,"id":929,"text":"CodeBlockItem","structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"FunctionCallExprSyntax"},"ref":"FunctionCallExprSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"type":"other"},{"range":{"endColumn":50,"startRow":80,"startColumn":5,"endRow":80},"parent":929,"id":930,"text":"FunctionCallExpr","structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"name":"arguments","value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax"},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"},"ref":"MultipleTrailingClosureElementListSyntax"},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"type":"expr"},{"id":931,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("print")","text":"print"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"text":"DeclReferenceExpr","parent":930,"type":"expr","range":{"startRow":80,"startColumn":5,"endColumn":10,"endRow":80}},{"token":{"kind":"identifier("print")","trailingTrivia":"","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"text":"print","id":932,"range":{"startRow":80,"endRow":80,"startColumn":5,"endColumn":10},"structure":[],"type":"other","parent":931},{"token":{"leadingTrivia":"","kind":"leftParen","trailingTrivia":""},"text":"(","id":933,"range":{"startRow":80,"startColumn":10,"endRow":80,"endColumn":11},"structure":[],"type":"other","parent":930},{"range":{"startRow":80,"startColumn":11,"endRow":80,"endColumn":49},"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection","text":"LabeledExprList","id":934,"parent":930},{"range":{"endColumn":49,"startRow":80,"startColumn":11,"endRow":80},"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"ref":"StringLiteralExprSyntax","name":"expression","value":{"text":"StringLiteralExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other","text":"LabeledExpr","id":935,"parent":934},{"range":{"startColumn":11,"endColumn":49,"startRow":80,"endRow":80},"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"text":""","kind":"stringQuote"}},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"value":{"text":"StringLiteralSegmentListSyntax"},"name":"segments","ref":"StringLiteralSegmentListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"kind":"stringQuote","text":"""},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"type":"expr","text":"StringLiteralExpr","id":936,"parent":935},{"id":937,"type":"other","range":{"startColumn":11,"endRow":80,"endColumn":12,"startRow":80},"structure":[],"token":{"kind":"stringQuote","leadingTrivia":"","trailingTrivia":""},"text":""","parent":936},{"text":"StringLiteralSegmentList","range":{"startColumn":12,"endRow":80,"endColumn":48,"startRow":80},"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"3"},"name":"Count"}],"id":938,"type":"collection","parent":936},{"text":"StringSegment","range":{"startColumn":12,"endColumn":16,"endRow":80,"startRow":80},"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":"(0, ","kind":"stringSegment("(0, ")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"id":939,"type":"other","parent":938},{"id":940,"type":"other","range":{"startRow":80,"startColumn":12,"endRow":80,"endColumn":16},"structure":[],"token":{"kind":"stringSegment("(0, ")","trailingTrivia":"","leadingTrivia":""},"text":"(0,␣<\/span>","parent":939},{"range":{"startRow":80,"endColumn":30,"endRow":80,"startColumn":16},"id":941,"parent":938,"structure":[{"name":"unexpectedBeforeBackslash","value":{"text":"nil"}},{"value":{"text":"\\","kind":"backslash"},"name":"backslash"},{"value":{"text":"nil"},"name":"unexpectedBetweenBackslashAndPounds"},{"value":{"text":"nil"},"name":"pounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenPoundsAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndExpressions"},{"value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax","name":"expressions"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"type":"other","text":"ExpressionSegment"},{"id":942,"type":"other","range":{"startRow":80,"startColumn":16,"endColumn":17,"endRow":80},"structure":[],"token":{"kind":"backslash","leadingTrivia":"","trailingTrivia":""},"parent":941,"text":"\\"},{"id":943,"type":"other","range":{"startRow":80,"startColumn":17,"endColumn":18,"endRow":80},"structure":[],"token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""},"parent":941,"text":"("},{"type":"collection","range":{"startRow":80,"startColumn":18,"endColumn":29,"endRow":80},"id":944,"parent":941,"text":"LabeledExprList","structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"type":"other","range":{"endColumn":29,"startRow":80,"startColumn":18,"endRow":80},"id":945,"parent":944,"text":"LabeledExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"ref":"MemberAccessExprSyntax","value":{"text":"MemberAccessExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}]},{"id":946,"text":"MemberAccessExpr","parent":945,"range":{"endColumn":29,"startColumn":18,"endRow":80,"startRow":80},"structure":[{"name":"unexpectedBeforeBase","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"base","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenBaseAndPeriod","value":{"text":"nil"}},{"name":"period","value":{"text":".","kind":"period"}},{"name":"unexpectedBetweenPeriodAndDeclName","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"declName","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedAfterDeclName","value":{"text":"nil"}}],"type":"expr"},{"id":947,"text":"DeclReferenceExpr","parent":946,"range":{"endRow":80,"startColumn":18,"startRow":80,"endColumn":27},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"somePoint","kind":"identifier("somePoint")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr"},{"id":948,"type":"other","range":{"startRow":80,"endColumn":27,"startColumn":18,"endRow":80},"structure":[],"token":{"trailingTrivia":"","leadingTrivia":"","kind":"identifier("somePoint")"},"parent":947,"text":"somePoint"},{"id":949,"type":"other","range":{"startRow":80,"endColumn":28,"startColumn":27,"endRow":80},"structure":[],"token":{"trailingTrivia":"","leadingTrivia":"","kind":"period"},"parent":946,"text":"."},{"parent":946,"range":{"startRow":80,"endColumn":29,"startColumn":28,"endRow":80},"text":"DeclReferenceExpr","structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"1","kind":"integerLiteral("1")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":950,"type":"expr"},{"id":951,"type":"other","range":{"endRow":80,"startRow":80,"endColumn":29,"startColumn":28},"structure":[],"token":{"kind":"integerLiteral("1")","leadingTrivia":"","trailingTrivia":""},"parent":950,"text":"1"},{"id":952,"type":"other","range":{"endRow":80,"startRow":80,"endColumn":30,"startColumn":29},"structure":[],"token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":""},"parent":941,"text":")"},{"parent":938,"range":{"endRow":80,"startRow":80,"endColumn":48,"startColumn":30},"text":"StringSegment","structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"kind":"stringSegment(") is on the y-axis")","text":") is on the y-axis"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"id":953,"type":"other"},{"id":954,"type":"other","range":{"endRow":80,"startRow":80,"startColumn":30,"endColumn":48},"structure":[],"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment(") is on the y-axis")"},"parent":953,"text":")␣<\/span>is␣<\/span>on␣<\/span>the␣<\/span>y-axis"},{"id":955,"type":"other","range":{"endColumn":49,"startRow":80,"endRow":80,"startColumn":48},"structure":[],"token":{"leadingTrivia":"","kind":"stringQuote","trailingTrivia":""},"parent":936,"text":"""},{"id":956,"type":"other","range":{"endColumn":50,"startRow":80,"endRow":80,"startColumn":49},"structure":[],"token":{"leadingTrivia":"","kind":"rightParen","trailingTrivia":""},"parent":930,"text":")"},{"range":{"endColumn":50,"startRow":80,"endRow":80,"startColumn":50},"parent":930,"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"type":"collection","id":957,"text":"MultipleTrailingClosureElementList"},{"range":{"startRow":81,"startColumn":1,"endRow":82,"endColumn":64},"parent":827,"structure":[{"name":"unexpectedBeforeAttribute","value":{"text":"nil"}},{"name":"attribute","value":{"text":"nil"}},{"name":"unexpectedBetweenAttributeAndLabel","value":{"text":"nil"}},{"name":"label","ref":"SwitchCaseLabelSyntax","value":{"text":"SwitchCaseLabelSyntax"}},{"name":"unexpectedBetweenLabelAndStatements","value":{"text":"nil"}},{"name":"statements","ref":"CodeBlockItemListSyntax","value":{"text":"CodeBlockItemListSyntax"}},{"name":"unexpectedAfterStatements","value":{"text":"nil"}}],"type":"other","id":958,"text":"SwitchCase"},{"range":{"startColumn":1,"startRow":81,"endRow":81,"endColumn":23},"parent":958,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCaseKeyword"},{"value":{"kind":"keyword(SwiftSyntax.Keyword.case)","text":"case"},"name":"caseKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenCaseKeywordAndCaseItems"},{"value":{"text":"SwitchCaseItemListSyntax"},"ref":"SwitchCaseItemListSyntax","name":"caseItems"},{"value":{"text":"nil"},"name":"unexpectedBetweenCaseItemsAndColon"},{"value":{"kind":"colon","text":":"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedAfterColon"}],"type":"other","id":959,"text":"SwitchCaseLabel"},{"id":960,"type":"other","range":{"startRow":81,"startColumn":1,"endRow":81,"endColumn":5},"structure":[],"token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.case)"},"text":"case","parent":959},{"range":{"startRow":81,"startColumn":6,"endRow":81,"endColumn":22},"type":"collection","structure":[{"name":"Element","value":{"text":"SwitchCaseItemSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":961,"text":"SwitchCaseItemList","parent":959},{"range":{"startColumn":6,"endRow":81,"startRow":81,"endColumn":22},"type":"other","structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"name":"pattern","ref":"ExpressionPatternSyntax","value":{"text":"ExpressionPatternSyntax"}},{"name":"unexpectedBetweenPatternAndWhereClause","value":{"text":"nil"}},{"name":"whereClause","value":{"text":"nil"}},{"name":"unexpectedBetweenWhereClauseAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":962,"text":"SwitchCaseItem","parent":961},{"range":{"startRow":81,"endRow":81,"endColumn":22,"startColumn":6},"type":"pattern","structure":[{"name":"unexpectedBeforeExpression","value":{"text":"nil"}},{"name":"expression","ref":"TupleExprSyntax","value":{"text":"TupleExprSyntax"}},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}],"id":963,"text":"ExpressionPattern","parent":962},{"id":964,"parent":963,"text":"TupleExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndElements"},{"value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax","name":"elements"},{"value":{"text":"nil"},"name":"unexpectedBetweenElementsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"range":{"startColumn":6,"endRow":81,"endColumn":22,"startRow":81},"type":"expr"},{"id":965,"type":"other","range":{"startColumn":6,"endRow":81,"startRow":81,"endColumn":7},"structure":[],"token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""},"parent":964,"text":"("},{"id":966,"parent":964,"text":"LabeledExprList","structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"2"}}],"range":{"startColumn":7,"endRow":81,"startRow":81,"endColumn":21},"type":"collection"},{"id":967,"parent":966,"text":"LabeledExpr","structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"ref":"InfixOperatorExprSyntax","value":{"text":"InfixOperatorExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":",","kind":"comma"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"range":{"endRow":81,"startRow":81,"endColumn":14,"startColumn":7},"type":"other"},{"structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"ref":"PrefixOperatorExprSyntax","name":"leftOperand","value":{"text":"PrefixOperatorExprSyntax"}},{"name":"unexpectedBetweenLeftOperandAndOperator","value":{"text":"nil"}},{"ref":"BinaryOperatorExprSyntax","name":"operator","value":{"text":"BinaryOperatorExprSyntax"}},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"ref":"IntegerLiteralExprSyntax","name":"rightOperand","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}],"type":"expr","text":"InfixOperatorExpr","parent":967,"id":968,"range":{"startColumn":7,"endColumn":13,"startRow":81,"endRow":81}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOperator"},{"value":{"text":"-","kind":"prefixOperator("-")"},"name":"operator"},{"value":{"text":"nil"},"name":"unexpectedBetweenOperatorAndExpression"},{"value":{"text":"IntegerLiteralExprSyntax"},"name":"expression","ref":"IntegerLiteralExprSyntax"},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}],"type":"expr","text":"PrefixOperatorExpr","parent":968,"id":969,"range":{"startColumn":7,"endColumn":9,"endRow":81,"startRow":81}},{"id":970,"type":"other","range":{"endRow":81,"endColumn":8,"startColumn":7,"startRow":81},"structure":[],"token":{"trailingTrivia":"","kind":"prefixOperator("-")","leadingTrivia":""},"text":"-","parent":969},{"text":"IntegerLiteralExpr","type":"expr","id":971,"range":{"endRow":81,"endColumn":9,"startColumn":8,"startRow":81},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"2","kind":"integerLiteral("2")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"parent":969},{"id":972,"type":"other","range":{"endRow":81,"endColumn":9,"startRow":81,"startColumn":8},"structure":[],"token":{"leadingTrivia":"","kind":"integerLiteral("2")","trailingTrivia":""},"text":"2","parent":971},{"text":"BinaryOperatorExpr","type":"expr","id":973,"range":{"endRow":81,"endColumn":12,"startRow":81,"startColumn":9},"structure":[{"name":"unexpectedBeforeOperator","value":{"text":"nil"}},{"name":"operator","value":{"kind":"binaryOperator("...")","text":"..."}},{"name":"unexpectedAfterOperator","value":{"text":"nil"}}],"parent":968},{"id":974,"type":"other","range":{"endColumn":12,"startRow":81,"startColumn":9,"endRow":81},"structure":[],"token":{"trailingTrivia":"","leadingTrivia":"","kind":"binaryOperator("...")"},"text":"...","parent":973},{"text":"IntegerLiteralExpr","type":"expr","id":975,"range":{"endColumn":13,"startRow":81,"startColumn":12,"endRow":81},"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"2","kind":"integerLiteral("2")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"parent":968},{"id":976,"type":"other","range":{"endColumn":13,"startColumn":12,"startRow":81,"endRow":81},"structure":[],"token":{"kind":"integerLiteral("2")","trailingTrivia":"","leadingTrivia":""},"text":"2","parent":975},{"id":977,"type":"other","range":{"startColumn":13,"startRow":81,"endColumn":14,"endRow":81},"structure":[],"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"comma"},"parent":967,"text":","},{"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"ref":"InfixOperatorExprSyntax","name":"expression","value":{"text":"InfixOperatorExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"range":{"startColumn":15,"startRow":81,"endColumn":21,"endRow":81},"type":"other","id":978,"parent":966,"text":"LabeledExpr"},{"structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"name":"leftOperand","ref":"PrefixOperatorExprSyntax","value":{"text":"PrefixOperatorExprSyntax"}},{"name":"unexpectedBetweenLeftOperandAndOperator","value":{"text":"nil"}},{"name":"operator","ref":"BinaryOperatorExprSyntax","value":{"text":"BinaryOperatorExprSyntax"}},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"name":"rightOperand","ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}],"range":{"startColumn":15,"endColumn":21,"startRow":81,"endRow":81},"type":"expr","id":979,"parent":978,"text":"InfixOperatorExpr"},{"text":"PrefixOperatorExpr","range":{"startColumn":15,"startRow":81,"endRow":81,"endColumn":17},"structure":[{"name":"unexpectedBeforeOperator","value":{"text":"nil"}},{"name":"operator","value":{"text":"-","kind":"prefixOperator("-")"}},{"name":"unexpectedBetweenOperatorAndExpression","value":{"text":"nil"}},{"ref":"IntegerLiteralExprSyntax","name":"expression","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}],"type":"expr","parent":979,"id":980},{"id":981,"type":"other","range":{"startRow":81,"endRow":81,"endColumn":16,"startColumn":15},"structure":[],"token":{"kind":"prefixOperator("-")","leadingTrivia":"","trailingTrivia":""},"text":"-","parent":980},{"text":"IntegerLiteralExpr","range":{"startRow":81,"endRow":81,"endColumn":17,"startColumn":16},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"2","kind":"integerLiteral("2")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr","parent":980,"id":982},{"id":983,"type":"other","range":{"startColumn":16,"startRow":81,"endRow":81,"endColumn":17},"structure":[],"token":{"kind":"integerLiteral("2")","leadingTrivia":"","trailingTrivia":""},"text":"2","parent":982},{"text":"BinaryOperatorExpr","range":{"startColumn":17,"startRow":81,"endRow":81,"endColumn":20},"structure":[{"name":"unexpectedBeforeOperator","value":{"text":"nil"}},{"name":"operator","value":{"kind":"binaryOperator("...")","text":"..."}},{"name":"unexpectedAfterOperator","value":{"text":"nil"}}],"type":"expr","parent":979,"id":984},{"id":985,"type":"other","range":{"startRow":81,"endColumn":20,"startColumn":17,"endRow":81},"structure":[],"token":{"trailingTrivia":"","kind":"binaryOperator("...")","leadingTrivia":""},"text":"...","parent":984},{"range":{"startRow":81,"endRow":81,"startColumn":20,"endColumn":21},"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"2","kind":"integerLiteral("2")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"id":986,"text":"IntegerLiteralExpr","type":"expr","parent":979},{"structure":[],"type":"other","parent":986,"text":"2","range":{"endColumn":21,"startColumn":20,"endRow":81,"startRow":81},"token":{"kind":"integerLiteral("2")","leadingTrivia":"","trailingTrivia":""},"id":987},{"structure":[],"type":"other","parent":964,"text":")","range":{"endColumn":22,"startColumn":21,"endRow":81,"startRow":81},"token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":""},"id":988},{"structure":[],"type":"other","parent":959,"text":":","range":{"endColumn":23,"startColumn":22,"endRow":81,"startRow":81},"token":{"kind":"colon","leadingTrivia":"","trailingTrivia":""},"id":989},{"range":{"endColumn":64,"startColumn":5,"endRow":82,"startRow":82},"structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"id":990,"text":"CodeBlockItemList","type":"collection","parent":958},{"range":{"startRow":82,"endRow":82,"startColumn":5,"endColumn":64},"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"FunctionCallExprSyntax","name":"item","value":{"text":"FunctionCallExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":991,"text":"CodeBlockItem","type":"other","parent":990},{"range":{"startColumn":5,"endColumn":64,"startRow":82,"endRow":82},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"name":"calledExpression","ref":"DeclReferenceExprSyntax"},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"kind":"leftParen","text":"("}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"ref":"LabeledExprListSyntax","name":"arguments","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"kind":"rightParen","text":")"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"id":992,"text":"FunctionCallExpr","type":"expr","parent":991},{"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"print","kind":"identifier("print")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"parent":992,"range":{"startColumn":5,"startRow":82,"endRow":82,"endColumn":10},"type":"expr","id":993,"text":"DeclReferenceExpr"},{"structure":[],"type":"other","parent":993,"text":"print","range":{"endColumn":10,"startRow":82,"endRow":82,"startColumn":5},"token":{"trailingTrivia":"","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","kind":"identifier("print")"},"id":994},{"structure":[],"type":"other","parent":992,"text":"(","range":{"endRow":82,"endColumn":11,"startRow":82,"startColumn":10},"token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""},"id":995},{"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection","id":996,"text":"LabeledExprList","range":{"endRow":82,"endColumn":63,"startRow":82,"startColumn":11},"parent":992},{"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"ref":"StringLiteralExprSyntax","name":"expression","value":{"text":"StringLiteralExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other","id":997,"text":"LabeledExpr","range":{"endRow":82,"endColumn":63,"startRow":82,"startColumn":11},"parent":996},{"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"name":"segments","value":{"text":"StringLiteralSegmentListSyntax"},"ref":"StringLiteralSegmentListSyntax"},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"type":"expr","id":998,"text":"StringLiteralExpr","range":{"startRow":82,"startColumn":11,"endRow":82,"endColumn":63},"parent":997},{"structure":[],"type":"other","parent":998,"text":""","range":{"startRow":82,"startColumn":11,"endColumn":12,"endRow":82},"token":{"trailingTrivia":"","kind":"stringQuote","leadingTrivia":""},"id":999},{"id":1000,"parent":998,"range":{"startRow":82,"startColumn":12,"endColumn":62,"endRow":82},"text":"StringLiteralSegmentList","type":"collection","structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"5"}}]},{"id":1001,"parent":1000,"range":{"endColumn":13,"startRow":82,"startColumn":12,"endRow":82},"text":"StringSegment","type":"other","structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":"(","kind":"stringSegment("(")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}]},{"structure":[],"type":"other","parent":1001,"text":"(","range":{"endColumn":13,"startRow":82,"endRow":82,"startColumn":12},"token":{"trailingTrivia":"","leadingTrivia":"","kind":"stringSegment("(")"},"id":1002},{"id":1003,"parent":1000,"range":{"startColumn":13,"startRow":82,"endColumn":27,"endRow":82},"structure":[{"name":"unexpectedBeforeBackslash","value":{"text":"nil"}},{"name":"backslash","value":{"kind":"backslash","text":"\\"}},{"name":"unexpectedBetweenBackslashAndPounds","value":{"text":"nil"}},{"name":"pounds","value":{"text":"nil"}},{"name":"unexpectedBetweenPoundsAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"kind":"leftParen","text":"("}},{"name":"unexpectedBetweenLeftParenAndExpressions","value":{"text":"nil"}},{"ref":"LabeledExprListSyntax","name":"expressions","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenExpressionsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}],"type":"other","text":"ExpressionSegment"},{"structure":[],"type":"other","parent":1003,"text":"\\","range":{"endColumn":14,"endRow":82,"startRow":82,"startColumn":13},"token":{"leadingTrivia":"","kind":"backslash","trailingTrivia":""},"id":1004},{"structure":[],"type":"other","parent":1003,"text":"(","range":{"endColumn":15,"endRow":82,"startRow":82,"startColumn":14},"token":{"leadingTrivia":"","kind":"leftParen","trailingTrivia":""},"id":1005},{"id":1006,"parent":1003,"range":{"endColumn":26,"endRow":82,"startRow":82,"startColumn":15},"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","text":"LabeledExprList"},{"id":1007,"parent":1006,"range":{"endColumn":26,"endRow":82,"startRow":82,"startColumn":15},"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"MemberAccessExprSyntax"},"name":"expression","ref":"MemberAccessExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"LabeledExpr"},{"structure":[{"name":"unexpectedBeforeBase","value":{"text":"nil"}},{"name":"base","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenBaseAndPeriod","value":{"text":"nil"}},{"name":"period","value":{"kind":"period","text":"."}},{"name":"unexpectedBetweenPeriodAndDeclName","value":{"text":"nil"}},{"name":"declName","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedAfterDeclName","value":{"text":"nil"}}],"id":1008,"text":"MemberAccessExpr","range":{"endColumn":26,"startRow":82,"endRow":82,"startColumn":15},"parent":1007,"type":"expr"},{"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("somePoint")","text":"somePoint"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":1009,"text":"DeclReferenceExpr","range":{"startColumn":15,"endColumn":24,"startRow":82,"endRow":82},"parent":1008,"type":"expr"},{"structure":[],"type":"other","parent":1009,"text":"somePoint","range":{"startRow":82,"startColumn":15,"endRow":82,"endColumn":24},"token":{"kind":"identifier("somePoint")","trailingTrivia":"","leadingTrivia":""},"id":1010},{"structure":[],"type":"other","parent":1008,"text":".","range":{"startRow":82,"startColumn":24,"endRow":82,"endColumn":25},"token":{"kind":"period","trailingTrivia":"","leadingTrivia":""},"id":1011},{"parent":1008,"text":"DeclReferenceExpr","range":{"startRow":82,"startColumn":25,"endRow":82,"endColumn":26},"id":1012,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"integerLiteral("0")","text":"0"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"type":"expr"},{"structure":[],"type":"other","parent":1012,"text":"0","range":{"startColumn":25,"endRow":82,"endColumn":26,"startRow":82},"token":{"trailingTrivia":"","leadingTrivia":"","kind":"integerLiteral("0")"},"id":1013},{"structure":[],"type":"other","parent":1003,"text":")","range":{"startColumn":26,"endRow":82,"endColumn":27,"startRow":82},"token":{"trailingTrivia":"","leadingTrivia":"","kind":"rightParen"},"id":1014},{"parent":1000,"text":"StringSegment","range":{"startColumn":27,"endRow":82,"endColumn":29,"startRow":82},"id":1015,"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":", ","kind":"stringSegment(", ")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"type":"other"},{"structure":[],"type":"other","parent":1015,"text":",␣<\/span>","range":{"startColumn":27,"endColumn":29,"startRow":82,"endRow":82},"token":{"trailingTrivia":"","leadingTrivia":"","kind":"stringSegment(", ")"},"id":1016},{"range":{"startColumn":29,"endColumn":43,"startRow":82,"endRow":82},"parent":1000,"id":1017,"text":"ExpressionSegment","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBackslash"},{"value":{"kind":"backslash","text":"\\"},"name":"backslash"},{"value":{"text":"nil"},"name":"unexpectedBetweenBackslashAndPounds"},{"value":{"text":"nil"},"name":"pounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenPoundsAndLeftParen"},{"value":{"kind":"leftParen","text":"("},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndExpressions"},{"value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax","name":"expressions"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"type":"other"},{"structure":[],"type":"other","parent":1017,"text":"\\","range":{"endColumn":30,"startRow":82,"startColumn":29,"endRow":82},"token":{"trailingTrivia":"","kind":"backslash","leadingTrivia":""},"id":1018},{"structure":[],"type":"other","parent":1017,"text":"(","range":{"endColumn":31,"startRow":82,"startColumn":30,"endRow":82},"token":{"trailingTrivia":"","kind":"leftParen","leadingTrivia":""},"id":1019},{"range":{"endColumn":42,"startRow":82,"startColumn":31,"endRow":82},"parent":1017,"id":1020,"text":"LabeledExprList","structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection"},{"parent":1020,"text":"LabeledExpr","range":{"endRow":82,"startColumn":31,"endColumn":42,"startRow":82},"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"MemberAccessExprSyntax"},"ref":"MemberAccessExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":1021,"type":"other"},{"parent":1021,"text":"MemberAccessExpr","range":{"startColumn":31,"endColumn":42,"startRow":82,"endRow":82},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBase"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"base"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseAndPeriod"},{"value":{"text":".","kind":"period"},"name":"period"},{"value":{"text":"nil"},"name":"unexpectedBetweenPeriodAndDeclName"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"declName"},{"value":{"text":"nil"},"name":"unexpectedAfterDeclName"}],"id":1022,"type":"expr"},{"id":1023,"text":"DeclReferenceExpr","range":{"startRow":82,"endRow":82,"endColumn":40,"startColumn":31},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"somePoint","kind":"identifier("somePoint")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","parent":1022},{"structure":[],"type":"other","parent":1023,"text":"somePoint","range":{"endColumn":40,"startColumn":31,"endRow":82,"startRow":82},"token":{"trailingTrivia":"","leadingTrivia":"","kind":"identifier("somePoint")"},"id":1024},{"structure":[],"type":"other","parent":1022,"text":".","range":{"endColumn":41,"startColumn":40,"endRow":82,"startRow":82},"token":{"trailingTrivia":"","leadingTrivia":"","kind":"period"},"id":1025},{"id":1026,"text":"DeclReferenceExpr","range":{"endColumn":42,"startColumn":41,"endRow":82,"startRow":82},"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"1","kind":"integerLiteral("1")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"type":"expr","parent":1022},{"structure":[],"type":"other","parent":1026,"text":"1","range":{"startRow":82,"endRow":82,"endColumn":42,"startColumn":41},"token":{"kind":"integerLiteral("1")","trailingTrivia":"","leadingTrivia":""},"id":1027},{"structure":[],"type":"other","parent":1017,"text":")","range":{"startRow":82,"endRow":82,"endColumn":43,"startColumn":42},"token":{"kind":"rightParen","trailingTrivia":"","leadingTrivia":""},"id":1028},{"range":{"startColumn":43,"endColumn":62,"endRow":82,"startRow":82},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":") is inside the box","kind":"stringSegment(") is inside the box")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","parent":1000,"id":1029,"text":"StringSegment"},{"structure":[],"type":"other","parent":1029,"text":")␣<\/span>is␣<\/span>inside␣<\/span>the␣<\/span>box","range":{"endRow":82,"endColumn":62,"startRow":82,"startColumn":43},"token":{"kind":"stringSegment(") is inside the box")","trailingTrivia":"","leadingTrivia":""},"id":1030},{"structure":[],"id":1031,"range":{"endRow":82,"endColumn":63,"startRow":82,"startColumn":62},"token":{"kind":"stringQuote","trailingTrivia":"","leadingTrivia":""},"type":"other","text":""","parent":998},{"structure":[],"id":1032,"range":{"endRow":82,"endColumn":64,"startRow":82,"startColumn":63},"token":{"kind":"rightParen","trailingTrivia":"","leadingTrivia":""},"type":"other","text":")","parent":992},{"type":"collection","id":1033,"parent":992,"range":{"endRow":82,"endColumn":64,"startRow":82,"startColumn":64},"text":"MultipleTrailingClosureElementList","structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}]},{"type":"other","id":1034,"parent":827,"range":{"endRow":84,"startRow":83,"endColumn":68,"startColumn":1},"text":"SwitchCase","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttribute"},{"value":{"text":"nil"},"name":"attribute"},{"value":{"text":"nil"},"name":"unexpectedBetweenAttributeAndLabel"},{"value":{"text":"SwitchDefaultLabelSyntax"},"name":"label","ref":"SwitchDefaultLabelSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndStatements"},{"value":{"text":"CodeBlockItemListSyntax"},"name":"statements","ref":"CodeBlockItemListSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterStatements"}]},{"type":"other","id":1035,"parent":1034,"range":{"startColumn":1,"endColumn":9,"startRow":83,"endRow":83},"text":"SwitchDefaultLabel","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeDefaultKeyword"},{"name":"defaultKeyword","value":{"kind":"keyword(SwiftSyntax.Keyword.default)","text":"default"}},{"name":"unexpectedBetweenDefaultKeywordAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":":","kind":"colon"}},{"name":"unexpectedAfterColon","value":{"text":"nil"}}]},{"structure":[],"id":1036,"range":{"endColumn":8,"startColumn":1,"endRow":83,"startRow":83},"token":{"trailingTrivia":"","leadingTrivia":"↲<\/span>","kind":"keyword(SwiftSyntax.Keyword.default)"},"type":"other","text":"default","parent":1035},{"structure":[],"id":1037,"range":{"endColumn":9,"startColumn":8,"endRow":83,"startRow":83},"token":{"trailingTrivia":"","leadingTrivia":"","kind":"colon"},"type":"other","text":":","parent":1035},{"structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"1"}}],"range":{"endColumn":68,"startColumn":5,"endRow":84,"startRow":84},"type":"collection","text":"CodeBlockItemList","parent":1034,"id":1038},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"FunctionCallExprSyntax"},"name":"item","ref":"FunctionCallExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"range":{"startColumn":5,"startRow":84,"endRow":84,"endColumn":68},"type":"other","text":"CodeBlockItem","parent":1038,"id":1039},{"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"name":"arguments","value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax"},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"kind":"rightParen","text":")"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"},"ref":"MultipleTrailingClosureElementListSyntax"},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"range":{"startRow":84,"startColumn":5,"endRow":84,"endColumn":68},"type":"expr","text":"FunctionCallExpr","parent":1039,"id":1040},{"range":{"startColumn":5,"endColumn":10,"startRow":84,"endRow":84},"parent":1040,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"print","kind":"identifier("print")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":1041,"text":"DeclReferenceExpr","type":"expr"},{"structure":[],"id":1042,"range":{"startColumn":5,"endColumn":10,"endRow":84,"startRow":84},"token":{"kind":"identifier("print")","trailingTrivia":"","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"type":"other","text":"print","parent":1041},{"structure":[],"id":1043,"range":{"endColumn":11,"endRow":84,"startRow":84,"startColumn":10},"token":{"trailingTrivia":"","leadingTrivia":"","kind":"leftParen"},"type":"other","text":"(","parent":1040},{"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","range":{"endColumn":67,"endRow":84,"startRow":84,"startColumn":11},"id":1044,"parent":1040,"text":"LabeledExprList"},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"StringLiteralExprSyntax"},"name":"expression","ref":"StringLiteralExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","range":{"endRow":84,"endColumn":67,"startRow":84,"startColumn":11},"id":1045,"parent":1044,"text":"LabeledExpr"},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"value":{"text":"StringLiteralSegmentListSyntax"},"name":"segments","ref":"StringLiteralSegmentListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"type":"expr","range":{"startColumn":11,"endRow":84,"endColumn":67,"startRow":84},"id":1046,"parent":1045,"text":"StringLiteralExpr"},{"structure":[],"id":1047,"range":{"startRow":84,"startColumn":11,"endRow":84,"endColumn":12},"token":{"trailingTrivia":"","leadingTrivia":"","kind":"stringQuote"},"type":"other","text":""","parent":1046},{"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"5"},"name":"Count"}],"type":"collection","range":{"startRow":84,"startColumn":12,"endRow":84,"endColumn":66},"parent":1046,"text":"StringLiteralSegmentList","id":1048},{"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":"(","kind":"stringSegment("(")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"type":"other","range":{"endColumn":13,"startRow":84,"startColumn":12,"endRow":84},"parent":1048,"text":"StringSegment","id":1049},{"structure":[],"id":1050,"range":{"startColumn":12,"endColumn":13,"endRow":84,"startRow":84},"token":{"kind":"stringSegment("(")","trailingTrivia":"","leadingTrivia":""},"type":"other","text":"(","parent":1049},{"text":"ExpressionSegment","type":"other","parent":1048,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBackslash"},{"value":{"text":"\\","kind":"backslash"},"name":"backslash"},{"value":{"text":"nil"},"name":"unexpectedBetweenBackslashAndPounds"},{"value":{"text":"nil"},"name":"pounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenPoundsAndLeftParen"},{"value":{"kind":"leftParen","text":"("},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndExpressions"},{"ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"},"name":"expressions"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"id":1051,"range":{"startRow":84,"endRow":84,"startColumn":13,"endColumn":27}},{"structure":[],"id":1052,"range":{"endColumn":14,"startRow":84,"startColumn":13,"endRow":84},"token":{"trailingTrivia":"","kind":"backslash","leadingTrivia":""},"type":"other","text":"\\","parent":1051},{"structure":[],"id":1053,"range":{"endColumn":15,"startRow":84,"startColumn":14,"endRow":84},"token":{"trailingTrivia":"","kind":"leftParen","leadingTrivia":""},"type":"other","text":"(","parent":1051},{"text":"LabeledExprList","type":"collection","parent":1051,"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"id":1054,"range":{"endColumn":26,"startRow":84,"startColumn":15,"endRow":84}},{"text":"LabeledExpr","type":"other","parent":1054,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"MemberAccessExprSyntax"},"ref":"MemberAccessExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"id":1055,"range":{"startColumn":15,"startRow":84,"endRow":84,"endColumn":26}},{"structure":[{"name":"unexpectedBeforeBase","value":{"text":"nil"}},{"name":"base","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedBetweenBaseAndPeriod","value":{"text":"nil"}},{"name":"period","value":{"kind":"period","text":"."}},{"name":"unexpectedBetweenPeriodAndDeclName","value":{"text":"nil"}},{"name":"declName","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedAfterDeclName","value":{"text":"nil"}}],"text":"MemberAccessExpr","parent":1055,"id":1056,"range":{"startRow":84,"startColumn":15,"endColumn":26,"endRow":84},"type":"expr"},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"name":"baseName","value":{"kind":"identifier("somePoint")","text":"somePoint"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"text":"DeclReferenceExpr","parent":1056,"id":1057,"range":{"endRow":84,"startRow":84,"endColumn":24,"startColumn":15},"type":"expr"},{"structure":[],"id":1058,"range":{"endColumn":24,"endRow":84,"startRow":84,"startColumn":15},"token":{"kind":"identifier("somePoint")","leadingTrivia":"","trailingTrivia":""},"type":"other","text":"somePoint","parent":1057},{"structure":[],"id":1059,"range":{"endColumn":25,"endRow":84,"startRow":84,"startColumn":24},"token":{"kind":"period","leadingTrivia":"","trailingTrivia":""},"type":"other","text":".","parent":1056},{"text":"DeclReferenceExpr","range":{"endColumn":26,"endRow":84,"startRow":84,"startColumn":25},"id":1060,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"0","kind":"integerLiteral("0")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"type":"expr","parent":1056},{"structure":[],"id":1061,"range":{"endRow":84,"endColumn":26,"startRow":84,"startColumn":25},"token":{"kind":"integerLiteral("0")","leadingTrivia":"","trailingTrivia":""},"type":"other","text":"0","parent":1060},{"structure":[],"id":1062,"range":{"endRow":84,"endColumn":27,"startRow":84,"startColumn":26},"token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":""},"type":"other","text":")","parent":1051},{"text":"StringSegment","range":{"endRow":84,"endColumn":29,"startRow":84,"startColumn":27},"id":1063,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"kind":"stringSegment(", ")","text":", "},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","parent":1048},{"structure":[],"id":1064,"range":{"endColumn":29,"startRow":84,"startColumn":27,"endRow":84},"token":{"kind":"stringSegment(", ")","leadingTrivia":"","trailingTrivia":""},"type":"other","text":",␣<\/span>","parent":1063},{"text":"ExpressionSegment","range":{"endColumn":43,"startRow":84,"startColumn":29,"endRow":84},"type":"other","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBackslash"},{"value":{"text":"\\","kind":"backslash"},"name":"backslash"},{"value":{"text":"nil"},"name":"unexpectedBetweenBackslashAndPounds"},{"value":{"text":"nil"},"name":"pounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenPoundsAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndExpressions"},{"value":{"text":"LabeledExprListSyntax"},"name":"expressions","ref":"LabeledExprListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"id":1065,"parent":1048},{"structure":[],"id":1066,"range":{"startColumn":29,"startRow":84,"endRow":84,"endColumn":30},"token":{"leadingTrivia":"","kind":"backslash","trailingTrivia":""},"type":"other","text":"\\","parent":1065},{"structure":[],"id":1067,"range":{"startColumn":30,"startRow":84,"endRow":84,"endColumn":31},"token":{"leadingTrivia":"","kind":"leftParen","trailingTrivia":""},"type":"other","text":"(","parent":1065},{"text":"LabeledExprList","range":{"startColumn":31,"startRow":84,"endRow":84,"endColumn":42},"type":"collection","structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"id":1068,"parent":1065},{"range":{"endColumn":42,"startRow":84,"endRow":84,"startColumn":31},"type":"other","id":1069,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"MemberAccessExprSyntax"},"ref":"MemberAccessExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"parent":1068,"text":"LabeledExpr"},{"range":{"startRow":84,"endRow":84,"startColumn":31,"endColumn":42},"type":"expr","id":1070,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBase"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"base"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseAndPeriod"},{"value":{"text":".","kind":"period"},"name":"period"},{"value":{"text":"nil"},"name":"unexpectedBetweenPeriodAndDeclName"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"declName"},{"value":{"text":"nil"},"name":"unexpectedAfterDeclName"}],"parent":1069,"text":"MemberAccessExpr"},{"text":"DeclReferenceExpr","id":1071,"parent":1070,"type":"expr","structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("somePoint")","text":"somePoint"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"range":{"startColumn":31,"endColumn":40,"startRow":84,"endRow":84}},{"structure":[],"id":1072,"range":{"startRow":84,"endColumn":40,"endRow":84,"startColumn":31},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("somePoint")"},"type":"other","text":"somePoint","parent":1071},{"structure":[],"id":1073,"range":{"startRow":84,"endColumn":41,"endRow":84,"startColumn":40},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"period"},"type":"other","text":".","parent":1070},{"text":"DeclReferenceExpr","id":1074,"parent":1070,"type":"expr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"integerLiteral("1")","text":"1"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"range":{"startRow":84,"endColumn":42,"endRow":84,"startColumn":41}},{"structure":[],"id":1075,"range":{"startRow":84,"endRow":84,"startColumn":41,"endColumn":42},"token":{"kind":"integerLiteral("1")","leadingTrivia":"","trailingTrivia":""},"type":"other","text":"1","parent":1074},{"structure":[],"id":1076,"range":{"startRow":84,"endRow":84,"startColumn":42,"endColumn":43},"token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":""},"type":"other","text":")","parent":1065},{"parent":1048,"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"kind":"stringSegment(") is outside of the box")","text":") is outside of the box"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"range":{"startColumn":43,"startRow":84,"endRow":84,"endColumn":66},"id":1077,"type":"other","text":"StringSegment"},{"structure":[],"parent":1077,"type":"other","token":{"leadingTrivia":"","kind":"stringSegment(") is outside of the box")","trailingTrivia":""},"range":{"endRow":84,"startRow":84,"startColumn":43,"endColumn":66},"id":1078,"text":")␣<\/span>is␣<\/span>outside␣<\/span>of␣<\/span>the␣<\/span>box"},{"structure":[],"parent":1046,"type":"other","token":{"leadingTrivia":"","kind":"stringQuote","trailingTrivia":""},"range":{"endRow":84,"startRow":84,"startColumn":66,"endColumn":67},"id":1079,"text":"""},{"structure":[],"parent":1040,"type":"other","token":{"leadingTrivia":"","kind":"rightParen","trailingTrivia":""},"range":{"endRow":84,"startRow":84,"startColumn":67,"endColumn":68},"id":1080,"text":")"},{"parent":1040,"range":{"endRow":84,"startRow":84,"startColumn":68,"endColumn":68},"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"text":"MultipleTrailingClosureElementList","type":"collection","id":1081},{"structure":[],"parent":822,"type":"other","token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"","kind":"rightBrace"},"range":{"startRow":85,"endColumn":2,"startColumn":1,"endRow":85},"id":1082,"text":"}"},{"parent":1,"range":{"startRow":88,"endColumn":26,"startColumn":1,"endRow":88},"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"VariableDeclSyntax","name":"item","value":{"text":"VariableDeclSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"text":"CodeBlockItem","type":"other","id":1083},{"parent":1083,"range":{"startRow":88,"endRow":88,"startColumn":1,"endColumn":26},"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","value":{"text":"AttributeListSyntax"},"ref":"AttributeListSyntax"},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax"},{"name":"unexpectedBetweenModifiersAndBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"text":"let","kind":"keyword(SwiftSyntax.Keyword.let)"}},{"name":"unexpectedBetweenBindingSpecifierAndBindings","value":{"text":"nil"}},{"name":"bindings","value":{"text":"PatternBindingListSyntax"},"ref":"PatternBindingListSyntax"},{"name":"unexpectedAfterBindings","value":{"text":"nil"}}],"text":"VariableDecl","type":"decl","id":1084},{"id":1085,"parent":1084,"text":"AttributeList","structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection","range":{"endColumn":2,"startColumn":2,"endRow":85,"startRow":85}},{"id":1086,"parent":1084,"text":"DeclModifierList","structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"type":"collection","range":{"startRow":85,"endColumn":2,"endRow":85,"startColumn":2}},{"structure":[],"parent":1084,"type":"other","token":{"kind":"keyword(SwiftSyntax.Keyword.let)","trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>↲<\/span>\/\/␣<\/span>Switch␣<\/span>with␣<\/span>value␣<\/span>binding<\/span>↲<\/span>"},"range":{"endRow":88,"startColumn":1,"startRow":88,"endColumn":4},"id":1087,"text":"let"},{"id":1088,"parent":1084,"text":"PatternBindingList","structure":[{"value":{"text":"PatternBindingSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","range":{"endRow":88,"startColumn":5,"startRow":88,"endColumn":26}},{"id":1089,"parent":1088,"text":"PatternBinding","structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"ref":"IdentifierPatternSyntax","name":"pattern","value":{"text":"IdentifierPatternSyntax"}},{"name":"unexpectedBetweenPatternAndTypeAnnotation","value":{"text":"nil"}},{"name":"typeAnnotation","value":{"text":"nil"}},{"name":"unexpectedBetweenTypeAnnotationAndInitializer","value":{"text":"nil"}},{"ref":"InitializerClauseSyntax","name":"initializer","value":{"text":"InitializerClauseSyntax"}},{"name":"unexpectedBetweenInitializerAndAccessorBlock","value":{"text":"nil"}},{"name":"accessorBlock","value":{"text":"nil"}},{"name":"unexpectedBetweenAccessorBlockAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other","range":{"endColumn":26,"endRow":88,"startRow":88,"startColumn":5}},{"range":{"endRow":88,"endColumn":17,"startColumn":5,"startRow":88},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"kind":"identifier("anotherPoint")","text":"anotherPoint"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"id":1090,"type":"pattern","text":"IdentifierPattern","parent":1089},{"structure":[],"type":"other","parent":1090,"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"identifier("anotherPoint")"},"range":{"startRow":88,"startColumn":5,"endColumn":17,"endRow":88},"id":1091,"text":"anotherPoint"},{"range":{"startRow":88,"startColumn":18,"endColumn":26,"endRow":88},"structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"kind":"equal","text":"="}},{"name":"unexpectedBetweenEqualAndValue","value":{"text":"nil"}},{"ref":"TupleExprSyntax","name":"value","value":{"text":"TupleExprSyntax"}},{"name":"unexpectedAfterValue","value":{"text":"nil"}}],"id":1092,"type":"other","text":"InitializerClause","parent":1089},{"structure":[],"type":"other","parent":1092,"token":{"trailingTrivia":"␣<\/span>","kind":"equal","leadingTrivia":""},"range":{"endColumn":19,"endRow":88,"startRow":88,"startColumn":18},"id":1093,"text":"="},{"type":"expr","id":1094,"parent":1092,"text":"TupleExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftParen"},{"value":{"kind":"leftParen","text":"("},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndElements"},{"value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax","name":"elements"},{"value":{"text":"nil"},"name":"unexpectedBetweenElementsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"range":{"endColumn":26,"endRow":88,"startRow":88,"startColumn":20}},{"structure":[],"type":"other","parent":1094,"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"range":{"startColumn":20,"startRow":88,"endRow":88,"endColumn":21},"id":1095,"text":"("},{"type":"collection","id":1096,"parent":1094,"text":"LabeledExprList","structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"2"}}],"range":{"startColumn":21,"startRow":88,"endRow":88,"endColumn":25}},{"type":"other","id":1097,"parent":1096,"text":"LabeledExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":",","kind":"comma"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"range":{"startColumn":21,"startRow":88,"endRow":88,"endColumn":23}},{"parent":1097,"text":"IntegerLiteralExpr","id":1098,"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"kind":"integerLiteral("2")","text":"2"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"range":{"startRow":88,"endRow":88,"endColumn":22,"startColumn":21},"type":"expr"},{"structure":[],"parent":1098,"type":"other","token":{"leadingTrivia":"","trailingTrivia":"","kind":"integerLiteral("2")"},"range":{"endColumn":22,"endRow":88,"startRow":88,"startColumn":21},"id":1099,"text":"2"},{"structure":[],"parent":1097,"type":"other","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"comma"},"range":{"endColumn":23,"endRow":88,"startRow":88,"startColumn":22},"id":1100,"text":","},{"parent":1096,"text":"LabeledExpr","id":1101,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"range":{"endColumn":25,"endRow":88,"startRow":88,"startColumn":24},"type":"other"},{"id":1102,"parent":1101,"text":"IntegerLiteralExpr","structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"0","kind":"integerLiteral("0")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"range":{"startColumn":24,"startRow":88,"endColumn":25,"endRow":88},"type":"expr"},{"structure":[],"parent":1102,"type":"other","token":{"kind":"integerLiteral("0")","leadingTrivia":"","trailingTrivia":""},"range":{"startRow":88,"startColumn":24,"endColumn":25,"endRow":88},"id":1103,"text":"0"},{"structure":[],"parent":1094,"type":"other","token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":""},"range":{"startRow":88,"startColumn":25,"endColumn":26,"endRow":88},"id":1104,"text":")"},{"id":1105,"parent":1,"text":"CodeBlockItem","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"ExpressionStmtSyntax"},"ref":"ExpressionStmtSyntax","name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"range":{"startRow":89,"startColumn":1,"endColumn":2,"endRow":96},"type":"other"},{"id":1106,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"ref":"SwitchExprSyntax","value":{"text":"SwitchExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedAfterExpression"}],"parent":1105,"range":{"startRow":89,"startColumn":1,"endRow":96,"endColumn":2},"text":"ExpressionStmt","type":"other"},{"id":1107,"structure":[{"name":"unexpectedBeforeSwitchKeyword","value":{"text":"nil"}},{"name":"switchKeyword","value":{"text":"switch","kind":"keyword(SwiftSyntax.Keyword.switch)"}},{"name":"unexpectedBetweenSwitchKeywordAndSubject","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"subject","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenSubjectAndLeftBrace","value":{"text":"nil"}},{"name":"leftBrace","value":{"kind":"leftBrace","text":"{"}},{"name":"unexpectedBetweenLeftBraceAndCases","value":{"text":"nil"}},{"ref":"SwitchCaseListSyntax","name":"cases","value":{"text":"SwitchCaseListSyntax"}},{"name":"unexpectedBetweenCasesAndRightBrace","value":{"text":"nil"}},{"name":"rightBrace","value":{"kind":"rightBrace","text":"}"}},{"name":"unexpectedAfterRightBrace","value":{"text":"nil"}}],"parent":1106,"range":{"startRow":89,"startColumn":1,"endRow":96,"endColumn":2},"text":"SwitchExpr","type":"expr"},{"structure":[],"parent":1107,"type":"other","token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.switch)"},"range":{"startColumn":1,"startRow":89,"endRow":89,"endColumn":7},"id":1108,"text":"switch"},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"anotherPoint","kind":"identifier("anotherPoint")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"range":{"startRow":89,"endRow":89,"endColumn":20,"startColumn":8},"id":1109,"type":"expr","text":"DeclReferenceExpr","parent":1107},{"structure":[],"type":"other","parent":1109,"token":{"trailingTrivia":"␣<\/span>","kind":"identifier("anotherPoint")","leadingTrivia":""},"range":{"endColumn":20,"endRow":89,"startRow":89,"startColumn":8},"id":1110,"text":"anotherPoint"},{"structure":[],"type":"other","parent":1107,"token":{"trailingTrivia":"","kind":"leftBrace","leadingTrivia":""},"range":{"endColumn":22,"endRow":89,"startRow":89,"startColumn":21},"id":1111,"text":"{"},{"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"3"}}],"range":{"endColumn":44,"endRow":95,"startRow":90,"startColumn":1},"id":1112,"type":"collection","text":"SwitchCaseList","parent":1107},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttribute"},{"value":{"text":"nil"},"name":"attribute"},{"value":{"text":"nil"},"name":"unexpectedBetweenAttributeAndLabel"},{"value":{"text":"SwitchCaseLabelSyntax"},"ref":"SwitchCaseLabelSyntax","name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndStatements"},{"value":{"text":"CodeBlockItemListSyntax"},"ref":"CodeBlockItemListSyntax","name":"statements"},{"name":"unexpectedAfterStatements","value":{"text":"nil"}}],"range":{"startColumn":1,"startRow":90,"endRow":91,"endColumn":51},"id":1113,"type":"other","text":"SwitchCase","parent":1112},{"parent":1113,"text":"SwitchCaseLabel","id":1114,"structure":[{"name":"unexpectedBeforeCaseKeyword","value":{"text":"nil"}},{"name":"caseKeyword","value":{"text":"case","kind":"keyword(SwiftSyntax.Keyword.case)"}},{"name":"unexpectedBetweenCaseKeywordAndCaseItems","value":{"text":"nil"}},{"name":"caseItems","value":{"text":"SwitchCaseItemListSyntax"},"ref":"SwitchCaseItemListSyntax"},{"name":"unexpectedBetweenCaseItemsAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":":","kind":"colon"}},{"name":"unexpectedAfterColon","value":{"text":"nil"}}],"range":{"startRow":90,"endColumn":17,"endRow":90,"startColumn":1},"type":"other"},{"structure":[],"parent":1114,"type":"other","token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>","kind":"keyword(SwiftSyntax.Keyword.case)"},"range":{"endColumn":5,"endRow":90,"startRow":90,"startColumn":1},"id":1115,"text":"case"},{"parent":1114,"text":"SwitchCaseItemList","id":1116,"structure":[{"name":"Element","value":{"text":"SwitchCaseItemSyntax"}},{"name":"Count","value":{"text":"1"}}],"range":{"endColumn":16,"endRow":90,"startRow":90,"startColumn":6},"type":"collection"},{"parent":1116,"text":"SwitchCaseItem","id":1117,"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"name":"pattern","ref":"ExpressionPatternSyntax","value":{"text":"ExpressionPatternSyntax"}},{"name":"unexpectedBetweenPatternAndWhereClause","value":{"text":"nil"}},{"name":"whereClause","value":{"text":"nil"}},{"name":"unexpectedBetweenWhereClauseAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"range":{"startRow":90,"endColumn":16,"endRow":90,"startColumn":6},"type":"other"},{"text":"ExpressionPattern","range":{"endColumn":16,"startRow":90,"startColumn":6,"endRow":90},"type":"pattern","id":1118,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"value":{"text":"TupleExprSyntax"},"name":"expression","ref":"TupleExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterExpression"}],"parent":1117},{"text":"TupleExpr","range":{"startColumn":6,"endRow":90,"endColumn":16,"startRow":90},"type":"expr","id":1119,"structure":[{"name":"unexpectedBeforeLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndElements","value":{"text":"nil"}},{"name":"elements","value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax"},{"name":"unexpectedBetweenElementsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"kind":"rightParen","text":")"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}],"parent":1118},{"structure":[],"type":"other","parent":1119,"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"range":{"endColumn":7,"startRow":90,"startColumn":6,"endRow":90},"id":1120,"text":"("},{"type":"collection","structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"name":"Count","value":{"text":"2"}}],"parent":1119,"text":"LabeledExprList","range":{"endRow":90,"startRow":90,"startColumn":7,"endColumn":15},"id":1121},{"type":"other","range":{"startColumn":7,"endColumn":13,"startRow":90,"endRow":90},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"PatternExprSyntax"},"name":"expression","ref":"PatternExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"kind":"comma","text":","},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"parent":1121,"id":1122,"text":"LabeledExpr"},{"type":"expr","range":{"startColumn":7,"endColumn":12,"endRow":90,"startRow":90},"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"name":"pattern","value":{"text":"ValueBindingPatternSyntax"},"ref":"ValueBindingPatternSyntax"},{"name":"unexpectedAfterPattern","value":{"text":"nil"}}],"parent":1122,"id":1123,"text":"PatternExpr"},{"type":"pattern","range":{"startRow":90,"startColumn":7,"endRow":90,"endColumn":12},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBindingSpecifier"},{"value":{"kind":"keyword(SwiftSyntax.Keyword.let)","text":"let"},"name":"bindingSpecifier"},{"value":{"text":"nil"},"name":"unexpectedBetweenBindingSpecifierAndPattern"},{"value":{"text":"IdentifierPatternSyntax"},"name":"pattern","ref":"IdentifierPatternSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterPattern"}],"parent":1123,"id":1124,"text":"ValueBindingPattern"},{"structure":[],"parent":1124,"type":"other","token":{"kind":"keyword(SwiftSyntax.Keyword.let)","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"endRow":90,"endColumn":10,"startRow":90,"startColumn":7},"id":1125,"text":"let"},{"parent":1124,"text":"IdentifierPattern","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"kind":"identifier("x")","text":"x"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"type":"pattern","id":1126,"range":{"endRow":90,"endColumn":12,"startRow":90,"startColumn":11}},{"structure":[],"parent":1126,"type":"other","token":{"trailingTrivia":"","kind":"identifier("x")","leadingTrivia":""},"range":{"endRow":90,"startColumn":11,"startRow":90,"endColumn":12},"id":1127,"text":"x"},{"structure":[],"parent":1122,"type":"other","token":{"trailingTrivia":"␣<\/span>","kind":"comma","leadingTrivia":""},"range":{"endRow":90,"startColumn":12,"startRow":90,"endColumn":13},"id":1128,"text":","},{"parent":1121,"text":"LabeledExpr","structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other","id":1129,"range":{"endRow":90,"startColumn":14,"startRow":90,"endColumn":15}},{"text":"IntegerLiteralExpr","type":"expr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"0","kind":"integerLiteral("0")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"range":{"endRow":90,"startColumn":14,"startRow":90,"endColumn":15},"parent":1129,"id":1130},{"structure":[],"type":"other","parent":1130,"token":{"trailingTrivia":"","leadingTrivia":"","kind":"integerLiteral("0")"},"range":{"startColumn":14,"endColumn":15,"endRow":90,"startRow":90},"id":1131,"text":"0"},{"text":")","structure":[],"parent":1119,"id":1132,"range":{"startColumn":15,"endColumn":16,"endRow":90,"startRow":90},"token":{"trailingTrivia":"","leadingTrivia":"","kind":"rightParen"},"type":"other"},{"text":":","structure":[],"parent":1114,"id":1133,"range":{"startColumn":16,"endColumn":17,"endRow":90,"startRow":90},"token":{"trailingTrivia":"","leadingTrivia":"","kind":"colon"},"type":"other"},{"text":"CodeBlockItemList","type":"collection","structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"range":{"startColumn":5,"endColumn":51,"endRow":91,"startRow":91},"parent":1113,"id":1134},{"text":"CodeBlockItem","type":"other","structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"FunctionCallExprSyntax"},"ref":"FunctionCallExprSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"range":{"startRow":91,"endRow":91,"endColumn":51,"startColumn":5},"parent":1134,"id":1135},{"parent":1135,"text":"FunctionCallExpr","range":{"endColumn":51,"startRow":91,"startColumn":5,"endRow":91},"id":1136,"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"kind":"leftParen","text":"("}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"name":"arguments","ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"name":"additionalTrailingClosures","ref":"MultipleTrailingClosureElementListSyntax","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"type":"expr"},{"parent":1136,"text":"DeclReferenceExpr","range":{"endColumn":10,"endRow":91,"startRow":91,"startColumn":5},"id":1137,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"print","kind":"identifier("print")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr"},{"text":"print","structure":[],"parent":1137,"id":1138,"range":{"endRow":91,"endColumn":10,"startRow":91,"startColumn":5},"token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","kind":"identifier("print")","trailingTrivia":""},"type":"other"},{"text":"(","structure":[],"parent":1136,"id":1139,"range":{"endRow":91,"endColumn":11,"startRow":91,"startColumn":10},"token":{"leadingTrivia":"","kind":"leftParen","trailingTrivia":""},"type":"other"},{"range":{"endRow":91,"endColumn":50,"startRow":91,"startColumn":11},"id":1140,"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"text":"LabeledExprList","parent":1136,"type":"collection"},{"range":{"startColumn":11,"startRow":91,"endColumn":50,"endRow":91},"id":1141,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","ref":"StringLiteralExprSyntax","value":{"text":"StringLiteralExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"text":"LabeledExpr","parent":1140,"type":"other"},{"range":{"startRow":91,"endColumn":50,"endRow":91,"startColumn":11},"id":1142,"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"name":"segments","value":{"text":"StringLiteralSegmentListSyntax"},"ref":"StringLiteralSegmentListSyntax"},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"text":"StringLiteralExpr","parent":1141,"type":"expr"},{"text":""","parent":1142,"structure":[],"id":1143,"range":{"startRow":91,"startColumn":11,"endRow":91,"endColumn":12},"token":{"kind":"stringQuote","trailingTrivia":"","leadingTrivia":""},"type":"other"},{"range":{"startRow":91,"startColumn":12,"endRow":91,"endColumn":49},"text":"StringLiteralSegmentList","id":1144,"type":"collection","parent":1142,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"3"}}]},{"range":{"startColumn":12,"endColumn":45,"endRow":91,"startRow":91},"text":"StringSegment","id":1145,"type":"other","parent":1144,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"kind":"stringSegment("on the x-axis with an x value of ")","text":"on the x-axis with an x value of "},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}]},{"text":"on␣<\/span>the␣<\/span>x-axis␣<\/span>with␣<\/span>an␣<\/span>x␣<\/span>value␣<\/span>of␣<\/span>","structure":[],"parent":1145,"id":1146,"range":{"endRow":91,"startRow":91,"endColumn":45,"startColumn":12},"token":{"kind":"stringSegment("on the x-axis with an x value of ")","trailingTrivia":"","leadingTrivia":""},"type":"other"},{"range":{"endRow":91,"startRow":91,"endColumn":49,"startColumn":45},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBackslash"},{"value":{"kind":"backslash","text":"\\"},"name":"backslash"},{"value":{"text":"nil"},"name":"unexpectedBetweenBackslashAndPounds"},{"value":{"text":"nil"},"name":"pounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenPoundsAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndExpressions"},{"value":{"text":"LabeledExprListSyntax"},"name":"expressions","ref":"LabeledExprListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"type":"other","id":1147,"parent":1144,"text":"ExpressionSegment"},{"text":"\\","structure":[],"parent":1147,"id":1148,"range":{"startRow":91,"startColumn":45,"endRow":91,"endColumn":46},"token":{"trailingTrivia":"","kind":"backslash","leadingTrivia":""},"type":"other"},{"text":"(","structure":[],"parent":1147,"id":1149,"range":{"startRow":91,"startColumn":46,"endRow":91,"endColumn":47},"token":{"trailingTrivia":"","kind":"leftParen","leadingTrivia":""},"type":"other"},{"parent":1147,"text":"LabeledExprList","id":1150,"range":{"startColumn":47,"startRow":91,"endRow":91,"endColumn":48},"type":"collection","structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"name":"Count","value":{"text":"1"}}]},{"id":1151,"parent":1150,"text":"LabeledExpr","range":{"endColumn":48,"endRow":91,"startColumn":47,"startRow":91},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other"},{"id":1152,"parent":1151,"text":"DeclReferenceExpr","range":{"startRow":91,"endRow":91,"startColumn":47,"endColumn":48},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"x","kind":"identifier("x")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr"},{"text":"x","parent":1152,"structure":[],"id":1153,"range":{"endColumn":48,"startRow":91,"endRow":91,"startColumn":47},"token":{"kind":"identifier("x")","leadingTrivia":"","trailingTrivia":""},"type":"other"},{"text":")","parent":1147,"structure":[],"id":1154,"range":{"startRow":91,"endRow":91,"startColumn":48,"endColumn":49},"token":{"trailingTrivia":"","leadingTrivia":"","kind":"rightParen"},"type":"other"},{"type":"other","id":1155,"text":"StringSegment","parent":1144,"range":{"startRow":91,"endRow":91,"startColumn":49,"endColumn":49},"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"kind":"stringSegment("")","text":""}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}]},{"text":"","parent":1155,"structure":[],"id":1156,"range":{"endRow":91,"startRow":91,"endColumn":49,"startColumn":49},"token":{"trailingTrivia":"","leadingTrivia":"","kind":"stringSegment("")"},"type":"other"},{"text":""","parent":1142,"structure":[],"id":1157,"range":{"endRow":91,"startRow":91,"endColumn":50,"startColumn":49},"token":{"trailingTrivia":"","leadingTrivia":"","kind":"stringQuote"},"type":"other"},{"text":")","parent":1136,"structure":[],"id":1158,"range":{"endRow":91,"startRow":91,"endColumn":51,"startColumn":50},"token":{"trailingTrivia":"","leadingTrivia":"","kind":"rightParen"},"type":"other"},{"type":"collection","id":1159,"text":"MultipleTrailingClosureElementList","parent":1136,"range":{"endRow":91,"startRow":91,"endColumn":51,"startColumn":51},"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}]},{"type":"other","id":1160,"text":"SwitchCase","parent":1112,"range":{"startColumn":1,"startRow":92,"endRow":93,"endColumn":50},"structure":[{"name":"unexpectedBeforeAttribute","value":{"text":"nil"}},{"name":"attribute","value":{"text":"nil"}},{"name":"unexpectedBetweenAttributeAndLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"SwitchCaseLabelSyntax"},"ref":"SwitchCaseLabelSyntax"},{"name":"unexpectedBetweenLabelAndStatements","value":{"text":"nil"}},{"name":"statements","value":{"text":"CodeBlockItemListSyntax"},"ref":"CodeBlockItemListSyntax"},{"name":"unexpectedAfterStatements","value":{"text":"nil"}}]},{"parent":1160,"range":{"startColumn":1,"endColumn":17,"startRow":92,"endRow":92},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCaseKeyword"},{"value":{"text":"case","kind":"keyword(SwiftSyntax.Keyword.case)"},"name":"caseKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenCaseKeywordAndCaseItems"},{"value":{"text":"SwitchCaseItemListSyntax"},"name":"caseItems","ref":"SwitchCaseItemListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenCaseItemsAndColon"},{"value":{"text":":","kind":"colon"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedAfterColon"}],"id":1161,"type":"other","text":"SwitchCaseLabel"},{"text":"case","parent":1161,"structure":[],"id":1162,"range":{"endRow":92,"endColumn":5,"startRow":92,"startColumn":1},"token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.case)"},"type":"other"},{"parent":1161,"range":{"endRow":92,"endColumn":16,"startRow":92,"startColumn":6},"structure":[{"name":"Element","value":{"text":"SwitchCaseItemSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":1163,"type":"collection","text":"SwitchCaseItemList"},{"parent":1163,"range":{"endRow":92,"startColumn":6,"endColumn":16,"startRow":92},"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"ref":"ExpressionPatternSyntax","name":"pattern","value":{"text":"ExpressionPatternSyntax"}},{"name":"unexpectedBetweenPatternAndWhereClause","value":{"text":"nil"}},{"name":"whereClause","value":{"text":"nil"}},{"name":"unexpectedBetweenWhereClauseAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":1164,"type":"other","text":"SwitchCaseItem"},{"structure":[{"name":"unexpectedBeforeExpression","value":{"text":"nil"}},{"ref":"TupleExprSyntax","name":"expression","value":{"text":"TupleExprSyntax"}},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}],"id":1165,"parent":1164,"text":"ExpressionPattern","range":{"endRow":92,"startColumn":6,"endColumn":16,"startRow":92},"type":"pattern"},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftParen"},{"value":{"kind":"leftParen","text":"("},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndElements"},{"value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax","name":"elements"},{"value":{"text":"nil"},"name":"unexpectedBetweenElementsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"id":1166,"parent":1165,"text":"TupleExpr","range":{"endColumn":16,"endRow":92,"startColumn":6,"startRow":92},"type":"expr"},{"text":"(","structure":[],"parent":1166,"id":1167,"range":{"startRow":92,"endRow":92,"startColumn":6,"endColumn":7},"token":{"kind":"leftParen","trailingTrivia":"","leadingTrivia":""},"type":"other"},{"parent":1166,"range":{"startColumn":7,"endColumn":15,"endRow":92,"startRow":92},"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"name":"Count","value":{"text":"2"}}],"type":"collection","id":1168,"text":"LabeledExprList"},{"parent":1168,"range":{"endColumn":9,"startColumn":7,"startRow":92,"endRow":92},"text":"LabeledExpr","structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":",","kind":"comma"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":1169,"type":"other"},{"parent":1169,"range":{"endColumn":8,"startRow":92,"startColumn":7,"endRow":92},"text":"IntegerLiteralExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"kind":"integerLiteral("0")","text":"0"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"id":1170,"type":"expr"},{"text":"0","parent":1170,"structure":[],"id":1171,"range":{"endColumn":8,"startRow":92,"endRow":92,"startColumn":7},"token":{"kind":"integerLiteral("0")","leadingTrivia":"","trailingTrivia":""},"type":"other"},{"text":",","parent":1169,"structure":[],"id":1172,"range":{"endColumn":9,"startRow":92,"endRow":92,"startColumn":8},"token":{"kind":"comma","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"type":"other"},{"parent":1168,"id":1173,"text":"LabeledExpr","type":"other","range":{"startColumn":10,"endColumn":15,"endRow":92,"startRow":92},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"ref":"PatternExprSyntax","value":{"text":"PatternExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}]},{"parent":1173,"id":1174,"text":"PatternExpr","type":"expr","range":{"startRow":92,"startColumn":10,"endRow":92,"endColumn":15},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"value":{"text":"ValueBindingPatternSyntax"},"ref":"ValueBindingPatternSyntax","name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedAfterPattern"}]},{"parent":1174,"id":1175,"text":"ValueBindingPattern","type":"pattern","range":{"endRow":92,"startColumn":10,"endColumn":15,"startRow":92},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBindingSpecifier"},{"value":{"text":"let","kind":"keyword(SwiftSyntax.Keyword.let)"},"name":"bindingSpecifier"},{"value":{"text":"nil"},"name":"unexpectedBetweenBindingSpecifierAndPattern"},{"value":{"text":"IdentifierPatternSyntax"},"ref":"IdentifierPatternSyntax","name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedAfterPattern"}]},{"text":"let","structure":[],"parent":1175,"id":1176,"range":{"startRow":92,"endRow":92,"endColumn":13,"startColumn":10},"token":{"kind":"keyword(SwiftSyntax.Keyword.let)","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"type":"other"},{"id":1177,"structure":[{"name":"unexpectedBeforeIdentifier","value":{"text":"nil"}},{"name":"identifier","value":{"kind":"identifier("y")","text":"y"}},{"name":"unexpectedAfterIdentifier","value":{"text":"nil"}}],"parent":1175,"text":"IdentifierPattern","range":{"startRow":92,"endRow":92,"endColumn":15,"startColumn":14},"type":"pattern"},{"text":"y","structure":[],"parent":1177,"id":1178,"range":{"startRow":92,"endRow":92,"endColumn":15,"startColumn":14},"token":{"kind":"identifier("y")","trailingTrivia":"","leadingTrivia":""},"type":"other"},{"text":")","structure":[],"parent":1166,"id":1179,"range":{"startRow":92,"endRow":92,"endColumn":16,"startColumn":15},"token":{"kind":"rightParen","trailingTrivia":"","leadingTrivia":""},"type":"other"},{"text":":","structure":[],"parent":1161,"id":1180,"range":{"startRow":92,"endRow":92,"endColumn":17,"startColumn":16},"token":{"kind":"colon","trailingTrivia":"","leadingTrivia":""},"type":"other"},{"id":1181,"structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"1"}}],"parent":1160,"text":"CodeBlockItemList","range":{"startRow":93,"endRow":93,"endColumn":50,"startColumn":5},"type":"collection"},{"id":1182,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"FunctionCallExprSyntax"},"ref":"FunctionCallExprSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"parent":1181,"text":"CodeBlockItem","range":{"endRow":93,"startRow":93,"endColumn":50,"startColumn":5},"type":"other"},{"text":"FunctionCallExpr","range":{"endRow":93,"endColumn":50,"startRow":93,"startColumn":5},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"calledExpression"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"kind":"leftParen","text":"("},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax","name":"arguments"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"value":{"text":"MultipleTrailingClosureElementListSyntax"},"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}],"id":1183,"type":"expr","parent":1182},{"text":"DeclReferenceExpr","range":{"startColumn":5,"startRow":93,"endRow":93,"endColumn":10},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"print","kind":"identifier("print")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":1184,"type":"expr","parent":1183},{"text":"print","parent":1184,"structure":[],"id":1185,"type":"other","token":{"kind":"identifier("print")","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":""},"range":{"startRow":93,"endRow":93,"endColumn":10,"startColumn":5}},{"text":"(","parent":1183,"structure":[],"id":1186,"type":"other","token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""},"range":{"startRow":93,"endRow":93,"endColumn":11,"startColumn":10}},{"range":{"startRow":93,"endRow":93,"endColumn":49,"startColumn":11},"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"text":"LabeledExprList","type":"collection","id":1187,"parent":1183},{"range":{"startRow":93,"endRow":93,"endColumn":49,"startColumn":11},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"text":"LabeledExpr","type":"other","id":1188,"parent":1187},{"range":{"endColumn":49,"startColumn":11,"startRow":93,"endRow":93},"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"ref":"StringLiteralSegmentListSyntax","name":"segments","value":{"text":"StringLiteralSegmentListSyntax"}},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"text":"StringLiteralExpr","type":"expr","id":1189,"parent":1188},{"text":""","parent":1189,"structure":[],"id":1190,"type":"other","token":{"kind":"stringQuote","leadingTrivia":"","trailingTrivia":""},"range":{"startColumn":11,"endRow":93,"startRow":93,"endColumn":12}},{"type":"collection","parent":1189,"range":{"startColumn":12,"endRow":93,"startRow":93,"endColumn":48},"id":1191,"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"3"},"name":"Count"}],"text":"StringLiteralSegmentList"},{"type":"other","parent":1191,"range":{"startColumn":12,"endRow":93,"startRow":93,"endColumn":44},"id":1192,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"kind":"stringSegment("on the y-axis with a y value of ")","text":"on the y-axis with a y value of "},"name":"content"},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"text":"StringSegment"},{"text":"on␣<\/span>the␣<\/span>y-axis␣<\/span>with␣<\/span>a␣<\/span>y␣<\/span>value␣<\/span>of␣<\/span>","parent":1192,"structure":[],"id":1193,"type":"other","token":{"trailingTrivia":"","leadingTrivia":"","kind":"stringSegment("on the y-axis with a y value of ")"},"range":{"startRow":93,"endRow":93,"endColumn":44,"startColumn":12}},{"parent":1191,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBackslash"},{"value":{"kind":"backslash","text":"\\"},"name":"backslash"},{"value":{"text":"nil"},"name":"unexpectedBetweenBackslashAndPounds"},{"value":{"text":"nil"},"name":"pounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenPoundsAndLeftParen"},{"value":{"kind":"leftParen","text":"("},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndExpressions"},{"value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax","name":"expressions"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"type":"other","id":1194,"text":"ExpressionSegment","range":{"startRow":93,"endRow":93,"endColumn":48,"startColumn":44}},{"text":"\\","parent":1194,"structure":[],"id":1195,"type":"other","token":{"leadingTrivia":"","kind":"backslash","trailingTrivia":""},"range":{"startRow":93,"endRow":93,"startColumn":44,"endColumn":45}},{"text":"(","parent":1194,"structure":[],"id":1196,"type":"other","token":{"leadingTrivia":"","kind":"leftParen","trailingTrivia":""},"range":{"startRow":93,"endRow":93,"startColumn":45,"endColumn":46}},{"parent":1194,"range":{"endRow":93,"startRow":93,"endColumn":47,"startColumn":46},"id":1197,"text":"LabeledExprList","type":"collection","structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}]},{"type":"other","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"parent":1197,"text":"LabeledExpr","range":{"endColumn":47,"startRow":93,"startColumn":46,"endRow":93},"id":1198},{"type":"expr","structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("y")","text":"y"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"parent":1198,"text":"DeclReferenceExpr","range":{"endColumn":47,"startRow":93,"startColumn":46,"endRow":93},"id":1199},{"text":"y","parent":1199,"structure":[],"id":1200,"type":"other","token":{"trailingTrivia":"","leadingTrivia":"","kind":"identifier("y")"},"range":{"startRow":93,"startColumn":46,"endColumn":47,"endRow":93}},{"text":")","parent":1194,"structure":[],"id":1201,"type":"other","token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"range":{"endColumn":48,"endRow":93,"startRow":93,"startColumn":47}},{"type":"other","range":{"endColumn":48,"endRow":93,"startRow":93,"startColumn":48},"id":1202,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"","kind":"stringSegment("")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"parent":1191,"text":"StringSegment"},{"text":"","parent":1202,"structure":[],"id":1203,"type":"other","token":{"kind":"stringSegment("")","trailingTrivia":"","leadingTrivia":""},"range":{"startColumn":48,"endRow":93,"endColumn":48,"startRow":93}},{"text":""","parent":1189,"structure":[],"id":1204,"type":"other","token":{"kind":"stringQuote","trailingTrivia":"","leadingTrivia":""},"range":{"startColumn":48,"endRow":93,"endColumn":49,"startRow":93}},{"text":")","parent":1183,"structure":[],"id":1205,"type":"other","token":{"kind":"rightParen","trailingTrivia":"","leadingTrivia":""},"range":{"startColumn":49,"endRow":93,"endColumn":50,"startRow":93}},{"type":"collection","range":{"startColumn":50,"endRow":93,"endColumn":50,"startRow":93},"id":1206,"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"parent":1183,"text":"MultipleTrailingClosureElementList"},{"type":"other","range":{"startRow":94,"startColumn":1,"endRow":95,"endColumn":44},"id":1207,"structure":[{"name":"unexpectedBeforeAttribute","value":{"text":"nil"}},{"name":"attribute","value":{"text":"nil"}},{"name":"unexpectedBetweenAttributeAndLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"SwitchCaseLabelSyntax"},"ref":"SwitchCaseLabelSyntax"},{"name":"unexpectedBetweenLabelAndStatements","value":{"text":"nil"}},{"name":"statements","value":{"text":"CodeBlockItemListSyntax"},"ref":"CodeBlockItemListSyntax"},{"name":"unexpectedAfterStatements","value":{"text":"nil"}}],"parent":1112,"text":"SwitchCase"},{"text":"SwitchCaseLabel","range":{"endRow":94,"endColumn":17,"startColumn":1,"startRow":94},"structure":[{"name":"unexpectedBeforeCaseKeyword","value":{"text":"nil"}},{"name":"caseKeyword","value":{"kind":"keyword(SwiftSyntax.Keyword.case)","text":"case"}},{"name":"unexpectedBetweenCaseKeywordAndCaseItems","value":{"text":"nil"}},{"name":"caseItems","ref":"SwitchCaseItemListSyntax","value":{"text":"SwitchCaseItemListSyntax"}},{"name":"unexpectedBetweenCaseItemsAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":":","kind":"colon"}},{"name":"unexpectedAfterColon","value":{"text":"nil"}}],"id":1208,"type":"other","parent":1207},{"text":"case","parent":1208,"structure":[],"id":1209,"type":"other","token":{"kind":"keyword(SwiftSyntax.Keyword.case)","trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>"},"range":{"endRow":94,"endColumn":5,"startColumn":1,"startRow":94}},{"text":"SwitchCaseItemList","range":{"endRow":94,"endColumn":16,"startColumn":6,"startRow":94},"structure":[{"value":{"text":"SwitchCaseItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"id":1210,"type":"collection","parent":1208},{"text":"SwitchCaseItem","range":{"startRow":94,"startColumn":6,"endRow":94,"endColumn":16},"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"name":"pattern","value":{"text":"ValueBindingPatternSyntax"},"ref":"ValueBindingPatternSyntax"},{"name":"unexpectedBetweenPatternAndWhereClause","value":{"text":"nil"}},{"name":"whereClause","value":{"text":"nil"}},{"name":"unexpectedBetweenWhereClauseAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":1211,"type":"other","parent":1210},{"text":"ValueBindingPattern","range":{"endRow":94,"endColumn":16,"startColumn":6,"startRow":94},"parent":1211,"id":1212,"structure":[{"name":"unexpectedBeforeBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"text":"let","kind":"keyword(SwiftSyntax.Keyword.let)"}},{"name":"unexpectedBetweenBindingSpecifierAndPattern","value":{"text":"nil"}},{"name":"pattern","ref":"ExpressionPatternSyntax","value":{"text":"ExpressionPatternSyntax"}},{"name":"unexpectedAfterPattern","value":{"text":"nil"}}],"type":"pattern"},{"text":"let","parent":1212,"structure":[],"id":1213,"type":"other","token":{"leadingTrivia":"","kind":"keyword(SwiftSyntax.Keyword.let)","trailingTrivia":"␣<\/span>"},"range":{"startColumn":6,"endRow":94,"startRow":94,"endColumn":9}},{"text":"ExpressionPattern","range":{"startColumn":10,"endRow":94,"startRow":94,"endColumn":16},"parent":1212,"id":1214,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"value":{"text":"TupleExprSyntax"},"name":"expression","ref":"TupleExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterExpression"}],"type":"pattern"},{"text":"TupleExpr","range":{"endRow":94,"startRow":94,"startColumn":10,"endColumn":16},"parent":1214,"id":1215,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftParen"},{"value":{"kind":"leftParen","text":"("},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndElements"},{"ref":"LabeledExprListSyntax","name":"elements","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenElementsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}],"type":"expr"},{"text":"(","parent":1215,"structure":[],"id":1216,"type":"other","token":{"kind":"leftParen","trailingTrivia":"","leadingTrivia":""},"range":{"startColumn":10,"startRow":94,"endColumn":11,"endRow":94}},{"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"2"}}],"range":{"startColumn":11,"startRow":94,"endColumn":15,"endRow":94},"type":"collection","parent":1215,"id":1217,"text":"LabeledExprList"},{"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","ref":"PatternExprSyntax","value":{"text":"PatternExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":",","kind":"comma"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"range":{"startColumn":11,"endRow":94,"startRow":94,"endColumn":13},"type":"other","parent":1217,"id":1218,"text":"LabeledExpr"},{"text":"PatternExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"ref":"IdentifierPatternSyntax","value":{"text":"IdentifierPatternSyntax"},"name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedAfterPattern"}],"type":"expr","id":1219,"parent":1218,"range":{"startRow":94,"endRow":94,"startColumn":11,"endColumn":12}},{"text":"IdentifierPattern","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"kind":"identifier("x")","text":"x"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"type":"pattern","id":1220,"parent":1219,"range":{"startRow":94,"startColumn":11,"endRow":94,"endColumn":12}},{"text":"x","parent":1220,"structure":[],"id":1221,"type":"other","token":{"kind":"identifier("x")","leadingTrivia":"","trailingTrivia":""},"range":{"startRow":94,"endRow":94,"endColumn":12,"startColumn":11}},{"text":",","parent":1218,"structure":[],"id":1222,"type":"other","token":{"kind":"comma","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"startRow":94,"endRow":94,"endColumn":13,"startColumn":12}},{"text":"LabeledExpr","structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","ref":"PatternExprSyntax","value":{"text":"PatternExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other","id":1223,"parent":1217,"range":{"startRow":94,"endRow":94,"endColumn":15,"startColumn":14}},{"range":{"endColumn":15,"startColumn":14,"endRow":94,"startRow":94},"text":"PatternExpr","type":"expr","structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"name":"pattern","value":{"text":"IdentifierPatternSyntax"},"ref":"IdentifierPatternSyntax"},{"name":"unexpectedAfterPattern","value":{"text":"nil"}}],"parent":1223,"id":1224},{"range":{"startRow":94,"startColumn":14,"endRow":94,"endColumn":15},"text":"IdentifierPattern","type":"pattern","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"text":"y","kind":"identifier("y")"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"parent":1224,"id":1225},{"text":"y","parent":1225,"structure":[],"id":1226,"type":"other","token":{"trailingTrivia":"","kind":"identifier("y")","leadingTrivia":""},"range":{"startColumn":14,"endColumn":15,"endRow":94,"startRow":94}},{"text":")","parent":1215,"structure":[],"id":1227,"type":"other","token":{"trailingTrivia":"","kind":"rightParen","leadingTrivia":""},"range":{"startColumn":15,"endColumn":16,"endRow":94,"startRow":94}},{"text":":","parent":1208,"structure":[],"id":1228,"type":"other","token":{"trailingTrivia":"","kind":"colon","leadingTrivia":""},"range":{"startColumn":16,"endColumn":17,"endRow":94,"startRow":94}},{"range":{"startColumn":5,"endColumn":44,"endRow":95,"startRow":95},"text":"CodeBlockItemList","type":"collection","structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"parent":1207,"id":1229},{"range":{"endColumn":44,"endRow":95,"startColumn":5,"startRow":95},"text":"CodeBlockItem","type":"other","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"FunctionCallExprSyntax"},"ref":"FunctionCallExprSyntax","name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"parent":1229,"id":1230},{"range":{"endRow":95,"startColumn":5,"endColumn":44,"startRow":95},"text":"FunctionCallExpr","structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"kind":"leftParen","text":"("}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"name":"arguments","ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"name":"additionalTrailingClosures","ref":"MultipleTrailingClosureElementListSyntax","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"type":"expr","parent":1230,"id":1231},{"text":"DeclReferenceExpr","parent":1231,"id":1232,"range":{"endColumn":10,"endRow":95,"startColumn":5,"startRow":95},"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"print","kind":"identifier("print")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"type":"expr"},{"text":"print","parent":1232,"structure":[],"id":1233,"type":"other","token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","kind":"identifier("print")","trailingTrivia":""},"range":{"endRow":95,"endColumn":10,"startColumn":5,"startRow":95}},{"text":"(","parent":1231,"structure":[],"id":1234,"type":"other","token":{"leadingTrivia":"","kind":"leftParen","trailingTrivia":""},"range":{"endRow":95,"endColumn":11,"startColumn":10,"startRow":95}},{"text":"LabeledExprList","parent":1231,"id":1235,"range":{"endRow":95,"endColumn":43,"startColumn":11,"startRow":95},"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection"},{"text":"LabeledExpr","parent":1235,"id":1236,"range":{"endRow":95,"startColumn":11,"startRow":95,"endColumn":43},"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other"},{"range":{"startRow":95,"startColumn":11,"endRow":95,"endColumn":43},"text":"StringLiteralExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"value":{"text":"StringLiteralSegmentListSyntax"},"ref":"StringLiteralSegmentListSyntax","name":"segments"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"type":"expr","id":1237,"parent":1236},{"text":""","structure":[],"type":"other","parent":1237,"token":{"kind":"stringQuote","trailingTrivia":"","leadingTrivia":""},"range":{"startColumn":11,"startRow":95,"endRow":95,"endColumn":12},"id":1238},{"id":1239,"text":"StringLiteralSegmentList","range":{"startColumn":12,"endColumn":42,"startRow":95,"endRow":95},"structure":[{"name":"Element","value":{"text":"Element"}},{"value":{"text":"5"},"name":"Count"}],"type":"collection","parent":1237},{"text":"StringSegment","parent":1239,"type":"other","range":{"endColumn":31,"startColumn":12,"endRow":95,"startRow":95},"id":1240,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"kind":"stringSegment("somewhere else at (")","text":"somewhere else at ("},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}]},{"text":"somewhere␣<\/span>else␣<\/span>at␣<\/span>(","structure":[],"type":"other","parent":1240,"token":{"trailingTrivia":"","kind":"stringSegment("somewhere else at (")","leadingTrivia":""},"range":{"endRow":95,"endColumn":31,"startRow":95,"startColumn":12},"id":1241},{"text":"ExpressionSegment","parent":1239,"type":"other","range":{"endRow":95,"endColumn":35,"startRow":95,"startColumn":31},"id":1242,"structure":[{"name":"unexpectedBeforeBackslash","value":{"text":"nil"}},{"name":"backslash","value":{"kind":"backslash","text":"\\"}},{"name":"unexpectedBetweenBackslashAndPounds","value":{"text":"nil"}},{"name":"pounds","value":{"text":"nil"}},{"name":"unexpectedBetweenPoundsAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"kind":"leftParen","text":"("}},{"name":"unexpectedBetweenLeftParenAndExpressions","value":{"text":"nil"}},{"ref":"LabeledExprListSyntax","name":"expressions","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenExpressionsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}]},{"text":"\\","structure":[],"type":"other","parent":1242,"token":{"kind":"backslash","leadingTrivia":"","trailingTrivia":""},"range":{"startRow":95,"startColumn":31,"endRow":95,"endColumn":32},"id":1243},{"text":"(","structure":[],"type":"other","parent":1242,"token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""},"range":{"startRow":95,"startColumn":32,"endRow":95,"endColumn":33},"id":1244},{"parent":1242,"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"text":"LabeledExprList","type":"collection","id":1245,"range":{"startRow":95,"startColumn":33,"endRow":95,"endColumn":34}},{"parent":1245,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"text":"LabeledExpr","type":"other","id":1246,"range":{"startColumn":33,"endColumn":34,"startRow":95,"endRow":95}},{"parent":1246,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"x","kind":"identifier("x")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"text":"DeclReferenceExpr","type":"expr","id":1247,"range":{"startRow":95,"startColumn":33,"endRow":95,"endColumn":34}},{"text":"x","structure":[],"type":"other","parent":1247,"token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("x")"},"range":{"endRow":95,"startRow":95,"endColumn":34,"startColumn":33},"id":1248},{"text":")","structure":[],"type":"other","parent":1242,"token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"range":{"endRow":95,"startRow":95,"endColumn":35,"startColumn":34},"id":1249},{"type":"other","id":1250,"parent":1239,"text":"StringSegment","range":{"endRow":95,"startRow":95,"endColumn":37,"startColumn":35},"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"kind":"stringSegment(", ")","text":", "}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}]},{"text":",␣<\/span>","structure":[],"type":"other","parent":1250,"token":{"leadingTrivia":"","kind":"stringSegment(", ")","trailingTrivia":""},"range":{"endRow":95,"endColumn":37,"startColumn":35,"startRow":95},"id":1251},{"type":"other","id":1252,"parent":1239,"text":"ExpressionSegment","range":{"endRow":95,"endColumn":41,"startColumn":37,"startRow":95},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBackslash"},{"value":{"text":"\\","kind":"backslash"},"name":"backslash"},{"value":{"text":"nil"},"name":"unexpectedBetweenBackslashAndPounds"},{"value":{"text":"nil"},"name":"pounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenPoundsAndLeftParen"},{"value":{"kind":"leftParen","text":"("},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndExpressions"},{"name":"expressions","value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax"},{"name":"unexpectedBetweenExpressionsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}]},{"text":"\\","structure":[],"type":"other","parent":1252,"token":{"trailingTrivia":"","leadingTrivia":"","kind":"backslash"},"range":{"startRow":95,"startColumn":37,"endColumn":38,"endRow":95},"id":1253},{"text":"(","structure":[],"type":"other","parent":1252,"token":{"trailingTrivia":"","leadingTrivia":"","kind":"leftParen"},"range":{"startRow":95,"startColumn":38,"endColumn":39,"endRow":95},"id":1254},{"type":"collection","range":{"startRow":95,"startColumn":39,"endColumn":40,"endRow":95},"parent":1252,"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"text":"LabeledExprList","id":1255},{"type":"other","range":{"endRow":95,"endColumn":40,"startRow":95,"startColumn":39},"parent":1255,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"text":"LabeledExpr","id":1256},{"text":"DeclReferenceExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("y")","text":"y"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","id":1257,"range":{"endRow":95,"startColumn":39,"startRow":95,"endColumn":40},"parent":1256},{"text":"y","structure":[],"type":"other","parent":1257,"token":{"leadingTrivia":"","kind":"identifier("y")","trailingTrivia":""},"range":{"endRow":95,"endColumn":40,"startColumn":39,"startRow":95},"id":1258},{"text":")","structure":[],"type":"other","parent":1252,"token":{"leadingTrivia":"","kind":"rightParen","trailingTrivia":""},"range":{"endRow":95,"endColumn":41,"startColumn":40,"startRow":95},"id":1259},{"text":"StringSegment","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"kind":"stringSegment(")")","text":")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","id":1260,"range":{"endRow":95,"endColumn":42,"startColumn":41,"startRow":95},"parent":1239},{"text":")","structure":[],"type":"other","parent":1260,"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment(")")"},"range":{"startRow":95,"endRow":95,"startColumn":41,"endColumn":42},"id":1261},{"text":""","structure":[],"type":"other","parent":1237,"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"range":{"startRow":95,"endRow":95,"startColumn":42,"endColumn":43},"id":1262},{"text":")","structure":[],"type":"other","parent":1231,"token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"range":{"startRow":95,"endRow":95,"startColumn":43,"endColumn":44},"id":1263},{"text":"MultipleTrailingClosureElementList","range":{"endColumn":44,"startRow":95,"startColumn":44,"endRow":95},"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"value":{"text":"0"},"name":"Count"}],"id":1264,"parent":1231,"type":"collection"},{"text":"}","structure":[],"type":"other","parent":1107,"token":{"leadingTrivia":"↲<\/span>","kind":"rightBrace","trailingTrivia":""},"range":{"endRow":96,"startColumn":1,"startRow":96,"endColumn":2},"id":1265},{"parent":1,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"VariableDeclSyntax"},"ref":"VariableDeclSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":1266,"type":"other","range":{"endRow":100,"startColumn":1,"startRow":100,"endColumn":26},"text":"CodeBlockItem"},{"parent":1266,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","value":{"text":"AttributeListSyntax"},"ref":"AttributeListSyntax"},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax"},{"name":"unexpectedBetweenModifiersAndBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"text":"let","kind":"keyword(SwiftSyntax.Keyword.let)"}},{"name":"unexpectedBetweenBindingSpecifierAndBindings","value":{"text":"nil"}},{"name":"bindings","value":{"text":"PatternBindingListSyntax"},"ref":"PatternBindingListSyntax"},{"name":"unexpectedAfterBindings","value":{"text":"nil"}}],"id":1267,"type":"decl","range":{"startColumn":1,"startRow":100,"endColumn":26,"endRow":100},"text":"VariableDecl"},{"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"type":"collection","parent":1267,"id":1268,"text":"AttributeList","range":{"startRow":96,"endRow":96,"endColumn":2,"startColumn":2}},{"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"type":"collection","parent":1267,"id":1269,"text":"DeclModifierList","range":{"startColumn":2,"endRow":96,"endColumn":2,"startRow":96}},{"text":"let","structure":[],"type":"other","parent":1267,"token":{"leadingTrivia":"↲<\/span>↲<\/span>\/\/␣<\/span>MARK:␣<\/span>-␣<\/span>Fallthrough<\/span>↲<\/span>\/\/␣<\/span>Using␣<\/span>fallthrough␣<\/span>in␣<\/span>switch<\/span>↲<\/span>","kind":"keyword(SwiftSyntax.Keyword.let)","trailingTrivia":"␣<\/span>"},"range":{"startRow":100,"startColumn":1,"endRow":100,"endColumn":4},"id":1270},{"structure":[{"name":"Element","value":{"text":"PatternBindingSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection","parent":1267,"id":1271,"text":"PatternBindingList","range":{"startRow":100,"startColumn":5,"endRow":100,"endColumn":26}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"value":{"text":"IdentifierPatternSyntax"},"ref":"IdentifierPatternSyntax","name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTypeAnnotation"},{"value":{"text":"nil"},"name":"typeAnnotation"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAnnotationAndInitializer"},{"value":{"text":"InitializerClauseSyntax"},"ref":"InitializerClauseSyntax","name":"initializer"},{"value":{"text":"nil"},"name":"unexpectedBetweenInitializerAndAccessorBlock"},{"value":{"text":"nil"},"name":"accessorBlock"},{"value":{"text":"nil"},"name":"unexpectedBetweenAccessorBlockAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","parent":1271,"id":1272,"text":"PatternBinding","range":{"startColumn":5,"startRow":100,"endRow":100,"endColumn":26}},{"range":{"endRow":100,"startColumn":5,"endColumn":22,"startRow":100},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"text":"integerToDescribe","kind":"identifier("integerToDescribe")"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"parent":1272,"type":"pattern","text":"IdentifierPattern","id":1273},{"text":"integerToDescribe","structure":[],"type":"other","parent":1273,"token":{"kind":"identifier("integerToDescribe")","trailingTrivia":"␣<\/span>","leadingTrivia":""},"range":{"startRow":100,"endRow":100,"endColumn":22,"startColumn":5},"id":1274},{"range":{"startRow":100,"endRow":100,"endColumn":26,"startColumn":23},"structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"text":"=","kind":"equal"}},{"name":"unexpectedBetweenEqualAndValue","value":{"text":"nil"}},{"name":"value","ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedAfterValue","value":{"text":"nil"}}],"parent":1272,"type":"other","text":"InitializerClause","id":1275},{"text":"=","structure":[],"type":"other","parent":1275,"token":{"kind":"equal","trailingTrivia":"␣<\/span>","leadingTrivia":""},"range":{"endRow":100,"endColumn":24,"startRow":100,"startColumn":23},"id":1276},{"parent":1275,"text":"IntegerLiteralExpr","range":{"startColumn":25,"startRow":100,"endColumn":26,"endRow":100},"id":1277,"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"kind":"integerLiteral("5")","text":"5"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"type":"expr"},{"text":"5","structure":[],"type":"other","parent":1277,"token":{"leadingTrivia":"","kind":"integerLiteral("5")","trailingTrivia":""},"range":{"startColumn":25,"endRow":100,"startRow":100,"endColumn":26},"id":1278},{"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"VariableDeclSyntax","name":"item","value":{"text":"VariableDeclSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"range":{"startColumn":1,"endRow":101,"startRow":101,"endColumn":55},"parent":1,"text":"CodeBlockItem","id":1279,"type":"other"},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttributes"},{"value":{"text":"AttributeListSyntax"},"ref":"AttributeListSyntax","name":"attributes"},{"value":{"text":"nil"},"name":"unexpectedBetweenAttributesAndModifiers"},{"value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax","name":"modifiers"},{"value":{"text":"nil"},"name":"unexpectedBetweenModifiersAndBindingSpecifier"},{"value":{"text":"var","kind":"keyword(SwiftSyntax.Keyword.var)"},"name":"bindingSpecifier"},{"value":{"text":"nil"},"name":"unexpectedBetweenBindingSpecifierAndBindings"},{"value":{"text":"PatternBindingListSyntax"},"ref":"PatternBindingListSyntax","name":"bindings"},{"value":{"text":"nil"},"name":"unexpectedAfterBindings"}],"range":{"startRow":101,"startColumn":1,"endColumn":55,"endRow":101},"parent":1279,"text":"VariableDecl","id":1280,"type":"decl"},{"type":"collection","parent":1280,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"range":{"endRow":100,"startColumn":26,"startRow":100,"endColumn":26},"text":"AttributeList","id":1281},{"type":"collection","parent":1280,"structure":[{"value":{"text":"DeclModifierSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"range":{"endRow":100,"endColumn":26,"startRow":100,"startColumn":26},"text":"DeclModifierList","id":1282},{"text":"var","structure":[],"type":"other","parent":1280,"token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>","kind":"keyword(SwiftSyntax.Keyword.var)"},"range":{"startRow":101,"startColumn":1,"endColumn":4,"endRow":101},"id":1283},{"type":"collection","parent":1280,"structure":[{"value":{"text":"PatternBindingSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"range":{"startRow":101,"startColumn":5,"endColumn":55,"endRow":101},"text":"PatternBindingList","id":1284},{"type":"other","parent":1284,"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"ref":"IdentifierPatternSyntax","name":"pattern","value":{"text":"IdentifierPatternSyntax"}},{"name":"unexpectedBetweenPatternAndTypeAnnotation","value":{"text":"nil"}},{"name":"typeAnnotation","value":{"text":"nil"}},{"name":"unexpectedBetweenTypeAnnotationAndInitializer","value":{"text":"nil"}},{"ref":"InitializerClauseSyntax","name":"initializer","value":{"text":"InitializerClauseSyntax"}},{"name":"unexpectedBetweenInitializerAndAccessorBlock","value":{"text":"nil"}},{"name":"accessorBlock","value":{"text":"nil"}},{"name":"unexpectedBetweenAccessorBlockAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"range":{"endRow":101,"startRow":101,"endColumn":55,"startColumn":5},"text":"PatternBinding","id":1285},{"text":"IdentifierPattern","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"kind":"identifier("description")","text":"description"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"id":1286,"parent":1285,"range":{"startColumn":5,"endRow":101,"startRow":101,"endColumn":16},"type":"pattern"},{"text":"description","structure":[],"type":"other","parent":1286,"token":{"kind":"identifier("description")","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"startRow":101,"startColumn":5,"endColumn":16,"endRow":101},"id":1287},{"text":"InitializerClause","structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"kind":"equal","text":"="}},{"name":"unexpectedBetweenEqualAndValue","value":{"text":"nil"}},{"name":"value","value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax"},{"name":"unexpectedAfterValue","value":{"text":"nil"}}],"id":1288,"parent":1285,"range":{"startRow":101,"startColumn":17,"endColumn":55,"endRow":101},"type":"other"},{"token":{"kind":"equal","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"text":"=","range":{"startRow":101,"endRow":101,"startColumn":17,"endColumn":18},"id":1289,"type":"other","structure":[],"parent":1288},{"range":{"startColumn":19,"startRow":101,"endColumn":55,"endRow":101},"id":1290,"text":"StringLiteralExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"kind":"stringQuote","text":"""},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"value":{"text":"StringLiteralSegmentListSyntax"},"ref":"StringLiteralSegmentListSyntax","name":"segments"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"type":"expr","parent":1288},{"token":{"trailingTrivia":"","kind":"stringQuote","leadingTrivia":""},"range":{"startRow":101,"startColumn":19,"endRow":101,"endColumn":20},"text":""","id":1291,"type":"other","structure":[],"parent":1290},{"range":{"startRow":101,"startColumn":20,"endRow":101,"endColumn":54},"id":1292,"text":"StringLiteralSegmentList","structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"3"}}],"type":"collection","parent":1290},{"range":{"startRow":101,"endColumn":31,"endRow":101,"startColumn":20},"id":1293,"text":"StringSegment","structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"kind":"stringSegment("The number ")","text":"The number "}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"type":"other","parent":1292},{"token":{"leadingTrivia":"","kind":"stringSegment("The number ")","trailingTrivia":""},"text":"The␣<\/span>number␣<\/span>","range":{"startRow":101,"endColumn":31,"startColumn":20,"endRow":101},"id":1294,"type":"other","parent":1293,"structure":[]},{"type":"other","parent":1292,"text":"ExpressionSegment","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBackslash"},{"value":{"kind":"backslash","text":"\\"},"name":"backslash"},{"value":{"text":"nil"},"name":"unexpectedBetweenBackslashAndPounds"},{"value":{"text":"nil"},"name":"pounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenPoundsAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndExpressions"},{"value":{"text":"LabeledExprListSyntax"},"name":"expressions","ref":"LabeledExprListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"id":1295,"range":{"startRow":101,"endColumn":51,"startColumn":31,"endRow":101}},{"token":{"trailingTrivia":"","leadingTrivia":"","kind":"backslash"},"text":"\\","range":{"startRow":101,"endRow":101,"endColumn":32,"startColumn":31},"id":1296,"type":"other","parent":1295,"structure":[]},{"token":{"trailingTrivia":"","leadingTrivia":"","kind":"leftParen"},"text":"(","range":{"startRow":101,"endRow":101,"endColumn":33,"startColumn":32},"id":1297,"type":"other","parent":1295,"structure":[]},{"parent":1295,"text":"LabeledExprList","type":"collection","range":{"endColumn":50,"startRow":101,"startColumn":33,"endRow":101},"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"value":{"text":"1"},"name":"Count"}],"id":1298},{"parent":1298,"range":{"endRow":101,"endColumn":50,"startRow":101,"startColumn":33},"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other","text":"LabeledExpr","id":1299},{"parent":1299,"range":{"startRow":101,"endColumn":50,"startColumn":33,"endRow":101},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"integerToDescribe","kind":"identifier("integerToDescribe")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","text":"DeclReferenceExpr","id":1300},{"token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("integerToDescribe")"},"range":{"endRow":101,"startColumn":33,"startRow":101,"endColumn":50},"text":"integerToDescribe","id":1301,"type":"other","parent":1300,"structure":[]},{"token":{"trailingTrivia":"","kind":"rightParen","leadingTrivia":""},"range":{"endColumn":51,"startColumn":50,"endRow":101,"startRow":101},"text":")","id":1302,"type":"other","parent":1295,"structure":[]},{"type":"other","range":{"endColumn":54,"startColumn":51,"endRow":101,"startRow":101},"parent":1292,"text":"StringSegment","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"kind":"stringSegment(" is")","text":" is"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"id":1303},{"token":{"leadingTrivia":"","kind":"stringSegment(" is")","trailingTrivia":""},"range":{"endRow":101,"startRow":101,"startColumn":51,"endColumn":54},"text":"␣<\/span>is","id":1304,"type":"other","parent":1303,"structure":[]},{"token":{"leadingTrivia":"","kind":"stringQuote","trailingTrivia":""},"range":{"endRow":101,"startRow":101,"startColumn":54,"endColumn":55},"text":""","id":1305,"type":"other","parent":1290,"structure":[]},{"type":"other","range":{"endRow":108,"startRow":102,"startColumn":1,"endColumn":2},"parent":1,"text":"CodeBlockItem","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"ExpressionStmtSyntax"},"ref":"ExpressionStmtSyntax","name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"id":1306},{"type":"other","range":{"startRow":102,"endColumn":2,"startColumn":1,"endRow":108},"parent":1306,"text":"ExpressionStmt","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"ref":"SwitchExprSyntax","value":{"text":"SwitchExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedAfterExpression"}],"id":1307},{"type":"expr","range":{"startColumn":1,"endColumn":2,"endRow":108,"startRow":102},"parent":1307,"text":"SwitchExpr","structure":[{"name":"unexpectedBeforeSwitchKeyword","value":{"text":"nil"}},{"name":"switchKeyword","value":{"kind":"keyword(SwiftSyntax.Keyword.switch)","text":"switch"}},{"name":"unexpectedBetweenSwitchKeywordAndSubject","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"subject","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenSubjectAndLeftBrace","value":{"text":"nil"}},{"name":"leftBrace","value":{"kind":"leftBrace","text":"{"}},{"name":"unexpectedBetweenLeftBraceAndCases","value":{"text":"nil"}},{"ref":"SwitchCaseListSyntax","name":"cases","value":{"text":"SwitchCaseListSyntax"}},{"name":"unexpectedBetweenCasesAndRightBrace","value":{"text":"nil"}},{"name":"rightBrace","value":{"kind":"rightBrace","text":"}"}},{"name":"unexpectedAfterRightBrace","value":{"text":"nil"}}],"id":1308},{"token":{"kind":"keyword(SwiftSyntax.Keyword.switch)","leadingTrivia":"↲<\/span>","trailingTrivia":"␣<\/span>"},"text":"switch","range":{"endRow":102,"endColumn":7,"startColumn":1,"startRow":102},"id":1309,"type":"other","parent":1308,"structure":[]},{"parent":1308,"text":"DeclReferenceExpr","id":1310,"type":"expr","range":{"endRow":102,"endColumn":25,"startColumn":8,"startRow":102},"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("integerToDescribe")","text":"integerToDescribe"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"identifier("integerToDescribe")"},"range":{"startColumn":8,"endRow":102,"startRow":102,"endColumn":25},"text":"integerToDescribe","id":1311,"type":"other","structure":[],"parent":1310},{"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftBrace"},"range":{"startColumn":26,"endRow":102,"startRow":102,"endColumn":27},"text":"{","id":1312,"type":"other","structure":[],"parent":1308},{"range":{"startColumn":1,"endRow":107,"startRow":103,"endColumn":34},"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"2"}}],"type":"collection","id":1313,"parent":1308,"text":"SwitchCaseList"},{"range":{"startRow":103,"startColumn":1,"endRow":105,"endColumn":16},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttribute"},{"value":{"text":"nil"},"name":"attribute"},{"value":{"text":"nil"},"name":"unexpectedBetweenAttributeAndLabel"},{"ref":"SwitchCaseLabelSyntax","value":{"text":"SwitchCaseLabelSyntax"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndStatements"},{"ref":"CodeBlockItemListSyntax","value":{"text":"CodeBlockItemListSyntax"},"name":"statements"},{"value":{"text":"nil"},"name":"unexpectedAfterStatements"}],"type":"other","id":1314,"parent":1313,"text":"SwitchCase"},{"range":{"startRow":103,"endRow":103,"startColumn":1,"endColumn":33},"structure":[{"name":"unexpectedBeforeCaseKeyword","value":{"text":"nil"}},{"name":"caseKeyword","value":{"kind":"keyword(SwiftSyntax.Keyword.case)","text":"case"}},{"name":"unexpectedBetweenCaseKeywordAndCaseItems","value":{"text":"nil"}},{"ref":"SwitchCaseItemListSyntax","name":"caseItems","value":{"text":"SwitchCaseItemListSyntax"}},{"value":{"text":"nil"},"name":"unexpectedBetweenCaseItemsAndColon"},{"value":{"text":":","kind":"colon"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedAfterColon"}],"type":"other","id":1315,"parent":1314,"text":"SwitchCaseLabel"},{"token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>","kind":"keyword(SwiftSyntax.Keyword.case)"},"range":{"startColumn":1,"startRow":103,"endColumn":5,"endRow":103},"text":"case","id":1316,"type":"other","structure":[],"parent":1315},{"structure":[{"name":"Element","value":{"text":"SwitchCaseItemSyntax"}},{"name":"Count","value":{"text":"8"}}],"parent":1315,"type":"collection","range":{"startColumn":6,"startRow":103,"endColumn":32,"endRow":103},"text":"SwitchCaseItemList","id":1317},{"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"name":"pattern","value":{"text":"ExpressionPatternSyntax"},"ref":"ExpressionPatternSyntax"},{"name":"unexpectedBetweenPatternAndWhereClause","value":{"text":"nil"}},{"name":"whereClause","value":{"text":"nil"}},{"name":"unexpectedBetweenWhereClauseAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":",","kind":"comma"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"parent":1317,"type":"other","range":{"startRow":103,"startColumn":6,"endRow":103,"endColumn":8},"text":"SwitchCaseItem","id":1318},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"value":{"text":"IntegerLiteralExprSyntax"},"name":"expression","ref":"IntegerLiteralExprSyntax"},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}],"parent":1318,"type":"pattern","range":{"endColumn":7,"endRow":103,"startColumn":6,"startRow":103},"text":"ExpressionPattern","id":1319},{"id":1320,"type":"expr","range":{"startRow":103,"endRow":103,"startColumn":6,"endColumn":7},"parent":1319,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"2","kind":"integerLiteral("2")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"text":"IntegerLiteralExpr"},{"token":{"kind":"integerLiteral("2")","trailingTrivia":"","leadingTrivia":""},"range":{"endRow":103,"startColumn":6,"startRow":103,"endColumn":7},"text":"2","id":1321,"type":"other","parent":1320,"structure":[]},{"token":{"kind":"comma","trailingTrivia":"␣<\/span>","leadingTrivia":""},"range":{"endRow":103,"startColumn":7,"startRow":103,"endColumn":8},"text":",","id":1322,"type":"other","parent":1318,"structure":[]},{"id":1323,"type":"other","range":{"endRow":103,"startColumn":9,"startRow":103,"endColumn":11},"parent":1317,"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"ref":"ExpressionPatternSyntax","name":"pattern","value":{"text":"ExpressionPatternSyntax"}},{"name":"unexpectedBetweenPatternAndWhereClause","value":{"text":"nil"}},{"name":"whereClause","value":{"text":"nil"}},{"name":"unexpectedBetweenWhereClauseAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":",","kind":"comma"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"text":"SwitchCaseItem"},{"id":1324,"type":"pattern","range":{"endRow":103,"startColumn":9,"startRow":103,"endColumn":10},"parent":1323,"structure":[{"name":"unexpectedBeforeExpression","value":{"text":"nil"}},{"ref":"IntegerLiteralExprSyntax","name":"expression","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}],"text":"ExpressionPattern"},{"range":{"startColumn":9,"startRow":103,"endColumn":10,"endRow":103},"id":1325,"parent":1324,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"3","kind":"integerLiteral("3")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr","text":"IntegerLiteralExpr"},{"token":{"trailingTrivia":"","kind":"integerLiteral("3")","leadingTrivia":""},"range":{"endRow":103,"endColumn":10,"startRow":103,"startColumn":9},"text":"3","id":1326,"type":"other","parent":1325,"structure":[]},{"token":{"trailingTrivia":"␣<\/span>","kind":"comma","leadingTrivia":""},"range":{"endRow":103,"endColumn":11,"startRow":103,"startColumn":10},"text":",","id":1327,"type":"other","parent":1323,"structure":[]},{"range":{"endRow":103,"endColumn":14,"startRow":103,"startColumn":12},"id":1328,"parent":1317,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"value":{"text":"ExpressionPatternSyntax"},"name":"pattern","ref":"ExpressionPatternSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndWhereClause"},{"value":{"text":"nil"},"name":"whereClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenWhereClauseAndTrailingComma"},{"value":{"text":",","kind":"comma"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"SwitchCaseItem"},{"range":{"startRow":103,"startColumn":12,"endRow":103,"endColumn":13},"id":1329,"parent":1328,"structure":[{"name":"unexpectedBeforeExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterExpression"}],"type":"pattern","text":"ExpressionPattern"},{"range":{"endColumn":13,"startRow":103,"startColumn":12,"endRow":103},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"5","kind":"integerLiteral("5")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"parent":1329,"type":"expr","id":1330,"text":"IntegerLiteralExpr"},{"token":{"kind":"integerLiteral("5")","leadingTrivia":"","trailingTrivia":""},"range":{"startColumn":12,"endRow":103,"endColumn":13,"startRow":103},"text":"5","id":1331,"type":"other","structure":[],"parent":1330},{"token":{"kind":"comma","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"startColumn":13,"endRow":103,"endColumn":14,"startRow":103},"text":",","id":1332,"type":"other","structure":[],"parent":1328},{"range":{"startColumn":15,"endRow":103,"endColumn":17,"startRow":103},"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"ref":"ExpressionPatternSyntax","name":"pattern","value":{"text":"ExpressionPatternSyntax"}},{"name":"unexpectedBetweenPatternAndWhereClause","value":{"text":"nil"}},{"name":"whereClause","value":{"text":"nil"}},{"name":"unexpectedBetweenWhereClauseAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":",","kind":"comma"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"parent":1317,"type":"other","id":1333,"text":"SwitchCaseItem"},{"range":{"endRow":103,"startRow":103,"startColumn":15,"endColumn":16},"structure":[{"name":"unexpectedBeforeExpression","value":{"text":"nil"}},{"name":"expression","ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}],"parent":1333,"type":"pattern","id":1334,"text":"ExpressionPattern"},{"type":"expr","text":"IntegerLiteralExpr","parent":1334,"range":{"endRow":103,"startColumn":15,"endColumn":16,"startRow":103},"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"kind":"integerLiteral("7")","text":"7"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"id":1335},{"token":{"kind":"integerLiteral("7")","leadingTrivia":"","trailingTrivia":""},"text":"7","range":{"endRow":103,"endColumn":16,"startRow":103,"startColumn":15},"id":1336,"type":"other","parent":1335,"structure":[]},{"token":{"kind":"comma","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"text":",","range":{"endRow":103,"endColumn":17,"startRow":103,"startColumn":16},"id":1337,"type":"other","parent":1333,"structure":[]},{"type":"other","text":"SwitchCaseItem","parent":1317,"range":{"endRow":103,"endColumn":21,"startRow":103,"startColumn":18},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"value":{"text":"ExpressionPatternSyntax"},"name":"pattern","ref":"ExpressionPatternSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndWhereClause"},{"value":{"text":"nil"},"name":"whereClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenWhereClauseAndTrailingComma"},{"value":{"text":",","kind":"comma"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"id":1338},{"type":"pattern","text":"ExpressionPattern","parent":1338,"range":{"endColumn":20,"startColumn":18,"endRow":103,"startRow":103},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedAfterExpression"}],"id":1339},{"range":{"startColumn":18,"endRow":103,"startRow":103,"endColumn":20},"id":1340,"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"11","kind":"integerLiteral("11")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"text":"IntegerLiteralExpr","parent":1339,"type":"expr"},{"token":{"kind":"integerLiteral("11")","trailingTrivia":"","leadingTrivia":""},"id":1341,"structure":[],"text":"11","parent":1340,"range":{"endColumn":20,"startRow":103,"startColumn":18,"endRow":103},"type":"other"},{"token":{"kind":"comma","trailingTrivia":"␣<\/span>","leadingTrivia":""},"id":1342,"structure":[],"text":",","parent":1338,"range":{"endColumn":21,"startRow":103,"startColumn":20,"endRow":103},"type":"other"},{"range":{"endColumn":25,"startRow":103,"startColumn":22,"endRow":103},"id":1343,"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"ref":"ExpressionPatternSyntax","name":"pattern","value":{"text":"ExpressionPatternSyntax"}},{"name":"unexpectedBetweenPatternAndWhereClause","value":{"text":"nil"}},{"name":"whereClause","value":{"text":"nil"}},{"name":"unexpectedBetweenWhereClauseAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":",","kind":"comma"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"text":"SwitchCaseItem","parent":1317,"type":"other"},{"range":{"startColumn":22,"endRow":103,"endColumn":24,"startRow":103},"id":1344,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"value":{"text":"IntegerLiteralExprSyntax"},"name":"expression","ref":"IntegerLiteralExprSyntax"},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}],"text":"ExpressionPattern","parent":1343,"type":"pattern"},{"id":1345,"type":"expr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"13","kind":"integerLiteral("13")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"parent":1344,"range":{"startRow":103,"startColumn":22,"endColumn":24,"endRow":103},"text":"IntegerLiteralExpr"},{"token":{"leadingTrivia":"","trailingTrivia":"","kind":"integerLiteral("13")"},"id":1346,"structure":[],"type":"other","parent":1345,"range":{"endColumn":24,"startRow":103,"startColumn":22,"endRow":103},"text":"13"},{"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"comma"},"id":1347,"structure":[],"type":"other","parent":1343,"range":{"endColumn":25,"startRow":103,"startColumn":24,"endRow":103},"text":","},{"id":1348,"type":"other","structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"ref":"ExpressionPatternSyntax","name":"pattern","value":{"text":"ExpressionPatternSyntax"}},{"name":"unexpectedBetweenPatternAndWhereClause","value":{"text":"nil"}},{"name":"whereClause","value":{"text":"nil"}},{"name":"unexpectedBetweenWhereClauseAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"kind":"comma","text":","}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"parent":1317,"range":{"endColumn":29,"startRow":103,"startColumn":26,"endRow":103},"text":"SwitchCaseItem"},{"id":1349,"type":"pattern","structure":[{"name":"unexpectedBeforeExpression","value":{"text":"nil"}},{"name":"expression","ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"}},{"value":{"text":"nil"},"name":"unexpectedAfterExpression"}],"parent":1348,"range":{"startRow":103,"endColumn":28,"startColumn":26,"endRow":103},"text":"ExpressionPattern"},{"range":{"endRow":103,"startColumn":26,"startRow":103,"endColumn":28},"type":"expr","id":1350,"parent":1349,"text":"IntegerLiteralExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"kind":"integerLiteral("17")","text":"17"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}]},{"token":{"trailingTrivia":"","leadingTrivia":"","kind":"integerLiteral("17")"},"id":1351,"structure":[],"type":"other","parent":1350,"range":{"endRow":103,"endColumn":28,"startRow":103,"startColumn":26},"text":"17"},{"token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"comma"},"id":1352,"structure":[],"type":"other","parent":1348,"range":{"endRow":103,"endColumn":29,"startRow":103,"startColumn":28},"text":","},{"range":{"endRow":103,"endColumn":32,"startRow":103,"startColumn":30},"type":"other","id":1353,"parent":1317,"text":"SwitchCaseItem","structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"name":"pattern","value":{"text":"ExpressionPatternSyntax"},"ref":"ExpressionPatternSyntax"},{"name":"unexpectedBetweenPatternAndWhereClause","value":{"text":"nil"}},{"name":"whereClause","value":{"text":"nil"}},{"name":"unexpectedBetweenWhereClauseAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}]},{"range":{"endRow":103,"endColumn":32,"startRow":103,"startColumn":30},"type":"pattern","id":1354,"parent":1353,"text":"ExpressionPattern","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"value":{"text":"IntegerLiteralExprSyntax"},"name":"expression","ref":"IntegerLiteralExprSyntax"},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}]},{"type":"expr","id":1355,"parent":1354,"range":{"startRow":103,"startColumn":30,"endRow":103,"endColumn":32},"text":"IntegerLiteralExpr","structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"19","kind":"integerLiteral("19")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}]},{"token":{"kind":"integerLiteral("19")","leadingTrivia":"","trailingTrivia":""},"id":1356,"structure":[],"type":"other","parent":1355,"range":{"endColumn":32,"endRow":103,"startRow":103,"startColumn":30},"text":"19"},{"token":{"kind":"colon","leadingTrivia":"","trailingTrivia":""},"id":1357,"structure":[],"type":"other","parent":1315,"range":{"endColumn":33,"endRow":103,"startRow":103,"startColumn":32},"text":":"},{"type":"collection","id":1358,"parent":1314,"range":{"endColumn":16,"endRow":105,"startRow":104,"startColumn":5},"text":"CodeBlockItemList","structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"2"},"name":"Count"}]},{"type":"other","id":1359,"parent":1358,"range":{"endRow":104,"endColumn":47,"startRow":104,"startColumn":5},"text":"CodeBlockItem","structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"InfixOperatorExprSyntax"},"ref":"InfixOperatorExprSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}]},{"type":"expr","id":1360,"parent":1359,"range":{"startColumn":5,"startRow":104,"endRow":104,"endColumn":47},"text":"InfixOperatorExpr","structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"leftOperand"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftOperandAndOperator"},{"value":{"text":"BinaryOperatorExprSyntax"},"ref":"BinaryOperatorExprSyntax","name":"operator"},{"value":{"text":"nil"},"name":"unexpectedBetweenOperatorAndRightOperand"},{"value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax","name":"rightOperand"},{"value":{"text":"nil"},"name":"unexpectedAfterRightOperand"}]},{"range":{"startRow":104,"endColumn":16,"endRow":104,"startColumn":5},"type":"expr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"description","kind":"identifier("description")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"parent":1360,"id":1361,"text":"DeclReferenceExpr"},{"token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","kind":"identifier("description")"},"id":1362,"structure":[],"type":"other","parent":1361,"range":{"endRow":104,"endColumn":16,"startColumn":5,"startRow":104},"text":"description"},{"range":{"endRow":104,"endColumn":19,"startColumn":17,"startRow":104},"type":"expr","structure":[{"name":"unexpectedBeforeOperator","value":{"text":"nil"}},{"name":"operator","value":{"text":"+=","kind":"binaryOperator("+=")"}},{"name":"unexpectedAfterOperator","value":{"text":"nil"}}],"parent":1360,"id":1363,"text":"BinaryOperatorExpr"},{"token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"binaryOperator("+=")"},"id":1364,"structure":[],"type":"other","parent":1363,"range":{"endColumn":19,"endRow":104,"startRow":104,"startColumn":17},"text":"+="},{"parent":1360,"range":{"endRow":104,"endColumn":47,"startRow":104,"startColumn":20},"id":1365,"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"name":"segments","value":{"text":"StringLiteralSegmentListSyntax"},"ref":"StringLiteralSegmentListSyntax"},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"kind":"stringQuote","text":"""}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"text":"StringLiteralExpr","type":"expr"},{"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"id":1366,"structure":[],"parent":1365,"text":""","range":{"startRow":104,"startColumn":20,"endRow":104,"endColumn":21},"type":"other"},{"parent":1365,"range":{"startRow":104,"startColumn":21,"endRow":104,"endColumn":46},"id":1367,"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"text":"StringLiteralSegmentList","type":"collection"},{"parent":1367,"range":{"startColumn":21,"endColumn":46,"startRow":104,"endRow":104},"id":1368,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"kind":"stringSegment(" a prime number, and also")","text":" a prime number, and also"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"text":"StringSegment","type":"other"},{"token":{"leadingTrivia":"","kind":"stringSegment(" a prime number, and also")","trailingTrivia":""},"id":1369,"structure":[],"text":"␣<\/span>a␣<\/span>prime␣<\/span>number,␣<\/span>and␣<\/span>also","type":"other","parent":1368,"range":{"startRow":104,"startColumn":21,"endColumn":46,"endRow":104}},{"token":{"leadingTrivia":"","kind":"stringQuote","trailingTrivia":""},"id":1370,"structure":[],"text":""","type":"other","parent":1365,"range":{"startRow":104,"startColumn":46,"endColumn":47,"endRow":104}},{"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","ref":"FallThroughStmtSyntax","value":{"text":"FallThroughStmtSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"text":"CodeBlockItem","type":"other","parent":1358,"range":{"startRow":105,"startColumn":5,"endColumn":16,"endRow":105},"id":1371},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeFallthroughKeyword"},{"value":{"text":"fallthrough","kind":"keyword(SwiftSyntax.Keyword.fallthrough)"},"name":"fallthroughKeyword"},{"value":{"text":"nil"},"name":"unexpectedAfterFallthroughKeyword"}],"text":"FallThroughStmt","type":"other","parent":1371,"range":{"endRow":105,"startRow":105,"startColumn":5,"endColumn":16},"id":1372},{"token":{"kind":"keyword(SwiftSyntax.Keyword.fallthrough)","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":""},"id":1373,"structure":[],"text":"fallthrough","type":"other","parent":1372,"range":{"endRow":105,"startColumn":5,"startRow":105,"endColumn":16}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttribute"},{"value":{"text":"nil"},"name":"attribute"},{"name":"unexpectedBetweenAttributeAndLabel","value":{"text":"nil"}},{"name":"label","ref":"SwitchDefaultLabelSyntax","value":{"text":"SwitchDefaultLabelSyntax"}},{"name":"unexpectedBetweenLabelAndStatements","value":{"text":"nil"}},{"name":"statements","ref":"CodeBlockItemListSyntax","value":{"text":"CodeBlockItemListSyntax"}},{"name":"unexpectedAfterStatements","value":{"text":"nil"}}],"text":"SwitchCase","type":"other","parent":1313,"range":{"endRow":107,"startColumn":1,"startRow":106,"endColumn":34},"id":1374},{"range":{"startColumn":1,"startRow":106,"endRow":106,"endColumn":9},"structure":[{"name":"unexpectedBeforeDefaultKeyword","value":{"text":"nil"}},{"name":"defaultKeyword","value":{"text":"default","kind":"keyword(SwiftSyntax.Keyword.default)"}},{"name":"unexpectedBetweenDefaultKeywordAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":":","kind":"colon"}},{"name":"unexpectedAfterColon","value":{"text":"nil"}}],"text":"SwitchDefaultLabel","type":"other","parent":1374,"id":1375},{"token":{"trailingTrivia":"","leadingTrivia":"↲<\/span>","kind":"keyword(SwiftSyntax.Keyword.default)"},"id":1376,"structure":[],"text":"default","type":"other","range":{"endRow":106,"endColumn":8,"startRow":106,"startColumn":1},"parent":1375},{"token":{"trailingTrivia":"","leadingTrivia":"","kind":"colon"},"id":1377,"structure":[],"text":":","type":"other","range":{"endRow":106,"endColumn":9,"startRow":106,"startColumn":8},"parent":1375},{"range":{"endRow":107,"endColumn":34,"startRow":107,"startColumn":5},"structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"text":"CodeBlockItemList","type":"collection","parent":1374,"id":1378},{"range":{"endColumn":34,"startColumn":5,"startRow":107,"endRow":107},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"InfixOperatorExprSyntax","name":"item","value":{"text":"InfixOperatorExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"text":"CodeBlockItem","type":"other","parent":1378,"id":1379},{"text":"InfixOperatorExpr","id":1380,"structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"name":"leftOperand","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenLeftOperandAndOperator","value":{"text":"nil"}},{"name":"operator","ref":"BinaryOperatorExprSyntax","value":{"text":"BinaryOperatorExprSyntax"}},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"name":"rightOperand","ref":"StringLiteralExprSyntax","value":{"text":"StringLiteralExprSyntax"}},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}],"range":{"startColumn":5,"endColumn":34,"startRow":107,"endRow":107},"type":"expr","parent":1379},{"text":"DeclReferenceExpr","id":1381,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"description","kind":"identifier("description")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"range":{"endColumn":16,"startRow":107,"endRow":107,"startColumn":5},"type":"expr","parent":1380},{"token":{"trailingTrivia":"␣<\/span>","kind":"identifier("description")","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"id":1382,"structure":[],"text":"description","type":"other","range":{"startColumn":5,"startRow":107,"endColumn":16,"endRow":107},"parent":1381},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOperator"},{"value":{"text":"+=","kind":"binaryOperator("+=")"},"name":"operator"},{"value":{"text":"nil"},"name":"unexpectedAfterOperator"}],"id":1383,"text":"BinaryOperatorExpr","range":{"startColumn":17,"startRow":107,"endColumn":19,"endRow":107},"type":"expr","parent":1380},{"token":{"trailingTrivia":"␣<\/span>","kind":"binaryOperator("+=")","leadingTrivia":""},"id":1384,"structure":[],"text":"+=","type":"other","range":{"endRow":107,"startRow":107,"endColumn":19,"startColumn":17},"parent":1383},{"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"kind":"stringQuote","text":"""}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"ref":"StringLiteralSegmentListSyntax","name":"segments","value":{"text":"StringLiteralSegmentListSyntax"}},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"id":1385,"text":"StringLiteralExpr","range":{"endRow":107,"startRow":107,"endColumn":34,"startColumn":20},"type":"expr","parent":1380},{"token":{"trailingTrivia":"","leadingTrivia":"","kind":"stringQuote"},"id":1386,"structure":[],"parent":1385,"type":"other","range":{"startColumn":20,"endRow":107,"endColumn":21,"startRow":107},"text":"""},{"parent":1385,"range":{"startColumn":21,"endRow":107,"endColumn":33,"startRow":107},"type":"collection","id":1387,"text":"StringLiteralSegmentList","structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}]},{"parent":1387,"range":{"endRow":107,"startColumn":21,"endColumn":33,"startRow":107},"type":"other","id":1388,"text":"StringSegment","structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":" an integer.","kind":"stringSegment(" an integer.")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}]},{"token":{"kind":"stringSegment(" an integer.")","trailingTrivia":"","leadingTrivia":""},"id":1389,"structure":[],"parent":1388,"type":"other","range":{"startRow":107,"startColumn":21,"endRow":107,"endColumn":33},"text":"␣<\/span>an␣<\/span>integer."},{"token":{"kind":"stringQuote","trailingTrivia":"","leadingTrivia":""},"id":1390,"structure":[],"parent":1385,"type":"other","range":{"startRow":107,"startColumn":33,"endRow":107,"endColumn":34},"text":"""},{"type":"other","range":{"startRow":108,"startColumn":1,"endRow":108,"endColumn":2},"id":1391,"token":{"kind":"rightBrace","trailingTrivia":"","leadingTrivia":"↲<\/span>"},"text":"}","structure":[],"parent":1308},{"parent":1,"range":{"startRow":109,"startColumn":1,"endRow":109,"endColumn":19},"type":"other","id":1392,"text":"CodeBlockItem","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"FunctionCallExprSyntax"},"name":"item","ref":"FunctionCallExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}]},{"parent":1392,"range":{"endRow":109,"endColumn":19,"startRow":109,"startColumn":1},"type":"expr","id":1393,"text":"FunctionCallExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"name":"calledExpression","ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"kind":"leftParen","text":"("},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"value":{"text":"LabeledExprListSyntax"},"name":"arguments","ref":"LabeledExprListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"value":{"text":"MultipleTrailingClosureElementListSyntax"},"name":"additionalTrailingClosures","ref":"MultipleTrailingClosureElementListSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}]},{"text":"DeclReferenceExpr","type":"expr","range":{"endRow":109,"endColumn":6,"startRow":109,"startColumn":1},"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"print","kind":"identifier("print")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":1394,"parent":1393},{"type":"other","id":1395,"range":{"startRow":109,"endRow":109,"startColumn":1,"endColumn":6},"token":{"kind":"identifier("print")","leadingTrivia":"↲<\/span>","trailingTrivia":""},"structure":[],"text":"print","parent":1394},{"type":"other","id":1396,"range":{"startRow":109,"endRow":109,"startColumn":6,"endColumn":7},"token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""},"structure":[],"text":"(","parent":1393},{"id":1397,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"parent":1393,"text":"LabeledExprList","range":{"startRow":109,"endRow":109,"startColumn":7,"endColumn":18},"type":"collection"},{"id":1398,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"parent":1397,"text":"LabeledExpr","range":{"endColumn":18,"startRow":109,"endRow":109,"startColumn":7},"type":"other"},{"id":1399,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"value":{"text":"description","kind":"identifier("description")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"parent":1398,"text":"DeclReferenceExpr","range":{"endRow":109,"endColumn":18,"startColumn":7,"startRow":109},"type":"expr"},{"type":"other","range":{"endColumn":18,"endRow":109,"startRow":109,"startColumn":7},"id":1400,"token":{"kind":"identifier("description")","leadingTrivia":"","trailingTrivia":""},"structure":[],"text":"description","parent":1399},{"type":"other","range":{"endColumn":19,"endRow":109,"startRow":109,"startColumn":18},"id":1401,"token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":""},"structure":[],"text":")","parent":1393},{"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"parent":1393,"range":{"endColumn":19,"endRow":109,"startRow":109,"startColumn":19},"type":"collection","id":1402,"text":"MultipleTrailingClosureElementList"},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"VariableDeclSyntax","value":{"text":"VariableDeclSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"parent":1,"range":{"endColumn":21,"startRow":113,"endRow":113,"startColumn":1},"type":"other","id":1403,"text":"CodeBlockItem"},{"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","ref":"AttributeListSyntax","value":{"text":"AttributeListSyntax"}},{"value":{"text":"nil"},"name":"unexpectedBetweenAttributesAndModifiers"},{"value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax","name":"modifiers"},{"value":{"text":"nil"},"name":"unexpectedBetweenModifiersAndBindingSpecifier"},{"value":{"text":"let","kind":"keyword(SwiftSyntax.Keyword.let)"},"name":"bindingSpecifier"},{"value":{"text":"nil"},"name":"unexpectedBetweenBindingSpecifierAndBindings"},{"value":{"text":"PatternBindingListSyntax"},"ref":"PatternBindingListSyntax","name":"bindings"},{"value":{"text":"nil"},"name":"unexpectedAfterBindings"}],"parent":1403,"range":{"startRow":113,"startColumn":1,"endRow":113,"endColumn":21},"type":"decl","id":1404,"text":"VariableDecl"},{"parent":1404,"text":"AttributeList","id":1405,"range":{"startRow":109,"endRow":109,"startColumn":19,"endColumn":19},"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection"},{"parent":1404,"text":"DeclModifierList","id":1406,"range":{"startColumn":19,"startRow":109,"endRow":109,"endColumn":19},"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"type":"collection"},{"type":"other","id":1407,"range":{"endColumn":4,"endRow":113,"startColumn":1,"startRow":113},"token":{"trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.let)","leadingTrivia":"↲<\/span>↲<\/span>\/\/␣<\/span>MARK:␣<\/span>-␣<\/span>Labeled␣<\/span>Statements<\/span>↲<\/span>\/\/␣<\/span>Using␣<\/span>labeled␣<\/span>statements␣<\/span>with␣<\/span>break<\/span>↲<\/span>"},"text":"let","structure":[],"parent":1404},{"parent":1404,"text":"PatternBindingList","id":1408,"range":{"endColumn":21,"endRow":113,"startColumn":5,"startRow":113},"structure":[{"value":{"text":"PatternBindingSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection"},{"parent":1408,"text":"PatternBinding","id":1409,"range":{"startColumn":5,"endRow":113,"startRow":113,"endColumn":21},"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"name":"pattern","value":{"text":"IdentifierPatternSyntax"},"ref":"IdentifierPatternSyntax"},{"name":"unexpectedBetweenPatternAndTypeAnnotation","value":{"text":"nil"}},{"name":"typeAnnotation","value":{"text":"nil"}},{"name":"unexpectedBetweenTypeAnnotationAndInitializer","value":{"text":"nil"}},{"name":"initializer","value":{"text":"InitializerClauseSyntax"},"ref":"InitializerClauseSyntax"},{"name":"unexpectedBetweenInitializerAndAccessorBlock","value":{"text":"nil"}},{"name":"accessorBlock","value":{"text":"nil"}},{"name":"unexpectedBetweenAccessorBlockAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other"},{"type":"pattern","id":1410,"text":"IdentifierPattern","range":{"endRow":113,"endColumn":16,"startColumn":5,"startRow":113},"parent":1409,"structure":[{"name":"unexpectedBeforeIdentifier","value":{"text":"nil"}},{"name":"identifier","value":{"kind":"identifier("finalSquare")","text":"finalSquare"}},{"name":"unexpectedAfterIdentifier","value":{"text":"nil"}}]},{"type":"other","id":1411,"range":{"startColumn":5,"endRow":113,"startRow":113,"endColumn":16},"token":{"kind":"identifier("finalSquare")","trailingTrivia":"␣<\/span>","leadingTrivia":""},"text":"finalSquare","structure":[],"parent":1410},{"type":"other","id":1412,"text":"InitializerClause","range":{"startColumn":17,"endRow":113,"startRow":113,"endColumn":21},"parent":1409,"structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"text":"=","kind":"equal"}},{"name":"unexpectedBetweenEqualAndValue","value":{"text":"nil"}},{"name":"value","value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax"},{"name":"unexpectedAfterValue","value":{"text":"nil"}}]},{"type":"other","range":{"startRow":113,"endRow":113,"startColumn":17,"endColumn":18},"id":1413,"token":{"kind":"equal","trailingTrivia":"␣<\/span>","leadingTrivia":""},"structure":[],"text":"=","parent":1412},{"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"25","kind":"integerLiteral("25")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"range":{"startRow":113,"endRow":113,"startColumn":19,"endColumn":21},"type":"expr","id":1414,"text":"IntegerLiteralExpr","parent":1412},{"type":"other","range":{"startColumn":19,"startRow":113,"endRow":113,"endColumn":21},"id":1415,"token":{"leadingTrivia":"","kind":"integerLiteral("25")","trailingTrivia":""},"structure":[],"text":"25","parent":1414},{"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"VariableDeclSyntax"},"ref":"VariableDeclSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"range":{"startColumn":1,"startRow":114,"endRow":114,"endColumn":56},"type":"other","id":1416,"text":"CodeBlockItem","parent":1},{"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","value":{"text":"AttributeListSyntax"},"ref":"AttributeListSyntax"},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax"},{"name":"unexpectedBetweenModifiersAndBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"text":"var","kind":"keyword(SwiftSyntax.Keyword.var)"}},{"name":"unexpectedBetweenBindingSpecifierAndBindings","value":{"text":"nil"}},{"name":"bindings","value":{"text":"PatternBindingListSyntax"},"ref":"PatternBindingListSyntax"},{"name":"unexpectedAfterBindings","value":{"text":"nil"}}],"range":{"startRow":114,"startColumn":1,"endRow":114,"endColumn":56},"type":"decl","id":1417,"text":"VariableDecl","parent":1416},{"text":"AttributeList","structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"parent":1417,"id":1418,"type":"collection","range":{"startColumn":21,"startRow":113,"endColumn":21,"endRow":113}},{"text":"DeclModifierList","structure":[{"value":{"text":"DeclModifierSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"parent":1417,"id":1419,"type":"collection","range":{"startColumn":21,"endRow":113,"startRow":113,"endColumn":21}},{"type":"other","id":1420,"range":{"startColumn":1,"startRow":114,"endRow":114,"endColumn":4},"token":{"trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.var)","leadingTrivia":"↲<\/span>"},"text":"var","structure":[],"parent":1417},{"text":"PatternBindingList","structure":[{"value":{"text":"PatternBindingSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"parent":1417,"id":1421,"type":"collection","range":{"startColumn":5,"startRow":114,"endRow":114,"endColumn":56}},{"text":"PatternBinding","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"value":{"text":"IdentifierPatternSyntax"},"ref":"IdentifierPatternSyntax","name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTypeAnnotation"},{"value":{"text":"nil"},"name":"typeAnnotation"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAnnotationAndInitializer"},{"value":{"text":"InitializerClauseSyntax"},"ref":"InitializerClauseSyntax","name":"initializer"},{"value":{"text":"nil"},"name":"unexpectedBetweenInitializerAndAccessorBlock"},{"value":{"text":"nil"},"name":"accessorBlock"},{"value":{"text":"nil"},"name":"unexpectedBetweenAccessorBlockAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"id":1422,"type":"other","parent":1421,"range":{"startColumn":5,"endRow":114,"endColumn":56,"startRow":114}},{"text":"IdentifierPattern","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"kind":"identifier("board")","text":"board"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"id":1423,"type":"pattern","parent":1422,"range":{"startRow":114,"startColumn":5,"endRow":114,"endColumn":10}},{"type":"other","id":1424,"range":{"startRow":114,"startColumn":5,"endColumn":10,"endRow":114},"token":{"kind":"identifier("board")","trailingTrivia":"␣<\/span>","leadingTrivia":""},"text":"board","structure":[],"parent":1423},{"type":"other","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeEqual"},{"value":{"kind":"equal","text":"="},"name":"equal"},{"value":{"text":"nil"},"name":"unexpectedBetweenEqualAndValue"},{"value":{"text":"FunctionCallExprSyntax"},"name":"value","ref":"FunctionCallExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterValue"}],"range":{"startRow":114,"endRow":114,"endColumn":56,"startColumn":11},"id":1425,"parent":1422,"text":"InitializerClause"},{"type":"other","range":{"startColumn":11,"endColumn":12,"startRow":114,"endRow":114},"id":1426,"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"equal"},"structure":[],"text":"=","parent":1425},{"type":"expr","structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","value":{"text":"ArrayExprSyntax"},"ref":"ArrayExprSyntax"},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"name":"arguments","value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax"},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"name":"additionalTrailingClosures","ref":"MultipleTrailingClosureElementListSyntax","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"range":{"startColumn":13,"endColumn":56,"startRow":114,"endRow":114},"id":1427,"parent":1425,"text":"FunctionCallExpr"},{"structure":[{"name":"unexpectedBeforeLeftSquare","value":{"text":"nil"}},{"name":"leftSquare","value":{"kind":"leftSquare","text":"["}},{"name":"unexpectedBetweenLeftSquareAndElements","value":{"text":"nil"}},{"name":"elements","value":{"text":"ArrayElementListSyntax"},"ref":"ArrayElementListSyntax"},{"name":"unexpectedBetweenElementsAndRightSquare","value":{"text":"nil"}},{"name":"rightSquare","value":{"kind":"rightSquare","text":"]"}},{"name":"unexpectedAfterRightSquare","value":{"text":"nil"}}],"range":{"startRow":114,"startColumn":13,"endRow":114,"endColumn":18},"parent":1427,"type":"expr","id":1428,"text":"ArrayExpr"},{"type":"other","range":{"endRow":114,"endColumn":14,"startRow":114,"startColumn":13},"id":1429,"token":{"kind":"leftSquare","leadingTrivia":"","trailingTrivia":""},"structure":[],"text":"[","parent":1428},{"structure":[{"name":"Element","value":{"text":"ArrayElementSyntax"}},{"name":"Count","value":{"text":"1"}}],"range":{"endRow":114,"endColumn":17,"startRow":114,"startColumn":14},"parent":1428,"type":"collection","id":1430,"text":"ArrayElementList"},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"name":"expression","ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"range":{"startRow":114,"startColumn":14,"endColumn":17,"endRow":114},"parent":1430,"type":"other","id":1431,"text":"ArrayElement"},{"type":"expr","range":{"endRow":114,"endColumn":17,"startRow":114,"startColumn":14},"parent":1431,"text":"DeclReferenceExpr","id":1432,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("Int")","text":"Int"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"type":"other","range":{"startColumn":14,"endColumn":17,"startRow":114,"endRow":114},"id":1433,"token":{"leadingTrivia":"","kind":"identifier("Int")","trailingTrivia":""},"text":"Int","structure":[],"parent":1432},{"type":"other","range":{"startColumn":17,"endColumn":18,"startRow":114,"endRow":114},"id":1434,"token":{"leadingTrivia":"","kind":"rightSquare","trailingTrivia":""},"text":"]","structure":[],"parent":1428},{"type":"other","range":{"startColumn":18,"endColumn":19,"startRow":114,"endRow":114},"id":1435,"token":{"leadingTrivia":"","kind":"leftParen","trailingTrivia":""},"text":"(","structure":[],"parent":1427},{"type":"collection","range":{"startColumn":19,"endColumn":55,"startRow":114,"endRow":114},"parent":1427,"text":"LabeledExprList","id":1436,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"2"}}]},{"type":"other","range":{"endRow":114,"endColumn":32,"startRow":114,"startColumn":19},"parent":1436,"text":"LabeledExpr","id":1437,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"kind":"identifier("repeating")","text":"repeating"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":":","kind":"colon"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"kind":"comma","text":","},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}]},{"type":"other","id":1438,"range":{"startColumn":19,"startRow":114,"endRow":114,"endColumn":28},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("repeating")"},"text":"repeating","structure":[],"parent":1437},{"type":"other","id":1439,"range":{"startColumn":28,"startRow":114,"endRow":114,"endColumn":29},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"colon"},"text":":","structure":[],"parent":1437},{"type":"expr","parent":1437,"text":"IntegerLiteralExpr","id":1440,"range":{"startColumn":30,"startRow":114,"endRow":114,"endColumn":31},"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"0","kind":"integerLiteral("0")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}]},{"type":"other","id":1441,"range":{"startColumn":30,"endRow":114,"startRow":114,"endColumn":31},"token":{"kind":"integerLiteral("0")","leadingTrivia":"","trailingTrivia":""},"text":"0","structure":[],"parent":1440},{"type":"other","id":1442,"range":{"startColumn":31,"endRow":114,"startRow":114,"endColumn":32},"token":{"kind":"comma","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"text":",","structure":[],"parent":1437},{"type":"other","parent":1436,"text":"LabeledExpr","id":1443,"range":{"startColumn":33,"endRow":114,"startRow":114,"endColumn":55},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"count","kind":"identifier("count")"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"name":"colon","value":{"text":":","kind":"colon"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"InfixOperatorExprSyntax"},"ref":"InfixOperatorExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}]},{"type":"other","range":{"startColumn":33,"startRow":114,"endColumn":38,"endRow":114},"id":1444,"token":{"kind":"identifier("count")","leadingTrivia":"","trailingTrivia":""},"text":"count","structure":[],"parent":1443},{"type":"other","parent":1443,"text":":","range":{"startColumn":38,"startRow":114,"endColumn":39,"endRow":114},"token":{"kind":"colon","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"id":1445,"structure":[]},{"range":{"startColumn":40,"startRow":114,"endColumn":55,"endRow":114},"type":"expr","parent":1443,"id":1446,"text":"InfixOperatorExpr","structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"name":"leftOperand","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenLeftOperandAndOperator","value":{"text":"nil"}},{"name":"operator","ref":"BinaryOperatorExprSyntax","value":{"text":"BinaryOperatorExprSyntax"}},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"name":"rightOperand","ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}]},{"range":{"startColumn":40,"endRow":114,"endColumn":51,"startRow":114},"type":"expr","parent":1446,"id":1447,"text":"DeclReferenceExpr","structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("finalSquare")","text":"finalSquare"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"type":"other","parent":1447,"text":"finalSquare","range":{"startRow":114,"startColumn":40,"endColumn":51,"endRow":114},"token":{"leadingTrivia":"","kind":"identifier("finalSquare")","trailingTrivia":"␣<\/span>"},"structure":[],"id":1448},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOperator"},{"value":{"kind":"binaryOperator("+")","text":"+"},"name":"operator"},{"value":{"text":"nil"},"name":"unexpectedAfterOperator"}],"type":"expr","text":"BinaryOperatorExpr","range":{"startRow":114,"startColumn":52,"endColumn":53,"endRow":114},"id":1449,"parent":1446},{"type":"other","parent":1449,"text":"+","range":{"startColumn":52,"endRow":114,"endColumn":53,"startRow":114},"token":{"kind":"binaryOperator("+")","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"structure":[],"id":1450},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"kind":"integerLiteral("1")","text":"1"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr","text":"IntegerLiteralExpr","range":{"startColumn":54,"endRow":114,"endColumn":55,"startRow":114},"id":1451,"parent":1446},{"type":"other","parent":1451,"text":"1","range":{"startRow":114,"startColumn":54,"endColumn":55,"endRow":114},"token":{"leadingTrivia":"","kind":"integerLiteral("1")","trailingTrivia":""},"structure":[],"id":1452},{"type":"other","parent":1427,"text":")","range":{"startRow":114,"startColumn":55,"endColumn":56,"endRow":114},"token":{"leadingTrivia":"","kind":"rightParen","trailingTrivia":""},"structure":[],"id":1453},{"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"name":"Count","value":{"text":"0"}}],"type":"collection","text":"MultipleTrailingClosureElementList","range":{"startRow":114,"startColumn":56,"endColumn":56,"endRow":114},"id":1454,"parent":1427},{"text":"CodeBlockItem","parent":1,"range":{"endColumn":14,"endRow":115,"startRow":115,"startColumn":1},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"InfixOperatorExprSyntax"},"name":"item","ref":"InfixOperatorExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"id":1455,"type":"other"},{"text":"InfixOperatorExpr","parent":1455,"range":{"endRow":115,"startRow":115,"startColumn":1,"endColumn":14},"structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"name":"leftOperand","ref":"SubscriptCallExprSyntax","value":{"text":"SubscriptCallExprSyntax"}},{"name":"unexpectedBetweenLeftOperandAndOperator","value":{"text":"nil"}},{"name":"operator","ref":"AssignmentExprSyntax","value":{"text":"AssignmentExprSyntax"}},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"name":"rightOperand","ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}],"id":1456,"type":"expr"},{"text":"SubscriptCallExpr","parent":1456,"range":{"startRow":115,"startColumn":1,"endColumn":10,"endRow":115},"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftSquare"},{"value":{"text":"[","kind":"leftSquare"},"name":"leftSquare"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftSquareAndArguments"},{"ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"},"name":"arguments"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightSquare"},{"value":{"text":"]","kind":"rightSquare"},"name":"rightSquare"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightSquareAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"ref":"MultipleTrailingClosureElementListSyntax","value":{"text":"MultipleTrailingClosureElementListSyntax"},"name":"additionalTrailingClosures"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}],"id":1457,"type":"expr"},{"id":1458,"range":{"startColumn":1,"endColumn":6,"endRow":115,"startRow":115},"type":"expr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"board","kind":"identifier("board")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"text":"DeclReferenceExpr","parent":1457},{"type":"other","parent":1458,"text":"board","range":{"startColumn":1,"endRow":115,"startRow":115,"endColumn":6},"token":{"trailingTrivia":"","kind":"identifier("board")","leadingTrivia":"↲<\/span>"},"id":1459,"structure":[]},{"type":"other","parent":1457,"text":"[","range":{"startColumn":6,"startRow":115,"endRow":115,"endColumn":7},"token":{"trailingTrivia":"","kind":"leftSquare","leadingTrivia":""},"id":1460,"structure":[]},{"id":1461,"text":"LabeledExprList","type":"collection","range":{"startColumn":7,"startRow":115,"endRow":115,"endColumn":9},"parent":1457,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"id":1462,"text":"LabeledExpr","type":"other","range":{"endColumn":9,"startColumn":7,"endRow":115,"startRow":115},"parent":1461,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}]},{"id":1463,"text":"IntegerLiteralExpr","type":"expr","range":{"endColumn":9,"endRow":115,"startRow":115,"startColumn":7},"parent":1462,"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"03","kind":"integerLiteral("03")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}]},{"type":"other","parent":1463,"text":"03","range":{"endColumn":9,"startColumn":7,"endRow":115,"startRow":115},"token":{"kind":"integerLiteral("03")","leadingTrivia":"","trailingTrivia":""},"structure":[],"id":1464},{"type":"other","parent":1457,"text":"]","range":{"endColumn":10,"startColumn":9,"endRow":115,"startRow":115},"token":{"kind":"rightSquare","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"structure":[],"id":1465},{"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection","id":1466,"range":{"endColumn":11,"startColumn":11,"endRow":115,"startRow":115},"text":"MultipleTrailingClosureElementList","parent":1457},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeEqual"},{"value":{"kind":"equal","text":"="},"name":"equal"},{"value":{"text":"nil"},"name":"unexpectedAfterEqual"}],"type":"expr","id":1467,"range":{"endColumn":12,"startColumn":11,"endRow":115,"startRow":115},"text":"AssignmentExpr","parent":1456},{"type":"other","parent":1467,"text":"=","range":{"endColumn":12,"startRow":115,"startColumn":11,"endRow":115},"token":{"kind":"equal","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"structure":[],"id":1468},{"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"8","kind":"integerLiteral("8")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"type":"expr","id":1469,"range":{"endColumn":14,"startRow":115,"startColumn":13,"endRow":115},"text":"IntegerLiteralExpr","parent":1456},{"type":"other","parent":1469,"text":"8","range":{"endRow":115,"startRow":115,"startColumn":13,"endColumn":14},"token":{"trailingTrivia":"","leadingTrivia":"","kind":"integerLiteral("8")"},"structure":[],"id":1470},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"InfixOperatorExprSyntax","value":{"text":"InfixOperatorExprSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","id":1471,"range":{"endRow":116,"startRow":116,"startColumn":1,"endColumn":15},"text":"CodeBlockItem","parent":1},{"type":"expr","text":"InfixOperatorExpr","id":1472,"range":{"endRow":116,"startRow":116,"startColumn":1,"endColumn":15},"parent":1471,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftOperand"},{"value":{"text":"SubscriptCallExprSyntax"},"name":"leftOperand","ref":"SubscriptCallExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftOperandAndOperator"},{"value":{"text":"AssignmentExprSyntax"},"name":"operator","ref":"AssignmentExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenOperatorAndRightOperand"},{"value":{"text":"IntegerLiteralExprSyntax"},"name":"rightOperand","ref":"IntegerLiteralExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterRightOperand"}]},{"type":"expr","text":"SubscriptCallExpr","id":1473,"range":{"endRow":116,"startRow":116,"endColumn":10,"startColumn":1},"parent":1472,"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedBetweenCalledExpressionAndLeftSquare","value":{"text":"nil"}},{"name":"leftSquare","value":{"text":"[","kind":"leftSquare"}},{"name":"unexpectedBetweenLeftSquareAndArguments","value":{"text":"nil"}},{"name":"arguments","value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightSquare"},{"value":{"text":"]","kind":"rightSquare"},"name":"rightSquare"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightSquareAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"value":{"text":"MultipleTrailingClosureElementListSyntax"},"name":"additionalTrailingClosures","ref":"MultipleTrailingClosureElementListSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}]},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"board","kind":"identifier("board")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"range":{"startRow":116,"endRow":116,"endColumn":6,"startColumn":1},"parent":1473,"type":"expr","id":1474,"text":"DeclReferenceExpr"},{"type":"other","parent":1474,"text":"board","range":{"endColumn":6,"startColumn":1,"endRow":116,"startRow":116},"token":{"trailingTrivia":"","leadingTrivia":"↲<\/span>","kind":"identifier("board")"},"structure":[],"id":1475},{"type":"other","parent":1473,"text":"[","range":{"endColumn":7,"startColumn":6,"endRow":116,"startRow":116},"token":{"trailingTrivia":"","leadingTrivia":"","kind":"leftSquare"},"structure":[],"id":1476},{"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"range":{"endColumn":9,"startColumn":7,"endRow":116,"startRow":116},"parent":1473,"type":"collection","id":1477,"text":"LabeledExprList"},{"id":1478,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other","range":{"startColumn":7,"endColumn":9,"endRow":116,"startRow":116},"parent":1477,"text":"LabeledExpr"},{"id":1479,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"06","kind":"integerLiteral("06")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr","range":{"endColumn":9,"endRow":116,"startColumn":7,"startRow":116},"parent":1478,"text":"IntegerLiteralExpr"},{"type":"other","parent":1479,"text":"06","range":{"endRow":116,"startColumn":7,"startRow":116,"endColumn":9},"token":{"trailingTrivia":"","kind":"integerLiteral("06")","leadingTrivia":""},"id":1480,"structure":[]},{"type":"other","parent":1473,"text":"]","range":{"endRow":116,"startColumn":9,"startRow":116,"endColumn":10},"token":{"trailingTrivia":"␣<\/span>","kind":"rightSquare","leadingTrivia":""},"id":1481,"structure":[]},{"text":"MultipleTrailingClosureElementList","parent":1473,"range":{"startRow":116,"endRow":116,"startColumn":11,"endColumn":11},"type":"collection","id":1482,"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}]},{"text":"AssignmentExpr","parent":1472,"range":{"endColumn":12,"endRow":116,"startColumn":11,"startRow":116},"id":1483,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeEqual"},{"value":{"kind":"equal","text":"="},"name":"equal"},{"value":{"text":"nil"},"name":"unexpectedAfterEqual"}],"type":"expr"},{"type":"other","parent":1483,"text":"=","range":{"endRow":116,"endColumn":12,"startRow":116,"startColumn":11},"token":{"kind":"equal","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"id":1484,"structure":[]},{"text":"IntegerLiteralExpr","parent":1472,"range":{"endRow":116,"endColumn":15,"startRow":116,"startColumn":13},"id":1485,"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"11","kind":"integerLiteral("11")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"type":"expr"},{"type":"other","parent":1485,"text":"11","range":{"endColumn":15,"startRow":116,"startColumn":13,"endRow":116},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"integerLiteral("11")"},"id":1486,"structure":[]},{"text":"CodeBlockItem","parent":1,"range":{"endColumn":14,"startRow":117,"startColumn":1,"endRow":117},"id":1487,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"InfixOperatorExprSyntax"},"ref":"InfixOperatorExprSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"type":"other"},{"text":"InfixOperatorExpr","parent":1487,"range":{"endRow":117,"endColumn":14,"startRow":117,"startColumn":1},"id":1488,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftOperand"},{"ref":"SubscriptCallExprSyntax","value":{"text":"SubscriptCallExprSyntax"},"name":"leftOperand"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftOperandAndOperator"},{"ref":"AssignmentExprSyntax","value":{"text":"AssignmentExprSyntax"},"name":"operator"},{"value":{"text":"nil"},"name":"unexpectedBetweenOperatorAndRightOperand"},{"ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"},"name":"rightOperand"},{"value":{"text":"nil"},"name":"unexpectedAfterRightOperand"}],"type":"expr"},{"parent":1488,"range":{"endColumn":10,"startColumn":1,"endRow":117,"startRow":117},"id":1489,"text":"SubscriptCallExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"calledExpression"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftSquare"},{"value":{"text":"[","kind":"leftSquare"},"name":"leftSquare"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftSquareAndArguments"},{"ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"},"name":"arguments"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightSquare"},{"value":{"kind":"rightSquare","text":"]"},"name":"rightSquare"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightSquareAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"value":{"text":"MultipleTrailingClosureElementListSyntax"},"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}],"type":"expr"},{"text":"DeclReferenceExpr","structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("board")","text":"board"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"range":{"startColumn":1,"endColumn":6,"startRow":117,"endRow":117},"parent":1489,"type":"expr","id":1490},{"type":"other","parent":1490,"text":"board","range":{"endRow":117,"endColumn":6,"startColumn":1,"startRow":117},"token":{"trailingTrivia":"","kind":"identifier("board")","leadingTrivia":"↲<\/span>"},"structure":[],"id":1491},{"type":"other","parent":1489,"text":"[","range":{"endRow":117,"endColumn":7,"startColumn":6,"startRow":117},"token":{"trailingTrivia":"","kind":"leftSquare","leadingTrivia":""},"structure":[],"id":1492},{"text":"LabeledExprList","structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"range":{"endRow":117,"endColumn":9,"startColumn":7,"startRow":117},"parent":1489,"type":"collection","id":1493},{"text":"LabeledExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"IntegerLiteralExprSyntax"},"name":"expression","ref":"IntegerLiteralExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"range":{"startRow":117,"startColumn":7,"endColumn":9,"endRow":117},"parent":1493,"type":"other","id":1494},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"kind":"integerLiteral("09")","text":"09"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"range":{"endRow":117,"startRow":117,"endColumn":9,"startColumn":7},"type":"expr","text":"IntegerLiteralExpr","parent":1494,"id":1495},{"type":"other","parent":1495,"text":"09","range":{"endRow":117,"endColumn":9,"startRow":117,"startColumn":7},"token":{"kind":"integerLiteral("09")","trailingTrivia":"","leadingTrivia":""},"structure":[],"id":1496},{"type":"other","parent":1489,"text":"]","range":{"endRow":117,"endColumn":10,"startRow":117,"startColumn":9},"token":{"kind":"rightSquare","trailingTrivia":"␣<\/span>","leadingTrivia":""},"structure":[],"id":1497},{"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"range":{"endRow":117,"endColumn":11,"startRow":117,"startColumn":11},"type":"collection","text":"MultipleTrailingClosureElementList","parent":1489,"id":1498},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeEqual"},{"value":{"kind":"equal","text":"="},"name":"equal"},{"value":{"text":"nil"},"name":"unexpectedAfterEqual"}],"range":{"endRow":117,"endColumn":12,"startRow":117,"startColumn":11},"type":"expr","text":"AssignmentExpr","parent":1488,"id":1499},{"range":{"endRow":117,"startColumn":11,"endColumn":12,"startRow":117},"parent":1499,"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"equal"},"id":1500,"structure":[],"type":"other","text":"="},{"id":1501,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"kind":"integerLiteral("9")","text":"9"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr","text":"IntegerLiteralExpr","range":{"endRow":117,"startColumn":13,"endColumn":14,"startRow":117},"parent":1488},{"range":{"startRow":117,"startColumn":13,"endRow":117,"endColumn":14},"parent":1501,"token":{"kind":"integerLiteral("9")","leadingTrivia":"","trailingTrivia":""},"id":1502,"structure":[],"type":"other","text":"9"},{"id":1503,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"InfixOperatorExprSyntax"},"ref":"InfixOperatorExprSyntax","name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","text":"CodeBlockItem","range":{"startRow":118,"startColumn":1,"endRow":118,"endColumn":14},"parent":1},{"id":1504,"structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"name":"leftOperand","value":{"text":"SubscriptCallExprSyntax"},"ref":"SubscriptCallExprSyntax"},{"name":"unexpectedBetweenLeftOperandAndOperator","value":{"text":"nil"}},{"name":"operator","value":{"text":"AssignmentExprSyntax"},"ref":"AssignmentExprSyntax"},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"ref":"IntegerLiteralExprSyntax","name":"rightOperand","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}],"type":"expr","text":"InfixOperatorExpr","range":{"startColumn":1,"endRow":118,"endColumn":14,"startRow":118},"parent":1503},{"parent":1504,"text":"SubscriptCallExpr","range":{"endColumn":10,"startRow":118,"startColumn":1,"endRow":118},"type":"expr","structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftSquare","value":{"text":"nil"}},{"name":"leftSquare","value":{"kind":"leftSquare","text":"["}},{"name":"unexpectedBetweenLeftSquareAndArguments","value":{"text":"nil"}},{"ref":"LabeledExprListSyntax","name":"arguments","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightSquare","value":{"text":"nil"}},{"name":"rightSquare","value":{"text":"]","kind":"rightSquare"}},{"name":"unexpectedBetweenRightSquareAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"id":1505},{"parent":1505,"text":"DeclReferenceExpr","range":{"startRow":118,"endRow":118,"startColumn":1,"endColumn":6},"type":"expr","structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"board","kind":"identifier("board")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":1506},{"range":{"startColumn":1,"endRow":118,"endColumn":6,"startRow":118},"parent":1506,"token":{"kind":"identifier("board")","leadingTrivia":"↲<\/span>","trailingTrivia":""},"structure":[],"type":"other","text":"board","id":1507},{"range":{"startColumn":6,"endRow":118,"endColumn":7,"startRow":118},"parent":1505,"token":{"kind":"leftSquare","leadingTrivia":"","trailingTrivia":""},"structure":[],"type":"other","text":"[","id":1508},{"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection","parent":1505,"text":"LabeledExprList","range":{"startColumn":7,"endRow":118,"endColumn":9,"startRow":118},"id":1509},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other","parent":1509,"text":"LabeledExpr","range":{"startColumn":7,"endRow":118,"endColumn":9,"startRow":118},"id":1510},{"text":"IntegerLiteralExpr","parent":1510,"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"10","kind":"integerLiteral("10")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"range":{"endColumn":9,"endRow":118,"startRow":118,"startColumn":7},"type":"expr","id":1511},{"range":{"startRow":118,"endColumn":9,"startColumn":7,"endRow":118},"parent":1511,"token":{"kind":"integerLiteral("10")","leadingTrivia":"","trailingTrivia":""},"structure":[],"text":"10","type":"other","id":1512},{"range":{"startRow":118,"endColumn":10,"startColumn":9,"endRow":118},"parent":1505,"token":{"kind":"rightSquare","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"structure":[],"text":"]","type":"other","id":1513},{"text":"MultipleTrailingClosureElementList","parent":1505,"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"range":{"startRow":118,"endColumn":11,"startColumn":11,"endRow":118},"type":"collection","id":1514},{"text":"AssignmentExpr","parent":1504,"structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"text":"=","kind":"equal"}},{"name":"unexpectedAfterEqual","value":{"text":"nil"}}],"range":{"endRow":118,"startRow":118,"startColumn":11,"endColumn":12},"type":"expr","id":1515},{"range":{"startColumn":11,"endRow":118,"startRow":118,"endColumn":12},"parent":1515,"token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"equal"},"structure":[],"text":"=","type":"other","id":1516},{"parent":1504,"id":1517,"text":"IntegerLiteralExpr","type":"expr","range":{"startColumn":13,"endColumn":14,"endRow":118,"startRow":118},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"2","kind":"integerLiteral("2")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}]},{"range":{"startColumn":13,"endRow":118,"endColumn":14,"startRow":118},"parent":1517,"token":{"leadingTrivia":"","kind":"integerLiteral("2")","trailingTrivia":""},"id":1518,"text":"2","type":"other","structure":[]},{"text":"CodeBlockItem","range":{"startColumn":1,"endRow":119,"endColumn":16,"startRow":119},"type":"other","id":1519,"parent":1,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"InfixOperatorExprSyntax"},"ref":"InfixOperatorExprSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}]},{"text":"InfixOperatorExpr","range":{"startColumn":1,"endRow":119,"endColumn":16,"startRow":119},"type":"expr","id":1520,"parent":1519,"structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"ref":"SubscriptCallExprSyntax","name":"leftOperand","value":{"text":"SubscriptCallExprSyntax"}},{"name":"unexpectedBetweenLeftOperandAndOperator","value":{"text":"nil"}},{"ref":"AssignmentExprSyntax","name":"operator","value":{"text":"AssignmentExprSyntax"}},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"ref":"PrefixOperatorExprSyntax","name":"rightOperand","value":{"text":"PrefixOperatorExprSyntax"}},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}]},{"text":"SubscriptCallExpr","range":{"endRow":119,"endColumn":10,"startRow":119,"startColumn":1},"type":"expr","id":1521,"parent":1520,"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftSquare","value":{"text":"nil"}},{"name":"leftSquare","value":{"text":"[","kind":"leftSquare"}},{"name":"unexpectedBetweenLeftSquareAndArguments","value":{"text":"nil"}},{"ref":"LabeledExprListSyntax","name":"arguments","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightSquare","value":{"text":"nil"}},{"name":"rightSquare","value":{"kind":"rightSquare","text":"]"}},{"name":"unexpectedBetweenRightSquareAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}]},{"type":"expr","id":1522,"parent":1521,"range":{"startRow":119,"endRow":119,"endColumn":6,"startColumn":1},"text":"DeclReferenceExpr","structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"board","kind":"identifier("board")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}]},{"range":{"endColumn":6,"endRow":119,"startRow":119,"startColumn":1},"parent":1522,"token":{"kind":"identifier("board")","trailingTrivia":"","leadingTrivia":"↲<\/span>"},"structure":[],"text":"board","type":"other","id":1523},{"range":{"endColumn":7,"endRow":119,"startRow":119,"startColumn":6},"parent":1521,"token":{"kind":"leftSquare","trailingTrivia":"","leadingTrivia":""},"structure":[],"text":"[","type":"other","id":1524},{"text":"LabeledExprList","structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","id":1525,"parent":1521,"range":{"endColumn":9,"endRow":119,"startRow":119,"startColumn":7}},{"text":"LabeledExpr","structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"ref":"IntegerLiteralExprSyntax","name":"expression","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other","id":1526,"parent":1525,"range":{"startRow":119,"endRow":119,"startColumn":7,"endColumn":9}},{"text":"IntegerLiteralExpr","structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"14","kind":"integerLiteral("14")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"type":"expr","id":1527,"parent":1526,"range":{"endRow":119,"startColumn":7,"startRow":119,"endColumn":9}},{"range":{"endRow":119,"startRow":119,"startColumn":7,"endColumn":9},"parent":1527,"token":{"leadingTrivia":"","trailingTrivia":"","kind":"integerLiteral("14")"},"structure":[],"id":1528,"text":"14","type":"other"},{"range":{"endRow":119,"startRow":119,"startColumn":9,"endColumn":10},"parent":1521,"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"rightSquare"},"structure":[],"id":1529,"text":"]","type":"other"},{"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"parent":1521,"id":1530,"text":"MultipleTrailingClosureElementList","range":{"endRow":119,"startRow":119,"startColumn":11,"endColumn":11},"type":"collection"},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeEqual"},{"value":{"text":"=","kind":"equal"},"name":"equal"},{"value":{"text":"nil"},"name":"unexpectedAfterEqual"}],"parent":1520,"id":1531,"text":"AssignmentExpr","range":{"startRow":119,"endRow":119,"startColumn":11,"endColumn":12},"type":"expr"},{"range":{"startRow":119,"endRow":119,"startColumn":11,"endColumn":12},"parent":1531,"token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"equal"},"structure":[],"id":1532,"text":"=","type":"other"},{"structure":[{"name":"unexpectedBeforeOperator","value":{"text":"nil"}},{"name":"operator","value":{"text":"-","kind":"prefixOperator("-")"}},{"name":"unexpectedBetweenOperatorAndExpression","value":{"text":"nil"}},{"name":"expression","ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}],"parent":1520,"id":1533,"text":"PrefixOperatorExpr","range":{"startRow":119,"endRow":119,"startColumn":13,"endColumn":16},"type":"expr"},{"range":{"endRow":119,"endColumn":14,"startRow":119,"startColumn":13},"parent":1533,"token":{"trailingTrivia":"","leadingTrivia":"","kind":"prefixOperator("-")"},"structure":[],"type":"other","text":"-","id":1534},{"type":"expr","text":"IntegerLiteralExpr","structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"kind":"integerLiteral("10")","text":"10"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"id":1535,"parent":1533,"range":{"endRow":119,"endColumn":16,"startRow":119,"startColumn":14}},{"range":{"startRow":119,"endColumn":16,"startColumn":14,"endRow":119},"parent":1535,"token":{"trailingTrivia":"","kind":"integerLiteral("10")","leadingTrivia":""},"structure":[],"type":"other","text":"10","id":1536},{"type":"other","text":"CodeBlockItem","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"InfixOperatorExprSyntax"},"name":"item","ref":"InfixOperatorExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"id":1537,"parent":1,"range":{"startRow":120,"endColumn":16,"startColumn":1,"endRow":120}},{"type":"expr","text":"InfixOperatorExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftOperand"},{"value":{"text":"SubscriptCallExprSyntax"},"name":"leftOperand","ref":"SubscriptCallExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftOperandAndOperator"},{"value":{"text":"AssignmentExprSyntax"},"name":"operator","ref":"AssignmentExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenOperatorAndRightOperand"},{"value":{"text":"PrefixOperatorExprSyntax"},"ref":"PrefixOperatorExprSyntax","name":"rightOperand"},{"value":{"text":"nil"},"name":"unexpectedAfterRightOperand"}],"id":1538,"parent":1537,"range":{"startRow":120,"endColumn":16,"startColumn":1,"endRow":120}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"name":"calledExpression","ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftSquare"},{"value":{"kind":"leftSquare","text":"["},"name":"leftSquare"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftSquareAndArguments"},{"value":{"text":"LabeledExprListSyntax"},"name":"arguments","ref":"LabeledExprListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightSquare"},{"value":{"kind":"rightSquare","text":"]"},"name":"rightSquare"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightSquareAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"value":{"text":"MultipleTrailingClosureElementListSyntax"},"name":"additionalTrailingClosures","ref":"MultipleTrailingClosureElementListSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}],"id":1539,"text":"SubscriptCallExpr","parent":1538,"range":{"startColumn":1,"endColumn":10,"startRow":120,"endRow":120},"type":"expr"},{"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"board","kind":"identifier("board")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":1540,"text":"DeclReferenceExpr","parent":1539,"range":{"endColumn":6,"endRow":120,"startRow":120,"startColumn":1},"type":"expr"},{"range":{"startRow":120,"endColumn":6,"startColumn":1,"endRow":120},"parent":1540,"token":{"leadingTrivia":"↲<\/span>","kind":"identifier("board")","trailingTrivia":""},"id":1541,"text":"board","type":"other","structure":[]},{"range":{"startRow":120,"endColumn":7,"startColumn":6,"endRow":120},"parent":1539,"token":{"leadingTrivia":"","kind":"leftSquare","trailingTrivia":""},"id":1542,"text":"[","type":"other","structure":[]},{"id":1543,"parent":1539,"text":"LabeledExprList","type":"collection","structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"range":{"startRow":120,"endColumn":9,"startColumn":7,"endRow":120}},{"id":1544,"parent":1543,"text":"LabeledExpr","type":"other","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"range":{"endColumn":9,"endRow":120,"startColumn":7,"startRow":120}},{"parent":1544,"text":"IntegerLiteralExpr","range":{"endRow":120,"endColumn":9,"startColumn":7,"startRow":120},"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"19","kind":"integerLiteral("19")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"type":"expr","id":1545},{"range":{"endColumn":9,"startColumn":7,"startRow":120,"endRow":120},"parent":1545,"token":{"kind":"integerLiteral("19")","trailingTrivia":"","leadingTrivia":""},"structure":[],"text":"19","type":"other","id":1546},{"range":{"endColumn":10,"startColumn":9,"startRow":120,"endRow":120},"parent":1539,"token":{"kind":"rightSquare","trailingTrivia":"␣<\/span>","leadingTrivia":""},"structure":[],"text":"]","type":"other","id":1547},{"parent":1539,"text":"MultipleTrailingClosureElementList","range":{"endColumn":11,"startColumn":11,"startRow":120,"endRow":120},"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"type":"collection","id":1548},{"parent":1538,"text":"AssignmentExpr","range":{"endRow":120,"startColumn":11,"startRow":120,"endColumn":12},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeEqual"},{"value":{"kind":"equal","text":"="},"name":"equal"},{"value":{"text":"nil"},"name":"unexpectedAfterEqual"}],"type":"expr","id":1549},{"range":{"startColumn":11,"endColumn":12,"startRow":120,"endRow":120},"parent":1549,"token":{"kind":"equal","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"structure":[],"text":"=","type":"other","id":1550},{"parent":1538,"text":"PrefixOperatorExpr","range":{"startColumn":13,"endColumn":16,"startRow":120,"endRow":120},"structure":[{"name":"unexpectedBeforeOperator","value":{"text":"nil"}},{"name":"operator","value":{"text":"-","kind":"prefixOperator("-")"}},{"value":{"text":"nil"},"name":"unexpectedBetweenOperatorAndExpression"},{"value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedAfterExpression"}],"type":"expr","id":1551},{"range":{"endRow":120,"endColumn":14,"startRow":120,"startColumn":13},"parent":1551,"token":{"trailingTrivia":"","kind":"prefixOperator("-")","leadingTrivia":""},"id":1552,"text":"-","structure":[],"type":"other"},{"range":{"endRow":120,"endColumn":16,"startRow":120,"startColumn":14},"parent":1551,"text":"IntegerLiteralExpr","id":1553,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"11","kind":"integerLiteral("11")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr"},{"type":"other","token":{"leadingTrivia":"","trailingTrivia":"","kind":"integerLiteral("11")"},"parent":1553,"text":"11","structure":[],"range":{"startRow":120,"endRow":120,"startColumn":14,"endColumn":16},"id":1554},{"range":{"startRow":121,"endRow":121,"startColumn":1,"endColumn":15},"parent":1,"text":"CodeBlockItem","id":1555,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"InfixOperatorExprSyntax"},"name":"item","ref":"InfixOperatorExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other"},{"range":{"startRow":121,"startColumn":1,"endColumn":15,"endRow":121},"parent":1555,"text":"InfixOperatorExpr","id":1556,"structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"name":"leftOperand","ref":"SubscriptCallExprSyntax","value":{"text":"SubscriptCallExprSyntax"}},{"name":"unexpectedBetweenLeftOperandAndOperator","value":{"text":"nil"}},{"ref":"AssignmentExprSyntax","name":"operator","value":{"text":"AssignmentExprSyntax"}},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"ref":"PrefixOperatorExprSyntax","name":"rightOperand","value":{"text":"PrefixOperatorExprSyntax"}},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}],"type":"expr"},{"type":"expr","id":1557,"parent":1556,"text":"SubscriptCallExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"name":"calledExpression","ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftSquare"},{"value":{"text":"[","kind":"leftSquare"},"name":"leftSquare"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftSquareAndArguments"},{"value":{"text":"LabeledExprListSyntax"},"name":"arguments","ref":"LabeledExprListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightSquare"},{"value":{"kind":"rightSquare","text":"]"},"name":"rightSquare"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightSquareAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"value":{"text":"MultipleTrailingClosureElementListSyntax"},"name":"additionalTrailingClosures","ref":"MultipleTrailingClosureElementListSyntax"},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"range":{"startRow":121,"startColumn":1,"endColumn":10,"endRow":121}},{"text":"DeclReferenceExpr","type":"expr","range":{"endColumn":6,"startRow":121,"endRow":121,"startColumn":1},"id":1558,"parent":1557,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"board","kind":"identifier("board")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"type":"other","token":{"trailingTrivia":"","kind":"identifier("board")","leadingTrivia":"↲<\/span>"},"text":"board","parent":1558,"structure":[],"range":{"startRow":121,"endColumn":6,"startColumn":1,"endRow":121},"id":1559},{"type":"other","token":{"trailingTrivia":"","kind":"leftSquare","leadingTrivia":""},"text":"[","parent":1557,"structure":[],"range":{"startRow":121,"endColumn":7,"startColumn":6,"endRow":121},"id":1560},{"text":"LabeledExprList","type":"collection","range":{"startRow":121,"endColumn":9,"startColumn":7,"endRow":121},"id":1561,"parent":1557,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"text":"LabeledExpr","type":"other","range":{"startColumn":7,"endColumn":9,"endRow":121,"startRow":121},"id":1562,"parent":1561,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"IntegerLiteralExprSyntax"},"name":"expression","ref":"IntegerLiteralExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}]},{"text":"IntegerLiteralExpr","range":{"endRow":121,"endColumn":9,"startColumn":7,"startRow":121},"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"22","kind":"integerLiteral("22")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"type":"expr","id":1563,"parent":1562},{"type":"other","token":{"kind":"integerLiteral("22")","trailingTrivia":"","leadingTrivia":""},"text":"22","parent":1563,"structure":[],"range":{"startRow":121,"endRow":121,"endColumn":9,"startColumn":7},"id":1564},{"type":"other","token":{"kind":"rightSquare","trailingTrivia":"␣<\/span>","leadingTrivia":""},"text":"]","parent":1557,"structure":[],"range":{"startRow":121,"endRow":121,"endColumn":10,"startColumn":9},"id":1565},{"text":"MultipleTrailingClosureElementList","range":{"startRow":121,"endRow":121,"endColumn":11,"startColumn":11},"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"type":"collection","id":1566,"parent":1557},{"text":"AssignmentExpr","range":{"endRow":121,"endColumn":12,"startColumn":11,"startRow":121},"structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"kind":"equal","text":"="}},{"name":"unexpectedAfterEqual","value":{"text":"nil"}}],"type":"expr","id":1567,"parent":1556},{"type":"other","token":{"leadingTrivia":"","kind":"equal","trailingTrivia":"␣<\/span>"},"text":"=","parent":1567,"structure":[],"range":{"endColumn":12,"startRow":121,"startColumn":11,"endRow":121},"id":1568},{"id":1569,"parent":1556,"type":"expr","range":{"endRow":121,"endColumn":15,"startColumn":13,"startRow":121},"text":"PrefixOperatorExpr","structure":[{"name":"unexpectedBeforeOperator","value":{"text":"nil"}},{"name":"operator","value":{"kind":"prefixOperator("-")","text":"-"}},{"name":"unexpectedBetweenOperatorAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax"},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}]},{"type":"other","token":{"leadingTrivia":"","kind":"prefixOperator("-")","trailingTrivia":""},"parent":1569,"text":"-","structure":[],"range":{"startColumn":13,"startRow":121,"endRow":121,"endColumn":14},"id":1570},{"id":1571,"parent":1569,"type":"expr","range":{"startColumn":14,"startRow":121,"endRow":121,"endColumn":15},"text":"IntegerLiteralExpr","structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"kind":"integerLiteral("2")","text":"2"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}]},{"type":"other","token":{"leadingTrivia":"","kind":"integerLiteral("2")","trailingTrivia":""},"parent":1571,"text":"2","structure":[],"range":{"startRow":121,"startColumn":14,"endRow":121,"endColumn":15},"id":1572},{"id":1573,"parent":1,"type":"other","range":{"startRow":122,"startColumn":1,"endRow":122,"endColumn":15},"text":"CodeBlockItem","structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"InfixOperatorExprSyntax"},"ref":"InfixOperatorExprSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}]},{"id":1574,"parent":1573,"type":"expr","text":"InfixOperatorExpr","structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"ref":"SubscriptCallExprSyntax","name":"leftOperand","value":{"text":"SubscriptCallExprSyntax"}},{"name":"unexpectedBetweenLeftOperandAndOperator","value":{"text":"nil"}},{"ref":"AssignmentExprSyntax","name":"operator","value":{"text":"AssignmentExprSyntax"}},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"ref":"PrefixOperatorExprSyntax","name":"rightOperand","value":{"text":"PrefixOperatorExprSyntax"}},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}],"range":{"startColumn":1,"endRow":122,"endColumn":15,"startRow":122}},{"id":1575,"parent":1574,"type":"expr","text":"SubscriptCallExpr","structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftSquare","value":{"text":"nil"}},{"name":"leftSquare","value":{"text":"[","kind":"leftSquare"}},{"name":"unexpectedBetweenLeftSquareAndArguments","value":{"text":"nil"}},{"name":"arguments","ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightSquare","value":{"text":"nil"}},{"name":"rightSquare","value":{"kind":"rightSquare","text":"]"}},{"name":"unexpectedBetweenRightSquareAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"range":{"endColumn":10,"startRow":122,"startColumn":1,"endRow":122}},{"text":"DeclReferenceExpr","range":{"startColumn":1,"startRow":122,"endColumn":6,"endRow":122},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"board","kind":"identifier("board")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","id":1576,"parent":1575},{"type":"other","token":{"leadingTrivia":"↲<\/span>","kind":"identifier("board")","trailingTrivia":""},"text":"board","parent":1576,"structure":[],"range":{"startColumn":1,"startRow":122,"endRow":122,"endColumn":6},"id":1577},{"type":"other","token":{"leadingTrivia":"","kind":"leftSquare","trailingTrivia":""},"text":"[","parent":1575,"structure":[],"range":{"startColumn":6,"startRow":122,"endRow":122,"endColumn":7},"id":1578},{"text":"LabeledExprList","range":{"startColumn":7,"startRow":122,"endRow":122,"endColumn":9},"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","id":1579,"parent":1575},{"text":"LabeledExpr","range":{"startColumn":7,"endColumn":9,"endRow":122,"startRow":122},"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other","id":1580,"parent":1579},{"type":"expr","range":{"endColumn":9,"startColumn":7,"startRow":122,"endRow":122},"text":"IntegerLiteralExpr","structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"24","kind":"integerLiteral("24")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"id":1581,"parent":1580},{"type":"other","token":{"trailingTrivia":"","leadingTrivia":"","kind":"integerLiteral("24")"},"text":"24","parent":1581,"structure":[],"range":{"startColumn":7,"startRow":122,"endColumn":9,"endRow":122},"id":1582},{"type":"other","token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"rightSquare"},"text":"]","parent":1575,"structure":[],"range":{"startColumn":9,"startRow":122,"endColumn":10,"endRow":122},"id":1583},{"type":"collection","range":{"startColumn":11,"startRow":122,"endColumn":11,"endRow":122},"text":"MultipleTrailingClosureElementList","structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"id":1584,"parent":1575},{"type":"expr","range":{"endColumn":12,"endRow":122,"startRow":122,"startColumn":11},"text":"AssignmentExpr","structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"text":"=","kind":"equal"}},{"name":"unexpectedAfterEqual","value":{"text":"nil"}}],"id":1585,"parent":1574},{"type":"other","token":{"trailingTrivia":"␣<\/span>","kind":"equal","leadingTrivia":""},"text":"=","parent":1585,"structure":[],"range":{"endRow":122,"startColumn":11,"endColumn":12,"startRow":122},"id":1586},{"text":"PrefixOperatorExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOperator"},{"value":{"kind":"prefixOperator("-")","text":"-"},"name":"operator"},{"value":{"text":"nil"},"name":"unexpectedBetweenOperatorAndExpression"},{"value":{"text":"IntegerLiteralExprSyntax"},"name":"expression","ref":"IntegerLiteralExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterExpression"}],"range":{"endRow":122,"startColumn":13,"endColumn":15,"startRow":122},"type":"expr","parent":1574,"id":1587},{"type":"other","token":{"kind":"prefixOperator("-")","trailingTrivia":"","leadingTrivia":""},"text":"-","parent":1587,"structure":[],"range":{"endColumn":14,"startColumn":13,"endRow":122,"startRow":122},"id":1588},{"text":"IntegerLiteralExpr","structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"kind":"integerLiteral("8")","text":"8"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"range":{"endColumn":15,"startColumn":14,"endRow":122,"startRow":122},"type":"expr","parent":1587,"id":1589},{"type":"other","token":{"kind":"integerLiteral("8")","leadingTrivia":"","trailingTrivia":""},"text":"8","parent":1589,"structure":[],"range":{"startRow":122,"endColumn":15,"endRow":122,"startColumn":14},"id":1590},{"text":"CodeBlockItem","structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","ref":"VariableDeclSyntax","value":{"text":"VariableDeclSyntax"}},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"range":{"startRow":124,"endColumn":15,"endRow":124,"startColumn":1},"type":"other","parent":1,"id":1591},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttributes"},{"ref":"AttributeListSyntax","value":{"text":"AttributeListSyntax"},"name":"attributes"},{"value":{"text":"nil"},"name":"unexpectedBetweenAttributesAndModifiers"},{"ref":"DeclModifierListSyntax","value":{"text":"DeclModifierListSyntax"},"name":"modifiers"},{"value":{"text":"nil"},"name":"unexpectedBetweenModifiersAndBindingSpecifier"},{"value":{"text":"var","kind":"keyword(SwiftSyntax.Keyword.var)"},"name":"bindingSpecifier"},{"value":{"text":"nil"},"name":"unexpectedBetweenBindingSpecifierAndBindings"},{"ref":"PatternBindingListSyntax","value":{"text":"PatternBindingListSyntax"},"name":"bindings"},{"value":{"text":"nil"},"name":"unexpectedAfterBindings"}],"type":"decl","id":1592,"text":"VariableDecl","parent":1591,"range":{"endRow":124,"endColumn":15,"startRow":124,"startColumn":1}},{"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection","id":1593,"text":"AttributeList","parent":1592,"range":{"endColumn":15,"startColumn":15,"startRow":122,"endRow":122}},{"structure":[{"value":{"text":"DeclModifierSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection","id":1594,"text":"DeclModifierList","parent":1592,"range":{"startColumn":15,"startRow":122,"endColumn":15,"endRow":122}},{"type":"other","token":{"leadingTrivia":"↲<\/span>↲<\/span>","kind":"keyword(SwiftSyntax.Keyword.var)","trailingTrivia":"␣<\/span>"},"parent":1592,"text":"var","structure":[],"range":{"startColumn":1,"endRow":124,"startRow":124,"endColumn":4},"id":1595},{"parent":1592,"id":1596,"text":"PatternBindingList","structure":[{"name":"Element","value":{"text":"PatternBindingSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection","range":{"startColumn":5,"endRow":124,"startRow":124,"endColumn":15}},{"parent":1596,"id":1597,"text":"PatternBinding","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"ref":"IdentifierPatternSyntax","value":{"text":"IdentifierPatternSyntax"},"name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTypeAnnotation"},{"value":{"text":"nil"},"name":"typeAnnotation"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAnnotationAndInitializer"},{"ref":"InitializerClauseSyntax","value":{"text":"InitializerClauseSyntax"},"name":"initializer"},{"value":{"text":"nil"},"name":"unexpectedBetweenInitializerAndAccessorBlock"},{"value":{"text":"nil"},"name":"accessorBlock"},{"value":{"text":"nil"},"name":"unexpectedBetweenAccessorBlockAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","range":{"startRow":124,"startColumn":5,"endRow":124,"endColumn":15}},{"parent":1597,"id":1598,"text":"IdentifierPattern","structure":[{"name":"unexpectedBeforeIdentifier","value":{"text":"nil"}},{"name":"identifier","value":{"text":"square","kind":"identifier("square")"}},{"name":"unexpectedAfterIdentifier","value":{"text":"nil"}}],"type":"pattern","range":{"endRow":124,"startColumn":5,"startRow":124,"endColumn":11}},{"type":"other","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"identifier("square")"},"parent":1598,"text":"square","structure":[],"range":{"endRow":124,"startColumn":5,"endColumn":11,"startRow":124},"id":1599},{"structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"text":"=","kind":"equal"}},{"name":"unexpectedBetweenEqualAndValue","value":{"text":"nil"}},{"name":"value","value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax"},{"name":"unexpectedAfterValue","value":{"text":"nil"}}],"parent":1597,"type":"other","id":1600,"range":{"endRow":124,"startColumn":12,"endColumn":15,"startRow":124},"text":"InitializerClause"},{"type":"other","token":{"trailingTrivia":"␣<\/span>","kind":"equal","leadingTrivia":""},"parent":1600,"text":"=","structure":[],"range":{"startRow":124,"endColumn":13,"startColumn":12,"endRow":124},"id":1601},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"0","kind":"integerLiteral("0")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"parent":1600,"type":"expr","id":1602,"range":{"startRow":124,"endColumn":15,"startColumn":14,"endRow":124},"text":"IntegerLiteralExpr"},{"type":"other","token":{"kind":"integerLiteral("0")","leadingTrivia":"","trailingTrivia":""},"parent":1602,"text":"0","structure":[],"range":{"startColumn":14,"endColumn":15,"startRow":124,"endRow":124},"id":1603},{"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"VariableDeclSyntax","name":"item","value":{"text":"VariableDeclSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"parent":1,"type":"other","id":1604,"range":{"startColumn":1,"endColumn":17,"startRow":125,"endRow":125},"text":"CodeBlockItem"},{"parent":1604,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","value":{"text":"AttributeListSyntax"},"ref":"AttributeListSyntax"},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax"},{"name":"unexpectedBetweenModifiersAndBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"kind":"keyword(SwiftSyntax.Keyword.var)","text":"var"}},{"name":"unexpectedBetweenBindingSpecifierAndBindings","value":{"text":"nil"}},{"name":"bindings","value":{"text":"PatternBindingListSyntax"},"ref":"PatternBindingListSyntax"},{"name":"unexpectedAfterBindings","value":{"text":"nil"}}],"text":"VariableDecl","range":{"endRow":125,"startColumn":1,"endColumn":17,"startRow":125},"id":1605,"type":"decl"},{"parent":1605,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"text":"AttributeList","range":{"startColumn":15,"startRow":124,"endRow":124,"endColumn":15},"id":1606,"type":"collection"},{"parent":1605,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"text":"DeclModifierList","range":{"endColumn":15,"startColumn":15,"startRow":124,"endRow":124},"id":1607,"type":"collection"},{"type":"other","token":{"trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.var)","leadingTrivia":"↲<\/span>"},"text":"var","parent":1605,"structure":[],"range":{"endColumn":4,"endRow":125,"startRow":125,"startColumn":1},"id":1608},{"text":"PatternBindingList","parent":1605,"structure":[{"name":"Element","value":{"text":"PatternBindingSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection","id":1609,"range":{"endColumn":17,"endRow":125,"startRow":125,"startColumn":5}},{"text":"PatternBinding","parent":1609,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"ref":"IdentifierPatternSyntax","value":{"text":"IdentifierPatternSyntax"},"name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTypeAnnotation"},{"value":{"text":"nil"},"name":"typeAnnotation"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAnnotationAndInitializer"},{"ref":"InitializerClauseSyntax","value":{"text":"InitializerClauseSyntax"},"name":"initializer"},{"value":{"text":"nil"},"name":"unexpectedBetweenInitializerAndAccessorBlock"},{"value":{"text":"nil"},"name":"accessorBlock"},{"value":{"text":"nil"},"name":"unexpectedBetweenAccessorBlockAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","id":1610,"range":{"startRow":125,"endRow":125,"startColumn":5,"endColumn":17}},{"id":1611,"parent":1610,"text":"IdentifierPattern","range":{"endColumn":13,"startColumn":5,"startRow":125,"endRow":125},"type":"pattern","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"kind":"identifier("diceRoll")","text":"diceRoll"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}]},{"type":"other","token":{"trailingTrivia":"␣<\/span>","kind":"identifier("diceRoll")","leadingTrivia":""},"parent":1611,"text":"diceRoll","structure":[],"range":{"startRow":125,"endColumn":13,"endRow":125,"startColumn":5},"id":1612},{"id":1613,"parent":1610,"text":"InitializerClause","range":{"startRow":125,"endColumn":17,"endRow":125,"startColumn":14},"type":"other","structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"kind":"equal","text":"="}},{"name":"unexpectedBetweenEqualAndValue","value":{"text":"nil"}},{"name":"value","ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedAfterValue","value":{"text":"nil"}}]},{"parent":1613,"text":"=","structure":[],"range":{"endColumn":15,"startColumn":14,"startRow":125,"endRow":125},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"equal"},"id":1614,"type":"other"},{"id":1615,"parent":1613,"text":"IntegerLiteralExpr","range":{"endColumn":17,"startColumn":16,"startRow":125,"endRow":125},"type":"expr","structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"0","kind":"integerLiteral("0")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}]},{"parent":1615,"text":"0","structure":[],"range":{"endColumn":17,"startRow":125,"startColumn":16,"endRow":125},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"integerLiteral("0")"},"id":1616,"type":"other"},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"WhileStmtSyntax"},"name":"item","ref":"WhileStmtSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","range":{"startRow":126,"endColumn":2,"endRow":138,"startColumn":1},"id":1617,"parent":1,"text":"CodeBlockItem"},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeWhileKeyword"},{"value":{"text":"while","kind":"keyword(SwiftSyntax.Keyword.while)"},"name":"whileKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenWhileKeywordAndConditions"},{"value":{"text":"ConditionElementListSyntax"},"ref":"ConditionElementListSyntax","name":"conditions"},{"value":{"text":"nil"},"name":"unexpectedBetweenConditionsAndBody"},{"value":{"text":"CodeBlockSyntax"},"ref":"CodeBlockSyntax","name":"body"},{"value":{"text":"nil"},"name":"unexpectedAfterBody"}],"type":"other","range":{"endRow":138,"startRow":126,"endColumn":2,"startColumn":1},"id":1618,"parent":1617,"text":"WhileStmt"},{"parent":1618,"structure":[],"text":"while","range":{"endRow":126,"startRow":126,"startColumn":1,"endColumn":6},"token":{"kind":"keyword(SwiftSyntax.Keyword.while)","leadingTrivia":"↲<\/span>","trailingTrivia":"␣<\/span>"},"id":1619,"type":"other"},{"structure":[{"name":"Element","value":{"text":"ConditionElementSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection","range":{"endRow":126,"startRow":126,"startColumn":7,"endColumn":28},"id":1620,"parent":1618,"text":"ConditionElementList"},{"structure":[{"name":"unexpectedBeforeCondition","value":{"text":"nil"}},{"name":"condition","ref":"InfixOperatorExprSyntax","value":{"text":"InfixOperatorExprSyntax"}},{"name":"unexpectedBetweenConditionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other","range":{"startRow":126,"startColumn":7,"endRow":126,"endColumn":28},"id":1621,"parent":1620,"text":"ConditionElement"},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftOperand"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"leftOperand"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftOperandAndOperator"},{"ref":"BinaryOperatorExprSyntax","value":{"text":"BinaryOperatorExprSyntax"},"name":"operator"},{"value":{"text":"nil"},"name":"unexpectedBetweenOperatorAndRightOperand"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"rightOperand"},{"value":{"text":"nil"},"name":"unexpectedAfterRightOperand"}],"parent":1621,"id":1622,"text":"InfixOperatorExpr","range":{"endRow":126,"endColumn":28,"startRow":126,"startColumn":7},"type":"expr"},{"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("square")","text":"square"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"parent":1622,"id":1623,"text":"DeclReferenceExpr","range":{"startRow":126,"endColumn":13,"endRow":126,"startColumn":7},"type":"expr"},{"parent":1623,"structure":[],"text":"square","range":{"endColumn":13,"startColumn":7,"startRow":126,"endRow":126},"token":{"trailingTrivia":"␣<\/span>","kind":"identifier("square")","leadingTrivia":""},"id":1624,"type":"other"},{"structure":[{"name":"unexpectedBeforeOperator","value":{"text":"nil"}},{"name":"operator","value":{"kind":"binaryOperator("!=")","text":"!="}},{"name":"unexpectedAfterOperator","value":{"text":"nil"}}],"range":{"endColumn":16,"startColumn":14,"startRow":126,"endRow":126},"parent":1622,"text":"BinaryOperatorExpr","id":1625,"type":"expr"},{"parent":1625,"structure":[],"text":"!=","range":{"startRow":126,"endColumn":16,"startColumn":14,"endRow":126},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"binaryOperator("!=")"},"id":1626,"type":"other"},{"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("finalSquare")","text":"finalSquare"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"range":{"startRow":126,"endColumn":28,"startColumn":17,"endRow":126},"parent":1622,"text":"DeclReferenceExpr","id":1627,"type":"expr"},{"parent":1627,"structure":[],"text":"finalSquare","range":{"startRow":126,"startColumn":17,"endColumn":28,"endRow":126},"token":{"leadingTrivia":"","kind":"identifier("finalSquare")","trailingTrivia":"␣<\/span>"},"id":1628,"type":"other"},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftBrace"},{"value":{"kind":"leftBrace","text":"{"},"name":"leftBrace"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftBraceAndStatements"},{"ref":"CodeBlockItemListSyntax","name":"statements","value":{"text":"CodeBlockItemListSyntax"}},{"name":"unexpectedBetweenStatementsAndRightBrace","value":{"text":"nil"}},{"name":"rightBrace","value":{"text":"}","kind":"rightBrace"}},{"name":"unexpectedAfterRightBrace","value":{"text":"nil"}}],"range":{"startRow":126,"startColumn":29,"endColumn":2,"endRow":138},"parent":1618,"text":"CodeBlock","id":1629,"type":"other"},{"parent":1629,"structure":[],"text":"{","range":{"startColumn":29,"endColumn":30,"startRow":126,"endRow":126},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftBrace"},"id":1630,"type":"other"},{"structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"3"},"name":"Count"}],"text":"CodeBlockItemList","id":1631,"parent":1629,"range":{"startColumn":5,"endColumn":6,"startRow":127,"endRow":137},"type":"collection"},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"InfixOperatorExprSyntax","value":{"text":"InfixOperatorExprSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"text":"CodeBlockItem","id":1632,"parent":1631,"range":{"startColumn":5,"endRow":127,"startRow":127,"endColumn":18},"type":"other"},{"structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"name":"leftOperand","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenLeftOperandAndOperator","value":{"text":"nil"}},{"ref":"BinaryOperatorExprSyntax","name":"operator","value":{"text":"BinaryOperatorExprSyntax"}},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"ref":"IntegerLiteralExprSyntax","name":"rightOperand","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}],"text":"InfixOperatorExpr","id":1633,"parent":1632,"range":{"startRow":127,"endRow":127,"endColumn":18,"startColumn":5},"type":"expr"},{"type":"expr","id":1634,"range":{"endRow":127,"endColumn":13,"startRow":127,"startColumn":5},"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"diceRoll","kind":"identifier("diceRoll")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"text":"DeclReferenceExpr","parent":1633},{"parent":1634,"structure":[],"text":"diceRoll","range":{"endRow":127,"startColumn":5,"startRow":127,"endColumn":13},"token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","kind":"identifier("diceRoll")"},"id":1635,"type":"other"},{"type":"expr","id":1636,"range":{"endRow":127,"startColumn":14,"startRow":127,"endColumn":16},"structure":[{"name":"unexpectedBeforeOperator","value":{"text":"nil"}},{"name":"operator","value":{"text":"+=","kind":"binaryOperator("+=")"}},{"name":"unexpectedAfterOperator","value":{"text":"nil"}}],"text":"BinaryOperatorExpr","parent":1633},{"parent":1636,"structure":[],"text":"+=","range":{"startRow":127,"endColumn":16,"startColumn":14,"endRow":127},"token":{"kind":"binaryOperator("+=")","trailingTrivia":"␣<\/span>","leadingTrivia":""},"id":1637,"type":"other"},{"range":{"startRow":127,"startColumn":17,"endRow":127,"endColumn":18},"parent":1633,"text":"IntegerLiteralExpr","type":"expr","id":1638,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"name":"literal","value":{"text":"1","kind":"integerLiteral("1")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}]},{"parent":1638,"structure":[],"text":"1","range":{"endColumn":18,"startRow":127,"startColumn":17,"endRow":127},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"integerLiteral("1")"},"id":1639,"type":"other"},{"id":1640,"range":{"endColumn":38,"startRow":128,"startColumn":5,"endRow":128},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"ExpressionStmtSyntax"},"name":"item","ref":"ExpressionStmtSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"text":"CodeBlockItem","parent":1631,"type":"other"},{"id":1641,"range":{"endColumn":38,"startColumn":5,"endRow":128,"startRow":128},"structure":[{"name":"unexpectedBeforeExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"IfExprSyntax"},"ref":"IfExprSyntax"},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}],"text":"ExpressionStmt","parent":1640,"type":"other"},{"id":1642,"range":{"endColumn":38,"startRow":128,"endRow":128,"startColumn":5},"structure":[{"name":"unexpectedBeforeIfKeyword","value":{"text":"nil"}},{"name":"ifKeyword","value":{"text":"if","kind":"keyword(SwiftSyntax.Keyword.if)"}},{"name":"unexpectedBetweenIfKeywordAndConditions","value":{"text":"nil"}},{"name":"conditions","ref":"ConditionElementListSyntax","value":{"text":"ConditionElementListSyntax"}},{"name":"unexpectedBetweenConditionsAndBody","value":{"text":"nil"}},{"name":"body","value":{"text":"CodeBlockSyntax"},"ref":"CodeBlockSyntax"},{"name":"unexpectedBetweenBodyAndElseKeyword","value":{"text":"nil"}},{"name":"elseKeyword","value":{"text":"nil"}},{"name":"unexpectedBetweenElseKeywordAndElseBody","value":{"text":"nil"}},{"name":"elseBody","value":{"text":"nil"}},{"name":"unexpectedAfterElseBody","value":{"text":"nil"}}],"text":"IfExpr","parent":1641,"type":"expr"},{"parent":1642,"text":"if","structure":[],"range":{"startColumn":5,"endColumn":7,"startRow":128,"endRow":128},"token":{"kind":"keyword(SwiftSyntax.Keyword.if)","trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"id":1643,"type":"other"},{"parent":1642,"text":"ConditionElementList","structure":[{"value":{"text":"ConditionElementSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"id":1644,"range":{"startColumn":8,"endColumn":21,"startRow":128,"endRow":128},"type":"collection"},{"parent":1644,"text":"ConditionElement","structure":[{"name":"unexpectedBeforeCondition","value":{"text":"nil"}},{"name":"condition","value":{"text":"InfixOperatorExprSyntax"},"ref":"InfixOperatorExprSyntax"},{"name":"unexpectedBetweenConditionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":1645,"range":{"endColumn":21,"startColumn":8,"startRow":128,"endRow":128},"type":"other"},{"parent":1645,"text":"InfixOperatorExpr","structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"name":"leftOperand","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenLeftOperandAndOperator","value":{"text":"nil"}},{"name":"operator","ref":"BinaryOperatorExprSyntax","value":{"text":"BinaryOperatorExprSyntax"}},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"name":"rightOperand","ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}],"id":1646,"range":{"startColumn":8,"endRow":128,"startRow":128,"endColumn":21},"type":"expr"},{"id":1647,"parent":1646,"text":"DeclReferenceExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"diceRoll","kind":"identifier("diceRoll")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","range":{"endColumn":16,"startRow":128,"startColumn":8,"endRow":128}},{"parent":1647,"text":"diceRoll","structure":[],"range":{"endColumn":16,"endRow":128,"startRow":128,"startColumn":8},"token":{"kind":"identifier("diceRoll")","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"id":1648,"type":"other"},{"id":1649,"parent":1646,"text":"BinaryOperatorExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOperator"},{"value":{"kind":"binaryOperator("==")","text":"=="},"name":"operator"},{"value":{"text":"nil"},"name":"unexpectedAfterOperator"}],"type":"expr","range":{"endColumn":19,"endRow":128,"startRow":128,"startColumn":17}},{"parent":1649,"text":"==","structure":[],"range":{"startColumn":17,"startRow":128,"endRow":128,"endColumn":19},"token":{"trailingTrivia":"␣<\/span>","kind":"binaryOperator("==")","leadingTrivia":""},"id":1650,"type":"other"},{"text":"IntegerLiteralExpr","parent":1646,"id":1651,"type":"expr","range":{"startColumn":20,"startRow":128,"endRow":128,"endColumn":21},"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"kind":"integerLiteral("7")","text":"7"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}]},{"parent":1651,"text":"7","structure":[],"range":{"endColumn":21,"endRow":128,"startColumn":20,"startRow":128},"token":{"kind":"integerLiteral("7")","trailingTrivia":"␣<\/span>","leadingTrivia":""},"id":1652,"type":"other"},{"text":"CodeBlock","parent":1642,"id":1653,"type":"other","range":{"endColumn":38,"endRow":128,"startColumn":22,"startRow":128},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftBrace"},{"value":{"kind":"leftBrace","text":"{"},"name":"leftBrace"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftBraceAndStatements"},{"value":{"text":"CodeBlockItemListSyntax"},"name":"statements","ref":"CodeBlockItemListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenStatementsAndRightBrace"},{"value":{"kind":"rightBrace","text":"}"},"name":"rightBrace"},{"value":{"text":"nil"},"name":"unexpectedAfterRightBrace"}]},{"parent":1653,"text":"{","structure":[],"range":{"endRow":128,"startColumn":22,"startRow":128,"endColumn":23},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"leftBrace"},"id":1654,"type":"other"},{"text":"CodeBlockItemList","parent":1653,"id":1655,"type":"collection","range":{"endRow":128,"startColumn":24,"startRow":128,"endColumn":36},"structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}]},{"id":1656,"text":"CodeBlockItem","range":{"startRow":128,"endRow":128,"startColumn":24,"endColumn":36},"parent":1655,"type":"other","structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"InfixOperatorExprSyntax","name":"item","value":{"text":"InfixOperatorExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}]},{"id":1657,"text":"InfixOperatorExpr","range":{"startColumn":24,"startRow":128,"endRow":128,"endColumn":36},"parent":1656,"type":"expr","structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"leftOperand","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenLeftOperandAndOperator","value":{"text":"nil"}},{"ref":"AssignmentExprSyntax","name":"operator","value":{"text":"AssignmentExprSyntax"}},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"ref":"IntegerLiteralExprSyntax","name":"rightOperand","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}]},{"id":1658,"text":"DeclReferenceExpr","range":{"startColumn":24,"endRow":128,"endColumn":32,"startRow":128},"parent":1657,"type":"expr","structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"diceRoll","kind":"identifier("diceRoll")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}]},{"parent":1658,"structure":[],"text":"diceRoll","range":{"endRow":128,"startColumn":24,"startRow":128,"endColumn":32},"token":{"leadingTrivia":"","kind":"identifier("diceRoll")","trailingTrivia":"␣<\/span>"},"id":1659,"type":"other"},{"structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"kind":"equal","text":"="}},{"name":"unexpectedAfterEqual","value":{"text":"nil"}}],"type":"expr","range":{"endRow":128,"startColumn":33,"startRow":128,"endColumn":34},"id":1660,"text":"AssignmentExpr","parent":1657},{"parent":1660,"structure":[],"text":"=","range":{"endColumn":34,"startRow":128,"endRow":128,"startColumn":33},"token":{"leadingTrivia":"","kind":"equal","trailingTrivia":"␣<\/span>"},"id":1661,"type":"other"},{"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"kind":"integerLiteral("1")","text":"1"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"type":"expr","range":{"endColumn":36,"startRow":128,"endRow":128,"startColumn":35},"id":1662,"text":"IntegerLiteralExpr","parent":1657},{"parent":1662,"structure":[],"text":"1","range":{"endRow":128,"endColumn":36,"startRow":128,"startColumn":35},"token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"integerLiteral("1")"},"id":1663,"type":"other"},{"parent":1653,"structure":[],"text":"}","range":{"endRow":128,"endColumn":38,"startRow":128,"startColumn":37},"token":{"trailingTrivia":"","leadingTrivia":"","kind":"rightBrace"},"id":1664,"type":"other"},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"ExpressionStmtSyntax"},"name":"item","ref":"ExpressionStmtSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","range":{"endRow":137,"endColumn":6,"startRow":129,"startColumn":5},"id":1665,"text":"CodeBlockItem","parent":1631},{"id":1666,"parent":1665,"text":"ExpressionStmt","structure":[{"name":"unexpectedBeforeExpression","value":{"text":"nil"}},{"name":"expression","ref":"SwitchExprSyntax","value":{"text":"SwitchExprSyntax"}},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}],"type":"other","range":{"startColumn":5,"endColumn":6,"startRow":129,"endRow":137}},{"id":1667,"parent":1666,"text":"SwitchExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeSwitchKeyword"},{"value":{"text":"switch","kind":"keyword(SwiftSyntax.Keyword.switch)"},"name":"switchKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenSwitchKeywordAndSubject"},{"ref":"InfixOperatorExprSyntax","value":{"text":"InfixOperatorExprSyntax"},"name":"subject"},{"value":{"text":"nil"},"name":"unexpectedBetweenSubjectAndLeftBrace"},{"value":{"kind":"leftBrace","text":"{"},"name":"leftBrace"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftBraceAndCases"},{"ref":"SwitchCaseListSyntax","value":{"text":"SwitchCaseListSyntax"},"name":"cases"},{"value":{"text":"nil"},"name":"unexpectedBetweenCasesAndRightBrace"},{"value":{"kind":"rightBrace","text":"}"},"name":"rightBrace"},{"value":{"text":"nil"},"name":"unexpectedAfterRightBrace"}],"type":"expr","range":{"endRow":137,"startColumn":5,"endColumn":6,"startRow":129}},{"parent":1667,"text":"switch","structure":[],"range":{"endColumn":11,"startColumn":5,"startRow":129,"endRow":129},"token":{"kind":"keyword(SwiftSyntax.Keyword.switch)","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"␣<\/span>"},"id":1668,"type":"other"},{"text":"InfixOperatorExpr","type":"expr","structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"name":"leftOperand","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenLeftOperandAndOperator","value":{"text":"nil"}},{"name":"operator","ref":"BinaryOperatorExprSyntax","value":{"text":"BinaryOperatorExprSyntax"}},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"name":"rightOperand","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}],"id":1669,"parent":1667,"range":{"endColumn":29,"startColumn":12,"startRow":129,"endRow":129}},{"text":"DeclReferenceExpr","type":"expr","structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"square","kind":"identifier("square")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":1670,"parent":1669,"range":{"endColumn":18,"startColumn":12,"endRow":129,"startRow":129}},{"parent":1670,"text":"square","structure":[],"range":{"endRow":129,"endColumn":18,"startRow":129,"startColumn":12},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"identifier("square")"},"id":1671,"type":"other"},{"text":"BinaryOperatorExpr","type":"expr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOperator"},{"value":{"kind":"binaryOperator("+")","text":"+"},"name":"operator"},{"value":{"text":"nil"},"name":"unexpectedAfterOperator"}],"id":1672,"parent":1669,"range":{"startColumn":19,"endColumn":20,"startRow":129,"endRow":129}},{"structure":[],"token":{"kind":"binaryOperator("+")","trailingTrivia":"␣<\/span>","leadingTrivia":""},"parent":1672,"id":1673,"range":{"startColumn":19,"endColumn":20,"startRow":129,"endRow":129},"text":"+","type":"other"},{"id":1674,"parent":1669,"text":"DeclReferenceExpr","range":{"startColumn":21,"endColumn":29,"startRow":129,"endRow":129},"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("diceRoll")","text":"diceRoll"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"type":"expr"},{"structure":[],"token":{"kind":"identifier("diceRoll")","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"parent":1674,"id":1675,"range":{"startRow":129,"startColumn":21,"endRow":129,"endColumn":29},"text":"diceRoll","type":"other"},{"structure":[],"token":{"kind":"leftBrace","leadingTrivia":"","trailingTrivia":""},"parent":1667,"id":1676,"range":{"startRow":129,"startColumn":30,"endRow":129,"endColumn":31},"text":"{","type":"other"},{"id":1677,"parent":1667,"text":"SwitchCaseList","range":{"startRow":130,"startColumn":5,"endRow":136,"endColumn":32},"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"3"},"name":"Count"}],"type":"collection"},{"id":1678,"parent":1677,"text":"SwitchCase","range":{"startRow":130,"endColumn":14,"startColumn":5,"endRow":131},"structure":[{"name":"unexpectedBeforeAttribute","value":{"text":"nil"}},{"name":"attribute","value":{"text":"nil"}},{"name":"unexpectedBetweenAttributeAndLabel","value":{"text":"nil"}},{"value":{"text":"SwitchCaseLabelSyntax"},"name":"label","ref":"SwitchCaseLabelSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndStatements"},{"value":{"text":"CodeBlockItemListSyntax"},"name":"statements","ref":"CodeBlockItemListSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterStatements"}],"type":"other"},{"text":"SwitchCaseLabel","parent":1678,"type":"other","id":1679,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCaseKeyword"},{"value":{"kind":"keyword(SwiftSyntax.Keyword.case)","text":"case"},"name":"caseKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenCaseKeywordAndCaseItems"},{"value":{"text":"SwitchCaseItemListSyntax"},"ref":"SwitchCaseItemListSyntax","name":"caseItems"},{"value":{"text":"nil"},"name":"unexpectedBetweenCaseItemsAndColon"},{"value":{"kind":"colon","text":":"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedAfterColon"}],"range":{"startColumn":5,"endRow":130,"endColumn":22,"startRow":130}},{"structure":[],"token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.case)"},"parent":1679,"id":1680,"range":{"endColumn":9,"startRow":130,"endRow":130,"startColumn":5},"text":"case","type":"other"},{"text":"SwitchCaseItemList","parent":1679,"type":"collection","id":1681,"structure":[{"value":{"text":"SwitchCaseItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"range":{"endColumn":21,"startRow":130,"endRow":130,"startColumn":10}},{"text":"SwitchCaseItem","parent":1681,"type":"other","id":1682,"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"value":{"text":"ExpressionPatternSyntax"},"name":"pattern","ref":"ExpressionPatternSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndWhereClause"},{"value":{"text":"nil"},"name":"whereClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenWhereClauseAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"range":{"startRow":130,"endColumn":21,"startColumn":10,"endRow":130}},{"text":"ExpressionPattern","type":"pattern","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"name":"expression","ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterExpression"}],"id":1683,"range":{"endRow":130,"startRow":130,"endColumn":21,"startColumn":10},"parent":1682},{"text":"DeclReferenceExpr","type":"expr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"finalSquare","kind":"identifier("finalSquare")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"id":1684,"range":{"endRow":130,"startRow":130,"endColumn":21,"startColumn":10},"parent":1683},{"structure":[],"token":{"kind":"identifier("finalSquare")","leadingTrivia":"","trailingTrivia":""},"parent":1684,"id":1685,"range":{"startColumn":10,"endColumn":21,"startRow":130,"endRow":130},"text":"finalSquare","type":"other"},{"structure":[],"token":{"kind":"colon","trailingTrivia":"","leadingTrivia":""},"parent":1679,"range":{"startRow":130,"endRow":130,"startColumn":21,"endColumn":22},"id":1686,"text":":","type":"other"},{"structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","range":{"startRow":131,"endRow":131,"startColumn":9,"endColumn":14},"text":"CodeBlockItemList","parent":1678,"id":1687},{"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"BreakStmtSyntax"},"ref":"BreakStmtSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"type":"other","range":{"endRow":131,"startRow":131,"startColumn":9,"endColumn":14},"text":"CodeBlockItem","parent":1687,"id":1688},{"structure":[{"name":"unexpectedBeforeBreakKeyword","value":{"text":"nil"}},{"name":"breakKeyword","value":{"text":"break","kind":"keyword(SwiftSyntax.Keyword.break)"}},{"name":"unexpectedBetweenBreakKeywordAndLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedAfterLabel","value":{"text":"nil"}}],"type":"other","range":{"startColumn":9,"startRow":131,"endColumn":14,"endRow":131},"text":"BreakStmt","parent":1688,"id":1689},{"structure":[],"token":{"kind":"keyword(SwiftSyntax.Keyword.break)","trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"parent":1689,"range":{"startColumn":9,"endRow":131,"startRow":131,"endColumn":14},"id":1690,"text":"break","type":"other"},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttribute"},{"name":"attribute","value":{"text":"nil"}},{"name":"unexpectedBetweenAttributeAndLabel","value":{"text":"nil"}},{"name":"label","ref":"SwitchCaseLabelSyntax","value":{"text":"SwitchCaseLabelSyntax"}},{"name":"unexpectedBetweenLabelAndStatements","value":{"text":"nil"}},{"name":"statements","ref":"CodeBlockItemListSyntax","value":{"text":"CodeBlockItemListSyntax"}},{"name":"unexpectedAfterStatements","value":{"text":"nil"}}],"type":"other","range":{"startColumn":5,"endRow":133,"startRow":132,"endColumn":17},"text":"SwitchCase","parent":1677,"id":1691},{"range":{"startColumn":5,"endColumn":54,"endRow":132,"startRow":132},"structure":[{"name":"unexpectedBeforeCaseKeyword","value":{"text":"nil"}},{"name":"caseKeyword","value":{"kind":"keyword(SwiftSyntax.Keyword.case)","text":"case"}},{"name":"unexpectedBetweenCaseKeywordAndCaseItems","value":{"text":"nil"}},{"name":"caseItems","value":{"text":"SwitchCaseItemListSyntax"},"ref":"SwitchCaseItemListSyntax"},{"name":"unexpectedBetweenCaseItemsAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":":","kind":"colon"}},{"name":"unexpectedAfterColon","value":{"text":"nil"}}],"text":"SwitchCaseLabel","id":1692,"type":"other","parent":1691},{"structure":[],"token":{"trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.case)","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"parent":1692,"range":{"endColumn":9,"endRow":132,"startRow":132,"startColumn":5},"id":1693,"text":"case","type":"other"},{"range":{"endColumn":53,"endRow":132,"startRow":132,"startColumn":10},"structure":[{"value":{"text":"SwitchCaseItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"text":"SwitchCaseItemList","id":1694,"type":"collection","parent":1692},{"parent":1694,"text":"SwitchCaseItem","range":{"endColumn":53,"startColumn":10,"startRow":132,"endRow":132},"id":1695,"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"ref":"ValueBindingPatternSyntax","name":"pattern","value":{"text":"ValueBindingPatternSyntax"}},{"name":"unexpectedBetweenPatternAndWhereClause","value":{"text":"nil"}},{"ref":"WhereClauseSyntax","name":"whereClause","value":{"text":"WhereClauseSyntax"}},{"name":"unexpectedBetweenWhereClauseAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other"},{"parent":1695,"text":"ValueBindingPattern","range":{"startRow":132,"endColumn":23,"startColumn":10,"endRow":132},"id":1696,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBindingSpecifier"},{"value":{"kind":"keyword(SwiftSyntax.Keyword.let)","text":"let"},"name":"bindingSpecifier"},{"value":{"text":"nil"},"name":"unexpectedBetweenBindingSpecifierAndPattern"},{"ref":"IdentifierPatternSyntax","value":{"text":"IdentifierPatternSyntax"},"name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedAfterPattern"}],"type":"pattern"},{"structure":[],"token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"keyword(SwiftSyntax.Keyword.let)"},"parent":1696,"range":{"endColumn":13,"startColumn":10,"startRow":132,"endRow":132},"id":1697,"text":"let","type":"other"},{"parent":1696,"text":"IdentifierPattern","range":{"endColumn":23,"startColumn":14,"startRow":132,"endRow":132},"id":1698,"structure":[{"name":"unexpectedBeforeIdentifier","value":{"text":"nil"}},{"name":"identifier","value":{"text":"newSquare","kind":"identifier("newSquare")"}},{"name":"unexpectedAfterIdentifier","value":{"text":"nil"}}],"type":"pattern"},{"structure":[],"token":{"kind":"identifier("newSquare")","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"parent":1698,"range":{"endColumn":23,"endRow":132,"startColumn":14,"startRow":132},"id":1699,"text":"newSquare","type":"other"},{"type":"other","range":{"endColumn":53,"endRow":132,"startColumn":24,"startRow":132},"text":"WhereClause","parent":1695,"id":1700,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeWhereKeyword"},{"value":{"kind":"keyword(SwiftSyntax.Keyword.where)","text":"where"},"name":"whereKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenWhereKeywordAndCondition"},{"value":{"text":"InfixOperatorExprSyntax"},"ref":"InfixOperatorExprSyntax","name":"condition"},{"value":{"text":"nil"},"name":"unexpectedAfterCondition"}]},{"structure":[],"token":{"leadingTrivia":"","kind":"keyword(SwiftSyntax.Keyword.where)","trailingTrivia":"␣<\/span>"},"parent":1700,"range":{"startColumn":24,"endColumn":29,"endRow":132,"startRow":132},"id":1701,"text":"where","type":"other"},{"type":"expr","range":{"startColumn":30,"endColumn":53,"endRow":132,"startRow":132},"text":"InfixOperatorExpr","parent":1700,"id":1702,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftOperand"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"leftOperand"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftOperandAndOperator"},{"value":{"text":"BinaryOperatorExprSyntax"},"ref":"BinaryOperatorExprSyntax","name":"operator"},{"value":{"text":"nil"},"name":"unexpectedBetweenOperatorAndRightOperand"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"rightOperand"},{"value":{"text":"nil"},"name":"unexpectedAfterRightOperand"}]},{"type":"expr","range":{"startRow":132,"startColumn":30,"endRow":132,"endColumn":39},"text":"DeclReferenceExpr","parent":1702,"id":1703,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("newSquare")","text":"newSquare"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"structure":[],"token":{"kind":"identifier("newSquare")","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"parent":1703,"id":1704,"range":{"endColumn":39,"startRow":132,"endRow":132,"startColumn":30},"text":"newSquare","type":"other"},{"type":"expr","id":1705,"range":{"endColumn":41,"startRow":132,"endRow":132,"startColumn":40},"text":"BinaryOperatorExpr","parent":1702,"structure":[{"name":"unexpectedBeforeOperator","value":{"text":"nil"}},{"name":"operator","value":{"text":">","kind":"binaryOperator(">")"}},{"name":"unexpectedAfterOperator","value":{"text":"nil"}}]},{"structure":[],"token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"binaryOperator(">")"},"parent":1705,"id":1706,"range":{"startRow":132,"endColumn":41,"endRow":132,"startColumn":40},"text":">","type":"other"},{"type":"expr","id":1707,"range":{"startRow":132,"endColumn":53,"endRow":132,"startColumn":42},"text":"DeclReferenceExpr","parent":1702,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"finalSquare","kind":"identifier("finalSquare")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}]},{"structure":[],"token":{"leadingTrivia":"","kind":"identifier("finalSquare")","trailingTrivia":""},"parent":1707,"id":1708,"range":{"startColumn":42,"endRow":132,"endColumn":53,"startRow":132},"text":"finalSquare","type":"other"},{"structure":[],"token":{"trailingTrivia":"","kind":"colon","leadingTrivia":""},"parent":1692,"id":1709,"range":{"startColumn":53,"endRow":132,"endColumn":54,"startRow":132},"text":":","type":"other"},{"type":"collection","id":1710,"text":"CodeBlockItemList","structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"1"}}],"parent":1691,"range":{"startColumn":9,"endRow":133,"endColumn":17,"startRow":133}},{"type":"other","id":1711,"text":"CodeBlockItem","structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","ref":"ContinueStmtSyntax","value":{"text":"ContinueStmtSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"parent":1710,"range":{"endRow":133,"endColumn":17,"startRow":133,"startColumn":9}},{"type":"other","id":1712,"text":"ContinueStmt","structure":[{"name":"unexpectedBeforeContinueKeyword","value":{"text":"nil"}},{"name":"continueKeyword","value":{"kind":"keyword(SwiftSyntax.Keyword.continue)","text":"continue"}},{"name":"unexpectedBetweenContinueKeywordAndLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedAfterLabel","value":{"text":"nil"}}],"parent":1711,"range":{"endColumn":17,"startRow":133,"endRow":133,"startColumn":9}},{"structure":[],"token":{"trailingTrivia":"","kind":"keyword(SwiftSyntax.Keyword.continue)","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"parent":1712,"id":1713,"range":{"startRow":133,"startColumn":9,"endRow":133,"endColumn":17},"text":"continue","type":"other"},{"id":1714,"text":"SwitchCase","range":{"startColumn":5,"startRow":134,"endRow":136,"endColumn":32},"structure":[{"name":"unexpectedBeforeAttribute","value":{"text":"nil"}},{"name":"attribute","value":{"text":"nil"}},{"name":"unexpectedBetweenAttributeAndLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"SwitchDefaultLabelSyntax"},"ref":"SwitchDefaultLabelSyntax"},{"name":"unexpectedBetweenLabelAndStatements","value":{"text":"nil"}},{"name":"statements","value":{"text":"CodeBlockItemListSyntax"},"ref":"CodeBlockItemListSyntax"},{"name":"unexpectedAfterStatements","value":{"text":"nil"}}],"type":"other","parent":1677},{"id":1715,"text":"SwitchDefaultLabel","range":{"startColumn":5,"endRow":134,"startRow":134,"endColumn":13},"structure":[{"name":"unexpectedBeforeDefaultKeyword","value":{"text":"nil"}},{"name":"defaultKeyword","value":{"kind":"keyword(SwiftSyntax.Keyword.default)","text":"default"}},{"name":"unexpectedBetweenDefaultKeywordAndColon","value":{"text":"nil"}},{"name":"colon","value":{"kind":"colon","text":":"}},{"name":"unexpectedAfterColon","value":{"text":"nil"}}],"type":"other","parent":1714},{"structure":[],"token":{"kind":"keyword(SwiftSyntax.Keyword.default)","trailingTrivia":"","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"parent":1715,"id":1716,"range":{"startColumn":5,"endRow":134,"endColumn":12,"startRow":134},"text":"default","type":"other"},{"structure":[],"token":{"kind":"colon","trailingTrivia":"","leadingTrivia":""},"parent":1715,"id":1717,"range":{"startColumn":12,"endRow":134,"endColumn":13,"startRow":134},"text":":","type":"other"},{"id":1718,"text":"CodeBlockItemList","range":{"startColumn":9,"endRow":136,"endColumn":32,"startRow":135},"structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"2"},"name":"Count"}],"type":"collection","parent":1714},{"range":{"startColumn":9,"startRow":135,"endColumn":27,"endRow":135},"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"InfixOperatorExprSyntax","name":"item","value":{"text":"InfixOperatorExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"text":"CodeBlockItem","id":1719,"type":"other","parent":1718},{"range":{"endRow":135,"startRow":135,"startColumn":9,"endColumn":27},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftOperand"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"leftOperand"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftOperandAndOperator"},{"ref":"BinaryOperatorExprSyntax","value":{"text":"BinaryOperatorExprSyntax"},"name":"operator"},{"value":{"text":"nil"},"name":"unexpectedBetweenOperatorAndRightOperand"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"rightOperand"},{"value":{"text":"nil"},"name":"unexpectedAfterRightOperand"}],"text":"InfixOperatorExpr","id":1720,"type":"expr","parent":1719},{"range":{"endColumn":15,"startRow":135,"startColumn":9,"endRow":135},"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"square","kind":"identifier("square")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"text":"DeclReferenceExpr","id":1721,"type":"expr","parent":1720},{"structure":[],"token":{"kind":"identifier("square")","trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"parent":1721,"range":{"startRow":135,"endRow":135,"startColumn":9,"endColumn":15},"id":1722,"text":"square","type":"other"},{"text":"BinaryOperatorExpr","type":"expr","parent":1720,"range":{"startRow":135,"endRow":135,"startColumn":16,"endColumn":18},"id":1723,"structure":[{"name":"unexpectedBeforeOperator","value":{"text":"nil"}},{"name":"operator","value":{"kind":"binaryOperator("+=")","text":"+="}},{"name":"unexpectedAfterOperator","value":{"text":"nil"}}]},{"structure":[],"token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"binaryOperator("+=")"},"parent":1723,"range":{"startRow":135,"startColumn":16,"endRow":135,"endColumn":18},"id":1724,"text":"+=","type":"other"},{"text":"DeclReferenceExpr","type":"expr","parent":1720,"range":{"startRow":135,"startColumn":19,"endRow":135,"endColumn":27},"id":1725,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"diceRoll","kind":"identifier("diceRoll")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}]},{"structure":[],"token":{"leadingTrivia":"","kind":"identifier("diceRoll")","trailingTrivia":""},"parent":1725,"range":{"startRow":135,"endColumn":27,"startColumn":19,"endRow":135},"id":1726,"text":"diceRoll","type":"other"},{"text":"CodeBlockItem","type":"other","parent":1718,"range":{"startRow":136,"endColumn":32,"startColumn":9,"endRow":136},"id":1727,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","ref":"InfixOperatorExprSyntax","value":{"text":"InfixOperatorExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}]},{"text":"InfixOperatorExpr","id":1728,"parent":1727,"type":"expr","range":{"endRow":136,"startRow":136,"startColumn":9,"endColumn":32},"structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"name":"leftOperand","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedBetweenLeftOperandAndOperator","value":{"text":"nil"}},{"name":"operator","value":{"text":"BinaryOperatorExprSyntax"},"ref":"BinaryOperatorExprSyntax"},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"name":"rightOperand","value":{"text":"SubscriptCallExprSyntax"},"ref":"SubscriptCallExprSyntax"},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}]},{"text":"DeclReferenceExpr","id":1729,"parent":1728,"type":"expr","range":{"startRow":136,"endColumn":15,"startColumn":9,"endRow":136},"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"square","kind":"identifier("square")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"text":"square","token":{"kind":"identifier("square")","trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"id":1730,"type":"other","range":{"endColumn":15,"endRow":136,"startRow":136,"startColumn":9},"structure":[],"parent":1729},{"structure":[{"name":"unexpectedBeforeOperator","value":{"text":"nil"}},{"name":"operator","value":{"kind":"binaryOperator("+=")","text":"+="}},{"name":"unexpectedAfterOperator","value":{"text":"nil"}}],"text":"BinaryOperatorExpr","range":{"startRow":136,"endColumn":18,"endRow":136,"startColumn":16},"type":"expr","id":1731,"parent":1728},{"text":"+=","token":{"kind":"binaryOperator("+=")","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"type":"other","id":1732,"structure":[],"range":{"endRow":136,"endColumn":18,"startColumn":16,"startRow":136},"parent":1731},{"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedBetweenCalledExpressionAndLeftSquare","value":{"text":"nil"}},{"name":"leftSquare","value":{"kind":"leftSquare","text":"["}},{"name":"unexpectedBetweenLeftSquareAndArguments","value":{"text":"nil"}},{"name":"arguments","value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax"},{"name":"unexpectedBetweenArgumentsAndRightSquare","value":{"text":"nil"}},{"name":"rightSquare","value":{"kind":"rightSquare","text":"]"}},{"name":"unexpectedBetweenRightSquareAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"},"ref":"MultipleTrailingClosureElementListSyntax"},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"text":"SubscriptCallExpr","range":{"endRow":136,"endColumn":32,"startColumn":19,"startRow":136},"type":"expr","id":1733,"parent":1728},{"type":"expr","id":1734,"parent":1733,"text":"DeclReferenceExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"board","kind":"identifier("board")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"range":{"startRow":136,"startColumn":19,"endColumn":24,"endRow":136}},{"text":"board","token":{"trailingTrivia":"","kind":"identifier("board")","leadingTrivia":""},"type":"other","id":1735,"structure":[],"range":{"startColumn":19,"endColumn":24,"startRow":136,"endRow":136},"parent":1734},{"text":"[","token":{"trailingTrivia":"","kind":"leftSquare","leadingTrivia":""},"type":"other","id":1736,"structure":[],"range":{"startColumn":24,"endColumn":25,"startRow":136,"endRow":136},"parent":1733},{"type":"collection","id":1737,"parent":1733,"text":"LabeledExprList","structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"range":{"startColumn":25,"endColumn":31,"startRow":136,"endRow":136}},{"type":"other","id":1738,"parent":1737,"text":"LabeledExpr","structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"range":{"startColumn":25,"startRow":136,"endRow":136,"endColumn":31}},{"id":1739,"parent":1738,"type":"expr","text":"DeclReferenceExpr","structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"square","kind":"identifier("square")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"range":{"endRow":136,"startRow":136,"startColumn":25,"endColumn":31}},{"text":"square","token":{"leadingTrivia":"","kind":"identifier("square")","trailingTrivia":""},"id":1740,"type":"other","structure":[],"range":{"startColumn":25,"startRow":136,"endRow":136,"endColumn":31},"parent":1739},{"text":"]","token":{"leadingTrivia":"","kind":"rightSquare","trailingTrivia":""},"id":1741,"type":"other","structure":[],"range":{"startColumn":31,"startRow":136,"endRow":136,"endColumn":32},"parent":1733},{"id":1742,"parent":1733,"type":"collection","text":"MultipleTrailingClosureElementList","structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"range":{"startColumn":32,"startRow":136,"endRow":136,"endColumn":32}},{"text":"}","token":{"kind":"rightBrace","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":""},"id":1743,"type":"other","structure":[],"range":{"startRow":137,"startColumn":5,"endRow":137,"endColumn":6},"parent":1667},{"text":"}","token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"","kind":"rightBrace"},"type":"other","id":1744,"range":{"endColumn":2,"startColumn":1,"endRow":138,"startRow":138},"structure":[],"parent":1629},{"type":"other","parent":1,"range":{"endRow":142,"endColumn":42,"startColumn":1,"startRow":142},"text":"CodeBlockItem","id":1745,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","ref":"FunctionCallExprSyntax","value":{"text":"FunctionCallExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}]},{"type":"expr","parent":1745,"range":{"endRow":142,"startColumn":1,"startRow":142,"endColumn":42},"text":"FunctionCallExpr","id":1746,"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"name":"arguments","ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"name":"additionalTrailingClosures","ref":"MultipleTrailingClosureElementListSyntax","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}]},{"id":1747,"parent":1746,"text":"DeclReferenceExpr","range":{"startRow":142,"startColumn":1,"endColumn":6,"endRow":142},"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"print","kind":"identifier("print")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"type":"expr"},{"text":"print","token":{"trailingTrivia":"","kind":"identifier("print")","leadingTrivia":"↲<\/span>↲<\/span>\/\/␣<\/span>MARK:␣<\/span>-␣<\/span>For␣<\/span>Loops<\/span>↲<\/span>\/\/␣<\/span>For-in␣<\/span>loop␣<\/span>with␣<\/span>enumerated()␣<\/span>to␣<\/span>get␣<\/span>index␣<\/span>and␣<\/span>value<\/span>↲<\/span>"},"id":1748,"type":"other","range":{"endColumn":6,"startRow":142,"startColumn":1,"endRow":142},"structure":[],"parent":1747},{"text":"(","token":{"trailingTrivia":"","kind":"leftParen","leadingTrivia":""},"id":1749,"type":"other","range":{"endColumn":7,"startRow":142,"startColumn":6,"endRow":142},"structure":[],"parent":1746},{"id":1750,"parent":1746,"text":"LabeledExprList","range":{"endColumn":41,"startRow":142,"startColumn":7,"endRow":142},"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection"},{"id":1751,"parent":1750,"text":"LabeledExpr","range":{"startRow":142,"startColumn":7,"endRow":142,"endColumn":41},"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other"},{"range":{"startRow":142,"endColumn":41,"endRow":142,"startColumn":7},"text":"StringLiteralExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"kind":"stringQuote","text":"""},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"value":{"text":"StringLiteralSegmentListSyntax"},"name":"segments","ref":"StringLiteralSegmentListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"parent":1751,"type":"expr","id":1752},{"text":""","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"type":"other","id":1753,"range":{"startRow":142,"endRow":142,"startColumn":7,"endColumn":8},"structure":[],"parent":1752},{"type":"collection","id":1754,"parent":1752,"range":{"startColumn":8,"endRow":142,"startRow":142,"endColumn":40},"text":"StringLiteralSegmentList","structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"2"},"name":"Count"}]},{"type":"other","id":1755,"parent":1754,"range":{"startRow":142,"startColumn":8,"endRow":142,"endColumn":10},"text":"StringSegment","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"\\n","kind":"stringSegment("\\\\n")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}]},{"text":"\\n","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("\\\\n")"},"type":"other","id":1756,"range":{"startRow":142,"endRow":142,"startColumn":8,"endColumn":10},"structure":[],"parent":1755},{"type":"other","id":1757,"parent":1754,"range":{"startRow":142,"endRow":142,"startColumn":10,"endColumn":40},"text":"StringSegment","structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"kind":"stringSegment("=== For-in with Enumerated ===")","text":"=== For-in with Enumerated ==="}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}]},{"text":"===␣<\/span>For-in␣<\/span>with␣<\/span>Enumerated␣<\/span>===","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("=== For-in with Enumerated ===")"},"type":"other","id":1758,"range":{"startColumn":10,"endRow":142,"endColumn":40,"startRow":142},"structure":[],"parent":1757},{"text":""","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"type":"other","id":1759,"range":{"startColumn":40,"endRow":142,"endColumn":41,"startRow":142},"structure":[],"parent":1752},{"text":")","token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"type":"other","id":1760,"range":{"startColumn":41,"endRow":142,"endColumn":42,"startRow":142},"structure":[],"parent":1746},{"type":"collection","id":1761,"parent":1746,"range":{"startColumn":42,"endRow":142,"endColumn":42,"startRow":142},"text":"MultipleTrailingClosureElementList","structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}]},{"type":"other","id":1762,"parent":1,"range":{"startColumn":1,"startRow":143,"endColumn":2,"endRow":145},"text":"CodeBlockItem","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"ForStmtSyntax"},"name":"item","ref":"ForStmtSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}]},{"text":"ForStmt","id":1763,"range":{"startRow":143,"endRow":145,"endColumn":2,"startColumn":1},"type":"other","parent":1762,"structure":[{"name":"unexpectedBeforeForKeyword","value":{"text":"nil"}},{"name":"forKeyword","value":{"text":"for","kind":"keyword(SwiftSyntax.Keyword.for)"}},{"name":"unexpectedBetweenForKeywordAndTryKeyword","value":{"text":"nil"}},{"name":"tryKeyword","value":{"text":"nil"}},{"name":"unexpectedBetweenTryKeywordAndAwaitKeyword","value":{"text":"nil"}},{"name":"awaitKeyword","value":{"text":"nil"}},{"name":"unexpectedBetweenAwaitKeywordAndCaseKeyword","value":{"text":"nil"}},{"name":"caseKeyword","value":{"text":"nil"}},{"name":"unexpectedBetweenCaseKeywordAndPattern","value":{"text":"nil"}},{"name":"pattern","ref":"TuplePatternSyntax","value":{"text":"TuplePatternSyntax"}},{"name":"unexpectedBetweenPatternAndTypeAnnotation","value":{"text":"nil"}},{"name":"typeAnnotation","value":{"text":"nil"}},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAnnotationAndInKeyword"},{"value":{"text":"in","kind":"keyword(SwiftSyntax.Keyword.in)"},"name":"inKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenInKeywordAndSequence"},{"value":{"text":"FunctionCallExprSyntax"},"ref":"FunctionCallExprSyntax","name":"sequence"},{"value":{"text":"nil"},"name":"unexpectedBetweenSequenceAndWhereClause"},{"value":{"text":"nil"},"name":"whereClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenWhereClauseAndBody"},{"value":{"text":"CodeBlockSyntax"},"ref":"CodeBlockSyntax","name":"body"},{"value":{"text":"nil"},"name":"unexpectedAfterBody"}]},{"text":"for","token":{"kind":"keyword(SwiftSyntax.Keyword.for)","leadingTrivia":"↲<\/span>","trailingTrivia":"␣<\/span>"},"id":1764,"type":"other","structure":[],"range":{"startColumn":1,"startRow":143,"endRow":143,"endColumn":4},"parent":1763},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftParen"},{"value":{"kind":"leftParen","text":"("},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndElements"},{"ref":"TuplePatternElementListSyntax","value":{"text":"TuplePatternElementListSyntax"},"name":"elements"},{"value":{"text":"nil"},"name":"unexpectedBetweenElementsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"id":1765,"text":"TuplePattern","type":"pattern","parent":1763,"range":{"startColumn":5,"startRow":143,"endRow":143,"endColumn":18}},{"text":"(","token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"type":"other","id":1766,"structure":[],"range":{"startRow":143,"endRow":143,"endColumn":6,"startColumn":5},"parent":1765},{"structure":[{"value":{"text":"TuplePatternElementSyntax"},"name":"Element"},{"value":{"text":"2"},"name":"Count"}],"text":"TuplePatternElementList","range":{"startRow":143,"endRow":143,"endColumn":17,"startColumn":6},"type":"collection","id":1767,"parent":1765},{"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndPattern","value":{"text":"nil"}},{"name":"pattern","value":{"text":"IdentifierPatternSyntax"},"ref":"IdentifierPatternSyntax"},{"name":"unexpectedBetweenPatternAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"kind":"comma","text":","}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"text":"TuplePatternElement","range":{"endColumn":12,"startColumn":6,"endRow":143,"startRow":143},"type":"other","id":1768,"parent":1767},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"text":"index","kind":"identifier("index")"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"text":"IdentifierPattern","range":{"startRow":143,"endColumn":11,"startColumn":6,"endRow":143},"type":"pattern","id":1769,"parent":1768},{"text":"index","token":{"kind":"identifier("index")","leadingTrivia":"","trailingTrivia":""},"id":1770,"type":"other","structure":[],"range":{"startRow":143,"endColumn":11,"startColumn":6,"endRow":143},"parent":1769},{"text":",","token":{"kind":"comma","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"id":1771,"type":"other","structure":[],"range":{"startRow":143,"endColumn":12,"startColumn":11,"endRow":143},"parent":1768},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndPattern"},{"value":{"text":"IdentifierPatternSyntax"},"name":"pattern","ref":"IdentifierPatternSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"parent":1767,"range":{"startRow":143,"endColumn":17,"startColumn":13,"endRow":143},"id":1772,"text":"TuplePatternElement","type":"other"},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"kind":"identifier("name")","text":"name"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"parent":1772,"range":{"startColumn":13,"endRow":143,"startRow":143,"endColumn":17},"id":1773,"text":"IdentifierPattern","type":"pattern"},{"text":"name","token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("name")"},"id":1774,"type":"other","structure":[],"range":{"startRow":143,"startColumn":13,"endRow":143,"endColumn":17},"parent":1773},{"text":")","token":{"kind":"rightParen","trailingTrivia":"␣<\/span>","leadingTrivia":""},"type":"other","id":1775,"range":{"endColumn":18,"endRow":143,"startColumn":17,"startRow":143},"structure":[],"parent":1765},{"type":"other","text":"in","structure":[],"id":1776,"range":{"endColumn":21,"endRow":143,"startColumn":19,"startRow":143},"parent":1763,"token":{"kind":"keyword(SwiftSyntax.Keyword.in)","trailingTrivia":"␣<\/span>","leadingTrivia":""}},{"parent":1763,"range":{"endColumn":40,"endRow":143,"startColumn":22,"startRow":143},"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"ref":"MemberAccessExprSyntax","name":"calledExpression","value":{"text":"MemberAccessExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"ref":"LabeledExprListSyntax","name":"arguments","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"type":"expr","id":1777,"text":"FunctionCallExpr"},{"parent":1777,"range":{"endColumn":38,"startRow":143,"startColumn":22,"endRow":143},"structure":[{"name":"unexpectedBeforeBase","value":{"text":"nil"}},{"name":"base","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedBetweenBaseAndPeriod","value":{"text":"nil"}},{"name":"period","value":{"kind":"period","text":"."}},{"name":"unexpectedBetweenPeriodAndDeclName","value":{"text":"nil"}},{"name":"declName","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedAfterDeclName","value":{"text":"nil"}}],"type":"expr","id":1778,"text":"MemberAccessExpr"},{"parent":1778,"type":"expr","id":1779,"text":"DeclReferenceExpr","range":{"endColumn":27,"startRow":143,"endRow":143,"startColumn":22},"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("names")","text":"names"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"type":"other","text":"names","structure":[],"id":1780,"range":{"endColumn":27,"startRow":143,"startColumn":22,"endRow":143},"parent":1779,"token":{"trailingTrivia":"","leadingTrivia":"","kind":"identifier("names")"}},{"type":"other","text":".","structure":[],"id":1781,"range":{"endColumn":28,"startRow":143,"startColumn":27,"endRow":143},"parent":1778,"token":{"trailingTrivia":"","leadingTrivia":"","kind":"period"}},{"parent":1778,"type":"expr","id":1782,"text":"DeclReferenceExpr","range":{"endColumn":38,"startRow":143,"startColumn":28,"endRow":143},"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("enumerated")","text":"enumerated"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"type":"other","text":"enumerated","structure":[],"id":1783,"range":{"startColumn":28,"endRow":143,"startRow":143,"endColumn":38},"parent":1782,"token":{"kind":"identifier("enumerated")","trailingTrivia":"","leadingTrivia":""}},{"type":"other","text":"(","structure":[],"id":1784,"range":{"startColumn":38,"endRow":143,"startRow":143,"endColumn":39},"parent":1777,"token":{"kind":"leftParen","trailingTrivia":"","leadingTrivia":""}},{"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"0"}}],"type":"collection","id":1785,"parent":1777,"text":"LabeledExprList","range":{"startColumn":39,"endRow":143,"startRow":143,"endColumn":39}},{"type":"other","text":")","structure":[],"id":1786,"range":{"startRow":143,"endRow":143,"startColumn":39,"endColumn":40},"parent":1777,"token":{"leadingTrivia":"","kind":"rightParen","trailingTrivia":"␣<\/span>"}},{"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection","id":1787,"parent":1777,"text":"MultipleTrailingClosureElementList","range":{"startRow":143,"endRow":143,"startColumn":41,"endColumn":41}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftBrace"},{"value":{"kind":"leftBrace","text":"{"},"name":"leftBrace"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftBraceAndStatements"},{"value":{"text":"CodeBlockItemListSyntax"},"ref":"CodeBlockItemListSyntax","name":"statements"},{"value":{"text":"nil"},"name":"unexpectedBetweenStatementsAndRightBrace"},{"value":{"kind":"rightBrace","text":"}"},"name":"rightBrace"},{"value":{"text":"nil"},"name":"unexpectedAfterRightBrace"}],"type":"other","id":1788,"parent":1763,"text":"CodeBlock","range":{"startRow":143,"startColumn":41,"endRow":145,"endColumn":2}},{"type":"other","text":"{","structure":[],"id":1789,"range":{"startColumn":41,"startRow":143,"endColumn":42,"endRow":143},"parent":1788,"token":{"kind":"leftBrace","trailingTrivia":"","leadingTrivia":""}},{"id":1790,"type":"collection","text":"CodeBlockItemList","parent":1788,"range":{"startColumn":5,"startRow":144,"endColumn":31,"endRow":144},"structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}]},{"id":1791,"type":"other","text":"CodeBlockItem","parent":1790,"range":{"endRow":144,"startRow":144,"endColumn":31,"startColumn":5},"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"FunctionCallExprSyntax","name":"item","value":{"text":"FunctionCallExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}]},{"id":1792,"type":"expr","text":"FunctionCallExpr","parent":1791,"range":{"startColumn":5,"endColumn":31,"startRow":144,"endRow":144},"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"name":"arguments","ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"kind":"rightParen","text":")"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"name":"additionalTrailingClosures","ref":"MultipleTrailingClosureElementListSyntax","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}]},{"parent":1792,"text":"DeclReferenceExpr","range":{"startColumn":5,"startRow":144,"endRow":144,"endColumn":10},"id":1793,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"print","kind":"identifier("print")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"type":"expr"},{"text":"print","type":"other","structure":[],"id":1794,"range":{"startRow":144,"endRow":144,"startColumn":5,"endColumn":10},"parent":1793,"token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","kind":"identifier("print")","trailingTrivia":""}},{"text":"(","type":"other","structure":[],"id":1795,"range":{"startRow":144,"endRow":144,"startColumn":10,"endColumn":11},"parent":1792,"token":{"leadingTrivia":"","kind":"leftParen","trailingTrivia":""}},{"parent":1792,"text":"LabeledExprList","range":{"startRow":144,"endRow":144,"startColumn":11,"endColumn":30},"id":1796,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection"},{"parent":1796,"text":"LabeledExpr","range":{"endColumn":30,"startRow":144,"endRow":144,"startColumn":11},"id":1797,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","ref":"StringLiteralExprSyntax","value":{"text":"StringLiteralExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other"},{"parent":1797,"id":1798,"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"kind":"stringQuote","text":"""}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"name":"segments","ref":"StringLiteralSegmentListSyntax","value":{"text":"StringLiteralSegmentListSyntax"}},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"text":"StringLiteralExpr","range":{"endRow":144,"startColumn":11,"endColumn":30,"startRow":144},"type":"expr"},{"text":""","type":"other","structure":[],"id":1799,"range":{"endRow":144,"startColumn":11,"endColumn":12,"startRow":144},"parent":1798,"token":{"leadingTrivia":"","kind":"stringQuote","trailingTrivia":""}},{"text":"StringLiteralSegmentList","range":{"endRow":144,"startColumn":12,"endColumn":29,"startRow":144},"id":1800,"type":"collection","structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"5"},"name":"Count"}],"parent":1798},{"text":"StringSegment","range":{"startRow":144,"endRow":144,"startColumn":12,"endColumn":12},"id":1801,"type":"other","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"","kind":"stringSegment("")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"parent":1800},{"text":"","type":"other","structure":[],"id":1802,"range":{"startColumn":12,"endColumn":12,"endRow":144,"startRow":144},"parent":1801,"token":{"leadingTrivia":"","kind":"stringSegment("")","trailingTrivia":""}},{"text":"ExpressionSegment","range":{"startColumn":12,"endColumn":20,"endRow":144,"startRow":144},"id":1803,"type":"other","structure":[{"name":"unexpectedBeforeBackslash","value":{"text":"nil"}},{"name":"backslash","value":{"kind":"backslash","text":"\\"}},{"name":"unexpectedBetweenBackslashAndPounds","value":{"text":"nil"}},{"name":"pounds","value":{"text":"nil"}},{"name":"unexpectedBetweenPoundsAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndExpressions","value":{"text":"nil"}},{"name":"expressions","ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenExpressionsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}],"parent":1800},{"text":"\\","type":"other","structure":[],"id":1804,"range":{"endColumn":13,"startColumn":12,"endRow":144,"startRow":144},"parent":1803,"token":{"kind":"backslash","leadingTrivia":"","trailingTrivia":""}},{"text":"(","type":"other","structure":[],"id":1805,"range":{"endColumn":14,"startColumn":13,"endRow":144,"startRow":144},"parent":1803,"token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""}},{"text":"LabeledExprList","type":"collection","range":{"endColumn":19,"startColumn":14,"endRow":144,"startRow":144},"parent":1803,"id":1806,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"text":"LabeledExpr","type":"other","range":{"endColumn":19,"startColumn":14,"startRow":144,"endRow":144},"parent":1806,"id":1807,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}]},{"parent":1807,"text":"DeclReferenceExpr","structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("index")","text":"index"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"type":"expr","range":{"startRow":144,"startColumn":14,"endRow":144,"endColumn":19},"id":1808},{"text":"index","type":"other","structure":[],"id":1809,"range":{"startRow":144,"endRow":144,"startColumn":14,"endColumn":19},"parent":1808,"token":{"kind":"identifier("index")","leadingTrivia":"","trailingTrivia":""}},{"text":")","type":"other","structure":[],"id":1810,"range":{"startRow":144,"endRow":144,"startColumn":19,"endColumn":20},"parent":1803,"token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":""}},{"parent":1800,"text":"StringSegment","structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":": ","kind":"stringSegment(": ")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"type":"other","range":{"startRow":144,"endRow":144,"startColumn":20,"endColumn":22},"id":1811},{"text":":␣<\/span>","type":"other","structure":[],"id":1812,"range":{"startRow":144,"startColumn":20,"endRow":144,"endColumn":22},"parent":1811,"token":{"leadingTrivia":"","kind":"stringSegment(": ")","trailingTrivia":""}},{"text":"ExpressionSegment","structure":[{"name":"unexpectedBeforeBackslash","value":{"text":"nil"}},{"value":{"text":"\\","kind":"backslash"},"name":"backslash"},{"value":{"text":"nil"},"name":"unexpectedBetweenBackslashAndPounds"},{"value":{"text":"nil"},"name":"pounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenPoundsAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndExpressions"},{"value":{"text":"LabeledExprListSyntax"},"name":"expressions","ref":"LabeledExprListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"id":1813,"range":{"endColumn":29,"endRow":144,"startRow":144,"startColumn":22},"type":"other","parent":1800},{"type":"other","text":"\\","structure":[],"id":1814,"range":{"endColumn":23,"startRow":144,"endRow":144,"startColumn":22},"parent":1813,"token":{"trailingTrivia":"","kind":"backslash","leadingTrivia":""}},{"type":"other","text":"(","structure":[],"id":1815,"range":{"endColumn":24,"startRow":144,"endRow":144,"startColumn":23},"parent":1813,"token":{"trailingTrivia":"","kind":"leftParen","leadingTrivia":""}},{"range":{"endColumn":28,"startRow":144,"endRow":144,"startColumn":24},"type":"collection","id":1816,"text":"LabeledExprList","structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"parent":1813},{"range":{"startRow":144,"endRow":144,"endColumn":28,"startColumn":24},"type":"other","id":1817,"text":"LabeledExpr","structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"expression","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"parent":1816},{"id":1818,"parent":1817,"range":{"startRow":144,"endColumn":28,"endRow":144,"startColumn":24},"text":"DeclReferenceExpr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"name","kind":"identifier("name")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr"},{"text":"name","type":"other","structure":[],"id":1819,"range":{"startColumn":24,"endRow":144,"startRow":144,"endColumn":28},"parent":1818,"token":{"trailingTrivia":"","leadingTrivia":"","kind":"identifier("name")"}},{"text":")","type":"other","structure":[],"id":1820,"range":{"startColumn":28,"endRow":144,"startRow":144,"endColumn":29},"parent":1813,"token":{"trailingTrivia":"","leadingTrivia":"","kind":"rightParen"}},{"id":1821,"parent":1800,"range":{"startColumn":29,"endRow":144,"startRow":144,"endColumn":29},"text":"StringSegment","structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"kind":"stringSegment("")","text":""}},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other"},{"type":"other","text":"","structure":[],"id":1822,"range":{"endRow":144,"startColumn":29,"startRow":144,"endColumn":29},"parent":1821,"token":{"trailingTrivia":"","kind":"stringSegment("")","leadingTrivia":""}},{"text":""","type":"other","id":1823,"parent":1798,"range":{"endRow":144,"startColumn":29,"startRow":144,"endColumn":30},"token":{"trailingTrivia":"","kind":"stringQuote","leadingTrivia":""},"structure":[]},{"text":")","type":"other","id":1824,"parent":1792,"range":{"endRow":144,"startColumn":30,"startRow":144,"endColumn":31},"token":{"trailingTrivia":"","kind":"rightParen","leadingTrivia":""},"structure":[]},{"parent":1792,"range":{"endRow":144,"startColumn":31,"startRow":144,"endColumn":31},"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"id":1825,"type":"collection","text":"MultipleTrailingClosureElementList"},{"text":"}","type":"other","id":1826,"parent":1788,"range":{"endRow":145,"endColumn":2,"startRow":145,"startColumn":1},"token":{"trailingTrivia":"","kind":"rightBrace","leadingTrivia":"↲<\/span>"},"structure":[]},{"parent":1,"range":{"endRow":148,"endColumn":44,"startRow":148,"startColumn":1},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"FunctionCallExprSyntax"},"ref":"FunctionCallExprSyntax","name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"id":1827,"type":"other","text":"CodeBlockItem"},{"parent":1827,"range":{"endRow":148,"startColumn":1,"startRow":148,"endColumn":44},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"calledExpression"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"ref":"LabeledExprListSyntax","name":"arguments","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"id":1828,"type":"expr","text":"FunctionCallExpr"},{"parent":1828,"text":"DeclReferenceExpr","type":"expr","id":1829,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("print")","text":"print"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"range":{"startColumn":1,"endRow":148,"startRow":148,"endColumn":6}},{"text":"print","type":"other","id":1830,"parent":1829,"range":{"endColumn":6,"endRow":148,"startRow":148,"startColumn":1},"token":{"leadingTrivia":"↲<\/span>↲<\/span>\/\/␣<\/span>For-in␣<\/span>loop␣<\/span>with␣<\/span>where␣<\/span>clause<\/span>↲<\/span>","trailingTrivia":"","kind":"identifier("print")"},"structure":[]},{"text":"(","type":"other","id":1831,"parent":1828,"range":{"startRow":148,"endColumn":7,"startColumn":6,"endRow":148},"token":{"trailingTrivia":"","leadingTrivia":"","kind":"leftParen"},"structure":[]},{"text":"LabeledExprList","range":{"startRow":148,"endColumn":43,"startColumn":7,"endRow":148},"id":1832,"parent":1828,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection"},{"text":"LabeledExpr","range":{"endColumn":43,"endRow":148,"startRow":148,"startColumn":7},"id":1833,"parent":1832,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other"},{"text":"StringLiteralExpr","range":{"endRow":148,"startRow":148,"startColumn":7,"endColumn":43},"id":1834,"parent":1833,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"kind":"stringQuote","text":"""},"name":"openingQuote"},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"ref":"StringLiteralSegmentListSyntax","name":"segments","value":{"text":"StringLiteralSegmentListSyntax"}},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"type":"expr"},{"text":""","type":"other","id":1835,"parent":1834,"range":{"startColumn":7,"startRow":148,"endRow":148,"endColumn":8},"token":{"trailingTrivia":"","kind":"stringQuote","leadingTrivia":""},"structure":[]},{"type":"collection","range":{"startColumn":8,"startRow":148,"endRow":148,"endColumn":42},"parent":1834,"text":"StringLiteralSegmentList","id":1836,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"2"}}]},{"type":"other","range":{"endColumn":10,"endRow":148,"startColumn":8,"startRow":148},"parent":1836,"text":"StringSegment","id":1837,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"kind":"stringSegment("\\\\n")","text":"\\n"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}]},{"text":"\\n","type":"other","id":1838,"parent":1837,"range":{"startRow":148,"endRow":148,"startColumn":8,"endColumn":10},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("\\\\n")"},"structure":[]},{"parent":1836,"id":1839,"range":{"startColumn":10,"startRow":148,"endColumn":42,"endRow":148},"type":"other","text":"StringSegment","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"=== For-in with Where Clause ===","kind":"stringSegment("=== For-in with Where Clause ===")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}]},{"text":"===␣<\/span>For-in␣<\/span>with␣<\/span>Where␣<\/span>Clause␣<\/span>===","type":"other","id":1840,"parent":1839,"range":{"startRow":148,"endRow":148,"startColumn":10,"endColumn":42},"token":{"kind":"stringSegment("=== For-in with Where Clause ===")","leadingTrivia":"","trailingTrivia":""},"structure":[]},{"text":""","type":"other","id":1841,"parent":1834,"range":{"startRow":148,"endRow":148,"startColumn":42,"endColumn":43},"token":{"kind":"stringQuote","leadingTrivia":"","trailingTrivia":""},"structure":[]},{"text":")","type":"other","id":1842,"parent":1828,"range":{"startRow":148,"endRow":148,"startColumn":43,"endColumn":44},"token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":""},"structure":[]},{"parent":1828,"type":"collection","id":1843,"range":{"startRow":148,"endRow":148,"startColumn":44,"endColumn":44},"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"text":"MultipleTrailingClosureElementList"},{"parent":1,"type":"other","id":1844,"range":{"startRow":149,"endRow":149,"startColumn":1,"endColumn":46},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"VariableDeclSyntax"},"ref":"VariableDeclSyntax","name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"text":"CodeBlockItem"},{"parent":1844,"type":"decl","id":1845,"range":{"startRow":149,"startColumn":1,"endRow":149,"endColumn":46},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttributes"},{"value":{"text":"AttributeListSyntax"},"name":"attributes","ref":"AttributeListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenAttributesAndModifiers"},{"name":"modifiers","ref":"DeclModifierListSyntax","value":{"text":"DeclModifierListSyntax"}},{"name":"unexpectedBetweenModifiersAndBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"text":"let","kind":"keyword(SwiftSyntax.Keyword.let)"}},{"name":"unexpectedBetweenBindingSpecifierAndBindings","value":{"text":"nil"}},{"name":"bindings","ref":"PatternBindingListSyntax","value":{"text":"PatternBindingListSyntax"}},{"name":"unexpectedAfterBindings","value":{"text":"nil"}}],"text":"VariableDecl"},{"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"parent":1845,"type":"collection","id":1846,"text":"AttributeList","range":{"endRow":148,"startColumn":44,"startRow":148,"endColumn":44}},{"structure":[{"value":{"text":"DeclModifierSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"parent":1845,"type":"collection","id":1847,"text":"DeclModifierList","range":{"endRow":148,"startColumn":44,"startRow":148,"endColumn":44}},{"text":"let","type":"other","id":1848,"parent":1845,"range":{"endColumn":4,"endRow":149,"startColumn":1,"startRow":149},"token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>","kind":"keyword(SwiftSyntax.Keyword.let)"},"structure":[]},{"structure":[{"name":"Element","value":{"text":"PatternBindingSyntax"}},{"name":"Count","value":{"text":"1"}}],"parent":1845,"type":"collection","id":1849,"text":"PatternBindingList","range":{"endColumn":46,"endRow":149,"startColumn":5,"startRow":149}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"ref":"IdentifierPatternSyntax","name":"pattern","value":{"text":"IdentifierPatternSyntax"}},{"name":"unexpectedBetweenPatternAndTypeAnnotation","value":{"text":"nil"}},{"name":"typeAnnotation","value":{"text":"nil"}},{"name":"unexpectedBetweenTypeAnnotationAndInitializer","value":{"text":"nil"}},{"ref":"InitializerClauseSyntax","name":"initializer","value":{"text":"InitializerClauseSyntax"}},{"name":"unexpectedBetweenInitializerAndAccessorBlock","value":{"text":"nil"}},{"name":"accessorBlock","value":{"text":"nil"}},{"name":"unexpectedBetweenAccessorBlockAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"parent":1849,"type":"other","id":1850,"text":"PatternBinding","range":{"startRow":149,"endRow":149,"endColumn":46,"startColumn":5}},{"structure":[{"name":"unexpectedBeforeIdentifier","value":{"text":"nil"}},{"name":"identifier","value":{"text":"numbers","kind":"identifier("numbers")"}},{"name":"unexpectedAfterIdentifier","value":{"text":"nil"}}],"id":1851,"parent":1850,"text":"IdentifierPattern","range":{"endColumn":12,"endRow":149,"startColumn":5,"startRow":149},"type":"pattern"},{"text":"numbers","type":"other","id":1852,"parent":1851,"range":{"startColumn":5,"endRow":149,"endColumn":12,"startRow":149},"token":{"leadingTrivia":"","kind":"identifier("numbers")","trailingTrivia":"␣<\/span>"},"structure":[]},{"structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"kind":"equal","text":"="}},{"name":"unexpectedBetweenEqualAndValue","value":{"text":"nil"}},{"name":"value","value":{"text":"ArrayExprSyntax"},"ref":"ArrayExprSyntax"},{"name":"unexpectedAfterValue","value":{"text":"nil"}}],"id":1853,"parent":1850,"text":"InitializerClause","range":{"startColumn":13,"endRow":149,"endColumn":46,"startRow":149},"type":"other"},{"text":"=","type":"other","id":1854,"parent":1853,"range":{"endColumn":14,"endRow":149,"startRow":149,"startColumn":13},"token":{"trailingTrivia":"␣<\/span>","kind":"equal","leadingTrivia":""},"structure":[]},{"type":"expr","id":1855,"range":{"endColumn":46,"endRow":149,"startRow":149,"startColumn":15},"structure":[{"name":"unexpectedBeforeLeftSquare","value":{"text":"nil"}},{"name":"leftSquare","value":{"kind":"leftSquare","text":"["}},{"name":"unexpectedBetweenLeftSquareAndElements","value":{"text":"nil"}},{"name":"elements","value":{"text":"ArrayElementListSyntax"},"ref":"ArrayElementListSyntax"},{"name":"unexpectedBetweenElementsAndRightSquare","value":{"text":"nil"}},{"name":"rightSquare","value":{"text":"]","kind":"rightSquare"}},{"name":"unexpectedAfterRightSquare","value":{"text":"nil"}}],"text":"ArrayExpr","parent":1853},{"text":"[","type":"other","id":1856,"parent":1855,"range":{"startColumn":15,"startRow":149,"endRow":149,"endColumn":16},"token":{"leadingTrivia":"","kind":"leftSquare","trailingTrivia":""},"structure":[]},{"type":"collection","id":1857,"range":{"startColumn":16,"startRow":149,"endRow":149,"endColumn":45},"structure":[{"name":"Element","value":{"text":"ArrayElementSyntax"}},{"name":"Count","value":{"text":"10"}}],"text":"ArrayElementList","parent":1855},{"type":"other","id":1858,"range":{"startColumn":16,"endRow":149,"startRow":149,"endColumn":18},"structure":[{"name":"unexpectedBeforeExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"kind":"comma","text":","}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"text":"ArrayElement","parent":1857},{"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"1","kind":"integerLiteral("1")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"parent":1858,"type":"expr","range":{"startRow":149,"endColumn":17,"startColumn":16,"endRow":149},"id":1859,"text":"IntegerLiteralExpr"},{"text":"1","type":"other","id":1860,"parent":1859,"range":{"startRow":149,"startColumn":16,"endRow":149,"endColumn":17},"token":{"trailingTrivia":"","leadingTrivia":"","kind":"integerLiteral("1")"},"structure":[]},{"text":",","type":"other","id":1861,"parent":1858,"range":{"startRow":149,"startColumn":17,"endRow":149,"endColumn":18},"token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"comma"},"structure":[]},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"kind":"comma","text":","},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"parent":1857,"type":"other","range":{"startRow":149,"startColumn":19,"endRow":149,"endColumn":21},"id":1862,"text":"ArrayElement"},{"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"value":{"kind":"integerLiteral("2")","text":"2"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"parent":1862,"type":"expr","range":{"startColumn":19,"startRow":149,"endColumn":20,"endRow":149},"id":1863,"text":"IntegerLiteralExpr"},{"text":"2","type":"other","id":1864,"parent":1863,"range":{"startRow":149,"startColumn":19,"endRow":149,"endColumn":20},"token":{"leadingTrivia":"","kind":"integerLiteral("2")","trailingTrivia":""},"structure":[]},{"text":",","type":"other","id":1865,"parent":1862,"range":{"startRow":149,"startColumn":20,"endRow":149,"endColumn":21},"token":{"leadingTrivia":"","kind":"comma","trailingTrivia":"␣<\/span>"},"structure":[]},{"id":1866,"text":"ArrayElement","range":{"startRow":149,"startColumn":22,"endRow":149,"endColumn":24},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"value":{"text":"IntegerLiteralExprSyntax"},"name":"expression","ref":"IntegerLiteralExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"kind":"comma","text":","},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","parent":1857},{"id":1867,"text":"IntegerLiteralExpr","range":{"endRow":149,"startColumn":22,"endColumn":23,"startRow":149},"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"3","kind":"integerLiteral("3")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"type":"expr","parent":1866},{"text":"3","type":"other","id":1868,"parent":1867,"range":{"endRow":149,"endColumn":23,"startRow":149,"startColumn":22},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"integerLiteral("3")"},"structure":[]},{"text":",","type":"other","id":1869,"parent":1866,"range":{"endRow":149,"endColumn":24,"startRow":149,"startColumn":23},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"comma"},"structure":[]},{"id":1870,"text":"ArrayElement","range":{"endRow":149,"endColumn":27,"startRow":149,"startColumn":25},"structure":[{"name":"unexpectedBeforeExpression","value":{"text":"nil"}},{"name":"expression","ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"kind":"comma","text":","}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"type":"other","parent":1857},{"parent":1870,"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"4","kind":"integerLiteral("4")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"type":"expr","id":1871,"text":"IntegerLiteralExpr","range":{"endRow":149,"endColumn":26,"startColumn":25,"startRow":149}},{"text":"4","type":"other","id":1872,"parent":1871,"range":{"startColumn":25,"startRow":149,"endRow":149,"endColumn":26},"token":{"kind":"integerLiteral("4")","leadingTrivia":"","trailingTrivia":""},"structure":[]},{"id":1873,"structure":[],"range":{"startColumn":26,"startRow":149,"endRow":149,"endColumn":27},"text":",","token":{"kind":"comma","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"type":"other","parent":1870},{"parent":1857,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"value":{"text":"IntegerLiteralExprSyntax"},"name":"expression","ref":"IntegerLiteralExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"kind":"comma","text":","},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","id":1874,"text":"ArrayElement","range":{"startColumn":28,"startRow":149,"endRow":149,"endColumn":30}},{"parent":1874,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"5","kind":"integerLiteral("5")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr","id":1875,"text":"IntegerLiteralExpr","range":{"startColumn":28,"endRow":149,"endColumn":29,"startRow":149}},{"parent":1875,"structure":[],"range":{"endColumn":29,"startRow":149,"startColumn":28,"endRow":149},"text":"5","token":{"trailingTrivia":"","kind":"integerLiteral("5")","leadingTrivia":""},"id":1876,"type":"other"},{"parent":1874,"structure":[],"range":{"endColumn":30,"startRow":149,"startColumn":29,"endRow":149},"text":",","token":{"trailingTrivia":"␣<\/span>","kind":"comma","leadingTrivia":""},"id":1877,"type":"other"},{"range":{"endColumn":33,"startRow":149,"startColumn":31,"endRow":149},"id":1878,"type":"other","parent":1857,"text":"ArrayElement","structure":[{"name":"unexpectedBeforeExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":",","kind":"comma"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}]},{"range":{"startColumn":31,"startRow":149,"endColumn":32,"endRow":149},"id":1879,"type":"expr","parent":1878,"text":"IntegerLiteralExpr","structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"kind":"integerLiteral("6")","text":"6"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}]},{"parent":1879,"structure":[],"range":{"startRow":149,"endColumn":32,"startColumn":31,"endRow":149},"text":"6","token":{"kind":"integerLiteral("6")","leadingTrivia":"","trailingTrivia":""},"id":1880,"type":"other"},{"parent":1878,"structure":[],"range":{"startRow":149,"endColumn":33,"startColumn":32,"endRow":149},"text":",","token":{"kind":"comma","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"id":1881,"type":"other"},{"range":{"startRow":149,"endColumn":36,"startColumn":34,"endRow":149},"id":1882,"type":"other","parent":1857,"text":"ArrayElement","structure":[{"name":"unexpectedBeforeExpression","value":{"text":"nil"}},{"ref":"IntegerLiteralExprSyntax","name":"expression","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":",","kind":"comma"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}]},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"7","kind":"integerLiteral("7")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"parent":1882,"id":1883,"text":"IntegerLiteralExpr","type":"expr","range":{"startColumn":34,"endColumn":35,"endRow":149,"startRow":149}},{"type":"other","structure":[],"range":{"endRow":149,"startColumn":34,"endColumn":35,"startRow":149},"text":"7","token":{"leadingTrivia":"","trailingTrivia":"","kind":"integerLiteral("7")"},"id":1884,"parent":1883},{"type":"other","structure":[],"range":{"endRow":149,"startColumn":35,"endColumn":36,"startRow":149},"text":",","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"comma"},"id":1885,"parent":1882},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"kind":"comma","text":","},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"parent":1857,"id":1886,"text":"ArrayElement","type":"other","range":{"endRow":149,"startColumn":37,"endColumn":39,"startRow":149}},{"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"8","kind":"integerLiteral("8")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"parent":1886,"id":1887,"text":"IntegerLiteralExpr","type":"expr","range":{"endRow":149,"startRow":149,"endColumn":38,"startColumn":37}},{"parent":1887,"structure":[],"range":{"startColumn":37,"endColumn":38,"startRow":149,"endRow":149},"text":"8","token":{"trailingTrivia":"","leadingTrivia":"","kind":"integerLiteral("8")"},"type":"other","id":1888},{"parent":1886,"structure":[],"range":{"startColumn":38,"endColumn":39,"startRow":149,"endRow":149},"text":",","token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"comma"},"type":"other","id":1889},{"type":"other","id":1890,"text":"ArrayElement","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"kind":"comma","text":","},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"range":{"startColumn":40,"endColumn":42,"startRow":149,"endRow":149},"parent":1857},{"type":"expr","id":1891,"text":"IntegerLiteralExpr","structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"kind":"integerLiteral("9")","text":"9"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"range":{"startColumn":40,"startRow":149,"endRow":149,"endColumn":41},"parent":1890},{"parent":1891,"structure":[],"range":{"endRow":149,"startRow":149,"startColumn":40,"endColumn":41},"text":"9","token":{"kind":"integerLiteral("9")","trailingTrivia":"","leadingTrivia":""},"type":"other","id":1892},{"parent":1890,"structure":[],"range":{"endRow":149,"startRow":149,"startColumn":41,"endColumn":42},"text":",","token":{"kind":"comma","trailingTrivia":"␣<\/span>","leadingTrivia":""},"type":"other","id":1893},{"type":"other","id":1894,"text":"ArrayElement","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"ref":"IntegerLiteralExprSyntax","name":"expression","value":{"text":"IntegerLiteralExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"range":{"endRow":149,"startRow":149,"startColumn":43,"endColumn":45},"parent":1857},{"id":1895,"text":"IntegerLiteralExpr","range":{"endColumn":45,"startRow":149,"startColumn":43,"endRow":149},"type":"expr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"10","kind":"integerLiteral("10")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"parent":1894},{"parent":1895,"structure":[],"range":{"startRow":149,"endRow":149,"startColumn":43,"endColumn":45},"text":"10","token":{"leadingTrivia":"","kind":"integerLiteral("10")","trailingTrivia":""},"id":1896,"type":"other"},{"parent":1855,"structure":[],"range":{"startRow":149,"endRow":149,"startColumn":45,"endColumn":46},"text":"]","token":{"leadingTrivia":"","kind":"rightSquare","trailingTrivia":""},"id":1897,"type":"other"},{"id":1898,"text":"CodeBlockItem","range":{"startRow":150,"endRow":152,"startColumn":1,"endColumn":2},"type":"other","structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"ForStmtSyntax"},"ref":"ForStmtSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"parent":1},{"id":1899,"text":"ForStmt","range":{"endRow":152,"startRow":150,"startColumn":1,"endColumn":2},"type":"other","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeForKeyword"},{"name":"forKeyword","value":{"kind":"keyword(SwiftSyntax.Keyword.for)","text":"for"}},{"name":"unexpectedBetweenForKeywordAndTryKeyword","value":{"text":"nil"}},{"name":"tryKeyword","value":{"text":"nil"}},{"name":"unexpectedBetweenTryKeywordAndAwaitKeyword","value":{"text":"nil"}},{"name":"awaitKeyword","value":{"text":"nil"}},{"name":"unexpectedBetweenAwaitKeywordAndCaseKeyword","value":{"text":"nil"}},{"name":"caseKeyword","value":{"text":"nil"}},{"name":"unexpectedBetweenCaseKeywordAndPattern","value":{"text":"nil"}},{"name":"pattern","ref":"IdentifierPatternSyntax","value":{"text":"IdentifierPatternSyntax"}},{"name":"unexpectedBetweenPatternAndTypeAnnotation","value":{"text":"nil"}},{"name":"typeAnnotation","value":{"text":"nil"}},{"name":"unexpectedBetweenTypeAnnotationAndInKeyword","value":{"text":"nil"}},{"name":"inKeyword","value":{"kind":"keyword(SwiftSyntax.Keyword.in)","text":"in"}},{"name":"unexpectedBetweenInKeywordAndSequence","value":{"text":"nil"}},{"name":"sequence","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenSequenceAndWhereClause","value":{"text":"nil"}},{"name":"whereClause","ref":"WhereClauseSyntax","value":{"text":"WhereClauseSyntax"}},{"name":"unexpectedBetweenWhereClauseAndBody","value":{"text":"nil"}},{"ref":"CodeBlockSyntax","name":"body","value":{"text":"CodeBlockSyntax"}},{"name":"unexpectedAfterBody","value":{"text":"nil"}}],"parent":1898},{"id":1900,"structure":[],"range":{"startRow":150,"startColumn":1,"endRow":150,"endColumn":4},"text":"for","token":{"kind":"keyword(SwiftSyntax.Keyword.for)","trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>"},"type":"other","parent":1899},{"range":{"startRow":150,"startColumn":5,"endRow":150,"endColumn":11},"type":"pattern","structure":[{"name":"unexpectedBeforeIdentifier","value":{"text":"nil"}},{"name":"identifier","value":{"text":"number","kind":"identifier("number")"}},{"name":"unexpectedAfterIdentifier","value":{"text":"nil"}}],"parent":1899,"text":"IdentifierPattern","id":1901},{"id":1902,"structure":[],"range":{"endRow":150,"startRow":150,"startColumn":5,"endColumn":11},"text":"number","token":{"trailingTrivia":"␣<\/span>","kind":"identifier("number")","leadingTrivia":""},"type":"other","parent":1901},{"id":1903,"structure":[],"range":{"endRow":150,"startRow":150,"startColumn":12,"endColumn":14},"text":"in","token":{"trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.in)","leadingTrivia":""},"type":"other","parent":1899},{"range":{"endRow":150,"startRow":150,"startColumn":15,"endColumn":22},"type":"expr","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"numbers","kind":"identifier("numbers")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"parent":1899,"text":"DeclReferenceExpr","id":1904},{"id":1905,"structure":[],"range":{"endColumn":22,"endRow":150,"startRow":150,"startColumn":15},"text":"numbers","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"identifier("numbers")"},"type":"other","parent":1904},{"range":{"endColumn":44,"endRow":150,"startRow":150,"startColumn":23},"type":"other","structure":[{"name":"unexpectedBeforeWhereKeyword","value":{"text":"nil"}},{"name":"whereKeyword","value":{"text":"where","kind":"keyword(SwiftSyntax.Keyword.where)"}},{"name":"unexpectedBetweenWhereKeywordAndCondition","value":{"text":"nil"}},{"name":"condition","ref":"InfixOperatorExprSyntax","value":{"text":"InfixOperatorExprSyntax"}},{"name":"unexpectedAfterCondition","value":{"text":"nil"}}],"parent":1899,"text":"WhereClause","id":1906},{"type":"other","structure":[],"range":{"startColumn":23,"endRow":150,"startRow":150,"endColumn":28},"text":"where","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.where)"},"id":1907,"parent":1906},{"parent":1906,"range":{"startColumn":29,"endRow":150,"startRow":150,"endColumn":44},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftOperand"},{"value":{"text":"InfixOperatorExprSyntax"},"name":"leftOperand","ref":"InfixOperatorExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftOperandAndOperator"},{"value":{"text":"BinaryOperatorExprSyntax"},"name":"operator","ref":"BinaryOperatorExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenOperatorAndRightOperand"},{"value":{"text":"IntegerLiteralExprSyntax"},"name":"rightOperand","ref":"IntegerLiteralExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterRightOperand"}],"id":1908,"text":"InfixOperatorExpr","type":"expr"},{"parent":1908,"range":{"startRow":150,"endColumn":39,"endRow":150,"startColumn":29},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftOperand"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"leftOperand"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftOperandAndOperator"},{"value":{"text":"BinaryOperatorExprSyntax"},"ref":"BinaryOperatorExprSyntax","name":"operator"},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"name":"rightOperand","value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax"},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}],"id":1909,"text":"InfixOperatorExpr","type":"expr"},{"text":"DeclReferenceExpr","parent":1909,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("number")","text":"number"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"range":{"startRow":150,"endRow":150,"endColumn":35,"startColumn":29},"type":"expr","id":1910},{"id":1911,"structure":[],"range":{"startColumn":29,"endRow":150,"endColumn":35,"startRow":150},"text":"number","token":{"leadingTrivia":"","kind":"identifier("number")","trailingTrivia":"␣<\/span>"},"type":"other","parent":1910},{"text":"BinaryOperatorExpr","parent":1909,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOperator"},{"value":{"text":"%","kind":"binaryOperator("%")"},"name":"operator"},{"value":{"text":"nil"},"name":"unexpectedAfterOperator"}],"range":{"startColumn":36,"endRow":150,"endColumn":37,"startRow":150},"type":"expr","id":1912},{"id":1913,"structure":[],"range":{"endColumn":37,"endRow":150,"startColumn":36,"startRow":150},"text":"%","token":{"leadingTrivia":"","kind":"binaryOperator("%")","trailingTrivia":"␣<\/span>"},"type":"other","parent":1912},{"text":"IntegerLiteralExpr","parent":1909,"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"2","kind":"integerLiteral("2")"}},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"range":{"endColumn":39,"endRow":150,"startColumn":38,"startRow":150},"type":"expr","id":1914},{"type":"other","structure":[],"range":{"endColumn":39,"startRow":150,"endRow":150,"startColumn":38},"text":"2","token":{"kind":"integerLiteral("2")","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"id":1915,"parent":1914},{"range":{"endColumn":42,"startRow":150,"endRow":150,"startColumn":40},"parent":1908,"structure":[{"name":"unexpectedBeforeOperator","value":{"text":"nil"}},{"name":"operator","value":{"kind":"binaryOperator("==")","text":"=="}},{"name":"unexpectedAfterOperator","value":{"text":"nil"}}],"id":1916,"type":"expr","text":"BinaryOperatorExpr"},{"id":1917,"token":{"kind":"binaryOperator("==")","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"endRow":150,"startRow":150,"startColumn":40,"endColumn":42},"text":"==","type":"other","parent":1916,"structure":[]},{"range":{"endRow":150,"startRow":150,"startColumn":43,"endColumn":44},"parent":1908,"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"0","kind":"integerLiteral("0")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"id":1918,"type":"expr","text":"IntegerLiteralExpr"},{"id":1919,"token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"integerLiteral("0")"},"range":{"endRow":150,"startRow":150,"endColumn":44,"startColumn":43},"text":"0","type":"other","parent":1918,"structure":[]},{"range":{"endRow":152,"startRow":150,"endColumn":2,"startColumn":45},"parent":1899,"structure":[{"name":"unexpectedBeforeLeftBrace","value":{"text":"nil"}},{"name":"leftBrace","value":{"text":"{","kind":"leftBrace"}},{"name":"unexpectedBetweenLeftBraceAndStatements","value":{"text":"nil"}},{"ref":"CodeBlockItemListSyntax","name":"statements","value":{"text":"CodeBlockItemListSyntax"}},{"name":"unexpectedBetweenStatementsAndRightBrace","value":{"text":"nil"}},{"value":{"kind":"rightBrace","text":"}"},"name":"rightBrace"},{"value":{"text":"nil"},"name":"unexpectedAfterRightBrace"}],"id":1920,"type":"other","text":"CodeBlock"},{"id":1921,"token":{"trailingTrivia":"","kind":"leftBrace","leadingTrivia":""},"range":{"endColumn":46,"startRow":150,"startColumn":45,"endRow":150},"text":"{","type":"other","parent":1920,"structure":[]},{"text":"CodeBlockItemList","range":{"endColumn":36,"startRow":151,"startColumn":5,"endRow":151},"structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"1"}}],"type":"collection","id":1922,"parent":1920},{"text":"CodeBlockItem","range":{"startColumn":5,"startRow":151,"endColumn":36,"endRow":151},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"FunctionCallExprSyntax"},"ref":"FunctionCallExprSyntax","name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","id":1923,"parent":1922},{"text":"FunctionCallExpr","range":{"endRow":151,"endColumn":36,"startColumn":5,"startRow":151},"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"value":{"text":"LabeledExprListSyntax"},"name":"arguments","ref":"LabeledExprListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"value":{"text":"MultipleTrailingClosureElementListSyntax"},"name":"additionalTrailingClosures","ref":"MultipleTrailingClosureElementListSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}],"type":"expr","id":1924,"parent":1923},{"text":"DeclReferenceExpr","range":{"endRow":151,"startRow":151,"endColumn":10,"startColumn":5},"parent":1924,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("print")","text":"print"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","id":1925},{"id":1926,"token":{"kind":"identifier("print")","trailingTrivia":"","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"range":{"startRow":151,"endRow":151,"startColumn":5,"endColumn":10},"text":"print","type":"other","parent":1925,"structure":[]},{"id":1927,"token":{"kind":"leftParen","trailingTrivia":"","leadingTrivia":""},"range":{"startRow":151,"endRow":151,"startColumn":10,"endColumn":11},"text":"(","type":"other","parent":1924,"structure":[]},{"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"value":{"text":"1"},"name":"Count"}],"type":"collection","id":1928,"parent":1924,"text":"LabeledExprList","range":{"startRow":151,"startColumn":11,"endRow":151,"endColumn":35}},{"parent":1928,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"range":{"endRow":151,"endColumn":35,"startRow":151,"startColumn":11},"text":"LabeledExpr","type":"other","id":1929},{"parent":1929,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"kind":"stringQuote","text":"""},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"ref":"StringLiteralSegmentListSyntax","value":{"text":"StringLiteralSegmentListSyntax"},"name":"segments"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"kind":"stringQuote","text":"""},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"range":{"startColumn":11,"startRow":151,"endRow":151,"endColumn":35},"text":"StringLiteralExpr","type":"expr","id":1930},{"id":1931,"token":{"kind":"stringQuote","trailingTrivia":"","leadingTrivia":""},"range":{"endColumn":12,"startColumn":11,"endRow":151,"startRow":151},"text":""","type":"other","parent":1930,"structure":[]},{"text":"StringLiteralSegmentList","range":{"endColumn":34,"startColumn":12,"endRow":151,"startRow":151},"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"3"}}],"id":1932,"type":"collection","parent":1930},{"text":"StringSegment","range":{"endRow":151,"startRow":151,"endColumn":25,"startColumn":12},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"Even number: ","kind":"stringSegment("Even number: ")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"id":1933,"type":"other","parent":1932},{"id":1934,"token":{"leadingTrivia":"","kind":"stringSegment("Even number: ")","trailingTrivia":""},"range":{"startColumn":12,"endRow":151,"endColumn":25,"startRow":151},"text":"Even␣<\/span>number:␣<\/span>","type":"other","parent":1933,"structure":[]},{"text":"ExpressionSegment","range":{"startColumn":25,"endRow":151,"endColumn":34,"startRow":151},"structure":[{"name":"unexpectedBeforeBackslash","value":{"text":"nil"}},{"name":"backslash","value":{"kind":"backslash","text":"\\"}},{"name":"unexpectedBetweenBackslashAndPounds","value":{"text":"nil"}},{"name":"pounds","value":{"text":"nil"}},{"name":"unexpectedBetweenPoundsAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndExpressions","value":{"text":"nil"}},{"name":"expressions","ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenExpressionsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}],"id":1935,"type":"other","parent":1932},{"id":1936,"token":{"leadingTrivia":"","kind":"backslash","trailingTrivia":""},"range":{"startRow":151,"endColumn":26,"endRow":151,"startColumn":25},"text":"\\","type":"other","parent":1935,"structure":[]},{"id":1937,"token":{"leadingTrivia":"","kind":"leftParen","trailingTrivia":""},"range":{"startRow":151,"endColumn":27,"endRow":151,"startColumn":26},"text":"(","type":"other","parent":1935,"structure":[]},{"parent":1935,"text":"LabeledExprList","type":"collection","range":{"startRow":151,"endColumn":33,"endRow":151,"startColumn":27},"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":1938},{"parent":1938,"text":"LabeledExpr","type":"other","range":{"startRow":151,"startColumn":27,"endRow":151,"endColumn":33},"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"name":"expression","ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"id":1939},{"parent":1939,"type":"expr","id":1940,"range":{"startColumn":27,"endRow":151,"startRow":151,"endColumn":33},"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("number")","text":"number"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"text":"DeclReferenceExpr"},{"id":1941,"token":{"leadingTrivia":"","kind":"identifier("number")","trailingTrivia":""},"range":{"endRow":151,"startRow":151,"endColumn":33,"startColumn":27},"text":"number","type":"other","parent":1940,"structure":[]},{"id":1942,"token":{"leadingTrivia":"","kind":"rightParen","trailingTrivia":""},"range":{"endRow":151,"startRow":151,"endColumn":34,"startColumn":33},"text":")","type":"other","parent":1935,"structure":[]},{"parent":1932,"type":"other","id":1943,"range":{"endRow":151,"startRow":151,"endColumn":34,"startColumn":34},"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":"","kind":"stringSegment("")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"text":"StringSegment"},{"id":1944,"token":{"trailingTrivia":"","kind":"stringSegment("")","leadingTrivia":""},"range":{"endRow":151,"startColumn":34,"startRow":151,"endColumn":34},"text":"","type":"other","parent":1943,"structure":[]},{"id":1945,"token":{"leadingTrivia":"","kind":"stringQuote","trailingTrivia":""},"range":{"endColumn":35,"startColumn":34,"startRow":151,"endRow":151},"text":""","type":"other","parent":1930,"structure":[]},{"id":1946,"token":{"leadingTrivia":"","kind":"rightParen","trailingTrivia":""},"range":{"endColumn":36,"startColumn":35,"startRow":151,"endRow":151},"text":")","type":"other","parent":1924,"structure":[]},{"text":"MultipleTrailingClosureElementList","type":"collection","structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"parent":1924,"id":1947,"range":{"endColumn":36,"startColumn":36,"startRow":151,"endRow":151}},{"id":1948,"token":{"kind":"rightBrace","trailingTrivia":"","leadingTrivia":"↲<\/span>"},"range":{"endColumn":2,"startColumn":1,"startRow":152,"endRow":152},"text":"}","type":"other","parent":1920,"structure":[]},{"id":1949,"token":{"kind":"endOfFile","trailingTrivia":"","leadingTrivia":"↲<\/span>↲<\/span>↲<\/span>"},"range":{"endColumn":1,"startColumn":1,"startRow":155,"endRow":155},"text":"","type":"other","parent":0,"structure":[]}] diff --git a/Examples/Completed/errors_async/code.swift b/Examples/Completed/errors_async/code.swift new file mode 100644 index 0000000..7a081a7 --- /dev/null +++ b/Examples/Completed/errors_async/code.swift @@ -0,0 +1,23 @@ + +var vendingMachine = VendingMachine() +vendingMachine.coinsDeposited = 8 +do { + try buyFavoriteSnack(person: "Alice", vendingMachine: vendingMachine) + print("Success! Yum.") +} catch VendingMachineError.invalidSelection { + print("Invalid Selection.") +} catch VendingMachineError.outOfStock { + print("Out of Stock.") +} catch VendingMachineError.insufficientFunds(let coinsNeeded) { + print("Insufficient funds. Please insert an additional \(coinsNeeded) coins.") +} catch { + print("Unexpected error: \(error).") +} + +func summarize(_ ratings: [Int]) throws(StatisticsError) { + guard !ratings.isEmpty else { throw .noRatings } +} + +async let data = fetchUserData(id: 1) +async let posts = fetchUserPosts(id: 1) +let (fetchedData, fetchedPosts) = try await (data, posts) \ No newline at end of file diff --git a/Examples/Completed/errors_async/dsl.swift b/Examples/Completed/errors_async/dsl.swift new file mode 100644 index 0000000..aad5087 --- /dev/null +++ b/Examples/Completed/errors_async/dsl.swift @@ -0,0 +1,74 @@ +Variable(.var, name: "vendingMachine", equals: Init("VendingMachine")) +Assignment("vendingMachine.coinsDeposited", Literal.integer(8)) +Do { + Call("buyFavoriteSnack") { + ParameterExp(name: "person", value: Literal.string("Alice")) + ParameterExp(name: "vendingMachine", value: Literal.ref("vendingMachine")) + }.throwing() + Call("print") { + ParameterExp(unlabeled: Literal.string("Success! Yum.")) + } +} catch: { + Catch(EnumCase("invalidSelection")) { + Call("print") { + ParameterExp(unlabeled: Literal.string("Invalid Selection.")) + } + } + Catch(EnumCase("outOfStock")) { + Call("print") { + ParameterExp(unlabeled: Literal.string("Out of Stock.")) + } + } + Catch( + EnumCase("insufficientFunds").associatedValue( + "coinsNeeded", type: "Int") + ) { + Call("print") { + ParameterExp( + unlabeled: Literal.string( + "Insufficient funds. Please insert an additional \\(coinsNeeded) coins.")) + } + } + Catch { + Call("print") { + ParameterExp(unlabeled: Literal.string("Unexpected error: \\(error).")) + } + } +} + +Function("summarize") { + Parameter(name: "ratings", type: "[Int]") +} _: { + Guard{ + VariableExp("ratings").property("isEmpty").not() + } else: { + Throw(EnumCase("noRatings")) + } +}.throws("StatisticsError") + +Do { + Variable(.let, name: "data") { + Call("fetchUserData") { + ParameterExp(name: "id", value: Literal.integer(1)) + } + }.async() + Variable(.let, name: "posts") { + Call("fetchUserPosts") { + ParameterExp(name: "id", value: Literal.integer(1)) + } + }.async() + TupleAssignment(["fetchedData", "fetchedPosts"], equals: Tuple { + VariableExp("data") + VariableExp("posts") + }).async().throwing() +} catch: { + Catch(EnumCase("fetchError")) { + // Example catch for async/await + } +} + + + + + + diff --git a/Examples/Completed/errors_async/syntax.json b/Examples/Completed/errors_async/syntax.json new file mode 100644 index 0000000..617a398 --- /dev/null +++ b/Examples/Completed/errors_async/syntax.json @@ -0,0 +1 @@ +[{"range":{"startRow":2,"endColumn":58,"startColumn":1,"endRow":23},"type":"other","id":0,"text":"SourceFile","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeShebang"},{"value":{"text":"nil"},"name":"shebang"},{"value":{"text":"nil"},"name":"unexpectedBetweenShebangAndStatements"},{"value":{"text":"CodeBlockItemListSyntax"},"name":"statements","ref":"CodeBlockItemListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenStatementsAndEndOfFileToken"},{"value":{"text":"","kind":"endOfFile"},"name":"endOfFileToken"},{"value":{"text":"nil"},"name":"unexpectedAfterEndOfFileToken"}]},{"range":{"startColumn":1,"endColumn":58,"startRow":2,"endRow":23},"type":"collection","id":1,"parent":0,"text":"CodeBlockItemList","structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"7"}}]},{"range":{"startColumn":1,"endColumn":38,"startRow":2,"endRow":2},"type":"other","id":2,"parent":1,"text":"CodeBlockItem","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"VariableDeclSyntax"},"name":"item","ref":"VariableDeclSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}]},{"range":{"startColumn":1,"endColumn":38,"startRow":2,"endRow":2},"type":"decl","id":3,"parent":2,"text":"VariableDecl","structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","value":{"text":"AttributeListSyntax"},"ref":"AttributeListSyntax"},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax"},{"name":"unexpectedBetweenModifiersAndBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"kind":"keyword(SwiftSyntax.Keyword.var)","text":"var"}},{"name":"unexpectedBetweenBindingSpecifierAndBindings","value":{"text":"nil"}},{"name":"bindings","value":{"text":"PatternBindingListSyntax"},"ref":"PatternBindingListSyntax"},{"name":"unexpectedAfterBindings","value":{"text":"nil"}}]},{"range":{"startColumn":1,"endColumn":1,"startRow":1,"endRow":1},"type":"collection","id":4,"parent":3,"text":"AttributeList","structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}]},{"range":{"startColumn":1,"endColumn":1,"startRow":1,"endRow":1},"type":"collection","id":5,"parent":3,"text":"DeclModifierList","structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}]},{"range":{"startColumn":1,"endColumn":4,"startRow":2,"endRow":2},"token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.var)"},"type":"other","structure":[],"id":6,"text":"var","parent":3},{"range":{"endRow":2,"startRow":2,"startColumn":5,"endColumn":38},"id":7,"text":"PatternBindingList","type":"collection","parent":3,"structure":[{"name":"Element","value":{"text":"PatternBindingSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"range":{"endColumn":38,"startColumn":5,"endRow":2,"startRow":2},"id":8,"text":"PatternBinding","type":"other","parent":7,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"value":{"text":"IdentifierPatternSyntax"},"ref":"IdentifierPatternSyntax","name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTypeAnnotation"},{"value":{"text":"nil"},"name":"typeAnnotation"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAnnotationAndInitializer"},{"value":{"text":"InitializerClauseSyntax"},"ref":"InitializerClauseSyntax","name":"initializer"},{"value":{"text":"nil"},"name":"unexpectedBetweenInitializerAndAccessorBlock"},{"value":{"text":"nil"},"name":"accessorBlock"},{"value":{"text":"nil"},"name":"unexpectedBetweenAccessorBlockAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}]},{"range":{"endRow":2,"startRow":2,"endColumn":19,"startColumn":5},"id":9,"text":"IdentifierPattern","type":"pattern","parent":8,"structure":[{"name":"unexpectedBeforeIdentifier","value":{"text":"nil"}},{"name":"identifier","value":{"text":"vendingMachine","kind":"identifier("vendingMachine")"}},{"name":"unexpectedAfterIdentifier","value":{"text":"nil"}}]},{"text":"vendingMachine","parent":9,"structure":[],"type":"other","id":10,"range":{"startColumn":5,"startRow":2,"endRow":2,"endColumn":19},"token":{"kind":"identifier("vendingMachine")","trailingTrivia":"␣<\/span>","leadingTrivia":""}},{"range":{"startColumn":20,"startRow":2,"endRow":2,"endColumn":38},"id":11,"text":"InitializerClause","type":"other","parent":8,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeEqual"},{"value":{"text":"=","kind":"equal"},"name":"equal"},{"value":{"text":"nil"},"name":"unexpectedBetweenEqualAndValue"},{"value":{"text":"FunctionCallExprSyntax"},"ref":"FunctionCallExprSyntax","name":"value"},{"value":{"text":"nil"},"name":"unexpectedAfterValue"}]},{"structure":[],"parent":11,"range":{"startColumn":20,"endRow":2,"startRow":2,"endColumn":21},"type":"other","token":{"kind":"equal","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"text":"=","id":12},{"range":{"startColumn":22,"endRow":2,"startRow":2,"endColumn":38},"id":13,"text":"FunctionCallExpr","type":"expr","parent":11,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"calledExpression"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax","name":"arguments"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"value":{"text":"MultipleTrailingClosureElementListSyntax"},"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}]},{"range":{"endColumn":36,"startColumn":22,"endRow":2,"startRow":2},"id":14,"text":"DeclReferenceExpr","type":"expr","parent":13,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("VendingMachine")","text":"VendingMachine"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}]},{"text":"VendingMachine","id":15,"structure":[],"range":{"startRow":2,"endRow":2,"startColumn":22,"endColumn":36},"parent":14,"type":"other","token":{"leadingTrivia":"","kind":"identifier("VendingMachine")","trailingTrivia":""}},{"id":16,"text":"(","structure":[],"type":"other","token":{"leadingTrivia":"","kind":"leftParen","trailingTrivia":""},"range":{"startRow":2,"endRow":2,"startColumn":36,"endColumn":37},"parent":13},{"range":{"startRow":2,"endRow":2,"startColumn":37,"endColumn":37},"id":17,"text":"LabeledExprList","type":"collection","parent":13,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"0"}}]},{"id":18,"structure":[],"range":{"endRow":2,"startRow":2,"endColumn":38,"startColumn":37},"text":")","type":"other","token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":""},"parent":13},{"range":{"endRow":2,"startRow":2,"endColumn":38,"startColumn":38},"id":19,"text":"MultipleTrailingClosureElementList","type":"collection","parent":13,"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}]},{"range":{"startRow":3,"endRow":3,"startColumn":1,"endColumn":34},"id":20,"text":"CodeBlockItem","type":"other","parent":1,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","ref":"InfixOperatorExprSyntax","value":{"text":"InfixOperatorExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}]},{"range":{"startRow":3,"startColumn":1,"endRow":3,"endColumn":34},"id":21,"text":"InfixOperatorExpr","type":"expr","parent":20,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftOperand"},{"ref":"MemberAccessExprSyntax","value":{"text":"MemberAccessExprSyntax"},"name":"leftOperand"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftOperandAndOperator"},{"ref":"AssignmentExprSyntax","value":{"text":"AssignmentExprSyntax"},"name":"operator"},{"value":{"text":"nil"},"name":"unexpectedBetweenOperatorAndRightOperand"},{"ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"},"name":"rightOperand"},{"value":{"text":"nil"},"name":"unexpectedAfterRightOperand"}]},{"range":{"endColumn":30,"startRow":3,"startColumn":1,"endRow":3},"id":22,"text":"MemberAccessExpr","type":"expr","parent":21,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBase"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"base"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseAndPeriod"},{"value":{"text":".","kind":"period"},"name":"period"},{"value":{"text":"nil"},"name":"unexpectedBetweenPeriodAndDeclName"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"declName"},{"value":{"text":"nil"},"name":"unexpectedAfterDeclName"}]},{"range":{"startRow":3,"startColumn":1,"endRow":3,"endColumn":15},"id":23,"text":"DeclReferenceExpr","type":"expr","parent":22,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"vendingMachine","kind":"identifier("vendingMachine")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"id":24,"text":"vendingMachine","structure":[],"parent":23,"range":{"endColumn":15,"startRow":3,"startColumn":1,"endRow":3},"type":"other","token":{"leadingTrivia":"↲<\/span>","kind":"identifier("vendingMachine")","trailingTrivia":""}},{"parent":22,"text":".","id":25,"token":{"leadingTrivia":"","kind":"period","trailingTrivia":""},"structure":[],"type":"other","range":{"endColumn":16,"startRow":3,"startColumn":15,"endRow":3}},{"range":{"endColumn":30,"startRow":3,"startColumn":16,"endRow":3},"id":26,"text":"DeclReferenceExpr","type":"expr","parent":22,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"coinsDeposited","kind":"identifier("coinsDeposited")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"type":"other","range":{"startRow":3,"startColumn":16,"endRow":3,"endColumn":30},"structure":[],"id":27,"text":"coinsDeposited","token":{"kind":"identifier("coinsDeposited")","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"parent":26},{"range":{"startRow":3,"startColumn":31,"endRow":3,"endColumn":32},"id":28,"text":"AssignmentExpr","type":"expr","parent":21,"structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"kind":"equal","text":"="}},{"name":"unexpectedAfterEqual","value":{"text":"nil"}}]},{"id":29,"text":"=","structure":[],"parent":28,"range":{"startColumn":31,"endRow":3,"startRow":3,"endColumn":32},"type":"other","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"equal"}},{"range":{"startColumn":33,"endRow":3,"startRow":3,"endColumn":34},"id":30,"text":"IntegerLiteralExpr","type":"expr","parent":21,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"8","kind":"integerLiteral("8")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}]},{"range":{"startRow":3,"endColumn":34,"endRow":3,"startColumn":33},"id":31,"text":"8","type":"other","parent":30,"structure":[],"token":{"trailingTrivia":"","kind":"integerLiteral("8")","leadingTrivia":""}},{"range":{"startRow":4,"endColumn":2,"endRow":15,"startColumn":1},"id":32,"text":"CodeBlockItem","type":"other","parent":1,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","ref":"DoStmtSyntax","value":{"text":"DoStmtSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}]},{"range":{"endColumn":2,"endRow":15,"startColumn":1,"startRow":4},"id":33,"text":"DoStmt","type":"other","parent":32,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeDoKeyword"},{"value":{"text":"do","kind":"keyword(SwiftSyntax.Keyword.do)"},"name":"doKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenDoKeywordAndThrowsClause"},{"value":{"text":"nil"},"name":"throwsClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenThrowsClauseAndBody"},{"value":{"text":"CodeBlockSyntax"},"ref":"CodeBlockSyntax","name":"body"},{"value":{"text":"nil"},"name":"unexpectedBetweenBodyAndCatchClauses"},{"value":{"text":"CatchClauseListSyntax"},"ref":"CatchClauseListSyntax","name":"catchClauses"},{"value":{"text":"nil"},"name":"unexpectedAfterCatchClauses"}]},{"structure":[],"id":34,"type":"other","range":{"startRow":4,"endRow":4,"endColumn":3,"startColumn":1},"parent":33,"token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.do)"},"text":"do"},{"range":{"startRow":4,"endRow":7,"endColumn":2,"startColumn":4},"id":35,"text":"CodeBlock","type":"other","parent":33,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftBrace"},{"value":{"kind":"leftBrace","text":"{"},"name":"leftBrace"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftBraceAndStatements"},{"value":{"text":"CodeBlockItemListSyntax"},"name":"statements","ref":"CodeBlockItemListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenStatementsAndRightBrace"},{"value":{"kind":"rightBrace","text":"}"},"name":"rightBrace"},{"value":{"text":"nil"},"name":"unexpectedAfterRightBrace"}]},{"range":{"endRow":4,"startRow":4,"startColumn":4,"endColumn":5},"text":"{","parent":35,"token":{"leadingTrivia":"","kind":"leftBrace","trailingTrivia":""},"id":36,"structure":[],"type":"other"},{"range":{"endRow":6,"startRow":5,"startColumn":5,"endColumn":27},"id":37,"text":"CodeBlockItemList","type":"collection","parent":35,"structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"2"}}]},{"range":{"startColumn":5,"endRow":5,"endColumn":74,"startRow":5},"id":38,"text":"CodeBlockItem","type":"other","parent":37,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"TryExprSyntax"},"ref":"TryExprSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}]},{"range":{"startColumn":5,"endRow":5,"startRow":5,"endColumn":74},"id":39,"text":"TryExpr","type":"expr","parent":38,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeTryKeyword"},{"value":{"text":"try","kind":"keyword(SwiftSyntax.Keyword.try)"},"name":"tryKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenTryKeywordAndQuestionOrExclamationMark"},{"value":{"text":"nil"},"name":"questionOrExclamationMark"},{"value":{"text":"nil"},"name":"unexpectedBetweenQuestionOrExclamationMarkAndExpression"},{"value":{"text":"FunctionCallExprSyntax"},"ref":"FunctionCallExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedAfterExpression"}]},{"id":40,"parent":39,"type":"other","structure":[],"token":{"trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.try)","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"text":"try","range":{"endRow":5,"startColumn":5,"startRow":5,"endColumn":8}},{"range":{"endRow":5,"startColumn":9,"startRow":5,"endColumn":74},"id":41,"text":"FunctionCallExpr","type":"expr","parent":39,"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"kind":"leftParen","text":"("}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"ref":"LabeledExprListSyntax","name":"arguments","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"kind":"rightParen","text":")"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}]},{"range":{"endRow":5,"endColumn":25,"startRow":5,"startColumn":9},"id":42,"text":"DeclReferenceExpr","type":"expr","parent":41,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"buyFavoriteSnack","kind":"identifier("buyFavoriteSnack")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"structure":[],"type":"other","text":"buyFavoriteSnack","range":{"startRow":5,"startColumn":9,"endRow":5,"endColumn":25},"id":43,"parent":42,"token":{"trailingTrivia":"","kind":"identifier("buyFavoriteSnack")","leadingTrivia":""}},{"type":"other","structure":[],"parent":41,"id":44,"range":{"startRow":5,"startColumn":25,"endRow":5,"endColumn":26},"token":{"trailingTrivia":"","kind":"leftParen","leadingTrivia":""},"text":"("},{"range":{"startRow":5,"startColumn":26,"endRow":5,"endColumn":73},"id":45,"text":"LabeledExprList","type":"collection","parent":41,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"2"}}]},{"range":{"startColumn":26,"endRow":5,"endColumn":42,"startRow":5},"id":46,"text":"LabeledExpr","type":"other","parent":45,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"person","kind":"identifier("person")"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":":","kind":"colon"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"StringLiteralExprSyntax"},"name":"expression","ref":"StringLiteralExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"kind":"comma","text":","},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}]},{"token":{"trailingTrivia":"","kind":"identifier("person")","leadingTrivia":""},"range":{"endRow":5,"startColumn":26,"startRow":5,"endColumn":32},"type":"other","text":"person","parent":46,"id":47,"structure":[]},{"type":"other","token":{"trailingTrivia":"␣<\/span>","kind":"colon","leadingTrivia":""},"structure":[],"text":":","id":48,"range":{"endRow":5,"startColumn":32,"startRow":5,"endColumn":33},"parent":46},{"range":{"endRow":5,"startColumn":34,"startRow":5,"endColumn":41},"id":49,"text":"StringLiteralExpr","type":"expr","parent":46,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"kind":"stringQuote","text":"""},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"value":{"text":"StringLiteralSegmentListSyntax"},"ref":"StringLiteralSegmentListSyntax","name":"segments"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"kind":"stringQuote","text":"""},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}]},{"text":""","type":"other","structure":[],"parent":49,"token":{"trailingTrivia":"","kind":"stringQuote","leadingTrivia":""},"range":{"startRow":5,"startColumn":34,"endRow":5,"endColumn":35},"id":50},{"range":{"startRow":5,"startColumn":35,"endRow":5,"endColumn":40},"id":51,"text":"StringLiteralSegmentList","type":"collection","parent":49,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"1"}}]},{"range":{"endColumn":40,"startRow":5,"startColumn":35,"endRow":5},"id":52,"text":"StringSegment","type":"other","parent":51,"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":"Alice","kind":"stringSegment("Alice")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}]},{"id":53,"text":"Alice","token":{"kind":"stringSegment("Alice")","leadingTrivia":"","trailingTrivia":""},"parent":52,"structure":[],"range":{"endRow":5,"endColumn":40,"startRow":5,"startColumn":35},"type":"other"},{"range":{"endRow":5,"endColumn":41,"startRow":5,"startColumn":40},"token":{"kind":"stringQuote","leadingTrivia":"","trailingTrivia":""},"structure":[],"id":54,"text":""","parent":49,"type":"other"},{"structure":[],"type":"other","text":",","token":{"kind":"comma","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"parent":46,"range":{"endRow":5,"endColumn":42,"startRow":5,"startColumn":41},"id":55},{"range":{"endRow":5,"endColumn":73,"startRow":5,"startColumn":43},"id":56,"text":"LabeledExpr","type":"other","parent":45,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"kind":"identifier("vendingMachine")","text":"vendingMachine"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"kind":"colon","text":":"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}]},{"structure":[],"parent":56,"type":"other","token":{"kind":"identifier("vendingMachine")","trailingTrivia":"","leadingTrivia":""},"range":{"startColumn":43,"endRow":5,"startRow":5,"endColumn":57},"id":57,"text":"vendingMachine"},{"parent":56,"id":58,"text":":","token":{"kind":"colon","trailingTrivia":"␣<\/span>","leadingTrivia":""},"structure":[],"range":{"startColumn":57,"endRow":5,"startRow":5,"endColumn":58},"type":"other"},{"range":{"startColumn":59,"endRow":5,"startRow":5,"endColumn":73},"id":59,"text":"DeclReferenceExpr","type":"expr","parent":56,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"vendingMachine","kind":"identifier("vendingMachine")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"parent":59,"structure":[],"range":{"endRow":5,"endColumn":73,"startColumn":59,"startRow":5},"id":60,"text":"vendingMachine","token":{"kind":"identifier("vendingMachine")","leadingTrivia":"","trailingTrivia":""},"type":"other"},{"type":"other","id":61,"range":{"endRow":5,"endColumn":74,"startColumn":73,"startRow":5},"parent":41,"token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":""},"text":")","structure":[]},{"range":{"endRow":5,"endColumn":74,"startColumn":74,"startRow":5},"id":62,"text":"MultipleTrailingClosureElementList","type":"collection","parent":41,"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}]},{"range":{"startRow":6,"endRow":6,"endColumn":27,"startColumn":5},"id":63,"text":"CodeBlockItem","type":"other","parent":37,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"FunctionCallExprSyntax","name":"item","value":{"text":"FunctionCallExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}]},{"range":{"endColumn":27,"startRow":6,"startColumn":5,"endRow":6},"id":64,"text":"FunctionCallExpr","type":"expr","parent":63,"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"ref":"LabeledExprListSyntax","name":"arguments","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"kind":"rightParen","text":")"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}]},{"range":{"startRow":6,"startColumn":5,"endRow":6,"endColumn":10},"id":65,"text":"DeclReferenceExpr","type":"expr","parent":64,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("print")","text":"print"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}]},{"parent":65,"structure":[],"text":"print","id":66,"type":"other","token":{"trailingTrivia":"","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","kind":"identifier("print")"},"range":{"startColumn":5,"endRow":6,"startRow":6,"endColumn":10}},{"text":"(","token":{"trailingTrivia":"","leadingTrivia":"","kind":"leftParen"},"structure":[],"range":{"startColumn":10,"endRow":6,"startRow":6,"endColumn":11},"id":67,"type":"other","parent":64},{"range":{"startColumn":11,"endRow":6,"startRow":6,"endColumn":26},"id":68,"text":"LabeledExprList","type":"collection","parent":64,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"range":{"startRow":6,"endRow":6,"startColumn":11,"endColumn":26},"id":69,"text":"LabeledExpr","type":"other","parent":68,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}]},{"range":{"endColumn":26,"startRow":6,"startColumn":11,"endRow":6},"id":70,"text":"StringLiteralExpr","type":"expr","parent":69,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"kind":"stringQuote","text":"""},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"ref":"StringLiteralSegmentListSyntax","value":{"text":"StringLiteralSegmentListSyntax"},"name":"segments"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"kind":"stringQuote","text":"""},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}]},{"structure":[],"range":{"endColumn":12,"startColumn":11,"startRow":6,"endRow":6},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"id":71,"parent":70,"text":""","type":"other"},{"range":{"endColumn":25,"startColumn":12,"startRow":6,"endRow":6},"id":72,"text":"StringLiteralSegmentList","type":"collection","parent":70,"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}]},{"range":{"endRow":6,"endColumn":25,"startColumn":12,"startRow":6},"id":73,"text":"StringSegment","type":"other","parent":72,"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":"Success! Yum.","kind":"stringSegment("Success! Yum.")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}]},{"type":"other","parent":73,"structure":[],"text":"Success!␣<\/span>Yum.","token":{"kind":"stringSegment("Success! Yum.")","trailingTrivia":"","leadingTrivia":""},"range":{"startRow":6,"endColumn":25,"startColumn":12,"endRow":6},"id":74},{"type":"other","text":""","structure":[],"token":{"kind":"stringQuote","trailingTrivia":"","leadingTrivia":""},"parent":70,"range":{"startRow":6,"endColumn":26,"startColumn":25,"endRow":6},"id":75},{"type":"other","id":76,"range":{"startRow":6,"endColumn":27,"startColumn":26,"endRow":6},"parent":64,"token":{"kind":"rightParen","trailingTrivia":"","leadingTrivia":""},"structure":[],"text":")"},{"range":{"startRow":6,"endColumn":27,"startColumn":27,"endRow":6},"id":77,"text":"MultipleTrailingClosureElementList","type":"collection","parent":64,"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}]},{"structure":[],"token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"␣<\/span>","kind":"rightBrace"},"text":"}","range":{"endColumn":2,"endRow":7,"startRow":7,"startColumn":1},"parent":35,"id":78,"type":"other"},{"range":{"endColumn":2,"endRow":15,"startRow":7,"startColumn":3},"id":79,"text":"CatchClauseList","type":"collection","parent":33,"structure":[{"value":{"text":"CatchClauseSyntax"},"name":"Element"},{"value":{"text":"4"},"name":"Count"}]},{"range":{"endColumn":2,"startRow":7,"startColumn":3,"endRow":9},"id":80,"text":"CatchClause","type":"other","parent":79,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCatchKeyword"},{"value":{"kind":"keyword(SwiftSyntax.Keyword.catch)","text":"catch"},"name":"catchKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenCatchKeywordAndCatchItems"},{"value":{"text":"CatchItemListSyntax"},"name":"catchItems","ref":"CatchItemListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenCatchItemsAndBody"},{"value":{"text":"CodeBlockSyntax"},"name":"body","ref":"CodeBlockSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterBody"}]},{"id":81,"token":{"trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.catch)","leadingTrivia":""},"range":{"endRow":7,"startRow":7,"startColumn":3,"endColumn":8},"type":"other","text":"catch","parent":80,"structure":[]},{"range":{"endRow":7,"startRow":7,"startColumn":9,"endColumn":45},"id":82,"text":"CatchItemList","type":"collection","parent":80,"structure":[{"value":{"text":"CatchItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}]},{"range":{"endColumn":45,"startColumn":9,"startRow":7,"endRow":7},"id":83,"text":"CatchItem","type":"other","parent":82,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"ref":"ExpressionPatternSyntax","value":{"text":"ExpressionPatternSyntax"},"name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndWhereClause"},{"value":{"text":"nil"},"name":"whereClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenWhereClauseAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}]},{"range":{"startRow":7,"startColumn":9,"endRow":7,"endColumn":45},"id":84,"text":"ExpressionPattern","type":"pattern","parent":83,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"value":{"text":"MemberAccessExprSyntax"},"name":"expression","ref":"MemberAccessExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterExpression"}]},{"range":{"startRow":7,"startColumn":9,"endRow":7,"endColumn":45},"id":85,"text":"MemberAccessExpr","type":"expr","parent":84,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBase"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"base"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseAndPeriod"},{"value":{"text":".","kind":"period"},"name":"period"},{"value":{"text":"nil"},"name":"unexpectedBetweenPeriodAndDeclName"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"declName"},{"value":{"text":"nil"},"name":"unexpectedAfterDeclName"}]},{"range":{"startColumn":9,"endRow":7,"startRow":7,"endColumn":28},"id":86,"text":"DeclReferenceExpr","type":"expr","parent":85,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"VendingMachineError","kind":"identifier("VendingMachineError")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"token":{"kind":"identifier("VendingMachineError")","trailingTrivia":"","leadingTrivia":""},"text":"VendingMachineError","type":"other","range":{"endRow":7,"startColumn":9,"endColumn":28,"startRow":7},"id":87,"parent":86,"structure":[]},{"range":{"endRow":7,"startColumn":28,"endColumn":29,"startRow":7},"token":{"kind":"period","trailingTrivia":"","leadingTrivia":""},"text":".","structure":[],"parent":85,"type":"other","id":88},{"range":{"endRow":7,"startColumn":29,"endColumn":45,"startRow":7},"id":89,"text":"DeclReferenceExpr","type":"expr","parent":85,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"invalidSelection","kind":"identifier("invalidSelection")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}]},{"text":"invalidSelection","structure":[],"range":{"startColumn":29,"endRow":7,"startRow":7,"endColumn":45},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"identifier("invalidSelection")"},"type":"other","parent":89,"id":90},{"range":{"startColumn":46,"endRow":9,"startRow":7,"endColumn":2},"id":91,"text":"CodeBlock","type":"other","parent":80,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftBrace"},{"value":{"text":"{","kind":"leftBrace"},"name":"leftBrace"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftBraceAndStatements"},{"value":{"text":"CodeBlockItemListSyntax"},"name":"statements","ref":"CodeBlockItemListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenStatementsAndRightBrace"},{"value":{"kind":"rightBrace","text":"}"},"name":"rightBrace"},{"value":{"text":"nil"},"name":"unexpectedAfterRightBrace"}]},{"id":92,"token":{"leadingTrivia":"","kind":"leftBrace","trailingTrivia":""},"type":"other","range":{"endColumn":47,"startColumn":46,"endRow":7,"startRow":7},"parent":91,"structure":[],"text":"{"},{"range":{"endColumn":32,"startColumn":5,"endRow":8,"startRow":8},"id":93,"text":"CodeBlockItemList","type":"collection","parent":91,"structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}]},{"range":{"endColumn":32,"endRow":8,"startRow":8,"startColumn":5},"id":94,"text":"CodeBlockItem","type":"other","parent":93,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","ref":"FunctionCallExprSyntax","value":{"text":"FunctionCallExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}]},{"range":{"startColumn":5,"endColumn":32,"startRow":8,"endRow":8},"id":95,"text":"FunctionCallExpr","type":"expr","parent":94,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"name":"calledExpression","ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"value":{"text":"LabeledExprListSyntax"},"name":"arguments","ref":"LabeledExprListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"value":{"text":"MultipleTrailingClosureElementListSyntax"},"name":"additionalTrailingClosures","ref":"MultipleTrailingClosureElementListSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}]},{"range":{"startColumn":5,"startRow":8,"endRow":8,"endColumn":10},"id":96,"text":"DeclReferenceExpr","type":"expr","parent":95,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"print","kind":"identifier("print")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}]},{"text":"print","parent":96,"token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"","kind":"identifier("print")"},"id":97,"range":{"endColumn":10,"startRow":8,"startColumn":5,"endRow":8},"structure":[],"type":"other"},{"text":"(","type":"other","range":{"endColumn":11,"startRow":8,"startColumn":10,"endRow":8},"parent":95,"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"id":98,"structure":[]},{"range":{"endColumn":31,"startRow":8,"startColumn":11,"endRow":8},"id":99,"text":"LabeledExprList","type":"collection","parent":95,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"range":{"startColumn":11,"startRow":8,"endColumn":31,"endRow":8},"id":100,"text":"LabeledExpr","type":"other","parent":99,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}]},{"range":{"endColumn":31,"endRow":8,"startColumn":11,"startRow":8},"id":101,"text":"StringLiteralExpr","type":"expr","parent":100,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"value":{"text":"StringLiteralSegmentListSyntax"},"ref":"StringLiteralSegmentListSyntax","name":"segments"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}]},{"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"structure":[],"parent":101,"range":{"startRow":8,"startColumn":11,"endRow":8,"endColumn":12},"id":102,"text":""","type":"other"},{"range":{"startRow":8,"startColumn":12,"endRow":8,"endColumn":30},"id":103,"text":"StringLiteralSegmentList","type":"collection","parent":101,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"1"}}]},{"range":{"startRow":8,"endRow":8,"startColumn":12,"endColumn":30},"id":104,"text":"StringSegment","type":"other","parent":103,"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"kind":"stringSegment("Invalid Selection.")","text":"Invalid Selection."}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}]},{"text":"Invalid␣<\/span>Selection.","range":{"startColumn":12,"endRow":8,"startRow":8,"endColumn":30},"type":"other","structure":[],"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("Invalid Selection.")"},"id":105,"parent":104},{"range":{"startColumn":30,"endRow":8,"startRow":8,"endColumn":31},"id":106,"parent":101,"structure":[],"text":""","type":"other","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"}},{"structure":[],"token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"range":{"startColumn":31,"endRow":8,"startRow":8,"endColumn":32},"id":107,"text":")","type":"other","parent":95},{"range":{"startColumn":32,"endRow":8,"startRow":8,"endColumn":32},"id":108,"text":"MultipleTrailingClosureElementList","type":"collection","parent":95,"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}]},{"id":109,"range":{"endRow":9,"endColumn":2,"startColumn":1,"startRow":9},"type":"other","parent":91,"token":{"trailingTrivia":"␣<\/span>","kind":"rightBrace","leadingTrivia":"↲<\/span>"},"structure":[],"text":"}"},{"range":{"endRow":11,"endColumn":2,"startColumn":3,"startRow":9},"id":110,"text":"CatchClause","type":"other","parent":79,"structure":[{"name":"unexpectedBeforeCatchKeyword","value":{"text":"nil"}},{"name":"catchKeyword","value":{"text":"catch","kind":"keyword(SwiftSyntax.Keyword.catch)"}},{"name":"unexpectedBetweenCatchKeywordAndCatchItems","value":{"text":"nil"}},{"name":"catchItems","ref":"CatchItemListSyntax","value":{"text":"CatchItemListSyntax"}},{"name":"unexpectedBetweenCatchItemsAndBody","value":{"text":"nil"}},{"name":"body","ref":"CodeBlockSyntax","value":{"text":"CodeBlockSyntax"}},{"name":"unexpectedAfterBody","value":{"text":"nil"}}]},{"type":"other","parent":110,"structure":[],"range":{"startColumn":3,"startRow":9,"endColumn":8,"endRow":9},"id":111,"token":{"kind":"keyword(SwiftSyntax.Keyword.catch)","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"text":"catch"},{"range":{"startColumn":9,"startRow":9,"endColumn":39,"endRow":9},"id":112,"text":"CatchItemList","type":"collection","parent":110,"structure":[{"name":"Element","value":{"text":"CatchItemSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"range":{"startColumn":9,"endColumn":39,"startRow":9,"endRow":9},"id":113,"text":"CatchItem","type":"other","parent":112,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"value":{"text":"ExpressionPatternSyntax"},"name":"pattern","ref":"ExpressionPatternSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndWhereClause"},{"value":{"text":"nil"},"name":"whereClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenWhereClauseAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}]},{"range":{"startRow":9,"startColumn":9,"endRow":9,"endColumn":39},"id":114,"text":"ExpressionPattern","type":"pattern","parent":113,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"value":{"text":"MemberAccessExprSyntax"},"name":"expression","ref":"MemberAccessExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterExpression"}]},{"range":{"endColumn":39,"startColumn":9,"startRow":9,"endRow":9},"id":115,"text":"MemberAccessExpr","type":"expr","parent":114,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBase"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"base"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseAndPeriod"},{"value":{"kind":"period","text":"."},"name":"period"},{"value":{"text":"nil"},"name":"unexpectedBetweenPeriodAndDeclName"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"declName"},{"value":{"text":"nil"},"name":"unexpectedAfterDeclName"}]},{"range":{"startRow":9,"startColumn":9,"endColumn":28,"endRow":9},"id":116,"text":"DeclReferenceExpr","type":"expr","parent":115,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"VendingMachineError","kind":"identifier("VendingMachineError")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}]},{"text":"VendingMachineError","id":117,"token":{"trailingTrivia":"","leadingTrivia":"","kind":"identifier("VendingMachineError")"},"parent":116,"type":"other","range":{"endRow":9,"endColumn":28,"startColumn":9,"startRow":9},"structure":[]},{"id":118,"structure":[],"range":{"endRow":9,"endColumn":29,"startColumn":28,"startRow":9},"text":".","parent":115,"type":"other","token":{"trailingTrivia":"","leadingTrivia":"","kind":"period"}},{"range":{"endRow":9,"endColumn":39,"startColumn":29,"startRow":9},"id":119,"text":"DeclReferenceExpr","type":"expr","parent":115,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"outOfStock","kind":"identifier("outOfStock")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}]},{"text":"outOfStock","range":{"startRow":9,"endColumn":39,"endRow":9,"startColumn":29},"parent":119,"id":120,"token":{"trailingTrivia":"␣<\/span>","kind":"identifier("outOfStock")","leadingTrivia":""},"structure":[],"type":"other"},{"range":{"startRow":9,"endColumn":2,"endRow":11,"startColumn":40},"id":121,"text":"CodeBlock","type":"other","parent":110,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftBrace"},{"value":{"kind":"leftBrace","text":"{"},"name":"leftBrace"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftBraceAndStatements"},{"value":{"text":"CodeBlockItemListSyntax"},"name":"statements","ref":"CodeBlockItemListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenStatementsAndRightBrace"},{"value":{"kind":"rightBrace","text":"}"},"name":"rightBrace"},{"value":{"text":"nil"},"name":"unexpectedAfterRightBrace"}]},{"parent":121,"type":"other","token":{"kind":"leftBrace","leadingTrivia":"","trailingTrivia":""},"structure":[],"range":{"startColumn":40,"endRow":9,"startRow":9,"endColumn":41},"id":122,"text":"{"},{"range":{"startColumn":5,"endRow":10,"startRow":10,"endColumn":27},"id":123,"text":"CodeBlockItemList","type":"collection","parent":121,"structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"range":{"startRow":10,"startColumn":5,"endRow":10,"endColumn":27},"id":124,"text":"CodeBlockItem","type":"other","parent":123,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"FunctionCallExprSyntax"},"ref":"FunctionCallExprSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}]},{"range":{"endColumn":27,"startRow":10,"endRow":10,"startColumn":5},"id":125,"text":"FunctionCallExpr","type":"expr","parent":124,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"calledExpression"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax","name":"arguments"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"value":{"text":"MultipleTrailingClosureElementListSyntax"},"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}]},{"range":{"startColumn":5,"endRow":10,"endColumn":10,"startRow":10},"id":126,"text":"DeclReferenceExpr","type":"expr","parent":125,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"print","kind":"identifier("print")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"type":"other","text":"print","parent":126,"id":127,"token":{"trailingTrivia":"","kind":"identifier("print")","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"structure":[],"range":{"startRow":10,"endColumn":10,"startColumn":5,"endRow":10}},{"text":"(","parent":125,"type":"other","token":{"trailingTrivia":"","kind":"leftParen","leadingTrivia":""},"range":{"startRow":10,"endColumn":11,"startColumn":10,"endRow":10},"id":128,"structure":[]},{"range":{"startRow":10,"endColumn":26,"startColumn":11,"endRow":10},"id":129,"text":"LabeledExprList","type":"collection","parent":125,"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}]},{"range":{"startColumn":11,"endRow":10,"startRow":10,"endColumn":26},"id":130,"text":"LabeledExpr","type":"other","parent":129,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"ref":"StringLiteralExprSyntax","name":"expression","value":{"text":"StringLiteralExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}]},{"range":{"endRow":10,"startRow":10,"endColumn":26,"startColumn":11},"id":131,"text":"StringLiteralExpr","type":"expr","parent":130,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"kind":"stringQuote","text":"""},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"value":{"text":"StringLiteralSegmentListSyntax"},"name":"segments","ref":"StringLiteralSegmentListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"kind":"stringQuote","text":"""},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}]},{"range":{"startColumn":11,"endColumn":12,"endRow":10,"startRow":10},"id":132,"text":""","token":{"leadingTrivia":"","kind":"stringQuote","trailingTrivia":""},"parent":131,"type":"other","structure":[]},{"range":{"startColumn":12,"endColumn":25,"endRow":10,"startRow":10},"id":133,"text":"StringLiteralSegmentList","type":"collection","parent":131,"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}]},{"range":{"startColumn":12,"endRow":10,"startRow":10,"endColumn":25},"id":134,"text":"StringSegment","type":"other","parent":133,"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":"Out of Stock.","kind":"stringSegment("Out of Stock.")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}]},{"parent":134,"id":135,"structure":[],"token":{"trailingTrivia":"","leadingTrivia":"","kind":"stringSegment("Out of Stock.")"},"range":{"endRow":10,"startRow":10,"endColumn":25,"startColumn":12},"text":"Out␣<\/span>of␣<\/span>Stock.","type":"other"},{"text":""","id":136,"range":{"endRow":10,"startRow":10,"endColumn":26,"startColumn":25},"type":"other","structure":[],"token":{"trailingTrivia":"","leadingTrivia":"","kind":"stringQuote"},"parent":131},{"structure":[],"token":{"trailingTrivia":"","leadingTrivia":"","kind":"rightParen"},"range":{"endRow":10,"startRow":10,"endColumn":27,"startColumn":26},"id":137,"text":")","type":"other","parent":125},{"range":{"endRow":10,"startRow":10,"endColumn":27,"startColumn":27},"id":138,"text":"MultipleTrailingClosureElementList","type":"collection","parent":125,"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}]},{"text":"}","id":139,"parent":121,"structure":[],"token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"␣<\/span>","kind":"rightBrace"},"type":"other","range":{"endRow":11,"startRow":11,"startColumn":1,"endColumn":2}},{"range":{"endRow":13,"startRow":11,"startColumn":3,"endColumn":2},"id":140,"text":"CatchClause","type":"other","parent":79,"structure":[{"name":"unexpectedBeforeCatchKeyword","value":{"text":"nil"}},{"name":"catchKeyword","value":{"text":"catch","kind":"keyword(SwiftSyntax.Keyword.catch)"}},{"name":"unexpectedBetweenCatchKeywordAndCatchItems","value":{"text":"nil"}},{"name":"catchItems","value":{"text":"CatchItemListSyntax"},"ref":"CatchItemListSyntax"},{"name":"unexpectedBetweenCatchItemsAndBody","value":{"text":"nil"}},{"name":"body","value":{"text":"CodeBlockSyntax"},"ref":"CodeBlockSyntax"},{"name":"unexpectedAfterBody","value":{"text":"nil"}}]},{"parent":140,"type":"other","text":"catch","structure":[],"range":{"endColumn":8,"endRow":11,"startColumn":3,"startRow":11},"id":141,"token":{"kind":"keyword(SwiftSyntax.Keyword.catch)","trailingTrivia":"␣<\/span>","leadingTrivia":""}},{"range":{"endColumn":63,"endRow":11,"startColumn":9,"startRow":11},"id":142,"text":"CatchItemList","type":"collection","parent":140,"structure":[{"value":{"text":"CatchItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}]},{"range":{"endRow":11,"startColumn":9,"endColumn":63,"startRow":11},"id":143,"text":"CatchItem","type":"other","parent":142,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"ref":"ExpressionPatternSyntax","value":{"text":"ExpressionPatternSyntax"},"name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndWhereClause"},{"value":{"text":"nil"},"name":"whereClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenWhereClauseAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}]},{"range":{"startColumn":9,"startRow":11,"endRow":11,"endColumn":63},"id":144,"text":"ExpressionPattern","type":"pattern","parent":143,"structure":[{"name":"unexpectedBeforeExpression","value":{"text":"nil"}},{"name":"expression","ref":"FunctionCallExprSyntax","value":{"text":"FunctionCallExprSyntax"}},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}]},{"range":{"startColumn":9,"endRow":11,"endColumn":63,"startRow":11},"id":145,"text":"FunctionCallExpr","type":"expr","parent":144,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"value":{"text":"MemberAccessExprSyntax"},"ref":"MemberAccessExprSyntax","name":"calledExpression"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"kind":"leftParen","text":"("},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax","name":"arguments"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"value":{"text":"MultipleTrailingClosureElementListSyntax"},"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}]},{"range":{"startRow":11,"endRow":11,"endColumn":46,"startColumn":9},"id":146,"text":"MemberAccessExpr","type":"expr","parent":145,"structure":[{"name":"unexpectedBeforeBase","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"base","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenBaseAndPeriod","value":{"text":"nil"}},{"name":"period","value":{"kind":"period","text":"."}},{"name":"unexpectedBetweenPeriodAndDeclName","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"declName","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedAfterDeclName","value":{"text":"nil"}}]},{"range":{"startRow":11,"startColumn":9,"endColumn":28,"endRow":11},"id":147,"text":"DeclReferenceExpr","type":"expr","parent":146,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"VendingMachineError","kind":"identifier("VendingMachineError")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"text":"VendingMachineError","structure":[],"parent":147,"id":148,"token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("VendingMachineError")"},"range":{"endColumn":28,"startRow":11,"startColumn":9,"endRow":11},"type":"other"},{"structure":[],"id":149,"text":".","range":{"endColumn":29,"startRow":11,"startColumn":28,"endRow":11},"type":"other","parent":146,"token":{"leadingTrivia":"","trailingTrivia":"","kind":"period"}},{"range":{"endColumn":46,"startRow":11,"startColumn":29,"endRow":11},"id":150,"text":"DeclReferenceExpr","type":"expr","parent":146,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("insufficientFunds")","text":"insufficientFunds"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}]},{"token":{"trailingTrivia":"","kind":"identifier("insufficientFunds")","leadingTrivia":""},"parent":150,"type":"other","structure":[],"id":151,"range":{"startColumn":29,"endRow":11,"endColumn":46,"startRow":11},"text":"insufficientFunds"},{"parent":145,"id":152,"text":"(","structure":[],"token":{"trailingTrivia":"","kind":"leftParen","leadingTrivia":""},"range":{"startColumn":46,"endRow":11,"endColumn":47,"startRow":11},"type":"other"},{"range":{"startColumn":47,"endRow":11,"endColumn":62,"startRow":11},"id":153,"text":"LabeledExprList","type":"collection","parent":145,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"range":{"startRow":11,"endRow":11,"startColumn":47,"endColumn":62},"id":154,"text":"LabeledExpr","type":"other","parent":153,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"PatternExprSyntax"},"ref":"PatternExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}]},{"range":{"startRow":11,"startColumn":47,"endRow":11,"endColumn":62},"id":155,"text":"PatternExpr","type":"expr","parent":154,"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"ref":"ValueBindingPatternSyntax","name":"pattern","value":{"text":"ValueBindingPatternSyntax"}},{"name":"unexpectedAfterPattern","value":{"text":"nil"}}]},{"range":{"endRow":11,"startRow":11,"startColumn":47,"endColumn":62},"id":156,"text":"ValueBindingPattern","type":"pattern","parent":155,"structure":[{"name":"unexpectedBeforeBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"text":"let","kind":"keyword(SwiftSyntax.Keyword.let)"}},{"name":"unexpectedBetweenBindingSpecifierAndPattern","value":{"text":"nil"}},{"ref":"IdentifierPatternSyntax","name":"pattern","value":{"text":"IdentifierPatternSyntax"}},{"name":"unexpectedAfterPattern","value":{"text":"nil"}}]},{"id":157,"type":"other","parent":156,"range":{"endColumn":50,"endRow":11,"startColumn":47,"startRow":11},"text":"let","token":{"trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.let)","leadingTrivia":""},"structure":[]},{"range":{"endColumn":62,"endRow":11,"startColumn":51,"startRow":11},"id":158,"text":"IdentifierPattern","type":"pattern","parent":156,"structure":[{"name":"unexpectedBeforeIdentifier","value":{"text":"nil"}},{"name":"identifier","value":{"text":"coinsNeeded","kind":"identifier("coinsNeeded")"}},{"name":"unexpectedAfterIdentifier","value":{"text":"nil"}}]},{"id":159,"text":"coinsNeeded","parent":158,"range":{"endColumn":62,"startRow":11,"endRow":11,"startColumn":51},"structure":[],"token":{"kind":"identifier("coinsNeeded")","leadingTrivia":"","trailingTrivia":""},"type":"other"},{"parent":145,"range":{"endColumn":63,"startRow":11,"endRow":11,"startColumn":62},"text":")","id":160,"type":"other","structure":[],"token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":"␣<\/span>"}},{"range":{"endColumn":64,"startRow":11,"endRow":11,"startColumn":64},"id":161,"text":"MultipleTrailingClosureElementList","type":"collection","parent":145,"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}]},{"range":{"endColumn":2,"startColumn":64,"startRow":11,"endRow":13},"id":162,"text":"CodeBlock","type":"other","parent":140,"structure":[{"name":"unexpectedBeforeLeftBrace","value":{"text":"nil"}},{"name":"leftBrace","value":{"text":"{","kind":"leftBrace"}},{"name":"unexpectedBetweenLeftBraceAndStatements","value":{"text":"nil"}},{"name":"statements","value":{"text":"CodeBlockItemListSyntax"},"ref":"CodeBlockItemListSyntax"},{"name":"unexpectedBetweenStatementsAndRightBrace","value":{"text":"nil"}},{"name":"rightBrace","value":{"text":"}","kind":"rightBrace"}},{"name":"unexpectedAfterRightBrace","value":{"text":"nil"}}]},{"id":163,"type":"other","structure":[],"text":"{","range":{"endRow":11,"startRow":11,"startColumn":64,"endColumn":65},"parent":162,"token":{"kind":"leftBrace","leadingTrivia":"","trailingTrivia":""}},{"range":{"endRow":12,"startRow":12,"startColumn":5,"endColumn":83},"id":164,"text":"CodeBlockItemList","type":"collection","parent":162,"structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"range":{"startRow":12,"endColumn":83,"endRow":12,"startColumn":5},"id":165,"text":"CodeBlockItem","type":"other","parent":164,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"FunctionCallExprSyntax","name":"item","value":{"text":"FunctionCallExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}]},{"range":{"endColumn":83,"endRow":12,"startRow":12,"startColumn":5},"id":166,"text":"FunctionCallExpr","type":"expr","parent":165,"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"name":"arguments","ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"name":"additionalTrailingClosures","ref":"MultipleTrailingClosureElementListSyntax","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}]},{"range":{"endRow":12,"endColumn":10,"startColumn":5,"startRow":12},"id":167,"text":"DeclReferenceExpr","type":"expr","parent":166,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"print","kind":"identifier("print")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"token":{"kind":"identifier("print")","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":""},"type":"other","text":"print","parent":167,"id":168,"range":{"endColumn":10,"startColumn":5,"endRow":12,"startRow":12},"structure":[]},{"type":"other","parent":166,"text":"(","range":{"endColumn":11,"startColumn":10,"endRow":12,"startRow":12},"id":169,"structure":[],"token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""}},{"range":{"endColumn":82,"startColumn":11,"endRow":12,"startRow":12},"id":170,"text":"LabeledExprList","type":"collection","parent":166,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"range":{"endColumn":82,"endRow":12,"startRow":12,"startColumn":11},"id":171,"text":"LabeledExpr","type":"other","parent":170,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}]},{"range":{"endColumn":82,"startColumn":11,"startRow":12,"endRow":12},"id":172,"text":"StringLiteralExpr","type":"expr","parent":171,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"kind":"stringQuote","text":"""},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"value":{"text":"StringLiteralSegmentListSyntax"},"name":"segments","ref":"StringLiteralSegmentListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}]},{"range":{"startRow":12,"endColumn":12,"startColumn":11,"endRow":12},"type":"other","text":""","structure":[],"token":{"trailingTrivia":"","kind":"stringQuote","leadingTrivia":""},"id":173,"parent":172},{"range":{"startRow":12,"endColumn":81,"startColumn":12,"endRow":12},"id":174,"text":"StringLiteralSegmentList","type":"collection","parent":172,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"3"}}]},{"range":{"endRow":12,"startRow":12,"startColumn":12,"endColumn":60},"id":175,"text":"StringSegment","type":"other","parent":174,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"kind":"stringSegment("Insufficient funds. Please insert an additional ")","text":"Insufficient funds. Please insert an additional "},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}]},{"token":{"trailingTrivia":"","kind":"stringSegment("Insufficient funds. Please insert an additional ")","leadingTrivia":""},"structure":[],"text":"Insufficient␣<\/span>funds.␣<\/span>Please␣<\/span>insert␣<\/span>an␣<\/span>additional␣<\/span>","type":"other","id":176,"range":{"endRow":12,"endColumn":60,"startRow":12,"startColumn":12},"parent":175},{"range":{"endRow":12,"endColumn":74,"startRow":12,"startColumn":60},"id":177,"text":"ExpressionSegment","type":"other","parent":174,"structure":[{"name":"unexpectedBeforeBackslash","value":{"text":"nil"}},{"name":"backslash","value":{"text":"\\","kind":"backslash"}},{"name":"unexpectedBetweenBackslashAndPounds","value":{"text":"nil"}},{"name":"pounds","value":{"text":"nil"}},{"name":"unexpectedBetweenPoundsAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"kind":"leftParen","text":"("}},{"name":"unexpectedBetweenLeftParenAndExpressions","value":{"text":"nil"}},{"name":"expressions","value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax"},{"name":"unexpectedBetweenExpressionsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"kind":"rightParen","text":")"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}]},{"text":"\\","type":"other","token":{"trailingTrivia":"","leadingTrivia":"","kind":"backslash"},"structure":[],"id":178,"range":{"startColumn":60,"endRow":12,"endColumn":61,"startRow":12},"parent":177},{"range":{"startColumn":61,"endRow":12,"endColumn":62,"startRow":12},"parent":177,"type":"other","structure":[],"text":"(","id":179,"token":{"trailingTrivia":"","leadingTrivia":"","kind":"leftParen"}},{"range":{"startColumn":62,"endRow":12,"endColumn":73,"startRow":12},"id":180,"text":"LabeledExprList","type":"collection","parent":177,"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}]},{"range":{"startRow":12,"endRow":12,"endColumn":73,"startColumn":62},"id":181,"text":"LabeledExpr","type":"other","parent":180,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"expression","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}]},{"range":{"startRow":12,"endColumn":73,"startColumn":62,"endRow":12},"id":182,"text":"DeclReferenceExpr","type":"expr","parent":181,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"coinsNeeded","kind":"identifier("coinsNeeded")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}]},{"id":183,"parent":182,"text":"coinsNeeded","range":{"startColumn":62,"endRow":12,"endColumn":73,"startRow":12},"token":{"trailingTrivia":"","kind":"identifier("coinsNeeded")","leadingTrivia":""},"type":"other","structure":[]},{"id":184,"token":{"trailingTrivia":"","kind":"rightParen","leadingTrivia":""},"text":")","range":{"startColumn":73,"endRow":12,"endColumn":74,"startRow":12},"parent":177,"structure":[],"type":"other"},{"range":{"startColumn":74,"endRow":12,"endColumn":81,"startRow":12},"id":185,"text":"StringSegment","type":"other","parent":174,"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"kind":"stringSegment(" coins.")","text":" coins."}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}]},{"parent":185,"id":186,"type":"other","range":{"endRow":12,"endColumn":81,"startColumn":74,"startRow":12},"text":"␣<\/span>coins.","structure":[],"token":{"kind":"stringSegment(" coins.")","leadingTrivia":"","trailingTrivia":""}},{"text":""","id":187,"token":{"kind":"stringQuote","leadingTrivia":"","trailingTrivia":""},"type":"other","range":{"endRow":12,"endColumn":82,"startColumn":81,"startRow":12},"structure":[],"parent":172},{"type":"other","parent":166,"structure":[],"token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":""},"text":")","range":{"endRow":12,"endColumn":83,"startColumn":82,"startRow":12},"id":188},{"range":{"endRow":12,"endColumn":83,"startColumn":83,"startRow":12},"id":189,"text":"MultipleTrailingClosureElementList","type":"collection","parent":166,"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}]},{"parent":162,"structure":[],"id":190,"text":"}","type":"other","range":{"startColumn":1,"endRow":13,"startRow":13,"endColumn":2},"token":{"leadingTrivia":"↲<\/span>","kind":"rightBrace","trailingTrivia":"␣<\/span>"}},{"range":{"startColumn":3,"endRow":15,"startRow":13,"endColumn":2},"id":191,"text":"CatchClause","type":"other","parent":79,"structure":[{"name":"unexpectedBeforeCatchKeyword","value":{"text":"nil"}},{"name":"catchKeyword","value":{"text":"catch","kind":"keyword(SwiftSyntax.Keyword.catch)"}},{"name":"unexpectedBetweenCatchKeywordAndCatchItems","value":{"text":"nil"}},{"ref":"CatchItemListSyntax","name":"catchItems","value":{"text":"CatchItemListSyntax"}},{"name":"unexpectedBetweenCatchItemsAndBody","value":{"text":"nil"}},{"ref":"CodeBlockSyntax","name":"body","value":{"text":"CodeBlockSyntax"}},{"name":"unexpectedAfterBody","value":{"text":"nil"}}]},{"id":192,"token":{"kind":"keyword(SwiftSyntax.Keyword.catch)","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"endColumn":8,"startColumn":3,"endRow":13,"startRow":13},"structure":[],"type":"other","text":"catch","parent":191},{"range":{"endColumn":9,"startColumn":9,"endRow":13,"startRow":13},"id":193,"text":"CatchItemList","type":"collection","parent":191,"structure":[{"value":{"text":"CatchItemSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}]},{"range":{"startRow":13,"endRow":15,"startColumn":9,"endColumn":2},"id":194,"text":"CodeBlock","type":"other","parent":191,"structure":[{"name":"unexpectedBeforeLeftBrace","value":{"text":"nil"}},{"name":"leftBrace","value":{"text":"{","kind":"leftBrace"}},{"name":"unexpectedBetweenLeftBraceAndStatements","value":{"text":"nil"}},{"name":"statements","value":{"text":"CodeBlockItemListSyntax"},"ref":"CodeBlockItemListSyntax"},{"name":"unexpectedBetweenStatementsAndRightBrace","value":{"text":"nil"}},{"name":"rightBrace","value":{"kind":"rightBrace","text":"}"}},{"name":"unexpectedAfterRightBrace","value":{"text":"nil"}}]},{"token":{"kind":"leftBrace","leadingTrivia":"","trailingTrivia":""},"id":195,"type":"other","structure":[],"range":{"startColumn":9,"endRow":13,"startRow":13,"endColumn":10},"text":"{","parent":194},{"range":{"startColumn":5,"endRow":14,"startRow":14,"endColumn":41},"id":196,"text":"CodeBlockItemList","type":"collection","parent":194,"structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"range":{"startRow":14,"startColumn":5,"endRow":14,"endColumn":41},"id":197,"text":"CodeBlockItem","type":"other","parent":196,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"FunctionCallExprSyntax","name":"item","value":{"text":"FunctionCallExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}]},{"range":{"endColumn":41,"startColumn":5,"endRow":14,"startRow":14},"id":198,"text":"FunctionCallExpr","type":"expr","parent":197,"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"kind":"leftParen","text":"("}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"name":"arguments","ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"name":"additionalTrailingClosures","ref":"MultipleTrailingClosureElementListSyntax","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}]},{"range":{"startRow":14,"startColumn":5,"endRow":14,"endColumn":10},"id":199,"text":"DeclReferenceExpr","type":"expr","parent":198,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"print","kind":"identifier("print")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"parent":199,"id":200,"token":{"trailingTrivia":"","kind":"identifier("print")","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"structure":[],"range":{"endColumn":10,"startRow":14,"startColumn":5,"endRow":14},"text":"print","type":"other"},{"parent":198,"text":"(","structure":[],"range":{"endColumn":11,"startRow":14,"startColumn":10,"endRow":14},"type":"other","id":201,"token":{"trailingTrivia":"","kind":"leftParen","leadingTrivia":""}},{"range":{"endColumn":40,"startRow":14,"startColumn":11,"endRow":14},"id":202,"text":"LabeledExprList","type":"collection","parent":198,"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}]},{"range":{"startRow":14,"endRow":14,"endColumn":40,"startColumn":11},"id":203,"text":"LabeledExpr","type":"other","parent":202,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"ref":"StringLiteralExprSyntax","name":"expression","value":{"text":"StringLiteralExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}]},{"range":{"startRow":14,"endColumn":40,"endRow":14,"startColumn":11},"id":204,"text":"StringLiteralExpr","type":"expr","parent":203,"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"ref":"StringLiteralSegmentListSyntax","name":"segments","value":{"text":"StringLiteralSegmentListSyntax"}},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"kind":"stringQuote","text":"""}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}]},{"id":205,"token":{"kind":"stringQuote","leadingTrivia":"","trailingTrivia":""},"range":{"endRow":14,"startRow":14,"startColumn":11,"endColumn":12},"text":""","structure":[],"type":"other","parent":204},{"range":{"endRow":14,"startRow":14,"startColumn":12,"endColumn":39},"id":206,"text":"StringLiteralSegmentList","type":"collection","parent":204,"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"3"},"name":"Count"}]},{"range":{"endRow":14,"endColumn":30,"startRow":14,"startColumn":12},"id":207,"text":"StringSegment","type":"other","parent":206,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"kind":"stringSegment("Unexpected error: ")","text":"Unexpected error: "},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}]},{"type":"other","text":"Unexpected␣<\/span>error:␣<\/span>","id":208,"parent":207,"structure":[],"range":{"endRow":14,"startColumn":12,"endColumn":30,"startRow":14},"token":{"leadingTrivia":"","kind":"stringSegment("Unexpected error: ")","trailingTrivia":""}},{"range":{"endRow":14,"startColumn":30,"endColumn":38,"startRow":14},"id":209,"text":"ExpressionSegment","type":"other","parent":206,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBackslash"},{"value":{"text":"\\","kind":"backslash"},"name":"backslash"},{"value":{"text":"nil"},"name":"unexpectedBetweenBackslashAndPounds"},{"value":{"text":"nil"},"name":"pounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenPoundsAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndExpressions"},{"ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"},"name":"expressions"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}]},{"parent":209,"type":"other","structure":[],"range":{"endColumn":31,"startRow":14,"startColumn":30,"endRow":14},"token":{"kind":"backslash","trailingTrivia":"","leadingTrivia":""},"text":"\\","id":210},{"structure":[],"token":{"kind":"leftParen","trailingTrivia":"","leadingTrivia":""},"id":211,"type":"other","range":{"endColumn":32,"startRow":14,"startColumn":31,"endRow":14},"parent":209,"text":"("},{"range":{"endColumn":37,"startRow":14,"startColumn":32,"endRow":14},"id":212,"text":"LabeledExprList","type":"collection","parent":209,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"range":{"endRow":14,"startColumn":32,"startRow":14,"endColumn":37},"id":213,"text":"LabeledExpr","type":"other","parent":212,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}]},{"range":{"endRow":14,"startColumn":32,"startRow":14,"endColumn":37},"id":214,"text":"DeclReferenceExpr","type":"expr","parent":213,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("error")","text":"error"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"token":{"kind":"identifier("error")","trailingTrivia":"","leadingTrivia":""},"structure":[],"range":{"endRow":14,"startColumn":32,"endColumn":37,"startRow":14},"text":"error","parent":214,"type":"other","id":215},{"range":{"endRow":14,"startColumn":37,"endColumn":38,"startRow":14},"parent":209,"id":216,"text":")","structure":[],"type":"other","token":{"kind":"rightParen","trailingTrivia":"","leadingTrivia":""}},{"range":{"endRow":14,"startColumn":38,"endColumn":39,"startRow":14},"id":217,"text":"StringSegment","type":"other","parent":206,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":".","kind":"stringSegment(".")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}]},{"token":{"trailingTrivia":"","kind":"stringSegment(".")","leadingTrivia":""},"range":{"startRow":14,"startColumn":38,"endRow":14,"endColumn":39},"parent":217,"structure":[],"type":"other","id":218,"text":"."},{"text":""","token":{"trailingTrivia":"","kind":"stringQuote","leadingTrivia":""},"type":"other","structure":[],"parent":204,"range":{"startRow":14,"startColumn":39,"endRow":14,"endColumn":40},"id":219},{"id":220,"token":{"trailingTrivia":"","kind":"rightParen","leadingTrivia":""},"range":{"startRow":14,"startColumn":40,"endRow":14,"endColumn":41},"type":"other","parent":198,"text":")","structure":[]},{"range":{"startRow":14,"startColumn":41,"endRow":14,"endColumn":41},"id":221,"text":"MultipleTrailingClosureElementList","type":"collection","parent":198,"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}]},{"range":{"startRow":15,"endColumn":2,"endRow":15,"startColumn":1},"text":"}","structure":[],"type":"other","token":{"leadingTrivia":"↲<\/span>","kind":"rightBrace","trailingTrivia":""},"id":222,"parent":194},{"range":{"startRow":17,"endColumn":2,"endRow":19,"startColumn":1},"id":223,"text":"CodeBlockItem","type":"other","parent":1,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","ref":"FunctionDeclSyntax","value":{"text":"FunctionDeclSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}]},{"range":{"endColumn":2,"startRow":17,"startColumn":1,"endRow":19},"id":224,"text":"FunctionDecl","type":"decl","parent":223,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"ref":"AttributeListSyntax","name":"attributes","value":{"text":"AttributeListSyntax"}},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"ref":"DeclModifierListSyntax","name":"modifiers","value":{"text":"DeclModifierListSyntax"}},{"name":"unexpectedBetweenModifiersAndFuncKeyword","value":{"text":"nil"}},{"name":"funcKeyword","value":{"text":"func","kind":"keyword(SwiftSyntax.Keyword.func)"}},{"name":"unexpectedBetweenFuncKeywordAndName","value":{"text":"nil"}},{"name":"name","value":{"kind":"identifier("summarize")","text":"summarize"}},{"name":"unexpectedBetweenNameAndGenericParameterClause","value":{"text":"nil"}},{"name":"genericParameterClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericParameterClauseAndSignature","value":{"text":"nil"}},{"ref":"FunctionSignatureSyntax","name":"signature","value":{"text":"FunctionSignatureSyntax"}},{"name":"unexpectedBetweenSignatureAndGenericWhereClause","value":{"text":"nil"}},{"name":"genericWhereClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericWhereClauseAndBody","value":{"text":"nil"}},{"ref":"CodeBlockSyntax","name":"body","value":{"text":"CodeBlockSyntax"}},{"name":"unexpectedAfterBody","value":{"text":"nil"}}]},{"range":{"startRow":15,"startColumn":2,"endColumn":2,"endRow":15},"id":225,"text":"AttributeList","type":"collection","parent":224,"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}]},{"range":{"startRow":15,"startColumn":2,"endColumn":2,"endRow":15},"id":226,"text":"DeclModifierList","type":"collection","parent":224,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}]},{"token":{"leadingTrivia":"↲<\/span>↲<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.func)"},"range":{"endColumn":5,"startColumn":1,"endRow":17,"startRow":17},"text":"func","type":"other","parent":224,"structure":[],"id":227},{"parent":224,"structure":[],"token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("summarize")"},"id":228,"text":"summarize","type":"other","range":{"endColumn":15,"startColumn":6,"endRow":17,"startRow":17}},{"range":{"endColumn":57,"startColumn":15,"endRow":17,"startRow":17},"id":229,"text":"FunctionSignature","type":"other","parent":224,"structure":[{"name":"unexpectedBeforeParameterClause","value":{"text":"nil"}},{"ref":"FunctionParameterClauseSyntax","name":"parameterClause","value":{"text":"FunctionParameterClauseSyntax"}},{"name":"unexpectedBetweenParameterClauseAndEffectSpecifiers","value":{"text":"nil"}},{"ref":"FunctionEffectSpecifiersSyntax","name":"effectSpecifiers","value":{"text":"FunctionEffectSpecifiersSyntax"}},{"name":"unexpectedBetweenEffectSpecifiersAndReturnClause","value":{"text":"nil"}},{"name":"returnClause","value":{"text":"nil"}},{"name":"unexpectedAfterReturnClause","value":{"text":"nil"}}]},{"range":{"startColumn":15,"endRow":17,"startRow":17,"endColumn":33},"id":230,"text":"FunctionParameterClause","type":"other","parent":229,"structure":[{"name":"unexpectedBeforeLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"kind":"leftParen","text":"("}},{"name":"unexpectedBetweenLeftParenAndParameters","value":{"text":"nil"}},{"ref":"FunctionParameterListSyntax","name":"parameters","value":{"text":"FunctionParameterListSyntax"}},{"name":"unexpectedBetweenParametersAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}]},{"structure":[],"type":"other","id":231,"text":"(","token":{"trailingTrivia":"","leadingTrivia":"","kind":"leftParen"},"range":{"endColumn":16,"startRow":17,"startColumn":15,"endRow":17},"parent":230},{"range":{"endColumn":32,"startRow":17,"startColumn":16,"endRow":17},"id":232,"text":"FunctionParameterList","type":"collection","parent":230,"structure":[{"name":"Element","value":{"text":"FunctionParameterSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"range":{"endColumn":32,"startColumn":16,"startRow":17,"endRow":17},"id":233,"text":"FunctionParameter","type":"other","parent":232,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","ref":"AttributeListSyntax","value":{"text":"AttributeListSyntax"}},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","ref":"DeclModifierListSyntax","value":{"text":"DeclModifierListSyntax"}},{"name":"unexpectedBetweenModifiersAndFirstName","value":{"text":"nil"}},{"name":"firstName","value":{"kind":"wildcard","text":"_"}},{"name":"unexpectedBetweenFirstNameAndSecondName","value":{"text":"nil"}},{"name":"secondName","value":{"text":"ratings","kind":"identifier("ratings")"}},{"name":"unexpectedBetweenSecondNameAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":":","kind":"colon"}},{"name":"unexpectedBetweenColonAndType","value":{"text":"nil"}},{"name":"type","ref":"ArrayTypeSyntax","value":{"text":"ArrayTypeSyntax"}},{"name":"unexpectedBetweenTypeAndEllipsis","value":{"text":"nil"}},{"name":"ellipsis","value":{"text":"nil"}},{"name":"unexpectedBetweenEllipsisAndDefaultValue","value":{"text":"nil"}},{"name":"defaultValue","value":{"text":"nil"}},{"name":"unexpectedBetweenDefaultValueAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}]},{"range":{"startRow":17,"endRow":17,"endColumn":16,"startColumn":16},"id":234,"text":"AttributeList","type":"collection","parent":233,"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}]},{"range":{"startColumn":16,"endColumn":16,"endRow":17,"startRow":17},"id":235,"text":"DeclModifierList","type":"collection","parent":233,"structure":[{"value":{"text":"DeclModifierSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}]},{"structure":[],"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"wildcard"},"type":"other","range":{"startRow":17,"startColumn":16,"endRow":17,"endColumn":17},"parent":233,"text":"_","id":236},{"id":237,"parent":233,"structure":[],"token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("ratings")"},"text":"ratings","range":{"startRow":17,"startColumn":18,"endRow":17,"endColumn":25},"type":"other"},{"parent":233,"structure":[],"id":238,"text":":","range":{"startRow":17,"startColumn":25,"endRow":17,"endColumn":26},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"colon"},"type":"other"},{"range":{"startRow":17,"startColumn":27,"endRow":17,"endColumn":32},"id":239,"text":"ArrayType","type":"type","parent":233,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftSquare"},{"value":{"kind":"leftSquare","text":"["},"name":"leftSquare"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftSquareAndElement"},{"value":{"text":"IdentifierTypeSyntax"},"ref":"IdentifierTypeSyntax","name":"element"},{"value":{"text":"nil"},"name":"unexpectedBetweenElementAndRightSquare"},{"value":{"text":"]","kind":"rightSquare"},"name":"rightSquare"},{"value":{"text":"nil"},"name":"unexpectedAfterRightSquare"}]},{"id":240,"type":"other","structure":[],"range":{"startRow":17,"endRow":17,"endColumn":28,"startColumn":27},"text":"[","parent":239,"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftSquare"}},{"range":{"startRow":17,"endRow":17,"endColumn":31,"startColumn":28},"id":241,"text":"IdentifierType","type":"type","parent":239,"structure":[{"name":"unexpectedBeforeName","value":{"text":"nil"}},{"name":"name","value":{"text":"Int","kind":"identifier("Int")"}},{"name":"unexpectedBetweenNameAndGenericArgumentClause","value":{"text":"nil"}},{"name":"genericArgumentClause","value":{"text":"nil"}},{"name":"unexpectedAfterGenericArgumentClause","value":{"text":"nil"}}]},{"text":"Int","type":"other","parent":241,"token":{"kind":"identifier("Int")","trailingTrivia":"","leadingTrivia":""},"id":242,"range":{"endRow":17,"startRow":17,"endColumn":31,"startColumn":28},"structure":[]},{"range":{"endRow":17,"startRow":17,"endColumn":32,"startColumn":31},"parent":239,"token":{"kind":"rightSquare","trailingTrivia":"","leadingTrivia":""},"structure":[],"id":243,"text":"]","type":"other"},{"id":244,"structure":[],"token":{"kind":"rightParen","trailingTrivia":"␣<\/span>","leadingTrivia":""},"text":")","type":"other","range":{"endRow":17,"startRow":17,"endColumn":33,"startColumn":32},"parent":230},{"range":{"endRow":17,"startRow":17,"endColumn":57,"startColumn":34},"id":245,"text":"FunctionEffectSpecifiers","type":"other","parent":229,"structure":[{"name":"unexpectedBeforeAsyncSpecifier","value":{"text":"nil"}},{"name":"asyncSpecifier","value":{"text":"nil"}},{"name":"unexpectedBetweenAsyncSpecifierAndThrowsClause","value":{"text":"nil"}},{"name":"throwsClause","value":{"text":"ThrowsClauseSyntax"},"ref":"ThrowsClauseSyntax"},{"name":"unexpectedAfterThrowsClause","value":{"text":"nil"}}]},{"range":{"startRow":17,"endRow":17,"endColumn":57,"startColumn":34},"id":246,"text":"ThrowsClause","type":"other","parent":245,"structure":[{"name":"unexpectedBeforeThrowsSpecifier","value":{"text":"nil"}},{"name":"throwsSpecifier","value":{"text":"throws","kind":"keyword(SwiftSyntax.Keyword.throws)"}},{"name":"unexpectedBetweenThrowsSpecifierAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndType","value":{"text":"nil"}},{"ref":"IdentifierTypeSyntax","name":"type","value":{"text":"IdentifierTypeSyntax"}},{"name":"unexpectedBetweenTypeAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"kind":"rightParen","text":")"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}]},{"range":{"endColumn":40,"startColumn":34,"startRow":17,"endRow":17},"parent":246,"token":{"kind":"keyword(SwiftSyntax.Keyword.throws)","leadingTrivia":"","trailingTrivia":""},"text":"throws","type":"other","id":247,"structure":[]},{"id":248,"range":{"endColumn":41,"startColumn":40,"startRow":17,"endRow":17},"parent":246,"token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""},"structure":[],"text":"(","type":"other"},{"range":{"endColumn":56,"startColumn":41,"startRow":17,"endRow":17},"id":249,"text":"IdentifierType","type":"type","parent":246,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeName"},{"value":{"text":"StatisticsError","kind":"identifier("StatisticsError")"},"name":"name"},{"value":{"text":"nil"},"name":"unexpectedBetweenNameAndGenericArgumentClause"},{"value":{"text":"nil"},"name":"genericArgumentClause"},{"value":{"text":"nil"},"name":"unexpectedAfterGenericArgumentClause"}]},{"type":"other","range":{"startColumn":41,"endColumn":56,"endRow":17,"startRow":17},"id":250,"parent":249,"token":{"kind":"identifier("StatisticsError")","leadingTrivia":"","trailingTrivia":""},"structure":[],"text":"StatisticsError"},{"type":"other","range":{"startColumn":56,"endColumn":57,"endRow":17,"startRow":17},"parent":246,"token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"structure":[],"id":251,"text":")"},{"range":{"startColumn":58,"endColumn":2,"endRow":19,"startRow":17},"id":252,"text":"CodeBlock","type":"other","parent":224,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftBrace"},{"value":{"text":"{","kind":"leftBrace"},"name":"leftBrace"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftBraceAndStatements"},{"value":{"text":"CodeBlockItemListSyntax"},"ref":"CodeBlockItemListSyntax","name":"statements"},{"value":{"text":"nil"},"name":"unexpectedBetweenStatementsAndRightBrace"},{"value":{"kind":"rightBrace","text":"}"},"name":"rightBrace"},{"value":{"text":"nil"},"name":"unexpectedAfterRightBrace"}]},{"id":253,"parent":252,"token":{"kind":"leftBrace","leadingTrivia":"","trailingTrivia":""},"range":{"endRow":17,"endColumn":59,"startRow":17,"startColumn":58},"text":"{","structure":[],"type":"other"},{"range":{"endRow":18,"endColumn":53,"startRow":18,"startColumn":5},"id":254,"text":"CodeBlockItemList","type":"collection","parent":252,"structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"range":{"endRow":18,"startRow":18,"endColumn":53,"startColumn":5},"id":255,"text":"CodeBlockItem","type":"other","parent":254,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"GuardStmtSyntax"},"ref":"GuardStmtSyntax","name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}]},{"range":{"endColumn":53,"endRow":18,"startRow":18,"startColumn":5},"id":256,"text":"GuardStmt","type":"other","parent":255,"structure":[{"name":"unexpectedBeforeGuardKeyword","value":{"text":"nil"}},{"name":"guardKeyword","value":{"text":"guard","kind":"keyword(SwiftSyntax.Keyword.guard)"}},{"name":"unexpectedBetweenGuardKeywordAndConditions","value":{"text":"nil"}},{"ref":"ConditionElementListSyntax","name":"conditions","value":{"text":"ConditionElementListSyntax"}},{"name":"unexpectedBetweenConditionsAndElseKeyword","value":{"text":"nil"}},{"name":"elseKeyword","value":{"text":"else","kind":"keyword(SwiftSyntax.Keyword.else)"}},{"name":"unexpectedBetweenElseKeywordAndBody","value":{"text":"nil"}},{"ref":"CodeBlockSyntax","name":"body","value":{"text":"CodeBlockSyntax"}},{"name":"unexpectedAfterBody","value":{"text":"nil"}}]},{"range":{"startRow":18,"endColumn":10,"endRow":18,"startColumn":5},"parent":256,"id":257,"structure":[],"text":"guard","token":{"trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.guard)","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"type":"other"},{"range":{"startRow":18,"endColumn":27,"endRow":18,"startColumn":11},"id":258,"text":"ConditionElementList","type":"collection","parent":256,"structure":[{"name":"Element","value":{"text":"ConditionElementSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"range":{"startColumn":11,"endColumn":27,"startRow":18,"endRow":18},"id":259,"text":"ConditionElement","type":"other","parent":258,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCondition"},{"value":{"text":"PrefixOperatorExprSyntax"},"ref":"PrefixOperatorExprSyntax","name":"condition"},{"value":{"text":"nil"},"name":"unexpectedBetweenConditionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}]},{"range":{"endRow":18,"startRow":18,"startColumn":11,"endColumn":27},"id":260,"text":"PrefixOperatorExpr","type":"expr","parent":259,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOperator"},{"value":{"kind":"prefixOperator("!")","text":"!"},"name":"operator"},{"value":{"text":"nil"},"name":"unexpectedBetweenOperatorAndExpression"},{"value":{"text":"MemberAccessExprSyntax"},"ref":"MemberAccessExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedAfterExpression"}]},{"token":{"trailingTrivia":"","leadingTrivia":"","kind":"prefixOperator("!")"},"type":"other","range":{"startRow":18,"endRow":18,"startColumn":11,"endColumn":12},"text":"!","id":261,"structure":[],"parent":260},{"range":{"startRow":18,"endRow":18,"startColumn":12,"endColumn":27},"id":262,"text":"MemberAccessExpr","type":"expr","parent":260,"structure":[{"name":"unexpectedBeforeBase","value":{"text":"nil"}},{"name":"base","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedBetweenBaseAndPeriod","value":{"text":"nil"}},{"name":"period","value":{"text":".","kind":"period"}},{"name":"unexpectedBetweenPeriodAndDeclName","value":{"text":"nil"}},{"name":"declName","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedAfterDeclName","value":{"text":"nil"}}]},{"range":{"startRow":18,"endRow":18,"startColumn":12,"endColumn":19},"id":263,"text":"DeclReferenceExpr","type":"expr","parent":262,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("ratings")","text":"ratings"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"type":"other","parent":263,"token":{"kind":"identifier("ratings")","trailingTrivia":"","leadingTrivia":""},"text":"ratings","range":{"startRow":18,"endColumn":19,"startColumn":12,"endRow":18},"id":264,"structure":[]},{"type":"other","id":265,"text":".","parent":262,"token":{"kind":"period","trailingTrivia":"","leadingTrivia":""},"structure":[],"range":{"startRow":18,"endColumn":20,"startColumn":19,"endRow":18}},{"range":{"startRow":18,"endColumn":27,"startColumn":20,"endRow":18},"id":266,"text":"DeclReferenceExpr","type":"expr","parent":262,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"isEmpty","kind":"identifier("isEmpty")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"text":"isEmpty","parent":266,"token":{"kind":"identifier("isEmpty")","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"startRow":18,"endRow":18,"startColumn":20,"endColumn":27},"type":"other","structure":[],"id":267},{"range":{"startRow":18,"endRow":18,"startColumn":28,"endColumn":32},"parent":256,"type":"other","structure":[],"id":268,"text":"else","token":{"kind":"keyword(SwiftSyntax.Keyword.else)","leadingTrivia":"","trailingTrivia":"␣<\/span>"}},{"range":{"startRow":18,"endRow":18,"startColumn":33,"endColumn":53},"id":269,"text":"CodeBlock","type":"other","parent":256,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftBrace"},{"value":{"kind":"leftBrace","text":"{"},"name":"leftBrace"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftBraceAndStatements"},{"value":{"text":"CodeBlockItemListSyntax"},"ref":"CodeBlockItemListSyntax","name":"statements"},{"value":{"text":"nil"},"name":"unexpectedBetweenStatementsAndRightBrace"},{"value":{"kind":"rightBrace","text":"}"},"name":"rightBrace"},{"value":{"text":"nil"},"name":"unexpectedAfterRightBrace"}]},{"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"leftBrace"},"id":270,"type":"other","structure":[],"parent":269,"range":{"startColumn":33,"endColumn":34,"endRow":18,"startRow":18},"text":"{"},{"range":{"startColumn":35,"endColumn":51,"endRow":18,"startRow":18},"id":271,"text":"CodeBlockItemList","type":"collection","parent":269,"structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"range":{"endRow":18,"endColumn":51,"startColumn":35,"startRow":18},"id":272,"text":"CodeBlockItem","type":"other","parent":271,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"ThrowStmtSyntax"},"name":"item","ref":"ThrowStmtSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}]},{"range":{"endRow":18,"startColumn":35,"endColumn":51,"startRow":18},"id":273,"text":"ThrowStmt","type":"other","parent":272,"structure":[{"name":"unexpectedBeforeThrowKeyword","value":{"text":"nil"}},{"name":"throwKeyword","value":{"text":"throw","kind":"keyword(SwiftSyntax.Keyword.throw)"}},{"name":"unexpectedBetweenThrowKeywordAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"MemberAccessExprSyntax"},"ref":"MemberAccessExprSyntax"},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}]},{"token":{"trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.throw)","leadingTrivia":""},"type":"other","text":"throw","parent":273,"range":{"startRow":18,"startColumn":35,"endColumn":40,"endRow":18},"structure":[],"id":274},{"range":{"startRow":18,"startColumn":41,"endColumn":51,"endRow":18},"id":275,"text":"MemberAccessExpr","type":"expr","parent":273,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBase"},{"value":{"text":"nil"},"name":"base"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseAndPeriod"},{"value":{"kind":"period","text":"."},"name":"period"},{"value":{"text":"nil"},"name":"unexpectedBetweenPeriodAndDeclName"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"declName"},{"value":{"text":"nil"},"name":"unexpectedAfterDeclName"}]},{"token":{"trailingTrivia":"","kind":"period","leadingTrivia":""},"range":{"startColumn":41,"endColumn":42,"endRow":18,"startRow":18},"text":".","type":"other","structure":[],"id":276,"parent":275},{"range":{"startColumn":42,"endColumn":51,"endRow":18,"startRow":18},"id":277,"text":"DeclReferenceExpr","type":"expr","parent":275,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("noRatings")","text":"noRatings"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"range":{"startColumn":42,"endRow":18,"startRow":18,"endColumn":51},"text":"noRatings","token":{"kind":"identifier("noRatings")","trailingTrivia":"␣<\/span>","leadingTrivia":""},"structure":[],"type":"other","parent":277,"id":278},{"structure":[],"text":"}","range":{"startColumn":52,"endRow":18,"startRow":18,"endColumn":53},"id":279,"token":{"kind":"rightBrace","trailingTrivia":"","leadingTrivia":""},"parent":269,"type":"other"},{"structure":[],"range":{"startColumn":1,"endRow":19,"startRow":19,"endColumn":2},"id":280,"text":"}","type":"other","token":{"kind":"rightBrace","trailingTrivia":"","leadingTrivia":"↲<\/span>"},"parent":252},{"range":{"startColumn":1,"endRow":21,"startRow":21,"endColumn":38},"id":281,"text":"CodeBlockItem","type":"other","parent":1,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"VariableDeclSyntax","value":{"text":"VariableDeclSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}]},{"range":{"startColumn":1,"endColumn":38,"endRow":21,"startRow":21},"id":282,"text":"VariableDecl","type":"decl","parent":281,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","value":{"text":"AttributeListSyntax"},"ref":"AttributeListSyntax"},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax"},{"name":"unexpectedBetweenModifiersAndBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"text":"let","kind":"keyword(SwiftSyntax.Keyword.let)"}},{"name":"unexpectedBetweenBindingSpecifierAndBindings","value":{"text":"nil"}},{"name":"bindings","value":{"text":"PatternBindingListSyntax"},"ref":"PatternBindingListSyntax"},{"name":"unexpectedAfterBindings","value":{"text":"nil"}}]},{"range":{"endRow":19,"endColumn":2,"startRow":19,"startColumn":2},"id":283,"text":"AttributeList","type":"collection","parent":282,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}]},{"range":{"endColumn":6,"endRow":21,"startRow":21,"startColumn":1},"id":284,"text":"DeclModifierList","type":"collection","parent":282,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"range":{"endRow":21,"startRow":21,"startColumn":1,"endColumn":6},"id":285,"text":"DeclModifier","type":"other","parent":284,"structure":[{"name":"unexpectedBeforeName","value":{"text":"nil"}},{"name":"name","value":{"kind":"keyword(SwiftSyntax.Keyword.async)","text":"async"}},{"name":"unexpectedBetweenNameAndDetail","value":{"text":"nil"}},{"name":"detail","value":{"text":"nil"}},{"name":"unexpectedAfterDetail","value":{"text":"nil"}}]},{"range":{"startRow":21,"endColumn":6,"startColumn":1,"endRow":21},"parent":285,"id":286,"type":"other","text":"async","structure":[],"token":{"trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.async)","leadingTrivia":"↲<\/span>↲<\/span>"}},{"range":{"startRow":21,"endColumn":10,"startColumn":7,"endRow":21},"parent":282,"text":"let","id":287,"type":"other","structure":[],"token":{"trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.let)","leadingTrivia":""}},{"range":{"startRow":21,"endColumn":38,"startColumn":11,"endRow":21},"id":288,"text":"PatternBindingList","type":"collection","parent":282,"structure":[{"value":{"text":"PatternBindingSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}]},{"range":{"endRow":21,"startColumn":11,"endColumn":38,"startRow":21},"id":289,"text":"PatternBinding","type":"other","parent":288,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"value":{"text":"IdentifierPatternSyntax"},"ref":"IdentifierPatternSyntax","name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTypeAnnotation"},{"value":{"text":"nil"},"name":"typeAnnotation"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAnnotationAndInitializer"},{"value":{"text":"InitializerClauseSyntax"},"ref":"InitializerClauseSyntax","name":"initializer"},{"value":{"text":"nil"},"name":"unexpectedBetweenInitializerAndAccessorBlock"},{"value":{"text":"nil"},"name":"accessorBlock"},{"value":{"text":"nil"},"name":"unexpectedBetweenAccessorBlockAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}]},{"range":{"startRow":21,"startColumn":11,"endRow":21,"endColumn":15},"id":290,"text":"IdentifierPattern","type":"pattern","parent":289,"structure":[{"name":"unexpectedBeforeIdentifier","value":{"text":"nil"}},{"name":"identifier","value":{"kind":"identifier("data")","text":"data"}},{"name":"unexpectedAfterIdentifier","value":{"text":"nil"}}]},{"type":"other","structure":[],"range":{"startRow":21,"endRow":21,"startColumn":11,"endColumn":15},"token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"identifier("data")"},"text":"data","id":291,"parent":290},{"range":{"startRow":21,"endRow":21,"startColumn":16,"endColumn":38},"id":292,"text":"InitializerClause","type":"other","parent":289,"structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"text":"=","kind":"equal"}},{"name":"unexpectedBetweenEqualAndValue","value":{"text":"nil"}},{"ref":"FunctionCallExprSyntax","name":"value","value":{"text":"FunctionCallExprSyntax"}},{"name":"unexpectedAfterValue","value":{"text":"nil"}}]},{"id":293,"text":"=","range":{"startColumn":16,"endRow":21,"endColumn":17,"startRow":21},"parent":292,"structure":[],"token":{"leadingTrivia":"","kind":"equal","trailingTrivia":"␣<\/span>"},"type":"other"},{"range":{"startColumn":18,"endRow":21,"endColumn":38,"startRow":21},"id":294,"text":"FunctionCallExpr","type":"expr","parent":292,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"name":"calledExpression","ref":"DeclReferenceExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"value":{"text":"LabeledExprListSyntax"},"name":"arguments","ref":"LabeledExprListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"value":{"text":"MultipleTrailingClosureElementListSyntax"},"name":"additionalTrailingClosures","ref":"MultipleTrailingClosureElementListSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}]},{"range":{"endColumn":31,"startRow":21,"startColumn":18,"endRow":21},"id":295,"text":"DeclReferenceExpr","type":"expr","parent":294,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("fetchUserData")","text":"fetchUserData"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}]},{"text":"fetchUserData","range":{"endColumn":31,"endRow":21,"startColumn":18,"startRow":21},"structure":[],"id":296,"type":"other","parent":295,"token":{"trailingTrivia":"","kind":"identifier("fetchUserData")","leadingTrivia":""}},{"type":"other","parent":294,"structure":[],"token":{"trailingTrivia":"","kind":"leftParen","leadingTrivia":""},"range":{"endColumn":32,"endRow":21,"startColumn":31,"startRow":21},"id":297,"text":"("},{"range":{"endColumn":37,"endRow":21,"startColumn":32,"startRow":21},"id":298,"text":"LabeledExprList","type":"collection","parent":294,"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}]},{"range":{"endColumn":37,"endRow":21,"startRow":21,"startColumn":32},"id":299,"text":"LabeledExpr","type":"other","parent":298,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"id","kind":"identifier("id")"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"kind":"colon","text":":"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}]},{"parent":299,"text":"id","type":"other","range":{"startRow":21,"startColumn":32,"endColumn":34,"endRow":21},"token":{"trailingTrivia":"","leadingTrivia":"","kind":"identifier("id")"},"structure":[],"id":300},{"range":{"startRow":21,"startColumn":34,"endColumn":35,"endRow":21},"structure":[],"type":"other","parent":299,"text":":","token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"colon"},"id":301},{"range":{"startRow":21,"startColumn":36,"endColumn":37,"endRow":21},"id":302,"text":"IntegerLiteralExpr","type":"expr","parent":299,"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"1","kind":"integerLiteral("1")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}]},{"type":"other","token":{"trailingTrivia":"","kind":"integerLiteral("1")","leadingTrivia":""},"id":303,"structure":[],"parent":302,"text":"1","range":{"endRow":21,"startRow":21,"endColumn":37,"startColumn":36}},{"range":{"endRow":21,"startRow":21,"endColumn":38,"startColumn":37},"token":{"trailingTrivia":"","kind":"rightParen","leadingTrivia":""},"text":")","type":"other","structure":[],"id":304,"parent":294},{"range":{"endRow":21,"startRow":21,"endColumn":38,"startColumn":38},"id":305,"text":"MultipleTrailingClosureElementList","type":"collection","parent":294,"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}]},{"range":{"startRow":22,"endRow":22,"endColumn":40,"startColumn":1},"id":306,"text":"CodeBlockItem","type":"other","parent":1,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"VariableDeclSyntax","value":{"text":"VariableDeclSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}]},{"range":{"endRow":22,"endColumn":40,"startColumn":1,"startRow":22},"id":307,"text":"VariableDecl","type":"decl","parent":306,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttributes"},{"ref":"AttributeListSyntax","value":{"text":"AttributeListSyntax"},"name":"attributes"},{"value":{"text":"nil"},"name":"unexpectedBetweenAttributesAndModifiers"},{"ref":"DeclModifierListSyntax","value":{"text":"DeclModifierListSyntax"},"name":"modifiers"},{"value":{"text":"nil"},"name":"unexpectedBetweenModifiersAndBindingSpecifier"},{"value":{"kind":"keyword(SwiftSyntax.Keyword.let)","text":"let"},"name":"bindingSpecifier"},{"value":{"text":"nil"},"name":"unexpectedBetweenBindingSpecifierAndBindings"},{"ref":"PatternBindingListSyntax","value":{"text":"PatternBindingListSyntax"},"name":"bindings"},{"value":{"text":"nil"},"name":"unexpectedAfterBindings"}]},{"range":{"startRow":21,"startColumn":38,"endRow":21,"endColumn":38},"id":308,"text":"AttributeList","type":"collection","parent":307,"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}]},{"range":{"startColumn":1,"startRow":22,"endRow":22,"endColumn":6},"id":309,"text":"DeclModifierList","type":"collection","parent":307,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"1"}}]},{"range":{"endColumn":6,"startRow":22,"startColumn":1,"endRow":22},"id":310,"text":"DeclModifier","type":"other","parent":309,"structure":[{"name":"unexpectedBeforeName","value":{"text":"nil"}},{"name":"name","value":{"text":"async","kind":"keyword(SwiftSyntax.Keyword.async)"}},{"name":"unexpectedBetweenNameAndDetail","value":{"text":"nil"}},{"name":"detail","value":{"text":"nil"}},{"name":"unexpectedAfterDetail","value":{"text":"nil"}}]},{"type":"other","range":{"startRow":22,"endColumn":6,"endRow":22,"startColumn":1},"parent":310,"token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.async)"},"structure":[],"text":"async","id":311},{"text":"let","structure":[],"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.let)"},"type":"other","id":312,"parent":307,"range":{"startRow":22,"endColumn":10,"endRow":22,"startColumn":7}},{"range":{"startRow":22,"endColumn":40,"endRow":22,"startColumn":11},"id":313,"text":"PatternBindingList","type":"collection","parent":307,"structure":[{"value":{"text":"PatternBindingSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}]},{"range":{"endColumn":40,"startRow":22,"startColumn":11,"endRow":22},"id":314,"text":"PatternBinding","type":"other","parent":313,"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"name":"pattern","value":{"text":"IdentifierPatternSyntax"},"ref":"IdentifierPatternSyntax"},{"name":"unexpectedBetweenPatternAndTypeAnnotation","value":{"text":"nil"}},{"name":"typeAnnotation","value":{"text":"nil"}},{"name":"unexpectedBetweenTypeAnnotationAndInitializer","value":{"text":"nil"}},{"name":"initializer","value":{"text":"InitializerClauseSyntax"},"ref":"InitializerClauseSyntax"},{"name":"unexpectedBetweenInitializerAndAccessorBlock","value":{"text":"nil"}},{"name":"accessorBlock","value":{"text":"nil"}},{"name":"unexpectedBetweenAccessorBlockAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}]},{"range":{"startRow":22,"startColumn":11,"endRow":22,"endColumn":16},"id":315,"text":"IdentifierPattern","type":"pattern","parent":314,"structure":[{"name":"unexpectedBeforeIdentifier","value":{"text":"nil"}},{"name":"identifier","value":{"text":"posts","kind":"identifier("posts")"}},{"name":"unexpectedAfterIdentifier","value":{"text":"nil"}}]},{"text":"posts","token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"identifier("posts")"},"parent":315,"range":{"endRow":22,"startRow":22,"startColumn":11,"endColumn":16},"type":"other","id":316,"structure":[]},{"range":{"endRow":22,"startRow":22,"startColumn":17,"endColumn":40},"id":317,"text":"InitializerClause","type":"other","parent":314,"structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"kind":"equal","text":"="}},{"name":"unexpectedBetweenEqualAndValue","value":{"text":"nil"}},{"name":"value","ref":"FunctionCallExprSyntax","value":{"text":"FunctionCallExprSyntax"}},{"name":"unexpectedAfterValue","value":{"text":"nil"}}]},{"parent":317,"structure":[],"token":{"trailingTrivia":"␣<\/span>","kind":"equal","leadingTrivia":""},"id":318,"type":"other","text":"=","range":{"endColumn":18,"startRow":22,"startColumn":17,"endRow":22}},{"range":{"endColumn":40,"startRow":22,"startColumn":19,"endRow":22},"id":319,"text":"FunctionCallExpr","type":"expr","parent":317,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"calledExpression"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax","name":"arguments"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"value":{"text":"MultipleTrailingClosureElementListSyntax"},"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}]},{"range":{"startRow":22,"endRow":22,"startColumn":19,"endColumn":33},"id":320,"text":"DeclReferenceExpr","type":"expr","parent":319,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"fetchUserPosts","kind":"identifier("fetchUserPosts")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}]},{"structure":[],"text":"fetchUserPosts","range":{"endRow":22,"endColumn":33,"startRow":22,"startColumn":19},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("fetchUserPosts")"},"type":"other","id":321,"parent":320},{"structure":[],"parent":319,"text":"(","range":{"endRow":22,"endColumn":34,"startRow":22,"startColumn":33},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"id":322,"type":"other"},{"range":{"endRow":22,"endColumn":39,"startRow":22,"startColumn":34},"id":323,"text":"LabeledExprList","type":"collection","parent":319,"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}]},{"range":{"startRow":22,"startColumn":34,"endColumn":39,"endRow":22},"id":324,"text":"LabeledExpr","type":"other","parent":323,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"kind":"identifier("id")","text":"id"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"kind":"colon","text":":"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"IntegerLiteralExprSyntax"},"name":"expression","ref":"IntegerLiteralExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}]},{"range":{"startColumn":34,"startRow":22,"endRow":22,"endColumn":36},"id":325,"token":{"kind":"identifier("id")","leadingTrivia":"","trailingTrivia":""},"type":"other","text":"id","parent":324,"structure":[]},{"range":{"startColumn":36,"startRow":22,"endRow":22,"endColumn":37},"token":{"kind":"colon","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"parent":324,"id":326,"text":":","type":"other","structure":[]},{"range":{"startColumn":38,"startRow":22,"endRow":22,"endColumn":39},"id":327,"text":"IntegerLiteralExpr","type":"expr","parent":324,"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"1","kind":"integerLiteral("1")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}]},{"text":"1","id":328,"token":{"leadingTrivia":"","kind":"integerLiteral("1")","trailingTrivia":""},"range":{"startColumn":38,"startRow":22,"endColumn":39,"endRow":22},"type":"other","parent":327,"structure":[]},{"parent":319,"type":"other","token":{"leadingTrivia":"","kind":"rightParen","trailingTrivia":""},"text":")","id":329,"structure":[],"range":{"startColumn":39,"startRow":22,"endColumn":40,"endRow":22}},{"range":{"startColumn":40,"startRow":22,"endColumn":40,"endRow":22},"id":330,"text":"MultipleTrailingClosureElementList","type":"collection","parent":319,"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}]},{"range":{"endRow":23,"endColumn":58,"startColumn":1,"startRow":23},"id":331,"text":"CodeBlockItem","type":"other","parent":1,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","ref":"VariableDeclSyntax","value":{"text":"VariableDeclSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}]},{"range":{"startColumn":1,"endColumn":58,"startRow":23,"endRow":23},"id":332,"text":"VariableDecl","type":"decl","parent":331,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","value":{"text":"AttributeListSyntax"},"ref":"AttributeListSyntax"},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax"},{"name":"unexpectedBetweenModifiersAndBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"kind":"keyword(SwiftSyntax.Keyword.let)","text":"let"}},{"name":"unexpectedBetweenBindingSpecifierAndBindings","value":{"text":"nil"}},{"name":"bindings","value":{"text":"PatternBindingListSyntax"},"ref":"PatternBindingListSyntax"},{"name":"unexpectedAfterBindings","value":{"text":"nil"}}]},{"range":{"startRow":22,"endRow":22,"endColumn":40,"startColumn":40},"id":333,"text":"AttributeList","type":"collection","parent":332,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}]},{"range":{"startColumn":40,"startRow":22,"endRow":22,"endColumn":40},"id":334,"text":"DeclModifierList","type":"collection","parent":332,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}]},{"parent":332,"structure":[],"range":{"startColumn":1,"endRow":23,"startRow":23,"endColumn":4},"text":"let","id":335,"token":{"trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.let)","leadingTrivia":"↲<\/span>"},"type":"other"},{"range":{"startColumn":5,"endRow":23,"startRow":23,"endColumn":58},"id":336,"text":"PatternBindingList","type":"collection","parent":332,"structure":[{"value":{"text":"PatternBindingSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}]},{"range":{"endColumn":58,"startRow":23,"startColumn":5,"endRow":23},"id":337,"text":"PatternBinding","type":"other","parent":336,"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"ref":"TuplePatternSyntax","name":"pattern","value":{"text":"TuplePatternSyntax"}},{"name":"unexpectedBetweenPatternAndTypeAnnotation","value":{"text":"nil"}},{"name":"typeAnnotation","value":{"text":"nil"}},{"name":"unexpectedBetweenTypeAnnotationAndInitializer","value":{"text":"nil"}},{"ref":"InitializerClauseSyntax","name":"initializer","value":{"text":"InitializerClauseSyntax"}},{"name":"unexpectedBetweenInitializerAndAccessorBlock","value":{"text":"nil"}},{"name":"accessorBlock","value":{"text":"nil"}},{"name":"unexpectedBetweenAccessorBlockAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}]},{"range":{"endRow":23,"startRow":23,"startColumn":5,"endColumn":32},"id":338,"text":"TuplePattern","type":"pattern","parent":337,"structure":[{"name":"unexpectedBeforeLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"kind":"leftParen","text":"("}},{"name":"unexpectedBetweenLeftParenAndElements","value":{"text":"nil"}},{"name":"elements","value":{"text":"TuplePatternElementListSyntax"},"ref":"TuplePatternElementListSyntax"},{"name":"unexpectedBetweenElementsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"kind":"rightParen","text":")"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}]},{"parent":338,"type":"other","text":"(","token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""},"range":{"startRow":23,"startColumn":5,"endRow":23,"endColumn":6},"structure":[],"id":339},{"range":{"startRow":23,"startColumn":6,"endRow":23,"endColumn":31},"id":340,"text":"TuplePatternElementList","type":"collection","parent":338,"structure":[{"value":{"text":"TuplePatternElementSyntax"},"name":"Element"},{"value":{"text":"2"},"name":"Count"}]},{"range":{"endRow":23,"startColumn":6,"endColumn":18,"startRow":23},"id":341,"text":"TuplePatternElement","type":"other","parent":340,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndPattern","value":{"text":"nil"}},{"name":"pattern","ref":"IdentifierPatternSyntax","value":{"text":"IdentifierPatternSyntax"}},{"name":"unexpectedBetweenPatternAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":",","kind":"comma"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}]},{"range":{"endColumn":17,"startRow":23,"endRow":23,"startColumn":6},"id":342,"text":"IdentifierPattern","type":"pattern","parent":341,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"text":"fetchedData","kind":"identifier("fetchedData")"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}]},{"range":{"startColumn":6,"startRow":23,"endColumn":17,"endRow":23},"parent":342,"id":343,"structure":[],"text":"fetchedData","type":"other","token":{"kind":"identifier("fetchedData")","leadingTrivia":"","trailingTrivia":""}},{"range":{"startColumn":17,"startRow":23,"endColumn":18,"endRow":23},"parent":341,"type":"other","text":",","structure":[],"token":{"kind":"comma","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"id":344},{"range":{"startColumn":19,"startRow":23,"endColumn":31,"endRow":23},"id":345,"text":"TuplePatternElement","type":"other","parent":340,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndPattern","value":{"text":"nil"}},{"ref":"IdentifierPatternSyntax","name":"pattern","value":{"text":"IdentifierPatternSyntax"}},{"name":"unexpectedBetweenPatternAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}]},{"range":{"startRow":23,"endColumn":31,"startColumn":19,"endRow":23},"id":346,"text":"IdentifierPattern","type":"pattern","parent":345,"structure":[{"name":"unexpectedBeforeIdentifier","value":{"text":"nil"}},{"name":"identifier","value":{"text":"fetchedPosts","kind":"identifier("fetchedPosts")"}},{"name":"unexpectedAfterIdentifier","value":{"text":"nil"}}]},{"text":"fetchedPosts","id":347,"type":"other","range":{"endColumn":31,"startRow":23,"endRow":23,"startColumn":19},"structure":[],"token":{"trailingTrivia":"","kind":"identifier("fetchedPosts")","leadingTrivia":""},"parent":346},{"token":{"trailingTrivia":"␣<\/span>","kind":"rightParen","leadingTrivia":""},"structure":[],"type":"other","text":")","id":348,"parent":338,"range":{"endColumn":32,"startRow":23,"endRow":23,"startColumn":31}},{"range":{"endColumn":58,"startRow":23,"endRow":23,"startColumn":33},"id":349,"text":"InitializerClause","type":"other","parent":337,"structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"kind":"equal","text":"="}},{"name":"unexpectedBetweenEqualAndValue","value":{"text":"nil"}},{"ref":"TryExprSyntax","name":"value","value":{"text":"TryExprSyntax"}},{"name":"unexpectedAfterValue","value":{"text":"nil"}}]},{"id":350,"text":"=","token":{"trailingTrivia":"␣<\/span>","kind":"equal","leadingTrivia":""},"structure":[],"range":{"startColumn":33,"startRow":23,"endRow":23,"endColumn":34},"type":"other","parent":349},{"range":{"startColumn":35,"startRow":23,"endRow":23,"endColumn":58},"id":351,"text":"TryExpr","type":"expr","parent":349,"structure":[{"name":"unexpectedBeforeTryKeyword","value":{"text":"nil"}},{"name":"tryKeyword","value":{"kind":"keyword(SwiftSyntax.Keyword.try)","text":"try"}},{"name":"unexpectedBetweenTryKeywordAndQuestionOrExclamationMark","value":{"text":"nil"}},{"name":"questionOrExclamationMark","value":{"text":"nil"}},{"name":"unexpectedBetweenQuestionOrExclamationMarkAndExpression","value":{"text":"nil"}},{"name":"expression","ref":"AwaitExprSyntax","value":{"text":"AwaitExprSyntax"}},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}]},{"type":"other","id":352,"token":{"kind":"keyword(SwiftSyntax.Keyword.try)","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"endColumn":38,"startColumn":35,"endRow":23,"startRow":23},"parent":351,"text":"try","structure":[]},{"range":{"endColumn":58,"startColumn":39,"endRow":23,"startRow":23},"id":353,"text":"AwaitExpr","type":"expr","parent":351,"structure":[{"name":"unexpectedBeforeAwaitKeyword","value":{"text":"nil"}},{"name":"awaitKeyword","value":{"text":"await","kind":"keyword(SwiftSyntax.Keyword.await)"}},{"name":"unexpectedBetweenAwaitKeywordAndExpression","value":{"text":"nil"}},{"ref":"TupleExprSyntax","name":"expression","value":{"text":"TupleExprSyntax"}},{"name":"unexpectedAfterExpression","value":{"text":"nil"}}]},{"structure":[],"id":354,"text":"await","token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"keyword(SwiftSyntax.Keyword.await)"},"parent":353,"range":{"startColumn":39,"endColumn":44,"startRow":23,"endRow":23},"type":"other"},{"range":{"startColumn":45,"endColumn":58,"startRow":23,"endRow":23},"id":355,"text":"TupleExpr","type":"expr","parent":353,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndElements"},{"ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"},"name":"elements"},{"value":{"text":"nil"},"name":"unexpectedBetweenElementsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}]},{"parent":355,"range":{"endRow":23,"startColumn":45,"endColumn":46,"startRow":23},"type":"other","structure":[],"token":{"trailingTrivia":"","leadingTrivia":"","kind":"leftParen"},"id":356,"text":"("},{"range":{"endRow":23,"startColumn":46,"endColumn":57,"startRow":23},"id":357,"text":"LabeledExprList","type":"collection","parent":355,"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"2"},"name":"Count"}]},{"range":{"endRow":23,"startRow":23,"endColumn":51,"startColumn":46},"id":358,"text":"LabeledExpr","type":"other","parent":357,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":",","kind":"comma"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}]},{"range":{"startColumn":46,"endRow":23,"startRow":23,"endColumn":50},"id":359,"text":"DeclReferenceExpr","type":"expr","parent":358,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("data")","text":"data"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}]},{"type":"other","text":"data","token":{"leadingTrivia":"","kind":"identifier("data")","trailingTrivia":""},"structure":[],"range":{"startColumn":46,"startRow":23,"endRow":23,"endColumn":50},"parent":359,"id":360},{"token":{"leadingTrivia":"","kind":"comma","trailingTrivia":"␣<\/span>"},"id":361,"text":",","type":"other","structure":[],"parent":358,"range":{"startColumn":50,"startRow":23,"endRow":23,"endColumn":51}},{"range":{"startColumn":52,"startRow":23,"endRow":23,"endColumn":57},"id":362,"text":"LabeledExpr","type":"other","parent":357,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}]},{"range":{"startColumn":52,"endRow":23,"endColumn":57,"startRow":23},"id":363,"text":"DeclReferenceExpr","type":"expr","parent":362,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("posts")","text":"posts"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}]},{"structure":[],"token":{"leadingTrivia":"","kind":"identifier("posts")","trailingTrivia":""},"id":364,"range":{"endColumn":57,"endRow":23,"startRow":23,"startColumn":52},"text":"posts","type":"other","parent":363},{"range":{"endColumn":58,"endRow":23,"startRow":23,"startColumn":57},"type":"other","parent":355,"id":365,"structure":[],"token":{"leadingTrivia":"","kind":"rightParen","trailingTrivia":""},"text":")"},{"token":{"leadingTrivia":"","kind":"endOfFile","trailingTrivia":""},"text":"","id":366,"type":"other","parent":0,"range":{"endColumn":58,"endRow":23,"startRow":23,"startColumn":58},"structure":[]}] diff --git a/Examples/Completed/for_loops/code.swift b/Examples/Completed/for_loops/code.swift new file mode 100644 index 0000000..ca2d2d7 --- /dev/null +++ b/Examples/Completed/for_loops/code.swift @@ -0,0 +1,29 @@ +// MARK: - Basic For-in Loop +// Simple for-in loop over an array +let names = ["Alice", "Bob", "Charlie"] +for name in names { + print("Hello, \(name)!") +} + +// MARK: - For-in with Enumerated +// For-in loop with enumerated() to get index and value +print("\n=== For-in with Enumerated ===") +for (index, name) in names.enumerated() { + print("Index: \(index), Name: \(name)") +} + +// MARK: - For-in with Where Clause +// For-in loop with where clause +print("\n=== For-in with Where Clause ===") +let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] +for number in numbers where number % 2 == 0 { + print("Even number: \(number)") +} + +// MARK: - For-in with Dictionary +// For-in loop over dictionary +print("\n=== For-in with Dictionary ===") +let scores = ["Alice": 95, "Bob": 87, "Charlie": 92] +for (name, score) in scores { + print("\(name): \(score)") +} diff --git a/Examples/Completed/for_loops/dsl.swift b/Examples/Completed/for_loops/dsl.swift new file mode 100644 index 0000000..4c8bf36 --- /dev/null +++ b/Examples/Completed/for_loops/dsl.swift @@ -0,0 +1,71 @@ +import SyntaxKit + +// MARK: - For Loops Examples +Group { + // MARK: - Basic For-in Loop + Variable(.let, name: "names", equals: Literal.array([Literal.string("Alice"), Literal.string("Bob"), Literal.string("Charlie")])) + .comment { + Line("MARK: - Basic For-in Loop") + Line("Simple for-in loop over an array") + } + + For(VariableExp("name"), in: VariableExp("names"), then: { + Call("print") { + ParameterExp(unlabeled: "\"Hello, \\(name)!\"") + } + }) + + // MARK: - For-in with Enumerated + Call("print") { + ParameterExp(unlabeled: "\"\\n=== For-in with Enumerated ===\"") + } + .comment { + Line("MARK: - For-in with Enumerated") + Line("For-in loop with enumerated() to get index and value") + } + For(Tuple.patternCodeBlock([VariableExp("index"), VariableExp("name")]), in: VariableExp("names").call("enumerated"), then: { + Call("print") { + ParameterExp(unlabeled: "\"Index: \\(index), Name: \\(name)\"") + } + }) + + // MARK: - For-in with Where Clause + Call("print") { + ParameterExp(unlabeled: "\"\\n=== For-in with Where Clause ===\"") + } + .comment { + Line("MARK: - For-in with Where Clause") + Line("For-in loop with where clause") + } + Variable(.let, name: "numbers", equals: Literal.array([Literal.integer(1), Literal.integer(2), Literal.integer(3), Literal.integer(4), Literal.integer(5), Literal.integer(6), Literal.integer(7), Literal.integer(8), Literal.integer(9), Literal.integer(10)])) + + For(VariableExp("number"), in: VariableExp("numbers"), where: { + Infix("==") { + Infix("%") { + VariableExp("number") + Literal.integer(2) + } + Literal.integer(0) + } + }, then: { + Call("print") { + ParameterExp(unlabeled: "\"Even number: \\(number)\"") + } + }) + + // MARK: - For-in with Dictionary + Call("print") { + ParameterExp(unlabeled: "\"\\n=== For-in with Dictionary ===\"") + } + .comment { + Line("MARK: - For-in with Dictionary") + Line("For-in loop over dictionary") + } + Variable(.let, name: "scores", equals: Literal.dictionary([(Literal.string("Alice"), Literal.integer(95)), (Literal.string("Bob"), Literal.integer(87)), (Literal.string("Charlie"), Literal.integer(92))])) + + For(Tuple.patternCodeBlock([VariableExp("name"), VariableExp("score")]), in: VariableExp("scores"), then: { + Call("print") { + ParameterExp(unlabeled: "\"\\(name): \\(score)\"") + } + }) +} \ No newline at end of file diff --git a/Examples/Completed/for_loops/syntax.json b/Examples/Completed/for_loops/syntax.json new file mode 100644 index 0000000..894fdf5 --- /dev/null +++ b/Examples/Completed/for_loops/syntax.json @@ -0,0 +1 @@ +[{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeShebang"},{"value":{"text":"nil"},"name":"shebang"},{"value":{"text":"nil"},"name":"unexpectedBetweenShebangAndStatements"},{"ref":"CodeBlockItemListSyntax","value":{"text":"CodeBlockItemListSyntax"},"name":"statements"},{"value":{"text":"nil"},"name":"unexpectedBetweenStatementsAndEndOfFileToken"},{"value":{"text":"","kind":"endOfFile"},"name":"endOfFileToken"},{"value":{"text":"nil"},"name":"unexpectedAfterEndOfFileToken"}],"type":"other","text":"SourceFile","id":0,"range":{"endColumn":1,"endRow":30,"startColumn":1,"startRow":3}},{"structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"10"},"name":"Count"}],"type":"collection","text":"CodeBlockItemList","id":1,"parent":0,"range":{"endColumn":2,"endRow":29,"startColumn":1,"startRow":3}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"VariableDeclSyntax","value":{"text":"VariableDeclSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","text":"CodeBlockItem","id":2,"parent":1,"range":{"endColumn":40,"endRow":3,"startColumn":1,"startRow":3}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttributes"},{"ref":"AttributeListSyntax","value":{"text":"AttributeListSyntax"},"name":"attributes"},{"value":{"text":"nil"},"name":"unexpectedBetweenAttributesAndModifiers"},{"ref":"DeclModifierListSyntax","value":{"text":"DeclModifierListSyntax"},"name":"modifiers"},{"value":{"text":"nil"},"name":"unexpectedBetweenModifiersAndBindingSpecifier"},{"value":{"text":"let","kind":"keyword(SwiftSyntax.Keyword.let)"},"name":"bindingSpecifier"},{"value":{"text":"nil"},"name":"unexpectedBetweenBindingSpecifierAndBindings"},{"ref":"PatternBindingListSyntax","value":{"text":"PatternBindingListSyntax"},"name":"bindings"},{"value":{"text":"nil"},"name":"unexpectedAfterBindings"}],"type":"decl","text":"VariableDecl","id":3,"parent":2,"range":{"endColumn":40,"endRow":3,"startColumn":1,"startRow":3}},{"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection","text":"AttributeList","id":4,"parent":3,"range":{"endColumn":1,"endRow":1,"startColumn":1,"startRow":1}},{"structure":[{"value":{"text":"DeclModifierSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection","text":"DeclModifierList","id":5,"parent":3,"range":{"endColumn":1,"endRow":1,"startColumn":1,"startRow":1}},{"type":"other","parent":3,"token":{"leadingTrivia":"\/\/␣<\/span>MARK:␣<\/span>-␣<\/span>Basic␣<\/span>For-in␣<\/span>Loop<\/span>↲<\/span>\/\/␣<\/span>Simple␣<\/span>for-in␣<\/span>loop␣<\/span>over␣<\/span>an␣<\/span>array<\/span>↲<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.let)"},"structure":[],"id":6,"text":"let","range":{"endColumn":4,"endRow":3,"startColumn":1,"startRow":3}},{"structure":[{"value":{"text":"PatternBindingSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","text":"PatternBindingList","id":7,"parent":3,"range":{"endColumn":40,"endRow":3,"startColumn":5,"startRow":3}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"ref":"IdentifierPatternSyntax","value":{"text":"IdentifierPatternSyntax"},"name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTypeAnnotation"},{"value":{"text":"nil"},"name":"typeAnnotation"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAnnotationAndInitializer"},{"ref":"InitializerClauseSyntax","value":{"text":"InitializerClauseSyntax"},"name":"initializer"},{"value":{"text":"nil"},"name":"unexpectedBetweenInitializerAndAccessorBlock"},{"value":{"text":"nil"},"name":"accessorBlock"},{"value":{"text":"nil"},"name":"unexpectedBetweenAccessorBlockAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"PatternBinding","id":8,"parent":7,"range":{"endColumn":40,"endRow":3,"startColumn":5,"startRow":3}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"text":"names","kind":"identifier("names")"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"type":"pattern","text":"IdentifierPattern","id":9,"parent":8,"range":{"endColumn":10,"endRow":3,"startColumn":5,"startRow":3}},{"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"identifier("names")"},"id":10,"parent":9,"structure":[],"text":"names","range":{"endColumn":10,"endRow":3,"startColumn":5,"startRow":3},"type":"other"},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeEqual"},{"value":{"text":"=","kind":"equal"},"name":"equal"},{"value":{"text":"nil"},"name":"unexpectedBetweenEqualAndValue"},{"ref":"ArrayExprSyntax","value":{"text":"ArrayExprSyntax"},"name":"value"},{"value":{"text":"nil"},"name":"unexpectedAfterValue"}],"type":"other","text":"InitializerClause","id":11,"parent":8,"range":{"endColumn":40,"endRow":3,"startColumn":11,"startRow":3}},{"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"equal"},"structure":[],"text":"=","type":"other","range":{"endColumn":12,"endRow":3,"startColumn":11,"startRow":3},"id":12,"parent":11},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftSquare"},{"value":{"text":"[","kind":"leftSquare"},"name":"leftSquare"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftSquareAndElements"},{"ref":"ArrayElementListSyntax","value":{"text":"ArrayElementListSyntax"},"name":"elements"},{"value":{"text":"nil"},"name":"unexpectedBetweenElementsAndRightSquare"},{"value":{"text":"]","kind":"rightSquare"},"name":"rightSquare"},{"value":{"text":"nil"},"name":"unexpectedAfterRightSquare"}],"type":"expr","text":"ArrayExpr","id":13,"parent":11,"range":{"endColumn":40,"endRow":3,"startColumn":13,"startRow":3}},{"parent":13,"range":{"endColumn":14,"endRow":3,"startColumn":13,"startRow":3},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftSquare"},"type":"other","text":"[","structure":[],"id":14},{"structure":[{"value":{"text":"ArrayElementSyntax"},"name":"Element"},{"value":{"text":"3"},"name":"Count"}],"type":"collection","text":"ArrayElementList","id":15,"parent":13,"range":{"endColumn":39,"endRow":3,"startColumn":14,"startRow":3}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"ref":"StringLiteralExprSyntax","value":{"text":"StringLiteralExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":",","kind":"comma"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"ArrayElement","id":16,"parent":15,"range":{"endColumn":22,"endRow":3,"startColumn":14,"startRow":3}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"ref":"StringLiteralSegmentListSyntax","value":{"text":"StringLiteralSegmentListSyntax"},"name":"segments"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"type":"expr","text":"StringLiteralExpr","id":17,"parent":16,"range":{"endColumn":21,"endRow":3,"startColumn":14,"startRow":3}},{"range":{"endColumn":15,"endRow":3,"startColumn":14,"startRow":3},"id":18,"type":"other","text":""","parent":17,"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"structure":[]},{"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","text":"StringLiteralSegmentList","id":19,"parent":17,"range":{"endColumn":20,"endRow":3,"startColumn":15,"startRow":3}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"Alice","kind":"stringSegment("Alice")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","text":"StringSegment","id":20,"parent":19,"range":{"endColumn":20,"endRow":3,"startColumn":15,"startRow":3}},{"parent":20,"type":"other","structure":[],"id":21,"range":{"endColumn":20,"endRow":3,"startColumn":15,"startRow":3},"text":"Alice","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("Alice")"}},{"text":""","id":22,"parent":17,"type":"other","structure":[],"range":{"endColumn":21,"endRow":3,"startColumn":20,"startRow":3},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"}},{"range":{"endColumn":22,"endRow":3,"startColumn":21,"startRow":3},"id":23,"type":"other","structure":[],"parent":16,"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"comma"},"text":","},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"ref":"StringLiteralExprSyntax","value":{"text":"StringLiteralExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":",","kind":"comma"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"ArrayElement","id":24,"parent":15,"range":{"endColumn":29,"endRow":3,"startColumn":23,"startRow":3}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"ref":"StringLiteralSegmentListSyntax","value":{"text":"StringLiteralSegmentListSyntax"},"name":"segments"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"type":"expr","text":"StringLiteralExpr","id":25,"parent":24,"range":{"endColumn":28,"endRow":3,"startColumn":23,"startRow":3}},{"parent":25,"id":26,"type":"other","structure":[],"text":""","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"range":{"endColumn":24,"endRow":3,"startColumn":23,"startRow":3}},{"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","text":"StringLiteralSegmentList","id":27,"parent":25,"range":{"endColumn":27,"endRow":3,"startColumn":24,"startRow":3}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"Bob","kind":"stringSegment("Bob")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","text":"StringSegment","id":28,"parent":27,"range":{"endColumn":27,"endRow":3,"startColumn":24,"startRow":3}},{"structure":[],"parent":28,"range":{"endColumn":27,"endRow":3,"startColumn":24,"startRow":3},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("Bob")"},"text":"Bob","type":"other","id":29},{"structure":[],"parent":25,"range":{"endColumn":28,"endRow":3,"startColumn":27,"startRow":3},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"text":""","type":"other","id":30},{"structure":[],"parent":24,"range":{"endColumn":29,"endRow":3,"startColumn":28,"startRow":3},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"comma"},"text":",","type":"other","id":31},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"ref":"StringLiteralExprSyntax","value":{"text":"StringLiteralExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"ArrayElement","id":32,"parent":15,"range":{"endColumn":39,"endRow":3,"startColumn":30,"startRow":3}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"ref":"StringLiteralSegmentListSyntax","value":{"text":"StringLiteralSegmentListSyntax"},"name":"segments"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"type":"expr","text":"StringLiteralExpr","id":33,"parent":32,"range":{"endColumn":39,"endRow":3,"startColumn":30,"startRow":3}},{"structure":[],"parent":33,"range":{"endColumn":31,"endRow":3,"startColumn":30,"startRow":3},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"text":""","type":"other","id":34},{"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","text":"StringLiteralSegmentList","id":35,"parent":33,"range":{"endColumn":38,"endRow":3,"startColumn":31,"startRow":3}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"Charlie","kind":"stringSegment("Charlie")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","text":"StringSegment","id":36,"parent":35,"range":{"endColumn":38,"endRow":3,"startColumn":31,"startRow":3}},{"structure":[],"parent":36,"range":{"endColumn":38,"endRow":3,"startColumn":31,"startRow":3},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("Charlie")"},"text":"Charlie","type":"other","id":37},{"structure":[],"parent":33,"range":{"endColumn":39,"endRow":3,"startColumn":38,"startRow":3},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"text":""","type":"other","id":38},{"structure":[],"parent":13,"range":{"endColumn":40,"endRow":3,"startColumn":39,"startRow":3},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightSquare"},"text":"]","type":"other","id":39},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"ForStmtSyntax","value":{"text":"ForStmtSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","text":"CodeBlockItem","id":40,"parent":1,"range":{"endColumn":2,"endRow":6,"startColumn":1,"startRow":4}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeForKeyword"},{"value":{"text":"for","kind":"keyword(SwiftSyntax.Keyword.for)"},"name":"forKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenForKeywordAndTryKeyword"},{"value":{"text":"nil"},"name":"tryKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenTryKeywordAndAwaitKeyword"},{"value":{"text":"nil"},"name":"awaitKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenAwaitKeywordAndCaseKeyword"},{"value":{"text":"nil"},"name":"caseKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenCaseKeywordAndPattern"},{"ref":"IdentifierPatternSyntax","value":{"text":"IdentifierPatternSyntax"},"name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTypeAnnotation"},{"value":{"text":"nil"},"name":"typeAnnotation"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAnnotationAndInKeyword"},{"value":{"text":"in","kind":"keyword(SwiftSyntax.Keyword.in)"},"name":"inKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenInKeywordAndSequence"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"sequence"},{"value":{"text":"nil"},"name":"unexpectedBetweenSequenceAndWhereClause"},{"value":{"text":"nil"},"name":"whereClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenWhereClauseAndBody"},{"ref":"CodeBlockSyntax","value":{"text":"CodeBlockSyntax"},"name":"body"},{"value":{"text":"nil"},"name":"unexpectedAfterBody"}],"type":"other","text":"ForStmt","id":41,"parent":40,"range":{"endColumn":2,"endRow":6,"startColumn":1,"startRow":4}},{"structure":[],"parent":41,"range":{"endColumn":4,"endRow":4,"startColumn":1,"startRow":4},"token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.for)"},"text":"for","type":"other","id":42},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"text":"name","kind":"identifier("name")"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"type":"pattern","text":"IdentifierPattern","id":43,"parent":41,"range":{"endColumn":9,"endRow":4,"startColumn":5,"startRow":4}},{"structure":[],"parent":43,"range":{"endColumn":9,"endRow":4,"startColumn":5,"startRow":4},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"identifier("name")"},"text":"name","type":"other","id":44},{"structure":[],"parent":41,"range":{"endColumn":12,"endRow":4,"startColumn":10,"startRow":4},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.in)"},"text":"in","type":"other","id":45},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"names","kind":"identifier("names")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","text":"DeclReferenceExpr","id":46,"parent":41,"range":{"endColumn":18,"endRow":4,"startColumn":13,"startRow":4}},{"structure":[],"parent":46,"range":{"endColumn":18,"endRow":4,"startColumn":13,"startRow":4},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"identifier("names")"},"text":"names","type":"other","id":47},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftBrace"},{"value":{"text":"{","kind":"leftBrace"},"name":"leftBrace"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftBraceAndStatements"},{"ref":"CodeBlockItemListSyntax","value":{"text":"CodeBlockItemListSyntax"},"name":"statements"},{"value":{"text":"nil"},"name":"unexpectedBetweenStatementsAndRightBrace"},{"value":{"text":"}","kind":"rightBrace"},"name":"rightBrace"},{"value":{"text":"nil"},"name":"unexpectedAfterRightBrace"}],"type":"other","text":"CodeBlock","id":48,"parent":41,"range":{"endColumn":2,"endRow":6,"startColumn":19,"startRow":4}},{"structure":[],"parent":48,"range":{"endColumn":20,"endRow":4,"startColumn":19,"startRow":4},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftBrace"},"text":"{","type":"other","id":49},{"structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","text":"CodeBlockItemList","id":50,"parent":48,"range":{"endColumn":29,"endRow":5,"startColumn":5,"startRow":5}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"FunctionCallExprSyntax","value":{"text":"FunctionCallExprSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","text":"CodeBlockItem","id":51,"parent":50,"range":{"endColumn":29,"endRow":5,"startColumn":5,"startRow":5}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"calledExpression"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"},"name":"arguments"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"ref":"MultipleTrailingClosureElementListSyntax","value":{"text":"MultipleTrailingClosureElementListSyntax"},"name":"additionalTrailingClosures"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}],"type":"expr","text":"FunctionCallExpr","id":52,"parent":51,"range":{"endColumn":29,"endRow":5,"startColumn":5,"startRow":5}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"print","kind":"identifier("print")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","text":"DeclReferenceExpr","id":53,"parent":52,"range":{"endColumn":10,"endRow":5,"startColumn":5,"startRow":5}},{"structure":[],"parent":53,"range":{"endColumn":10,"endRow":5,"startColumn":5,"startRow":5},"token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"","kind":"identifier("print")"},"text":"print","type":"other","id":54},{"structure":[],"parent":52,"range":{"endColumn":11,"endRow":5,"startColumn":10,"startRow":5},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"text":"(","type":"other","id":55},{"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","text":"LabeledExprList","id":56,"parent":52,"range":{"endColumn":28,"endRow":5,"startColumn":11,"startRow":5}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"ref":"StringLiteralExprSyntax","value":{"text":"StringLiteralExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"LabeledExpr","id":57,"parent":56,"range":{"endColumn":28,"endRow":5,"startColumn":11,"startRow":5}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"ref":"StringLiteralSegmentListSyntax","value":{"text":"StringLiteralSegmentListSyntax"},"name":"segments"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"type":"expr","text":"StringLiteralExpr","id":58,"parent":57,"range":{"endColumn":28,"endRow":5,"startColumn":11,"startRow":5}},{"structure":[],"parent":58,"range":{"endColumn":12,"endRow":5,"startColumn":11,"startRow":5},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"text":""","type":"other","id":59},{"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"3"},"name":"Count"}],"type":"collection","text":"StringLiteralSegmentList","id":60,"parent":58,"range":{"endColumn":27,"endRow":5,"startColumn":12,"startRow":5}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"Hello, ","kind":"stringSegment("Hello, ")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","text":"StringSegment","id":61,"parent":60,"range":{"endColumn":19,"endRow":5,"startColumn":12,"startRow":5}},{"structure":[],"parent":61,"range":{"endColumn":19,"endRow":5,"startColumn":12,"startRow":5},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("Hello, ")"},"text":"Hello,␣<\/span>","type":"other","id":62},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBackslash"},{"value":{"text":"\\","kind":"backslash"},"name":"backslash"},{"value":{"text":"nil"},"name":"unexpectedBetweenBackslashAndPounds"},{"value":{"text":"nil"},"name":"pounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenPoundsAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndExpressions"},{"ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"},"name":"expressions"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"type":"other","text":"ExpressionSegment","id":63,"parent":60,"range":{"endColumn":26,"endRow":5,"startColumn":19,"startRow":5}},{"structure":[],"parent":63,"range":{"endColumn":20,"endRow":5,"startColumn":19,"startRow":5},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"backslash"},"text":"\\","type":"other","id":64},{"structure":[],"parent":63,"range":{"endColumn":21,"endRow":5,"startColumn":20,"startRow":5},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"text":"(","type":"other","id":65},{"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","text":"LabeledExprList","id":66,"parent":63,"range":{"endColumn":25,"endRow":5,"startColumn":21,"startRow":5}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"LabeledExpr","id":67,"parent":66,"range":{"endColumn":25,"endRow":5,"startColumn":21,"startRow":5}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"name","kind":"identifier("name")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","text":"DeclReferenceExpr","id":68,"parent":67,"range":{"endColumn":25,"endRow":5,"startColumn":21,"startRow":5}},{"structure":[],"parent":68,"range":{"endColumn":25,"endRow":5,"startColumn":21,"startRow":5},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("name")"},"text":"name","type":"other","id":69},{"structure":[],"parent":63,"range":{"endColumn":26,"endRow":5,"startColumn":25,"startRow":5},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"text":")","type":"other","id":70},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"!","kind":"stringSegment("!")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","text":"StringSegment","id":71,"parent":60,"range":{"endColumn":27,"endRow":5,"startColumn":26,"startRow":5}},{"structure":[],"parent":71,"range":{"endColumn":27,"endRow":5,"startColumn":26,"startRow":5},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("!")"},"text":"!","type":"other","id":72},{"structure":[],"parent":58,"range":{"endColumn":28,"endRow":5,"startColumn":27,"startRow":5},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"text":""","type":"other","id":73},{"structure":[],"parent":52,"range":{"endColumn":29,"endRow":5,"startColumn":28,"startRow":5},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"text":")","type":"other","id":74},{"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection","text":"MultipleTrailingClosureElementList","id":75,"parent":52,"range":{"endColumn":29,"endRow":5,"startColumn":29,"startRow":5}},{"structure":[],"parent":48,"range":{"endColumn":2,"endRow":6,"startColumn":1,"startRow":6},"token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"","kind":"rightBrace"},"text":"}","type":"other","id":76},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"FunctionCallExprSyntax","value":{"text":"FunctionCallExprSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","text":"CodeBlockItem","id":77,"parent":1,"range":{"endColumn":42,"endRow":10,"startColumn":1,"startRow":10}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"calledExpression"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"},"name":"arguments"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"ref":"MultipleTrailingClosureElementListSyntax","value":{"text":"MultipleTrailingClosureElementListSyntax"},"name":"additionalTrailingClosures"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}],"type":"expr","text":"FunctionCallExpr","id":78,"parent":77,"range":{"endColumn":42,"endRow":10,"startColumn":1,"startRow":10}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"print","kind":"identifier("print")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","text":"DeclReferenceExpr","id":79,"parent":78,"range":{"endColumn":6,"endRow":10,"startColumn":1,"startRow":10}},{"structure":[],"parent":79,"range":{"endColumn":6,"endRow":10,"startColumn":1,"startRow":10},"token":{"leadingTrivia":"↲<\/span>↲<\/span>\/\/␣<\/span>MARK:␣<\/span>-␣<\/span>For-in␣<\/span>with␣<\/span>Enumerated<\/span>↲<\/span>\/\/␣<\/span>For-in␣<\/span>loop␣<\/span>with␣<\/span>enumerated()␣<\/span>to␣<\/span>get␣<\/span>index␣<\/span>and␣<\/span>value<\/span>↲<\/span>","trailingTrivia":"","kind":"identifier("print")"},"text":"print","type":"other","id":80},{"structure":[],"parent":78,"range":{"endColumn":7,"endRow":10,"startColumn":6,"startRow":10},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"text":"(","type":"other","id":81},{"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","text":"LabeledExprList","id":82,"parent":78,"range":{"endColumn":41,"endRow":10,"startColumn":7,"startRow":10}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"ref":"StringLiteralExprSyntax","value":{"text":"StringLiteralExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"LabeledExpr","id":83,"parent":82,"range":{"endColumn":41,"endRow":10,"startColumn":7,"startRow":10}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"ref":"StringLiteralSegmentListSyntax","value":{"text":"StringLiteralSegmentListSyntax"},"name":"segments"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"type":"expr","text":"StringLiteralExpr","id":84,"parent":83,"range":{"endColumn":41,"endRow":10,"startColumn":7,"startRow":10}},{"structure":[],"parent":84,"range":{"endColumn":8,"endRow":10,"startColumn":7,"startRow":10},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"text":""","type":"other","id":85},{"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"2"},"name":"Count"}],"type":"collection","text":"StringLiteralSegmentList","id":86,"parent":84,"range":{"endColumn":40,"endRow":10,"startColumn":8,"startRow":10}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"\\n","kind":"stringSegment("\\\\n")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","text":"StringSegment","id":87,"parent":86,"range":{"endColumn":10,"endRow":10,"startColumn":8,"startRow":10}},{"structure":[],"parent":87,"range":{"endColumn":10,"endRow":10,"startColumn":8,"startRow":10},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("\\\\n")"},"text":"\\n","type":"other","id":88},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"=== For-in with Enumerated ===","kind":"stringSegment("=== For-in with Enumerated ===")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","text":"StringSegment","id":89,"parent":86,"range":{"endColumn":40,"endRow":10,"startColumn":10,"startRow":10}},{"structure":[],"parent":89,"range":{"endColumn":40,"endRow":10,"startColumn":10,"startRow":10},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("=== For-in with Enumerated ===")"},"text":"===␣<\/span>For-in␣<\/span>with␣<\/span>Enumerated␣<\/span>===","type":"other","id":90},{"structure":[],"parent":84,"range":{"endColumn":41,"endRow":10,"startColumn":40,"startRow":10},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"text":""","type":"other","id":91},{"structure":[],"parent":78,"range":{"endColumn":42,"endRow":10,"startColumn":41,"startRow":10},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"text":")","type":"other","id":92},{"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection","text":"MultipleTrailingClosureElementList","id":93,"parent":78,"range":{"endColumn":42,"endRow":10,"startColumn":42,"startRow":10}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"ForStmtSyntax","value":{"text":"ForStmtSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","text":"CodeBlockItem","id":94,"parent":1,"range":{"endColumn":2,"endRow":13,"startColumn":1,"startRow":11}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeForKeyword"},{"value":{"text":"for","kind":"keyword(SwiftSyntax.Keyword.for)"},"name":"forKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenForKeywordAndTryKeyword"},{"value":{"text":"nil"},"name":"tryKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenTryKeywordAndAwaitKeyword"},{"value":{"text":"nil"},"name":"awaitKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenAwaitKeywordAndCaseKeyword"},{"value":{"text":"nil"},"name":"caseKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenCaseKeywordAndPattern"},{"ref":"TuplePatternSyntax","value":{"text":"TuplePatternSyntax"},"name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTypeAnnotation"},{"value":{"text":"nil"},"name":"typeAnnotation"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAnnotationAndInKeyword"},{"value":{"text":"in","kind":"keyword(SwiftSyntax.Keyword.in)"},"name":"inKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenInKeywordAndSequence"},{"ref":"FunctionCallExprSyntax","value":{"text":"FunctionCallExprSyntax"},"name":"sequence"},{"value":{"text":"nil"},"name":"unexpectedBetweenSequenceAndWhereClause"},{"value":{"text":"nil"},"name":"whereClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenWhereClauseAndBody"},{"ref":"CodeBlockSyntax","value":{"text":"CodeBlockSyntax"},"name":"body"},{"value":{"text":"nil"},"name":"unexpectedAfterBody"}],"type":"other","text":"ForStmt","id":95,"parent":94,"range":{"endColumn":2,"endRow":13,"startColumn":1,"startRow":11}},{"structure":[],"parent":95,"range":{"endColumn":4,"endRow":11,"startColumn":1,"startRow":11},"token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.for)"},"text":"for","type":"other","id":96},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndElements"},{"ref":"TuplePatternElementListSyntax","value":{"text":"TuplePatternElementListSyntax"},"name":"elements"},{"value":{"text":"nil"},"name":"unexpectedBetweenElementsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"type":"pattern","text":"TuplePattern","id":97,"parent":95,"range":{"endColumn":18,"endRow":11,"startColumn":5,"startRow":11}},{"structure":[],"parent":97,"range":{"endColumn":6,"endRow":11,"startColumn":5,"startRow":11},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"text":"(","type":"other","id":98},{"structure":[{"value":{"text":"TuplePatternElementSyntax"},"name":"Element"},{"value":{"text":"2"},"name":"Count"}],"type":"collection","text":"TuplePatternElementList","id":99,"parent":97,"range":{"endColumn":17,"endRow":11,"startColumn":6,"startRow":11}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndPattern"},{"ref":"IdentifierPatternSyntax","value":{"text":"IdentifierPatternSyntax"},"name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTrailingComma"},{"value":{"text":",","kind":"comma"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"TuplePatternElement","id":100,"parent":99,"range":{"endColumn":12,"endRow":11,"startColumn":6,"startRow":11}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"text":"index","kind":"identifier("index")"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"type":"pattern","text":"IdentifierPattern","id":101,"parent":100,"range":{"endColumn":11,"endRow":11,"startColumn":6,"startRow":11}},{"structure":[],"parent":101,"range":{"endColumn":11,"endRow":11,"startColumn":6,"startRow":11},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("index")"},"text":"index","type":"other","id":102},{"structure":[],"parent":100,"range":{"endColumn":12,"endRow":11,"startColumn":11,"startRow":11},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"comma"},"text":",","type":"other","id":103},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndPattern"},{"ref":"IdentifierPatternSyntax","value":{"text":"IdentifierPatternSyntax"},"name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"TuplePatternElement","id":104,"parent":99,"range":{"endColumn":17,"endRow":11,"startColumn":13,"startRow":11}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"text":"name","kind":"identifier("name")"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"type":"pattern","text":"IdentifierPattern","id":105,"parent":104,"range":{"endColumn":17,"endRow":11,"startColumn":13,"startRow":11}},{"structure":[],"parent":105,"range":{"endColumn":17,"endRow":11,"startColumn":13,"startRow":11},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("name")"},"text":"name","type":"other","id":106},{"structure":[],"parent":97,"range":{"endColumn":18,"endRow":11,"startColumn":17,"startRow":11},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"rightParen"},"text":")","type":"other","id":107},{"structure":[],"parent":95,"range":{"endColumn":21,"endRow":11,"startColumn":19,"startRow":11},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.in)"},"text":"in","type":"other","id":108},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"ref":"MemberAccessExprSyntax","value":{"text":"MemberAccessExprSyntax"},"name":"calledExpression"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"},"name":"arguments"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"ref":"MultipleTrailingClosureElementListSyntax","value":{"text":"MultipleTrailingClosureElementListSyntax"},"name":"additionalTrailingClosures"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}],"type":"expr","text":"FunctionCallExpr","id":109,"parent":95,"range":{"endColumn":40,"endRow":11,"startColumn":22,"startRow":11}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBase"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"base"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseAndPeriod"},{"value":{"text":".","kind":"period"},"name":"period"},{"value":{"text":"nil"},"name":"unexpectedBetweenPeriodAndDeclName"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"declName"},{"value":{"text":"nil"},"name":"unexpectedAfterDeclName"}],"type":"expr","text":"MemberAccessExpr","id":110,"parent":109,"range":{"endColumn":38,"endRow":11,"startColumn":22,"startRow":11}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"names","kind":"identifier("names")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","text":"DeclReferenceExpr","id":111,"parent":110,"range":{"endColumn":27,"endRow":11,"startColumn":22,"startRow":11}},{"structure":[],"parent":111,"range":{"endColumn":27,"endRow":11,"startColumn":22,"startRow":11},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("names")"},"text":"names","type":"other","id":112},{"structure":[],"parent":110,"range":{"endColumn":28,"endRow":11,"startColumn":27,"startRow":11},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"period"},"text":".","type":"other","id":113},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"enumerated","kind":"identifier("enumerated")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","text":"DeclReferenceExpr","id":114,"parent":110,"range":{"endColumn":38,"endRow":11,"startColumn":28,"startRow":11}},{"structure":[],"parent":114,"range":{"endColumn":38,"endRow":11,"startColumn":28,"startRow":11},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("enumerated")"},"text":"enumerated","type":"other","id":115},{"structure":[],"parent":109,"range":{"endColumn":39,"endRow":11,"startColumn":38,"startRow":11},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"text":"(","type":"other","id":116},{"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection","text":"LabeledExprList","id":117,"parent":109,"range":{"endColumn":39,"endRow":11,"startColumn":39,"startRow":11}},{"structure":[],"parent":109,"range":{"endColumn":40,"endRow":11,"startColumn":39,"startRow":11},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"rightParen"},"text":")","type":"other","id":118},{"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection","text":"MultipleTrailingClosureElementList","id":119,"parent":109,"range":{"endColumn":41,"endRow":11,"startColumn":41,"startRow":11}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftBrace"},{"value":{"text":"{","kind":"leftBrace"},"name":"leftBrace"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftBraceAndStatements"},{"ref":"CodeBlockItemListSyntax","value":{"text":"CodeBlockItemListSyntax"},"name":"statements"},{"value":{"text":"nil"},"name":"unexpectedBetweenStatementsAndRightBrace"},{"value":{"text":"}","kind":"rightBrace"},"name":"rightBrace"},{"value":{"text":"nil"},"name":"unexpectedAfterRightBrace"}],"type":"other","text":"CodeBlock","id":120,"parent":95,"range":{"endColumn":2,"endRow":13,"startColumn":41,"startRow":11}},{"structure":[],"parent":120,"range":{"endColumn":42,"endRow":11,"startColumn":41,"startRow":11},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftBrace"},"text":"{","type":"other","id":121},{"structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","text":"CodeBlockItemList","id":122,"parent":120,"range":{"endColumn":44,"endRow":12,"startColumn":5,"startRow":12}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"FunctionCallExprSyntax","value":{"text":"FunctionCallExprSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","text":"CodeBlockItem","id":123,"parent":122,"range":{"endColumn":44,"endRow":12,"startColumn":5,"startRow":12}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"calledExpression"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"},"name":"arguments"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"ref":"MultipleTrailingClosureElementListSyntax","value":{"text":"MultipleTrailingClosureElementListSyntax"},"name":"additionalTrailingClosures"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}],"type":"expr","text":"FunctionCallExpr","id":124,"parent":123,"range":{"endColumn":44,"endRow":12,"startColumn":5,"startRow":12}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"print","kind":"identifier("print")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","text":"DeclReferenceExpr","id":125,"parent":124,"range":{"endColumn":10,"endRow":12,"startColumn":5,"startRow":12}},{"structure":[],"parent":125,"range":{"endColumn":10,"endRow":12,"startColumn":5,"startRow":12},"token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"","kind":"identifier("print")"},"text":"print","type":"other","id":126},{"structure":[],"parent":124,"range":{"endColumn":11,"endRow":12,"startColumn":10,"startRow":12},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"text":"(","type":"other","id":127},{"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","text":"LabeledExprList","id":128,"parent":124,"range":{"endColumn":43,"endRow":12,"startColumn":11,"startRow":12}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"ref":"StringLiteralExprSyntax","value":{"text":"StringLiteralExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"LabeledExpr","id":129,"parent":128,"range":{"endColumn":43,"endRow":12,"startColumn":11,"startRow":12}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"ref":"StringLiteralSegmentListSyntax","value":{"text":"StringLiteralSegmentListSyntax"},"name":"segments"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"type":"expr","text":"StringLiteralExpr","id":130,"parent":129,"range":{"endColumn":43,"endRow":12,"startColumn":11,"startRow":12}},{"structure":[],"parent":130,"range":{"endColumn":12,"endRow":12,"startColumn":11,"startRow":12},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"text":""","type":"other","id":131},{"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"5"},"name":"Count"}],"type":"collection","text":"StringLiteralSegmentList","id":132,"parent":130,"range":{"endColumn":42,"endRow":12,"startColumn":12,"startRow":12}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"Index: ","kind":"stringSegment("Index: ")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","text":"StringSegment","id":133,"parent":132,"range":{"endColumn":19,"endRow":12,"startColumn":12,"startRow":12}},{"structure":[],"parent":133,"range":{"endColumn":19,"endRow":12,"startColumn":12,"startRow":12},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("Index: ")"},"text":"Index:␣<\/span>","type":"other","id":134},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBackslash"},{"value":{"text":"\\","kind":"backslash"},"name":"backslash"},{"value":{"text":"nil"},"name":"unexpectedBetweenBackslashAndPounds"},{"value":{"text":"nil"},"name":"pounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenPoundsAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndExpressions"},{"ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"},"name":"expressions"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"type":"other","text":"ExpressionSegment","id":135,"parent":132,"range":{"endColumn":27,"endRow":12,"startColumn":19,"startRow":12}},{"structure":[],"parent":135,"range":{"endColumn":20,"endRow":12,"startColumn":19,"startRow":12},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"backslash"},"text":"\\","type":"other","id":136},{"structure":[],"parent":135,"range":{"endColumn":21,"endRow":12,"startColumn":20,"startRow":12},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"text":"(","type":"other","id":137},{"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","text":"LabeledExprList","id":138,"parent":135,"range":{"endColumn":26,"endRow":12,"startColumn":21,"startRow":12}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"LabeledExpr","id":139,"parent":138,"range":{"endColumn":26,"endRow":12,"startColumn":21,"startRow":12}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"index","kind":"identifier("index")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","text":"DeclReferenceExpr","id":140,"parent":139,"range":{"endColumn":26,"endRow":12,"startColumn":21,"startRow":12}},{"structure":[],"parent":140,"range":{"endColumn":26,"endRow":12,"startColumn":21,"startRow":12},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("index")"},"text":"index","type":"other","id":141},{"structure":[],"parent":135,"range":{"endColumn":27,"endRow":12,"startColumn":26,"startRow":12},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"text":")","type":"other","id":142},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":", Name: ","kind":"stringSegment(", Name: ")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","text":"StringSegment","id":143,"parent":132,"range":{"endColumn":35,"endRow":12,"startColumn":27,"startRow":12}},{"structure":[],"parent":143,"range":{"endColumn":35,"endRow":12,"startColumn":27,"startRow":12},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment(", Name: ")"},"text":",␣<\/span>Name:␣<\/span>","type":"other","id":144},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBackslash"},{"value":{"text":"\\","kind":"backslash"},"name":"backslash"},{"value":{"text":"nil"},"name":"unexpectedBetweenBackslashAndPounds"},{"value":{"text":"nil"},"name":"pounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenPoundsAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndExpressions"},{"ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"},"name":"expressions"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"type":"other","text":"ExpressionSegment","id":145,"parent":132,"range":{"endColumn":42,"endRow":12,"startColumn":35,"startRow":12}},{"structure":[],"parent":145,"range":{"endColumn":36,"endRow":12,"startColumn":35,"startRow":12},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"backslash"},"text":"\\","type":"other","id":146},{"structure":[],"parent":145,"range":{"endColumn":37,"endRow":12,"startColumn":36,"startRow":12},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"text":"(","type":"other","id":147},{"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","text":"LabeledExprList","id":148,"parent":145,"range":{"endColumn":41,"endRow":12,"startColumn":37,"startRow":12}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"LabeledExpr","id":149,"parent":148,"range":{"endColumn":41,"endRow":12,"startColumn":37,"startRow":12}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"name","kind":"identifier("name")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","text":"DeclReferenceExpr","id":150,"parent":149,"range":{"endColumn":41,"endRow":12,"startColumn":37,"startRow":12}},{"structure":[],"parent":150,"range":{"endColumn":41,"endRow":12,"startColumn":37,"startRow":12},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("name")"},"text":"name","type":"other","id":151},{"structure":[],"parent":145,"range":{"endColumn":42,"endRow":12,"startColumn":41,"startRow":12},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"text":")","type":"other","id":152},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"","kind":"stringSegment("")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","text":"StringSegment","id":153,"parent":132,"range":{"endColumn":42,"endRow":12,"startColumn":42,"startRow":12}},{"structure":[],"parent":153,"range":{"endColumn":42,"endRow":12,"startColumn":42,"startRow":12},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("")"},"text":"","type":"other","id":154},{"structure":[],"parent":130,"range":{"endColumn":43,"endRow":12,"startColumn":42,"startRow":12},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"text":""","type":"other","id":155},{"structure":[],"parent":124,"range":{"endColumn":44,"endRow":12,"startColumn":43,"startRow":12},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"text":")","type":"other","id":156},{"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection","text":"MultipleTrailingClosureElementList","id":157,"parent":124,"range":{"endColumn":44,"endRow":12,"startColumn":44,"startRow":12}},{"structure":[],"parent":120,"range":{"endColumn":2,"endRow":13,"startColumn":1,"startRow":13},"token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"","kind":"rightBrace"},"text":"}","type":"other","id":158},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"FunctionCallExprSyntax","value":{"text":"FunctionCallExprSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","text":"CodeBlockItem","id":159,"parent":1,"range":{"endColumn":44,"endRow":17,"startColumn":1,"startRow":17}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"calledExpression"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"},"name":"arguments"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"ref":"MultipleTrailingClosureElementListSyntax","value":{"text":"MultipleTrailingClosureElementListSyntax"},"name":"additionalTrailingClosures"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}],"type":"expr","text":"FunctionCallExpr","id":160,"parent":159,"range":{"endColumn":44,"endRow":17,"startColumn":1,"startRow":17}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"print","kind":"identifier("print")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","text":"DeclReferenceExpr","id":161,"parent":160,"range":{"endColumn":6,"endRow":17,"startColumn":1,"startRow":17}},{"structure":[],"parent":161,"range":{"endColumn":6,"endRow":17,"startColumn":1,"startRow":17},"token":{"leadingTrivia":"↲<\/span>↲<\/span>\/\/␣<\/span>MARK:␣<\/span>-␣<\/span>For-in␣<\/span>with␣<\/span>Where␣<\/span>Clause<\/span>↲<\/span>\/\/␣<\/span>For-in␣<\/span>loop␣<\/span>with␣<\/span>where␣<\/span>clause<\/span>↲<\/span>","trailingTrivia":"","kind":"identifier("print")"},"text":"print","type":"other","id":162},{"structure":[],"parent":160,"range":{"endColumn":7,"endRow":17,"startColumn":6,"startRow":17},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"text":"(","type":"other","id":163},{"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","text":"LabeledExprList","id":164,"parent":160,"range":{"endColumn":43,"endRow":17,"startColumn":7,"startRow":17}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"ref":"StringLiteralExprSyntax","value":{"text":"StringLiteralExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"LabeledExpr","id":165,"parent":164,"range":{"endColumn":43,"endRow":17,"startColumn":7,"startRow":17}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"ref":"StringLiteralSegmentListSyntax","value":{"text":"StringLiteralSegmentListSyntax"},"name":"segments"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"type":"expr","text":"StringLiteralExpr","id":166,"parent":165,"range":{"endColumn":43,"endRow":17,"startColumn":7,"startRow":17}},{"structure":[],"parent":166,"range":{"endColumn":8,"endRow":17,"startColumn":7,"startRow":17},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"text":""","type":"other","id":167},{"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"2"},"name":"Count"}],"type":"collection","text":"StringLiteralSegmentList","id":168,"parent":166,"range":{"endColumn":42,"endRow":17,"startColumn":8,"startRow":17}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"\\n","kind":"stringSegment("\\\\n")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","text":"StringSegment","id":169,"parent":168,"range":{"endColumn":10,"endRow":17,"startColumn":8,"startRow":17}},{"structure":[],"parent":169,"range":{"endColumn":10,"endRow":17,"startColumn":8,"startRow":17},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("\\\\n")"},"text":"\\n","type":"other","id":170},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"=== For-in with Where Clause ===","kind":"stringSegment("=== For-in with Where Clause ===")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","text":"StringSegment","id":171,"parent":168,"range":{"endColumn":42,"endRow":17,"startColumn":10,"startRow":17}},{"structure":[],"parent":171,"range":{"endColumn":42,"endRow":17,"startColumn":10,"startRow":17},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("=== For-in with Where Clause ===")"},"text":"===␣<\/span>For-in␣<\/span>with␣<\/span>Where␣<\/span>Clause␣<\/span>===","type":"other","id":172},{"structure":[],"parent":166,"range":{"endColumn":43,"endRow":17,"startColumn":42,"startRow":17},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"text":""","type":"other","id":173},{"structure":[],"parent":160,"range":{"endColumn":44,"endRow":17,"startColumn":43,"startRow":17},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"text":")","type":"other","id":174},{"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection","text":"MultipleTrailingClosureElementList","id":175,"parent":160,"range":{"endColumn":44,"endRow":17,"startColumn":44,"startRow":17}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"VariableDeclSyntax","value":{"text":"VariableDeclSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","text":"CodeBlockItem","id":176,"parent":1,"range":{"endColumn":46,"endRow":18,"startColumn":1,"startRow":18}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttributes"},{"ref":"AttributeListSyntax","value":{"text":"AttributeListSyntax"},"name":"attributes"},{"value":{"text":"nil"},"name":"unexpectedBetweenAttributesAndModifiers"},{"ref":"DeclModifierListSyntax","value":{"text":"DeclModifierListSyntax"},"name":"modifiers"},{"value":{"text":"nil"},"name":"unexpectedBetweenModifiersAndBindingSpecifier"},{"value":{"text":"let","kind":"keyword(SwiftSyntax.Keyword.let)"},"name":"bindingSpecifier"},{"value":{"text":"nil"},"name":"unexpectedBetweenBindingSpecifierAndBindings"},{"ref":"PatternBindingListSyntax","value":{"text":"PatternBindingListSyntax"},"name":"bindings"},{"value":{"text":"nil"},"name":"unexpectedAfterBindings"}],"type":"decl","text":"VariableDecl","id":177,"parent":176,"range":{"endColumn":46,"endRow":18,"startColumn":1,"startRow":18}},{"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection","text":"AttributeList","id":178,"parent":177,"range":{"endColumn":44,"endRow":17,"startColumn":44,"startRow":17}},{"structure":[{"value":{"text":"DeclModifierSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection","text":"DeclModifierList","id":179,"parent":177,"range":{"endColumn":44,"endRow":17,"startColumn":44,"startRow":17}},{"structure":[],"parent":177,"range":{"endColumn":4,"endRow":18,"startColumn":1,"startRow":18},"token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.let)"},"text":"let","type":"other","id":180},{"structure":[{"value":{"text":"PatternBindingSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","text":"PatternBindingList","id":181,"parent":177,"range":{"endColumn":46,"endRow":18,"startColumn":5,"startRow":18}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"ref":"IdentifierPatternSyntax","value":{"text":"IdentifierPatternSyntax"},"name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTypeAnnotation"},{"value":{"text":"nil"},"name":"typeAnnotation"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAnnotationAndInitializer"},{"ref":"InitializerClauseSyntax","value":{"text":"InitializerClauseSyntax"},"name":"initializer"},{"value":{"text":"nil"},"name":"unexpectedBetweenInitializerAndAccessorBlock"},{"value":{"text":"nil"},"name":"accessorBlock"},{"value":{"text":"nil"},"name":"unexpectedBetweenAccessorBlockAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"PatternBinding","id":182,"parent":181,"range":{"endColumn":46,"endRow":18,"startColumn":5,"startRow":18}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"text":"numbers","kind":"identifier("numbers")"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"type":"pattern","text":"IdentifierPattern","id":183,"parent":182,"range":{"endColumn":12,"endRow":18,"startColumn":5,"startRow":18}},{"structure":[],"parent":183,"range":{"endColumn":12,"endRow":18,"startColumn":5,"startRow":18},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"identifier("numbers")"},"text":"numbers","type":"other","id":184},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeEqual"},{"value":{"text":"=","kind":"equal"},"name":"equal"},{"value":{"text":"nil"},"name":"unexpectedBetweenEqualAndValue"},{"ref":"ArrayExprSyntax","value":{"text":"ArrayExprSyntax"},"name":"value"},{"value":{"text":"nil"},"name":"unexpectedAfterValue"}],"type":"other","text":"InitializerClause","id":185,"parent":182,"range":{"endColumn":46,"endRow":18,"startColumn":13,"startRow":18}},{"structure":[],"parent":185,"range":{"endColumn":14,"endRow":18,"startColumn":13,"startRow":18},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"equal"},"text":"=","type":"other","id":186},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftSquare"},{"value":{"text":"[","kind":"leftSquare"},"name":"leftSquare"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftSquareAndElements"},{"ref":"ArrayElementListSyntax","value":{"text":"ArrayElementListSyntax"},"name":"elements"},{"value":{"text":"nil"},"name":"unexpectedBetweenElementsAndRightSquare"},{"value":{"text":"]","kind":"rightSquare"},"name":"rightSquare"},{"value":{"text":"nil"},"name":"unexpectedAfterRightSquare"}],"type":"expr","text":"ArrayExpr","id":187,"parent":185,"range":{"endColumn":46,"endRow":18,"startColumn":15,"startRow":18}},{"structure":[],"parent":187,"range":{"endColumn":16,"endRow":18,"startColumn":15,"startRow":18},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftSquare"},"text":"[","type":"other","id":188},{"structure":[{"value":{"text":"ArrayElementSyntax"},"name":"Element"},{"value":{"text":"10"},"name":"Count"}],"type":"collection","text":"ArrayElementList","id":189,"parent":187,"range":{"endColumn":45,"endRow":18,"startColumn":16,"startRow":18}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":",","kind":"comma"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"ArrayElement","id":190,"parent":189,"range":{"endColumn":18,"endRow":18,"startColumn":16,"startRow":18}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"1","kind":"integerLiteral("1")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr","text":"IntegerLiteralExpr","id":191,"parent":190,"range":{"endColumn":17,"endRow":18,"startColumn":16,"startRow":18}},{"structure":[],"parent":191,"range":{"endColumn":17,"endRow":18,"startColumn":16,"startRow":18},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"integerLiteral("1")"},"text":"1","type":"other","id":192},{"structure":[],"parent":190,"range":{"endColumn":18,"endRow":18,"startColumn":17,"startRow":18},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"comma"},"text":",","type":"other","id":193},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":",","kind":"comma"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"ArrayElement","id":194,"parent":189,"range":{"endColumn":21,"endRow":18,"startColumn":19,"startRow":18}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"2","kind":"integerLiteral("2")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr","text":"IntegerLiteralExpr","id":195,"parent":194,"range":{"endColumn":20,"endRow":18,"startColumn":19,"startRow":18}},{"structure":[],"parent":195,"range":{"endColumn":20,"endRow":18,"startColumn":19,"startRow":18},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"integerLiteral("2")"},"text":"2","type":"other","id":196},{"structure":[],"parent":194,"range":{"endColumn":21,"endRow":18,"startColumn":20,"startRow":18},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"comma"},"text":",","type":"other","id":197},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":",","kind":"comma"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"ArrayElement","id":198,"parent":189,"range":{"endColumn":24,"endRow":18,"startColumn":22,"startRow":18}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"3","kind":"integerLiteral("3")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr","text":"IntegerLiteralExpr","id":199,"parent":198,"range":{"endColumn":23,"endRow":18,"startColumn":22,"startRow":18}},{"structure":[],"parent":199,"range":{"endColumn":23,"endRow":18,"startColumn":22,"startRow":18},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"integerLiteral("3")"},"text":"3","type":"other","id":200},{"structure":[],"parent":198,"range":{"endColumn":24,"endRow":18,"startColumn":23,"startRow":18},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"comma"},"text":",","type":"other","id":201},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":",","kind":"comma"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"ArrayElement","id":202,"parent":189,"range":{"endColumn":27,"endRow":18,"startColumn":25,"startRow":18}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"4","kind":"integerLiteral("4")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr","text":"IntegerLiteralExpr","id":203,"parent":202,"range":{"endColumn":26,"endRow":18,"startColumn":25,"startRow":18}},{"structure":[],"parent":203,"range":{"endColumn":26,"endRow":18,"startColumn":25,"startRow":18},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"integerLiteral("4")"},"text":"4","type":"other","id":204},{"structure":[],"parent":202,"range":{"endColumn":27,"endRow":18,"startColumn":26,"startRow":18},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"comma"},"text":",","type":"other","id":205},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":",","kind":"comma"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"ArrayElement","id":206,"parent":189,"range":{"endColumn":30,"endRow":18,"startColumn":28,"startRow":18}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"5","kind":"integerLiteral("5")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr","text":"IntegerLiteralExpr","id":207,"parent":206,"range":{"endColumn":29,"endRow":18,"startColumn":28,"startRow":18}},{"structure":[],"parent":207,"range":{"endColumn":29,"endRow":18,"startColumn":28,"startRow":18},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"integerLiteral("5")"},"text":"5","type":"other","id":208},{"structure":[],"parent":206,"range":{"endColumn":30,"endRow":18,"startColumn":29,"startRow":18},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"comma"},"text":",","type":"other","id":209},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":",","kind":"comma"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"ArrayElement","id":210,"parent":189,"range":{"endColumn":33,"endRow":18,"startColumn":31,"startRow":18}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"6","kind":"integerLiteral("6")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr","text":"IntegerLiteralExpr","id":211,"parent":210,"range":{"endColumn":32,"endRow":18,"startColumn":31,"startRow":18}},{"structure":[],"parent":211,"range":{"endColumn":32,"endRow":18,"startColumn":31,"startRow":18},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"integerLiteral("6")"},"text":"6","type":"other","id":212},{"structure":[],"parent":210,"range":{"endColumn":33,"endRow":18,"startColumn":32,"startRow":18},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"comma"},"text":",","type":"other","id":213},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":",","kind":"comma"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"ArrayElement","id":214,"parent":189,"range":{"endColumn":36,"endRow":18,"startColumn":34,"startRow":18}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"7","kind":"integerLiteral("7")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr","text":"IntegerLiteralExpr","id":215,"parent":214,"range":{"endColumn":35,"endRow":18,"startColumn":34,"startRow":18}},{"structure":[],"parent":215,"range":{"endColumn":35,"endRow":18,"startColumn":34,"startRow":18},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"integerLiteral("7")"},"text":"7","type":"other","id":216},{"structure":[],"parent":214,"range":{"endColumn":36,"endRow":18,"startColumn":35,"startRow":18},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"comma"},"text":",","type":"other","id":217},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":",","kind":"comma"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"ArrayElement","id":218,"parent":189,"range":{"endColumn":39,"endRow":18,"startColumn":37,"startRow":18}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"8","kind":"integerLiteral("8")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr","text":"IntegerLiteralExpr","id":219,"parent":218,"range":{"endColumn":38,"endRow":18,"startColumn":37,"startRow":18}},{"structure":[],"parent":219,"range":{"endColumn":38,"endRow":18,"startColumn":37,"startRow":18},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"integerLiteral("8")"},"text":"8","type":"other","id":220},{"structure":[],"parent":218,"range":{"endColumn":39,"endRow":18,"startColumn":38,"startRow":18},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"comma"},"text":",","type":"other","id":221},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":",","kind":"comma"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"ArrayElement","id":222,"parent":189,"range":{"endColumn":42,"endRow":18,"startColumn":40,"startRow":18}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"9","kind":"integerLiteral("9")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr","text":"IntegerLiteralExpr","id":223,"parent":222,"range":{"endColumn":41,"endRow":18,"startColumn":40,"startRow":18}},{"structure":[],"parent":223,"range":{"endColumn":41,"endRow":18,"startColumn":40,"startRow":18},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"integerLiteral("9")"},"text":"9","type":"other","id":224},{"structure":[],"parent":222,"range":{"endColumn":42,"endRow":18,"startColumn":41,"startRow":18},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"comma"},"text":",","type":"other","id":225},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeExpression"},{"ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"ArrayElement","id":226,"parent":189,"range":{"endColumn":45,"endRow":18,"startColumn":43,"startRow":18}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"10","kind":"integerLiteral("10")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr","text":"IntegerLiteralExpr","id":227,"parent":226,"range":{"endColumn":45,"endRow":18,"startColumn":43,"startRow":18}},{"structure":[],"parent":227,"range":{"endColumn":45,"endRow":18,"startColumn":43,"startRow":18},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"integerLiteral("10")"},"text":"10","type":"other","id":228},{"structure":[],"parent":187,"range":{"endColumn":46,"endRow":18,"startColumn":45,"startRow":18},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightSquare"},"text":"]","type":"other","id":229},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"ForStmtSyntax","value":{"text":"ForStmtSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","text":"CodeBlockItem","id":230,"parent":1,"range":{"endColumn":2,"endRow":21,"startColumn":1,"startRow":19}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeForKeyword"},{"value":{"text":"for","kind":"keyword(SwiftSyntax.Keyword.for)"},"name":"forKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenForKeywordAndTryKeyword"},{"value":{"text":"nil"},"name":"tryKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenTryKeywordAndAwaitKeyword"},{"value":{"text":"nil"},"name":"awaitKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenAwaitKeywordAndCaseKeyword"},{"value":{"text":"nil"},"name":"caseKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenCaseKeywordAndPattern"},{"ref":"IdentifierPatternSyntax","value":{"text":"IdentifierPatternSyntax"},"name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTypeAnnotation"},{"value":{"text":"nil"},"name":"typeAnnotation"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAnnotationAndInKeyword"},{"value":{"text":"in","kind":"keyword(SwiftSyntax.Keyword.in)"},"name":"inKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenInKeywordAndSequence"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"sequence"},{"value":{"text":"nil"},"name":"unexpectedBetweenSequenceAndWhereClause"},{"ref":"WhereClauseSyntax","value":{"text":"WhereClauseSyntax"},"name":"whereClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenWhereClauseAndBody"},{"ref":"CodeBlockSyntax","value":{"text":"CodeBlockSyntax"},"name":"body"},{"value":{"text":"nil"},"name":"unexpectedAfterBody"}],"type":"other","text":"ForStmt","id":231,"parent":230,"range":{"endColumn":2,"endRow":21,"startColumn":1,"startRow":19}},{"structure":[],"parent":231,"range":{"endColumn":4,"endRow":19,"startColumn":1,"startRow":19},"token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.for)"},"text":"for","type":"other","id":232},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"text":"number","kind":"identifier("number")"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"type":"pattern","text":"IdentifierPattern","id":233,"parent":231,"range":{"endColumn":11,"endRow":19,"startColumn":5,"startRow":19}},{"structure":[],"parent":233,"range":{"endColumn":11,"endRow":19,"startColumn":5,"startRow":19},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"identifier("number")"},"text":"number","type":"other","id":234},{"structure":[],"parent":231,"range":{"endColumn":14,"endRow":19,"startColumn":12,"startRow":19},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.in)"},"text":"in","type":"other","id":235},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"numbers","kind":"identifier("numbers")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","text":"DeclReferenceExpr","id":236,"parent":231,"range":{"endColumn":22,"endRow":19,"startColumn":15,"startRow":19}},{"structure":[],"parent":236,"range":{"endColumn":22,"endRow":19,"startColumn":15,"startRow":19},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"identifier("numbers")"},"text":"numbers","type":"other","id":237},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeWhereKeyword"},{"value":{"text":"where","kind":"keyword(SwiftSyntax.Keyword.where)"},"name":"whereKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenWhereKeywordAndCondition"},{"ref":"InfixOperatorExprSyntax","value":{"text":"InfixOperatorExprSyntax"},"name":"condition"},{"value":{"text":"nil"},"name":"unexpectedAfterCondition"}],"type":"other","text":"WhereClause","id":238,"parent":231,"range":{"endColumn":44,"endRow":19,"startColumn":23,"startRow":19}},{"structure":[],"parent":238,"range":{"endColumn":28,"endRow":19,"startColumn":23,"startRow":19},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.where)"},"text":"where","type":"other","id":239},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftOperand"},{"ref":"InfixOperatorExprSyntax","value":{"text":"InfixOperatorExprSyntax"},"name":"leftOperand"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftOperandAndOperator"},{"ref":"BinaryOperatorExprSyntax","value":{"text":"BinaryOperatorExprSyntax"},"name":"operator"},{"value":{"text":"nil"},"name":"unexpectedBetweenOperatorAndRightOperand"},{"ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"},"name":"rightOperand"},{"value":{"text":"nil"},"name":"unexpectedAfterRightOperand"}],"type":"expr","text":"InfixOperatorExpr","id":240,"parent":238,"range":{"endColumn":44,"endRow":19,"startColumn":29,"startRow":19}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftOperand"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"leftOperand"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftOperandAndOperator"},{"ref":"BinaryOperatorExprSyntax","value":{"text":"BinaryOperatorExprSyntax"},"name":"operator"},{"value":{"text":"nil"},"name":"unexpectedBetweenOperatorAndRightOperand"},{"ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"},"name":"rightOperand"},{"value":{"text":"nil"},"name":"unexpectedAfterRightOperand"}],"type":"expr","text":"InfixOperatorExpr","id":241,"parent":240,"range":{"endColumn":39,"endRow":19,"startColumn":29,"startRow":19}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"number","kind":"identifier("number")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","text":"DeclReferenceExpr","id":242,"parent":241,"range":{"endColumn":35,"endRow":19,"startColumn":29,"startRow":19}},{"structure":[],"parent":242,"range":{"endColumn":35,"endRow":19,"startColumn":29,"startRow":19},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"identifier("number")"},"text":"number","type":"other","id":243},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOperator"},{"value":{"text":"%","kind":"binaryOperator("%")"},"name":"operator"},{"value":{"text":"nil"},"name":"unexpectedAfterOperator"}],"type":"expr","text":"BinaryOperatorExpr","id":244,"parent":241,"range":{"endColumn":37,"endRow":19,"startColumn":36,"startRow":19}},{"structure":[],"parent":244,"range":{"endColumn":37,"endRow":19,"startColumn":36,"startRow":19},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"binaryOperator("%")"},"text":"%","type":"other","id":245},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"2","kind":"integerLiteral("2")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr","text":"IntegerLiteralExpr","id":246,"parent":241,"range":{"endColumn":39,"endRow":19,"startColumn":38,"startRow":19}},{"structure":[],"parent":246,"range":{"endColumn":39,"endRow":19,"startColumn":38,"startRow":19},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"integerLiteral("2")"},"text":"2","type":"other","id":247},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOperator"},{"value":{"text":"==","kind":"binaryOperator("==")"},"name":"operator"},{"value":{"text":"nil"},"name":"unexpectedAfterOperator"}],"type":"expr","text":"BinaryOperatorExpr","id":248,"parent":240,"range":{"endColumn":42,"endRow":19,"startColumn":40,"startRow":19}},{"structure":[],"parent":248,"range":{"endColumn":42,"endRow":19,"startColumn":40,"startRow":19},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"binaryOperator("==")"},"text":"==","type":"other","id":249},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"0","kind":"integerLiteral("0")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr","text":"IntegerLiteralExpr","id":250,"parent":240,"range":{"endColumn":44,"endRow":19,"startColumn":43,"startRow":19}},{"structure":[],"parent":250,"range":{"endColumn":44,"endRow":19,"startColumn":43,"startRow":19},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"integerLiteral("0")"},"text":"0","type":"other","id":251},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftBrace"},{"value":{"text":"{","kind":"leftBrace"},"name":"leftBrace"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftBraceAndStatements"},{"ref":"CodeBlockItemListSyntax","value":{"text":"CodeBlockItemListSyntax"},"name":"statements"},{"value":{"text":"nil"},"name":"unexpectedBetweenStatementsAndRightBrace"},{"value":{"text":"}","kind":"rightBrace"},"name":"rightBrace"},{"value":{"text":"nil"},"name":"unexpectedAfterRightBrace"}],"type":"other","text":"CodeBlock","id":252,"parent":231,"range":{"endColumn":2,"endRow":21,"startColumn":45,"startRow":19}},{"structure":[],"parent":252,"range":{"endColumn":46,"endRow":19,"startColumn":45,"startRow":19},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftBrace"},"text":"{","type":"other","id":253},{"structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","text":"CodeBlockItemList","id":254,"parent":252,"range":{"endColumn":36,"endRow":20,"startColumn":5,"startRow":20}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"FunctionCallExprSyntax","value":{"text":"FunctionCallExprSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","text":"CodeBlockItem","id":255,"parent":254,"range":{"endColumn":36,"endRow":20,"startColumn":5,"startRow":20}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"calledExpression"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"},"name":"arguments"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"ref":"MultipleTrailingClosureElementListSyntax","value":{"text":"MultipleTrailingClosureElementListSyntax"},"name":"additionalTrailingClosures"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}],"type":"expr","text":"FunctionCallExpr","id":256,"parent":255,"range":{"endColumn":36,"endRow":20,"startColumn":5,"startRow":20}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"print","kind":"identifier("print")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","text":"DeclReferenceExpr","id":257,"parent":256,"range":{"endColumn":10,"endRow":20,"startColumn":5,"startRow":20}},{"structure":[],"parent":257,"range":{"endColumn":10,"endRow":20,"startColumn":5,"startRow":20},"token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"","kind":"identifier("print")"},"text":"print","type":"other","id":258},{"structure":[],"parent":256,"range":{"endColumn":11,"endRow":20,"startColumn":10,"startRow":20},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"text":"(","type":"other","id":259},{"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","text":"LabeledExprList","id":260,"parent":256,"range":{"endColumn":35,"endRow":20,"startColumn":11,"startRow":20}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"ref":"StringLiteralExprSyntax","value":{"text":"StringLiteralExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"LabeledExpr","id":261,"parent":260,"range":{"endColumn":35,"endRow":20,"startColumn":11,"startRow":20}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"ref":"StringLiteralSegmentListSyntax","value":{"text":"StringLiteralSegmentListSyntax"},"name":"segments"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"type":"expr","text":"StringLiteralExpr","id":262,"parent":261,"range":{"endColumn":35,"endRow":20,"startColumn":11,"startRow":20}},{"structure":[],"parent":262,"range":{"endColumn":12,"endRow":20,"startColumn":11,"startRow":20},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"text":""","type":"other","id":263},{"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"3"},"name":"Count"}],"type":"collection","text":"StringLiteralSegmentList","id":264,"parent":262,"range":{"endColumn":34,"endRow":20,"startColumn":12,"startRow":20}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"Even number: ","kind":"stringSegment("Even number: ")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","text":"StringSegment","id":265,"parent":264,"range":{"endColumn":25,"endRow":20,"startColumn":12,"startRow":20}},{"structure":[],"parent":265,"range":{"endColumn":25,"endRow":20,"startColumn":12,"startRow":20},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("Even number: ")"},"text":"Even␣<\/span>number:␣<\/span>","type":"other","id":266},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBackslash"},{"value":{"text":"\\","kind":"backslash"},"name":"backslash"},{"value":{"text":"nil"},"name":"unexpectedBetweenBackslashAndPounds"},{"value":{"text":"nil"},"name":"pounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenPoundsAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndExpressions"},{"ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"},"name":"expressions"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"type":"other","text":"ExpressionSegment","id":267,"parent":264,"range":{"endColumn":34,"endRow":20,"startColumn":25,"startRow":20}},{"structure":[],"parent":267,"range":{"endColumn":26,"endRow":20,"startColumn":25,"startRow":20},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"backslash"},"text":"\\","type":"other","id":268},{"structure":[],"parent":267,"range":{"endColumn":27,"endRow":20,"startColumn":26,"startRow":20},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"text":"(","type":"other","id":269},{"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","text":"LabeledExprList","id":270,"parent":267,"range":{"endColumn":33,"endRow":20,"startColumn":27,"startRow":20}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"LabeledExpr","id":271,"parent":270,"range":{"endColumn":33,"endRow":20,"startColumn":27,"startRow":20}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"number","kind":"identifier("number")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","text":"DeclReferenceExpr","id":272,"parent":271,"range":{"endColumn":33,"endRow":20,"startColumn":27,"startRow":20}},{"structure":[],"parent":272,"range":{"endColumn":33,"endRow":20,"startColumn":27,"startRow":20},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("number")"},"text":"number","type":"other","id":273},{"structure":[],"parent":267,"range":{"endColumn":34,"endRow":20,"startColumn":33,"startRow":20},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"text":")","type":"other","id":274},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"","kind":"stringSegment("")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","text":"StringSegment","id":275,"parent":264,"range":{"endColumn":34,"endRow":20,"startColumn":34,"startRow":20}},{"structure":[],"parent":275,"range":{"endColumn":34,"endRow":20,"startColumn":34,"startRow":20},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("")"},"text":"","type":"other","id":276},{"structure":[],"parent":262,"range":{"endColumn":35,"endRow":20,"startColumn":34,"startRow":20},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"text":""","type":"other","id":277},{"structure":[],"parent":256,"range":{"endColumn":36,"endRow":20,"startColumn":35,"startRow":20},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"text":")","type":"other","id":278},{"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection","text":"MultipleTrailingClosureElementList","id":279,"parent":256,"range":{"endColumn":36,"endRow":20,"startColumn":36,"startRow":20}},{"structure":[],"parent":252,"range":{"endColumn":2,"endRow":21,"startColumn":1,"startRow":21},"token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"","kind":"rightBrace"},"text":"}","type":"other","id":280},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"FunctionCallExprSyntax","value":{"text":"FunctionCallExprSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","text":"CodeBlockItem","id":281,"parent":1,"range":{"endColumn":42,"endRow":25,"startColumn":1,"startRow":25}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"calledExpression"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"},"name":"arguments"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"ref":"MultipleTrailingClosureElementListSyntax","value":{"text":"MultipleTrailingClosureElementListSyntax"},"name":"additionalTrailingClosures"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}],"type":"expr","text":"FunctionCallExpr","id":282,"parent":281,"range":{"endColumn":42,"endRow":25,"startColumn":1,"startRow":25}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"print","kind":"identifier("print")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","text":"DeclReferenceExpr","id":283,"parent":282,"range":{"endColumn":6,"endRow":25,"startColumn":1,"startRow":25}},{"structure":[],"parent":283,"range":{"endColumn":6,"endRow":25,"startColumn":1,"startRow":25},"token":{"leadingTrivia":"↲<\/span>↲<\/span>\/\/␣<\/span>MARK:␣<\/span>-␣<\/span>For-in␣<\/span>with␣<\/span>Dictionary<\/span>↲<\/span>\/\/␣<\/span>For-in␣<\/span>loop␣<\/span>over␣<\/span>dictionary<\/span>↲<\/span>","trailingTrivia":"","kind":"identifier("print")"},"text":"print","type":"other","id":284},{"structure":[],"parent":282,"range":{"endColumn":7,"endRow":25,"startColumn":6,"startRow":25},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"text":"(","type":"other","id":285},{"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","text":"LabeledExprList","id":286,"parent":282,"range":{"endColumn":41,"endRow":25,"startColumn":7,"startRow":25}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"ref":"StringLiteralExprSyntax","value":{"text":"StringLiteralExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"LabeledExpr","id":287,"parent":286,"range":{"endColumn":41,"endRow":25,"startColumn":7,"startRow":25}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"ref":"StringLiteralSegmentListSyntax","value":{"text":"StringLiteralSegmentListSyntax"},"name":"segments"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"type":"expr","text":"StringLiteralExpr","id":288,"parent":287,"range":{"endColumn":41,"endRow":25,"startColumn":7,"startRow":25}},{"structure":[],"parent":288,"range":{"endColumn":8,"endRow":25,"startColumn":7,"startRow":25},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"text":""","type":"other","id":289},{"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"2"},"name":"Count"}],"type":"collection","text":"StringLiteralSegmentList","id":290,"parent":288,"range":{"endColumn":40,"endRow":25,"startColumn":8,"startRow":25}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"\\n","kind":"stringSegment("\\\\n")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","text":"StringSegment","id":291,"parent":290,"range":{"endColumn":10,"endRow":25,"startColumn":8,"startRow":25}},{"structure":[],"parent":291,"range":{"endColumn":10,"endRow":25,"startColumn":8,"startRow":25},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("\\\\n")"},"text":"\\n","type":"other","id":292},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"=== For-in with Dictionary ===","kind":"stringSegment("=== For-in with Dictionary ===")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","text":"StringSegment","id":293,"parent":290,"range":{"endColumn":40,"endRow":25,"startColumn":10,"startRow":25}},{"structure":[],"parent":293,"range":{"endColumn":40,"endRow":25,"startColumn":10,"startRow":25},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("=== For-in with Dictionary ===")"},"text":"===␣<\/span>For-in␣<\/span>with␣<\/span>Dictionary␣<\/span>===","type":"other","id":294},{"structure":[],"parent":288,"range":{"endColumn":41,"endRow":25,"startColumn":40,"startRow":25},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"text":""","type":"other","id":295},{"structure":[],"parent":282,"range":{"endColumn":42,"endRow":25,"startColumn":41,"startRow":25},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"text":")","type":"other","id":296},{"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection","text":"MultipleTrailingClosureElementList","id":297,"parent":282,"range":{"endColumn":42,"endRow":25,"startColumn":42,"startRow":25}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"VariableDeclSyntax","value":{"text":"VariableDeclSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","text":"CodeBlockItem","id":298,"parent":1,"range":{"endColumn":53,"endRow":26,"startColumn":1,"startRow":26}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttributes"},{"ref":"AttributeListSyntax","value":{"text":"AttributeListSyntax"},"name":"attributes"},{"value":{"text":"nil"},"name":"unexpectedBetweenAttributesAndModifiers"},{"ref":"DeclModifierListSyntax","value":{"text":"DeclModifierListSyntax"},"name":"modifiers"},{"value":{"text":"nil"},"name":"unexpectedBetweenModifiersAndBindingSpecifier"},{"value":{"text":"let","kind":"keyword(SwiftSyntax.Keyword.let)"},"name":"bindingSpecifier"},{"value":{"text":"nil"},"name":"unexpectedBetweenBindingSpecifierAndBindings"},{"ref":"PatternBindingListSyntax","value":{"text":"PatternBindingListSyntax"},"name":"bindings"},{"value":{"text":"nil"},"name":"unexpectedAfterBindings"}],"type":"decl","text":"VariableDecl","id":299,"parent":298,"range":{"endColumn":53,"endRow":26,"startColumn":1,"startRow":26}},{"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection","text":"AttributeList","id":300,"parent":299,"range":{"endColumn":42,"endRow":25,"startColumn":42,"startRow":25}},{"structure":[{"value":{"text":"DeclModifierSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection","text":"DeclModifierList","id":301,"parent":299,"range":{"endColumn":42,"endRow":25,"startColumn":42,"startRow":25}},{"structure":[],"parent":299,"range":{"endColumn":4,"endRow":26,"startColumn":1,"startRow":26},"token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.let)"},"text":"let","type":"other","id":302},{"structure":[{"value":{"text":"PatternBindingSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","text":"PatternBindingList","id":303,"parent":299,"range":{"endColumn":53,"endRow":26,"startColumn":5,"startRow":26}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"ref":"IdentifierPatternSyntax","value":{"text":"IdentifierPatternSyntax"},"name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTypeAnnotation"},{"value":{"text":"nil"},"name":"typeAnnotation"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAnnotationAndInitializer"},{"ref":"InitializerClauseSyntax","value":{"text":"InitializerClauseSyntax"},"name":"initializer"},{"value":{"text":"nil"},"name":"unexpectedBetweenInitializerAndAccessorBlock"},{"value":{"text":"nil"},"name":"accessorBlock"},{"value":{"text":"nil"},"name":"unexpectedBetweenAccessorBlockAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"PatternBinding","id":304,"parent":303,"range":{"endColumn":53,"endRow":26,"startColumn":5,"startRow":26}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"text":"scores","kind":"identifier("scores")"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"type":"pattern","text":"IdentifierPattern","id":305,"parent":304,"range":{"endColumn":11,"endRow":26,"startColumn":5,"startRow":26}},{"structure":[],"parent":305,"range":{"endColumn":11,"endRow":26,"startColumn":5,"startRow":26},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"identifier("scores")"},"text":"scores","type":"other","id":306},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeEqual"},{"value":{"text":"=","kind":"equal"},"name":"equal"},{"value":{"text":"nil"},"name":"unexpectedBetweenEqualAndValue"},{"ref":"DictionaryExprSyntax","value":{"text":"DictionaryExprSyntax"},"name":"value"},{"value":{"text":"nil"},"name":"unexpectedAfterValue"}],"type":"other","text":"InitializerClause","id":307,"parent":304,"range":{"endColumn":53,"endRow":26,"startColumn":12,"startRow":26}},{"structure":[],"parent":307,"range":{"endColumn":13,"endRow":26,"startColumn":12,"startRow":26},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"equal"},"text":"=","type":"other","id":308},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftSquare"},{"value":{"text":"[","kind":"leftSquare"},"name":"leftSquare"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftSquareAndContent"},{"ref":"DictionaryElementListSyntax","value":{"text":"DictionaryElementListSyntax"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedBetweenContentAndRightSquare"},{"value":{"text":"]","kind":"rightSquare"},"name":"rightSquare"},{"value":{"text":"nil"},"name":"unexpectedAfterRightSquare"}],"type":"expr","text":"DictionaryExpr","id":309,"parent":307,"range":{"endColumn":53,"endRow":26,"startColumn":14,"startRow":26}},{"structure":[],"parent":309,"range":{"endColumn":15,"endRow":26,"startColumn":14,"startRow":26},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftSquare"},"text":"[","type":"other","id":310},{"structure":[{"value":{"text":"DictionaryElementSyntax"},"name":"Element"},{"value":{"text":"3"},"name":"Count"}],"type":"collection","text":"DictionaryElementList","id":311,"parent":309,"range":{"endColumn":52,"endRow":26,"startColumn":15,"startRow":26}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeKey"},{"ref":"StringLiteralExprSyntax","value":{"text":"StringLiteralExprSyntax"},"name":"key"},{"value":{"text":"nil"},"name":"unexpectedBetweenKeyAndColon"},{"value":{"text":":","kind":"colon"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndValue"},{"ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"},"name":"value"},{"value":{"text":"nil"},"name":"unexpectedBetweenValueAndTrailingComma"},{"value":{"text":",","kind":"comma"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"DictionaryElement","id":312,"parent":311,"range":{"endColumn":27,"endRow":26,"startColumn":15,"startRow":26}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"ref":"StringLiteralSegmentListSyntax","value":{"text":"StringLiteralSegmentListSyntax"},"name":"segments"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"type":"expr","text":"StringLiteralExpr","id":313,"parent":312,"range":{"endColumn":22,"endRow":26,"startColumn":15,"startRow":26}},{"structure":[],"parent":313,"range":{"endColumn":16,"endRow":26,"startColumn":15,"startRow":26},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"text":""","type":"other","id":314},{"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","text":"StringLiteralSegmentList","id":315,"parent":313,"range":{"endColumn":21,"endRow":26,"startColumn":16,"startRow":26}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"Alice","kind":"stringSegment("Alice")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","text":"StringSegment","id":316,"parent":315,"range":{"endColumn":21,"endRow":26,"startColumn":16,"startRow":26}},{"structure":[],"parent":316,"range":{"endColumn":21,"endRow":26,"startColumn":16,"startRow":26},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("Alice")"},"text":"Alice","type":"other","id":317},{"structure":[],"parent":313,"range":{"endColumn":22,"endRow":26,"startColumn":21,"startRow":26},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"text":""","type":"other","id":318},{"structure":[],"parent":312,"range":{"endColumn":23,"endRow":26,"startColumn":22,"startRow":26},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"colon"},"text":":","type":"other","id":319},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"95","kind":"integerLiteral("95")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr","text":"IntegerLiteralExpr","id":320,"parent":312,"range":{"endColumn":26,"endRow":26,"startColumn":24,"startRow":26}},{"structure":[],"parent":320,"range":{"endColumn":26,"endRow":26,"startColumn":24,"startRow":26},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"integerLiteral("95")"},"text":"95","type":"other","id":321},{"structure":[],"parent":312,"range":{"endColumn":27,"endRow":26,"startColumn":26,"startRow":26},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"comma"},"text":",","type":"other","id":322},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeKey"},{"ref":"StringLiteralExprSyntax","value":{"text":"StringLiteralExprSyntax"},"name":"key"},{"value":{"text":"nil"},"name":"unexpectedBetweenKeyAndColon"},{"value":{"text":":","kind":"colon"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndValue"},{"ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"},"name":"value"},{"value":{"text":"nil"},"name":"unexpectedBetweenValueAndTrailingComma"},{"value":{"text":",","kind":"comma"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"DictionaryElement","id":323,"parent":311,"range":{"endColumn":38,"endRow":26,"startColumn":28,"startRow":26}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"ref":"StringLiteralSegmentListSyntax","value":{"text":"StringLiteralSegmentListSyntax"},"name":"segments"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"type":"expr","text":"StringLiteralExpr","id":324,"parent":323,"range":{"endColumn":33,"endRow":26,"startColumn":28,"startRow":26}},{"structure":[],"parent":324,"range":{"endColumn":29,"endRow":26,"startColumn":28,"startRow":26},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"text":""","type":"other","id":325},{"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","text":"StringLiteralSegmentList","id":326,"parent":324,"range":{"endColumn":32,"endRow":26,"startColumn":29,"startRow":26}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"Bob","kind":"stringSegment("Bob")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","text":"StringSegment","id":327,"parent":326,"range":{"endColumn":32,"endRow":26,"startColumn":29,"startRow":26}},{"structure":[],"parent":327,"range":{"endColumn":32,"endRow":26,"startColumn":29,"startRow":26},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("Bob")"},"text":"Bob","type":"other","id":328},{"structure":[],"parent":324,"range":{"endColumn":33,"endRow":26,"startColumn":32,"startRow":26},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"text":""","type":"other","id":329},{"structure":[],"parent":323,"range":{"endColumn":34,"endRow":26,"startColumn":33,"startRow":26},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"colon"},"text":":","type":"other","id":330},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"87","kind":"integerLiteral("87")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr","text":"IntegerLiteralExpr","id":331,"parent":323,"range":{"endColumn":37,"endRow":26,"startColumn":35,"startRow":26}},{"structure":[],"parent":331,"range":{"endColumn":37,"endRow":26,"startColumn":35,"startRow":26},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"integerLiteral("87")"},"text":"87","type":"other","id":332},{"structure":[],"parent":323,"range":{"endColumn":38,"endRow":26,"startColumn":37,"startRow":26},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"comma"},"text":",","type":"other","id":333},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeKey"},{"ref":"StringLiteralExprSyntax","value":{"text":"StringLiteralExprSyntax"},"name":"key"},{"value":{"text":"nil"},"name":"unexpectedBetweenKeyAndColon"},{"value":{"text":":","kind":"colon"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndValue"},{"ref":"IntegerLiteralExprSyntax","value":{"text":"IntegerLiteralExprSyntax"},"name":"value"},{"value":{"text":"nil"},"name":"unexpectedBetweenValueAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"DictionaryElement","id":334,"parent":311,"range":{"endColumn":52,"endRow":26,"startColumn":39,"startRow":26}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"ref":"StringLiteralSegmentListSyntax","value":{"text":"StringLiteralSegmentListSyntax"},"name":"segments"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"type":"expr","text":"StringLiteralExpr","id":335,"parent":334,"range":{"endColumn":48,"endRow":26,"startColumn":39,"startRow":26}},{"structure":[],"parent":335,"range":{"endColumn":40,"endRow":26,"startColumn":39,"startRow":26},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"text":""","type":"other","id":336},{"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","text":"StringLiteralSegmentList","id":337,"parent":335,"range":{"endColumn":47,"endRow":26,"startColumn":40,"startRow":26}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"Charlie","kind":"stringSegment("Charlie")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","text":"StringSegment","id":338,"parent":337,"range":{"endColumn":47,"endRow":26,"startColumn":40,"startRow":26}},{"structure":[],"parent":338,"range":{"endColumn":47,"endRow":26,"startColumn":40,"startRow":26},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("Charlie")"},"text":"Charlie","type":"other","id":339},{"structure":[],"parent":335,"range":{"endColumn":48,"endRow":26,"startColumn":47,"startRow":26},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"text":""","type":"other","id":340},{"structure":[],"parent":334,"range":{"endColumn":49,"endRow":26,"startColumn":48,"startRow":26},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"colon"},"text":":","type":"other","id":341},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"92","kind":"integerLiteral("92")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"type":"expr","text":"IntegerLiteralExpr","id":342,"parent":334,"range":{"endColumn":52,"endRow":26,"startColumn":50,"startRow":26}},{"structure":[],"parent":342,"range":{"endColumn":52,"endRow":26,"startColumn":50,"startRow":26},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"integerLiteral("92")"},"text":"92","type":"other","id":343},{"structure":[],"parent":309,"range":{"endColumn":53,"endRow":26,"startColumn":52,"startRow":26},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightSquare"},"text":"]","type":"other","id":344},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"ForStmtSyntax","value":{"text":"ForStmtSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","text":"CodeBlockItem","id":345,"parent":1,"range":{"endColumn":2,"endRow":29,"startColumn":1,"startRow":27}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeForKeyword"},{"value":{"text":"for","kind":"keyword(SwiftSyntax.Keyword.for)"},"name":"forKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenForKeywordAndTryKeyword"},{"value":{"text":"nil"},"name":"tryKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenTryKeywordAndAwaitKeyword"},{"value":{"text":"nil"},"name":"awaitKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenAwaitKeywordAndCaseKeyword"},{"value":{"text":"nil"},"name":"caseKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenCaseKeywordAndPattern"},{"ref":"TuplePatternSyntax","value":{"text":"TuplePatternSyntax"},"name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTypeAnnotation"},{"value":{"text":"nil"},"name":"typeAnnotation"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAnnotationAndInKeyword"},{"value":{"text":"in","kind":"keyword(SwiftSyntax.Keyword.in)"},"name":"inKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenInKeywordAndSequence"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"sequence"},{"value":{"text":"nil"},"name":"unexpectedBetweenSequenceAndWhereClause"},{"value":{"text":"nil"},"name":"whereClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenWhereClauseAndBody"},{"ref":"CodeBlockSyntax","value":{"text":"CodeBlockSyntax"},"name":"body"},{"value":{"text":"nil"},"name":"unexpectedAfterBody"}],"type":"other","text":"ForStmt","id":346,"parent":345,"range":{"endColumn":2,"endRow":29,"startColumn":1,"startRow":27}},{"structure":[],"parent":346,"range":{"endColumn":4,"endRow":27,"startColumn":1,"startRow":27},"token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.for)"},"text":"for","type":"other","id":347},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndElements"},{"ref":"TuplePatternElementListSyntax","value":{"text":"TuplePatternElementListSyntax"},"name":"elements"},{"value":{"text":"nil"},"name":"unexpectedBetweenElementsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"type":"pattern","text":"TuplePattern","id":348,"parent":346,"range":{"endColumn":18,"endRow":27,"startColumn":5,"startRow":27}},{"structure":[],"parent":348,"range":{"endColumn":6,"endRow":27,"startColumn":5,"startRow":27},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"text":"(","type":"other","id":349},{"structure":[{"value":{"text":"TuplePatternElementSyntax"},"name":"Element"},{"value":{"text":"2"},"name":"Count"}],"type":"collection","text":"TuplePatternElementList","id":350,"parent":348,"range":{"endColumn":17,"endRow":27,"startColumn":6,"startRow":27}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndPattern"},{"ref":"IdentifierPatternSyntax","value":{"text":"IdentifierPatternSyntax"},"name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTrailingComma"},{"value":{"text":",","kind":"comma"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"TuplePatternElement","id":351,"parent":350,"range":{"endColumn":11,"endRow":27,"startColumn":6,"startRow":27}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"text":"name","kind":"identifier("name")"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"type":"pattern","text":"IdentifierPattern","id":352,"parent":351,"range":{"endColumn":10,"endRow":27,"startColumn":6,"startRow":27}},{"structure":[],"parent":352,"range":{"endColumn":10,"endRow":27,"startColumn":6,"startRow":27},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("name")"},"text":"name","type":"other","id":353},{"structure":[],"parent":351,"range":{"endColumn":11,"endRow":27,"startColumn":10,"startRow":27},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"comma"},"text":",","type":"other","id":354},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndPattern"},{"ref":"IdentifierPatternSyntax","value":{"text":"IdentifierPatternSyntax"},"name":"pattern"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"TuplePatternElement","id":355,"parent":350,"range":{"endColumn":17,"endRow":27,"startColumn":12,"startRow":27}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"text":"score","kind":"identifier("score")"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"type":"pattern","text":"IdentifierPattern","id":356,"parent":355,"range":{"endColumn":17,"endRow":27,"startColumn":12,"startRow":27}},{"structure":[],"parent":356,"range":{"endColumn":17,"endRow":27,"startColumn":12,"startRow":27},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("score")"},"text":"score","type":"other","id":357},{"structure":[],"parent":348,"range":{"endColumn":18,"endRow":27,"startColumn":17,"startRow":27},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"rightParen"},"text":")","type":"other","id":358},{"structure":[],"parent":346,"range":{"endColumn":21,"endRow":27,"startColumn":19,"startRow":27},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.in)"},"text":"in","type":"other","id":359},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"scores","kind":"identifier("scores")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","text":"DeclReferenceExpr","id":360,"parent":346,"range":{"endColumn":28,"endRow":27,"startColumn":22,"startRow":27}},{"structure":[],"parent":360,"range":{"endColumn":28,"endRow":27,"startColumn":22,"startRow":27},"token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"identifier("scores")"},"text":"scores","type":"other","id":361},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftBrace"},{"value":{"text":"{","kind":"leftBrace"},"name":"leftBrace"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftBraceAndStatements"},{"ref":"CodeBlockItemListSyntax","value":{"text":"CodeBlockItemListSyntax"},"name":"statements"},{"value":{"text":"nil"},"name":"unexpectedBetweenStatementsAndRightBrace"},{"value":{"text":"}","kind":"rightBrace"},"name":"rightBrace"},{"value":{"text":"nil"},"name":"unexpectedAfterRightBrace"}],"type":"other","text":"CodeBlock","id":362,"parent":346,"range":{"endColumn":2,"endRow":29,"startColumn":29,"startRow":27}},{"structure":[],"parent":362,"range":{"endColumn":30,"endRow":27,"startColumn":29,"startRow":27},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftBrace"},"text":"{","type":"other","id":363},{"structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","text":"CodeBlockItemList","id":364,"parent":362,"range":{"endColumn":31,"endRow":28,"startColumn":5,"startRow":28}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"ref":"FunctionCallExprSyntax","value":{"text":"FunctionCallExprSyntax"},"name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"type":"other","text":"CodeBlockItem","id":365,"parent":364,"range":{"endColumn":31,"endRow":28,"startColumn":5,"startRow":28}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"calledExpression"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"},"name":"arguments"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"ref":"MultipleTrailingClosureElementListSyntax","value":{"text":"MultipleTrailingClosureElementListSyntax"},"name":"additionalTrailingClosures"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}],"type":"expr","text":"FunctionCallExpr","id":366,"parent":365,"range":{"endColumn":31,"endRow":28,"startColumn":5,"startRow":28}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"print","kind":"identifier("print")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","text":"DeclReferenceExpr","id":367,"parent":366,"range":{"endColumn":10,"endRow":28,"startColumn":5,"startRow":28}},{"structure":[],"parent":367,"range":{"endColumn":10,"endRow":28,"startColumn":5,"startRow":28},"token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"","kind":"identifier("print")"},"text":"print","type":"other","id":368},{"structure":[],"parent":366,"range":{"endColumn":11,"endRow":28,"startColumn":10,"startRow":28},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"text":"(","type":"other","id":369},{"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","text":"LabeledExprList","id":370,"parent":366,"range":{"endColumn":30,"endRow":28,"startColumn":11,"startRow":28}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"ref":"StringLiteralExprSyntax","value":{"text":"StringLiteralExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"LabeledExpr","id":371,"parent":370,"range":{"endColumn":30,"endRow":28,"startColumn":11,"startRow":28}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"ref":"StringLiteralSegmentListSyntax","value":{"text":"StringLiteralSegmentListSyntax"},"name":"segments"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"text":""","kind":"stringQuote"},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"type":"expr","text":"StringLiteralExpr","id":372,"parent":371,"range":{"endColumn":30,"endRow":28,"startColumn":11,"startRow":28}},{"structure":[],"parent":372,"range":{"endColumn":12,"endRow":28,"startColumn":11,"startRow":28},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"text":""","type":"other","id":373},{"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"5"},"name":"Count"}],"type":"collection","text":"StringLiteralSegmentList","id":374,"parent":372,"range":{"endColumn":29,"endRow":28,"startColumn":12,"startRow":28}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"","kind":"stringSegment("")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","text":"StringSegment","id":375,"parent":374,"range":{"endColumn":12,"endRow":28,"startColumn":12,"startRow":28}},{"structure":[],"parent":375,"range":{"endColumn":12,"endRow":28,"startColumn":12,"startRow":28},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("")"},"text":"","type":"other","id":376},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBackslash"},{"value":{"text":"\\","kind":"backslash"},"name":"backslash"},{"value":{"text":"nil"},"name":"unexpectedBetweenBackslashAndPounds"},{"value":{"text":"nil"},"name":"pounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenPoundsAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndExpressions"},{"ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"},"name":"expressions"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"type":"other","text":"ExpressionSegment","id":377,"parent":374,"range":{"endColumn":19,"endRow":28,"startColumn":12,"startRow":28}},{"structure":[],"parent":377,"range":{"endColumn":13,"endRow":28,"startColumn":12,"startRow":28},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"backslash"},"text":"\\","type":"other","id":378},{"structure":[],"parent":377,"range":{"endColumn":14,"endRow":28,"startColumn":13,"startRow":28},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"text":"(","type":"other","id":379},{"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","text":"LabeledExprList","id":380,"parent":377,"range":{"endColumn":18,"endRow":28,"startColumn":14,"startRow":28}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"LabeledExpr","id":381,"parent":380,"range":{"endColumn":18,"endRow":28,"startColumn":14,"startRow":28}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"name","kind":"identifier("name")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","text":"DeclReferenceExpr","id":382,"parent":381,"range":{"endColumn":18,"endRow":28,"startColumn":14,"startRow":28}},{"structure":[],"parent":382,"range":{"endColumn":18,"endRow":28,"startColumn":14,"startRow":28},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("name")"},"text":"name","type":"other","id":383},{"structure":[],"parent":377,"range":{"endColumn":19,"endRow":28,"startColumn":18,"startRow":28},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"text":")","type":"other","id":384},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":": ","kind":"stringSegment(": ")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","text":"StringSegment","id":385,"parent":374,"range":{"endColumn":21,"endRow":28,"startColumn":19,"startRow":28}},{"structure":[],"parent":385,"range":{"endColumn":21,"endRow":28,"startColumn":19,"startRow":28},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment(": ")"},"text":":␣<\/span>","type":"other","id":386},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBackslash"},{"value":{"text":"\\","kind":"backslash"},"name":"backslash"},{"value":{"text":"nil"},"name":"unexpectedBetweenBackslashAndPounds"},{"value":{"text":"nil"},"name":"pounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenPoundsAndLeftParen"},{"value":{"text":"(","kind":"leftParen"},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndExpressions"},{"ref":"LabeledExprListSyntax","value":{"text":"LabeledExprListSyntax"},"name":"expressions"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionsAndRightParen"},{"value":{"text":")","kind":"rightParen"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"type":"other","text":"ExpressionSegment","id":387,"parent":374,"range":{"endColumn":29,"endRow":28,"startColumn":21,"startRow":28}},{"structure":[],"parent":387,"range":{"endColumn":22,"endRow":28,"startColumn":21,"startRow":28},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"backslash"},"text":"\\","type":"other","id":388},{"structure":[],"parent":387,"range":{"endColumn":23,"endRow":28,"startColumn":22,"startRow":28},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"text":"(","type":"other","id":389},{"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"type":"collection","text":"LabeledExprList","id":390,"parent":387,"range":{"endColumn":28,"endRow":28,"startColumn":23,"startRow":28}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"ref":"DeclReferenceExprSyntax","value":{"text":"DeclReferenceExprSyntax"},"name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"type":"other","text":"LabeledExpr","id":391,"parent":390,"range":{"endColumn":28,"endRow":28,"startColumn":23,"startRow":28}},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"text":"score","kind":"identifier("score")"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"type":"expr","text":"DeclReferenceExpr","id":392,"parent":391,"range":{"endColumn":28,"endRow":28,"startColumn":23,"startRow":28}},{"structure":[],"parent":392,"range":{"endColumn":28,"endRow":28,"startColumn":23,"startRow":28},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("score")"},"text":"score","type":"other","id":393},{"structure":[],"parent":387,"range":{"endColumn":29,"endRow":28,"startColumn":28,"startRow":28},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"text":")","type":"other","id":394},{"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"text":"","kind":"stringSegment("")"},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"type":"other","text":"StringSegment","id":395,"parent":374,"range":{"endColumn":29,"endRow":28,"startColumn":29,"startRow":28}},{"structure":[],"parent":395,"range":{"endColumn":29,"endRow":28,"startColumn":29,"startRow":28},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("")"},"text":"","type":"other","id":396},{"structure":[],"parent":372,"range":{"endColumn":30,"endRow":28,"startColumn":29,"startRow":28},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"text":""","type":"other","id":397},{"structure":[],"parent":366,"range":{"endColumn":31,"endRow":28,"startColumn":30,"startRow":28},"token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"text":")","type":"other","id":398},{"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"type":"collection","text":"MultipleTrailingClosureElementList","id":399,"parent":366,"range":{"endColumn":31,"endRow":28,"startColumn":31,"startRow":28}},{"structure":[],"parent":362,"range":{"endColumn":2,"endRow":29,"startColumn":1,"startRow":29},"token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"","kind":"rightBrace"},"text":"}","type":"other","id":400},{"structure":[],"parent":0,"range":{"endColumn":1,"endRow":30,"startColumn":1,"startRow":30},"token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"","kind":"endOfFile"},"text":"","type":"other","id":401}] diff --git a/Examples/Remaining/protocols/code.swift b/Examples/Completed/protocols/code.swift similarity index 98% rename from Examples/Remaining/protocols/code.swift rename to Examples/Completed/protocols/code.swift index e0a642d..652ca98 100644 --- a/Examples/Remaining/protocols/code.swift +++ b/Examples/Completed/protocols/code.swift @@ -1,5 +1,3 @@ -import Foundation - // MARK: - Protocol Definition protocol Vehicle { var numberOfWheels: Int { get } diff --git a/Examples/Completed/protocols/dsl.swift b/Examples/Completed/protocols/dsl.swift new file mode 100644 index 0000000..bd1794f --- /dev/null +++ b/Examples/Completed/protocols/dsl.swift @@ -0,0 +1,106 @@ +import SyntaxKit + +// Generate and print the code +let generatedCode = Group { + // MARK: - Protocol Definition + Protocol("Vehicle") { + PropertyRequirement("numberOfWheels", type: "Int", access: .get) + PropertyRequirement("brand", type: "String", access: .get) + FunctionRequirement("start") + FunctionRequirement("stop") + } + + // MARK: - Protocol Extension + Extension("Vehicle") { + Function("start") { + Call("print") { + ParameterExp(name: "", value: "\"Starting \\(brand) vehicle...\"") + } + } + + Function("stop") { + Call("print") { + ParameterExp(name: "", value: "\"Stopping \\(brand) vehicle...\"") + } + } + } + + // MARK: - Protocol Composition + Protocol("Electric") { + PropertyRequirement("batteryLevel", type: "Double", access: .getSet) + FunctionRequirement("charge") + } + + // MARK: - Concrete Types + Struct("Car") { + Variable(.let, name: "numberOfWheels", type: "Int", equals: "4") + Variable(.let, name: "brand", type: "String") + + Function("start") { + Call("print") { + ParameterExp(name: "", value: "\"Starting \\(brand) car engine...\"") + } + } + }.inherits("Vehicle") + + Struct("ElectricCar") { + Variable(.let, name: "numberOfWheels", type: "Int", equals: "4") + Variable(.let, name: "brand", type: "String") + Variable(.var, name: "batteryLevel", type: "Double") + + Function("charge") { + Call("print") { + ParameterExp(name: "", value: "\"Charging \\(brand) electric car...\"") + } + Assignment("batteryLevel", Literal.float(100.0)) + } + }.inherits("Vehicle") + + // MARK: - Usage Example + VariableDecl(.let, name: "tesla", equals: "ElectricCar(brand: \"Tesla\", batteryLevel: 75.0)") + VariableDecl(.let, name: "toyota", equals: "Car(brand: \"Toyota\")") + + // Demonstrate protocol usage + Function("demonstrateVehicle") { + Parameter(name: "vehicle", type: "Vehicle") + } _: { + Call("print") { + ParameterExp(name: "", value: "\"Vehicle brand: \\(vehicle.brand)\"") + } + Call("print") { + ParameterExp(name: "", value: "\"Number of wheels: \\(vehicle.numberOfWheels)\"") + } + VariableExp("vehicle").call("start") + VariableExp("vehicle").call("stop") + } + + // Demonstrate protocol composition + Function("demonstrateElectricVehicle") { + Parameter(name: "vehicle", type: "Vehicle & Electric") + } _: { + VariableExp("demonstrateVehicle").call("demonstrateVehicle") { + ParameterExp(name: "vehicle", value: "vehicle") + } + Call("print") { + ParameterExp(name: "", value: "\"Battery level: \\(vehicle.batteryLevel)%\"") + } + VariableExp("vehicle").call("charge") + } + + // Test the implementations + Call("print") { + ParameterExp(name: "", value: "\"Testing regular car:\"") + } + VariableExp("demonstrateVehicle").call("demonstrateVehicle") { + ParameterExp(name: "vehicle", value: "toyota") + } + + Call("print") { + ParameterExp(name: "", value: "\"Testing electric car:\"") + } + VariableExp("demonstrateElectricVehicle").call("demonstrateElectricVehicle") { + ParameterExp(name: "vehicle", value: "tesla") + } +} + +print(generatedCode.generateCode()) \ No newline at end of file diff --git a/Examples/Completed/protocols/syntax.json b/Examples/Completed/protocols/syntax.json new file mode 100644 index 0000000..20a467f --- /dev/null +++ b/Examples/Completed/protocols/syntax.json @@ -0,0 +1 @@ +[{"text":"SourceFile","structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeShebang"},{"value":{"text":"nil"},"name":"shebang"},{"value":{"text":"nil"},"name":"unexpectedBetweenShebangAndStatements"},{"value":{"text":"CodeBlockItemListSyntax"},"ref":"CodeBlockItemListSyntax","name":"statements"},{"value":{"text":"nil"},"name":"unexpectedBetweenStatementsAndEndOfFileToken"},{"value":{"kind":"endOfFile","text":""},"name":"endOfFileToken"},{"value":{"text":"nil"},"name":"unexpectedAfterEndOfFileToken"}],"id":0,"range":{"endRow":74,"startColumn":1,"endColumn":1,"startRow":1},"type":"other"},{"text":"CodeBlockItemList","parent":0,"structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"14"},"name":"Count"}],"id":1,"range":{"endRow":73,"startColumn":1,"endColumn":34,"startRow":1},"type":"collection"},{"text":"CodeBlockItem","parent":1,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"ImportDeclSyntax"},"ref":"ImportDeclSyntax","name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"id":2,"range":{"endRow":1,"startColumn":1,"endColumn":18,"startRow":1},"type":"other"},{"text":"ImportDecl","parent":2,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttributes"},{"value":{"text":"AttributeListSyntax"},"ref":"AttributeListSyntax","name":"attributes"},{"value":{"text":"nil"},"name":"unexpectedBetweenAttributesAndModifiers"},{"value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax","name":"modifiers"},{"value":{"text":"nil"},"name":"unexpectedBetweenModifiersAndImportKeyword"},{"value":{"kind":"keyword(SwiftSyntax.Keyword.import)","text":"import"},"name":"importKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenImportKeywordAndImportKindSpecifier"},{"value":{"text":"nil"},"name":"importKindSpecifier"},{"value":{"text":"nil"},"name":"unexpectedBetweenImportKindSpecifierAndPath"},{"value":{"text":"ImportPathComponentListSyntax"},"ref":"ImportPathComponentListSyntax","name":"path"},{"value":{"text":"nil"},"name":"unexpectedAfterPath"}],"id":3,"range":{"endRow":1,"startColumn":1,"endColumn":18,"startRow":1},"type":"decl"},{"text":"AttributeList","parent":3,"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"id":4,"range":{"endRow":1,"startColumn":1,"endColumn":1,"startRow":1},"type":"collection"},{"text":"DeclModifierList","parent":3,"structure":[{"value":{"text":"DeclModifierSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"id":5,"range":{"endRow":1,"startColumn":1,"endColumn":1,"startRow":1},"type":"collection"},{"range":{"endRow":1,"startColumn":1,"endColumn":7,"startRow":1},"parent":3,"text":"import","id":6,"structure":[],"type":"other","token":{"leadingTrivia":"","kind":"keyword(SwiftSyntax.Keyword.import)","trailingTrivia":"␣<\/span>"}},{"text":"ImportPathComponentList","parent":3,"structure":[{"value":{"text":"ImportPathComponentSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"id":7,"range":{"endRow":1,"startColumn":8,"endColumn":18,"startRow":1},"type":"collection"},{"text":"ImportPathComponent","parent":7,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeName"},{"value":{"kind":"identifier("Foundation")","text":"Foundation"},"name":"name"},{"value":{"text":"nil"},"name":"unexpectedBetweenNameAndTrailingPeriod"},{"value":{"text":"nil"},"name":"trailingPeriod"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingPeriod"}],"id":8,"range":{"endRow":1,"startColumn":8,"endColumn":18,"startRow":1},"type":"other"},{"text":"Foundation","parent":8,"structure":[],"id":9,"type":"other","range":{"endRow":1,"startColumn":8,"endColumn":18,"startRow":1},"token":{"leadingTrivia":"","kind":"identifier("Foundation")","trailingTrivia":""}},{"text":"CodeBlockItem","parent":1,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"ProtocolDeclSyntax"},"ref":"ProtocolDeclSyntax","name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"id":10,"range":{"endRow":9,"startColumn":1,"endColumn":2,"startRow":4},"type":"other"},{"text":"ProtocolDecl","parent":10,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttributes"},{"value":{"text":"AttributeListSyntax"},"ref":"AttributeListSyntax","name":"attributes"},{"value":{"text":"nil"},"name":"unexpectedBetweenAttributesAndModifiers"},{"value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax","name":"modifiers"},{"value":{"text":"nil"},"name":"unexpectedBetweenModifiersAndProtocolKeyword"},{"value":{"kind":"keyword(SwiftSyntax.Keyword.protocol)","text":"protocol"},"name":"protocolKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenProtocolKeywordAndName"},{"value":{"kind":"identifier("Vehicle")","text":"Vehicle"},"name":"name"},{"value":{"text":"nil"},"name":"unexpectedBetweenNameAndPrimaryAssociatedTypeClause"},{"value":{"text":"nil"},"name":"primaryAssociatedTypeClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenPrimaryAssociatedTypeClauseAndInheritanceClause"},{"value":{"text":"nil"},"name":"inheritanceClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenInheritanceClauseAndGenericWhereClause"},{"value":{"text":"nil"},"name":"genericWhereClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenGenericWhereClauseAndMemberBlock"},{"value":{"text":"MemberBlockSyntax"},"ref":"MemberBlockSyntax","name":"memberBlock"},{"value":{"text":"nil"},"name":"unexpectedAfterMemberBlock"}],"id":11,"range":{"endRow":9,"startColumn":1,"endColumn":2,"startRow":4},"type":"decl"},{"text":"AttributeList","parent":11,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"id":12,"range":{"startRow":1,"endRow":1,"endColumn":18,"startColumn":18},"type":"collection"},{"text":"DeclModifierList","parent":11,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":13,"range":{"startRow":1,"endRow":1,"endColumn":18,"startColumn":18},"type":"collection"},{"token":{"kind":"keyword(SwiftSyntax.Keyword.protocol)","leadingTrivia":"↲<\/span>↲<\/span>\/\/␣<\/span>MARK:␣<\/span>-␣<\/span>Protocol␣<\/span>Definition<\/span>↲<\/span>","trailingTrivia":"␣<\/span>"},"id":14,"structure":[],"range":{"startRow":4,"endRow":4,"endColumn":9,"startColumn":1},"text":"protocol","parent":11,"type":"other"},{"token":{"kind":"identifier("Vehicle")","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"type":"other","id":15,"parent":11,"range":{"startRow":4,"endRow":4,"endColumn":17,"startColumn":10},"structure":[],"text":"Vehicle"},{"text":"MemberBlock","parent":11,"structure":[{"name":"unexpectedBeforeLeftBrace","value":{"text":"nil"}},{"name":"leftBrace","value":{"text":"{","kind":"leftBrace"}},{"name":"unexpectedBetweenLeftBraceAndMembers","value":{"text":"nil"}},{"name":"members","ref":"MemberBlockItemListSyntax","value":{"text":"MemberBlockItemListSyntax"}},{"name":"unexpectedBetweenMembersAndRightBrace","value":{"text":"nil"}},{"name":"rightBrace","value":{"text":"}","kind":"rightBrace"}},{"name":"unexpectedAfterRightBrace","value":{"text":"nil"}}],"id":16,"range":{"startRow":4,"endRow":9,"endColumn":2,"startColumn":18},"type":"other"},{"structure":[],"type":"other","id":17,"parent":16,"token":{"kind":"leftBrace","leadingTrivia":"","trailingTrivia":""},"range":{"startRow":4,"endRow":4,"endColumn":19,"startColumn":18},"text":"{"},{"text":"MemberBlockItemList","parent":16,"structure":[{"name":"Element","value":{"text":"MemberBlockItemSyntax"}},{"name":"Count","value":{"text":"4"}}],"id":18,"range":{"startRow":5,"endRow":8,"endColumn":16,"startColumn":5},"type":"collection"},{"text":"MemberBlockItem","parent":18,"structure":[{"name":"unexpectedBeforeDecl","value":{"text":"nil"}},{"name":"decl","ref":"VariableDeclSyntax","value":{"text":"VariableDeclSyntax"}},{"name":"unexpectedBetweenDeclAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":19,"range":{"startRow":5,"endRow":5,"endColumn":36,"startColumn":5},"type":"other"},{"text":"VariableDecl","parent":19,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","ref":"AttributeListSyntax","value":{"text":"AttributeListSyntax"}},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","ref":"DeclModifierListSyntax","value":{"text":"DeclModifierListSyntax"}},{"name":"unexpectedBetweenModifiersAndBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"text":"var","kind":"keyword(SwiftSyntax.Keyword.var)"}},{"name":"unexpectedBetweenBindingSpecifierAndBindings","value":{"text":"nil"}},{"name":"bindings","ref":"PatternBindingListSyntax","value":{"text":"PatternBindingListSyntax"}},{"name":"unexpectedAfterBindings","value":{"text":"nil"}}],"id":20,"range":{"startRow":5,"endRow":5,"endColumn":36,"startColumn":5},"type":"decl"},{"text":"AttributeList","parent":20,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"id":21,"range":{"startRow":4,"endRow":4,"endColumn":19,"startColumn":19},"type":"collection"},{"text":"DeclModifierList","parent":20,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":22,"range":{"startRow":4,"endRow":4,"endColumn":19,"startColumn":19},"type":"collection"},{"text":"var","type":"other","parent":20,"token":{"kind":"keyword(SwiftSyntax.Keyword.var)","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"␣<\/span>"},"id":23,"structure":[],"range":{"startRow":5,"endRow":5,"endColumn":8,"startColumn":5}},{"text":"PatternBindingList","parent":20,"structure":[{"name":"Element","value":{"text":"PatternBindingSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":24,"range":{"startRow":5,"endRow":5,"endColumn":36,"startColumn":9},"type":"collection"},{"text":"PatternBinding","parent":24,"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"name":"pattern","ref":"IdentifierPatternSyntax","value":{"text":"IdentifierPatternSyntax"}},{"name":"unexpectedBetweenPatternAndTypeAnnotation","value":{"text":"nil"}},{"name":"typeAnnotation","ref":"TypeAnnotationSyntax","value":{"text":"TypeAnnotationSyntax"}},{"name":"unexpectedBetweenTypeAnnotationAndInitializer","value":{"text":"nil"}},{"name":"initializer","value":{"text":"nil"}},{"name":"unexpectedBetweenInitializerAndAccessorBlock","value":{"text":"nil"}},{"name":"accessorBlock","ref":"AccessorBlockSyntax","value":{"text":"AccessorBlockSyntax"}},{"name":"unexpectedBetweenAccessorBlockAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":25,"range":{"startRow":5,"endRow":5,"endColumn":36,"startColumn":9},"type":"other"},{"text":"IdentifierPattern","parent":25,"structure":[{"name":"unexpectedBeforeIdentifier","value":{"text":"nil"}},{"name":"identifier","value":{"text":"numberOfWheels","kind":"identifier("numberOfWheels")"}},{"name":"unexpectedAfterIdentifier","value":{"text":"nil"}}],"id":26,"range":{"startRow":5,"endRow":5,"endColumn":23,"startColumn":9},"type":"pattern"},{"range":{"startRow":5,"endRow":5,"endColumn":23,"startColumn":9},"text":"numberOfWheels","token":{"kind":"identifier("numberOfWheels")","leadingTrivia":"","trailingTrivia":""},"type":"other","id":27,"parent":26,"structure":[]},{"text":"TypeAnnotation","parent":25,"structure":[{"name":"unexpectedBeforeColon","value":{"text":"nil"}},{"name":"colon","value":{"text":":","kind":"colon"}},{"name":"unexpectedBetweenColonAndType","value":{"text":"nil"}},{"name":"type","ref":"IdentifierTypeSyntax","value":{"text":"IdentifierTypeSyntax"}},{"name":"unexpectedAfterType","value":{"text":"nil"}}],"id":28,"range":{"startRow":5,"endRow":5,"endColumn":28,"startColumn":23},"type":"other"},{"token":{"kind":"colon","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"parent":28,"range":{"startRow":5,"endRow":5,"endColumn":24,"startColumn":23},"text":":","structure":[],"type":"other","id":29},{"text":"IdentifierType","parent":28,"structure":[{"name":"unexpectedBeforeName","value":{"text":"nil"}},{"name":"name","value":{"text":"Int","kind":"identifier("Int")"}},{"name":"unexpectedBetweenNameAndGenericArgumentClause","value":{"text":"nil"}},{"name":"genericArgumentClause","value":{"text":"nil"}},{"name":"unexpectedAfterGenericArgumentClause","value":{"text":"nil"}}],"id":30,"range":{"startRow":5,"endRow":5,"endColumn":28,"startColumn":25},"type":"type"},{"token":{"kind":"identifier("Int")","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"structure":[],"range":{"startRow":5,"endRow":5,"endColumn":28,"startColumn":25},"id":31,"type":"other","text":"Int","parent":30},{"text":"AccessorBlock","parent":25,"structure":[{"name":"unexpectedBeforeLeftBrace","value":{"text":"nil"}},{"name":"leftBrace","value":{"text":"{","kind":"leftBrace"}},{"name":"unexpectedBetweenLeftBraceAndAccessors","value":{"text":"nil"}},{"name":"accessors","ref":"AccessorDeclListSyntax","value":{"text":"AccessorDeclListSyntax"}},{"name":"unexpectedBetweenAccessorsAndRightBrace","value":{"text":"nil"}},{"name":"rightBrace","value":{"text":"}","kind":"rightBrace"}},{"name":"unexpectedAfterRightBrace","value":{"text":"nil"}}],"id":32,"range":{"startRow":5,"endRow":5,"endColumn":36,"startColumn":29},"type":"other"},{"type":"other","text":"{","token":{"kind":"leftBrace","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"startRow":5,"endRow":5,"endColumn":30,"startColumn":29},"parent":32,"structure":[],"id":33},{"text":"AccessorDeclList","parent":32,"structure":[{"name":"Element","value":{"text":"AccessorDeclSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":34,"range":{"startRow":5,"endRow":5,"endColumn":34,"startColumn":31},"type":"collection"},{"text":"AccessorDecl","parent":34,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","ref":"AttributeListSyntax","value":{"text":"AttributeListSyntax"}},{"name":"unexpectedBetweenAttributesAndModifier","value":{"text":"nil"}},{"name":"modifier","value":{"text":"nil"}},{"name":"unexpectedBetweenModifierAndAccessorSpecifier","value":{"text":"nil"}},{"name":"accessorSpecifier","value":{"text":"get","kind":"keyword(SwiftSyntax.Keyword.get)"}},{"name":"unexpectedBetweenAccessorSpecifierAndParameters","value":{"text":"nil"}},{"name":"parameters","value":{"text":"nil"}},{"name":"unexpectedBetweenParametersAndEffectSpecifiers","value":{"text":"nil"}},{"name":"effectSpecifiers","value":{"text":"nil"}},{"name":"unexpectedBetweenEffectSpecifiersAndBody","value":{"text":"nil"}},{"name":"body","value":{"text":"nil"}},{"name":"unexpectedAfterBody","value":{"text":"nil"}}],"id":35,"range":{"startRow":5,"endRow":5,"endColumn":34,"startColumn":31},"type":"decl"},{"text":"AttributeList","parent":35,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"id":36,"range":{"startRow":5,"endRow":5,"endColumn":31,"startColumn":31},"type":"collection"},{"type":"other","text":"get","token":{"kind":"keyword(SwiftSyntax.Keyword.get)","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"startRow":5,"endRow":5,"endColumn":34,"startColumn":31},"parent":35,"structure":[],"id":37},{"type":"other","text":"}","token":{"kind":"rightBrace","leadingTrivia":"","trailingTrivia":""},"range":{"startRow":5,"endRow":5,"endColumn":36,"startColumn":35},"parent":32,"structure":[],"id":38},{"text":"MemberBlockItem","parent":18,"structure":[{"name":"unexpectedBeforeDecl","value":{"text":"nil"}},{"name":"decl","ref":"VariableDeclSyntax","value":{"text":"VariableDeclSyntax"}},{"name":"unexpectedBetweenDeclAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":39,"range":{"startRow":6,"endRow":6,"endColumn":30,"startColumn":5},"type":"other"},{"text":"VariableDecl","parent":39,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","ref":"AttributeListSyntax","value":{"text":"AttributeListSyntax"}},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","ref":"DeclModifierListSyntax","value":{"text":"DeclModifierListSyntax"}},{"name":"unexpectedBetweenModifiersAndBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"text":"var","kind":"keyword(SwiftSyntax.Keyword.var)"}},{"name":"unexpectedBetweenBindingSpecifierAndBindings","value":{"text":"nil"}},{"name":"bindings","ref":"PatternBindingListSyntax","value":{"text":"PatternBindingListSyntax"}},{"name":"unexpectedAfterBindings","value":{"text":"nil"}}],"id":40,"range":{"startRow":6,"endRow":6,"endColumn":30,"startColumn":5},"type":"decl"},{"text":"AttributeList","parent":40,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"id":41,"range":{"startRow":5,"endRow":5,"endColumn":36,"startColumn":36},"type":"collection"},{"text":"DeclModifierList","parent":40,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":42,"range":{"startRow":5,"endRow":5,"endColumn":36,"startColumn":36},"type":"collection"},{"type":"other","text":"var","token":{"kind":"keyword(SwiftSyntax.Keyword.var)","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"␣<\/span>"},"range":{"startRow":6,"endRow":6,"endColumn":8,"startColumn":5},"parent":40,"structure":[],"id":43},{"text":"PatternBindingList","parent":40,"structure":[{"name":"Element","value":{"text":"PatternBindingSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":44,"range":{"startRow":6,"endRow":6,"endColumn":30,"startColumn":9},"type":"collection"},{"text":"PatternBinding","parent":44,"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"name":"pattern","ref":"IdentifierPatternSyntax","value":{"text":"IdentifierPatternSyntax"}},{"name":"unexpectedBetweenPatternAndTypeAnnotation","value":{"text":"nil"}},{"name":"typeAnnotation","ref":"TypeAnnotationSyntax","value":{"text":"TypeAnnotationSyntax"}},{"name":"unexpectedBetweenTypeAnnotationAndInitializer","value":{"text":"nil"}},{"name":"initializer","value":{"text":"nil"}},{"name":"unexpectedBetweenInitializerAndAccessorBlock","value":{"text":"nil"}},{"name":"accessorBlock","ref":"AccessorBlockSyntax","value":{"text":"AccessorBlockSyntax"}},{"name":"unexpectedBetweenAccessorBlockAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":45,"range":{"startRow":6,"endRow":6,"endColumn":30,"startColumn":9},"type":"other"},{"text":"IdentifierPattern","parent":45,"structure":[{"name":"unexpectedBeforeIdentifier","value":{"text":"nil"}},{"name":"identifier","value":{"text":"brand","kind":"identifier("brand")"}},{"name":"unexpectedAfterIdentifier","value":{"text":"nil"}}],"id":46,"range":{"startRow":6,"endRow":6,"endColumn":14,"startColumn":9},"type":"pattern"},{"type":"other","text":"brand","token":{"kind":"identifier("brand")","leadingTrivia":"","trailingTrivia":""},"range":{"startRow":6,"endRow":6,"endColumn":14,"startColumn":9},"parent":46,"structure":[],"id":47},{"text":"TypeAnnotation","parent":45,"structure":[{"name":"unexpectedBeforeColon","value":{"text":"nil"}},{"name":"colon","value":{"text":":","kind":"colon"}},{"name":"unexpectedBetweenColonAndType","value":{"text":"nil"}},{"name":"type","ref":"IdentifierTypeSyntax","value":{"text":"IdentifierTypeSyntax"}},{"name":"unexpectedAfterType","value":{"text":"nil"}}],"id":48,"range":{"startRow":6,"endRow":6,"endColumn":22,"startColumn":14},"type":"other"},{"type":"other","text":":","token":{"kind":"colon","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"startRow":6,"endRow":6,"endColumn":15,"startColumn":14},"parent":48,"structure":[],"id":49},{"text":"IdentifierType","parent":48,"structure":[{"name":"unexpectedBeforeName","value":{"text":"nil"}},{"name":"name","value":{"text":"String","kind":"identifier("String")"}},{"name":"unexpectedBetweenNameAndGenericArgumentClause","value":{"text":"nil"}},{"name":"genericArgumentClause","value":{"text":"nil"}},{"name":"unexpectedAfterGenericArgumentClause","value":{"text":"nil"}}],"id":50,"range":{"startRow":6,"endRow":6,"endColumn":22,"startColumn":16},"type":"type"},{"type":"other","text":"String","token":{"kind":"identifier("String")","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"startRow":6,"endRow":6,"endColumn":22,"startColumn":16},"parent":50,"structure":[],"id":51},{"text":"AccessorBlock","parent":45,"structure":[{"name":"unexpectedBeforeLeftBrace","value":{"text":"nil"}},{"name":"leftBrace","value":{"text":"{","kind":"leftBrace"}},{"name":"unexpectedBetweenLeftBraceAndAccessors","value":{"text":"nil"}},{"name":"accessors","ref":"AccessorDeclListSyntax","value":{"text":"AccessorDeclListSyntax"}},{"name":"unexpectedBetweenAccessorsAndRightBrace","value":{"text":"nil"}},{"name":"rightBrace","value":{"text":"}","kind":"rightBrace"}},{"name":"unexpectedAfterRightBrace","value":{"text":"nil"}}],"id":52,"range":{"startRow":6,"endRow":6,"endColumn":30,"startColumn":23},"type":"other"},{"type":"other","text":"{","token":{"kind":"leftBrace","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"startRow":6,"endRow":6,"endColumn":24,"startColumn":23},"parent":52,"structure":[],"id":53},{"text":"AccessorDeclList","parent":52,"structure":[{"name":"Element","value":{"text":"AccessorDeclSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":54,"range":{"startRow":6,"endRow":6,"endColumn":28,"startColumn":25},"type":"collection"},{"text":"AccessorDecl","parent":54,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","ref":"AttributeListSyntax","value":{"text":"AttributeListSyntax"}},{"name":"unexpectedBetweenAttributesAndModifier","value":{"text":"nil"}},{"name":"modifier","value":{"text":"nil"}},{"name":"unexpectedBetweenModifierAndAccessorSpecifier","value":{"text":"nil"}},{"name":"accessorSpecifier","value":{"text":"get","kind":"keyword(SwiftSyntax.Keyword.get)"}},{"name":"unexpectedBetweenAccessorSpecifierAndParameters","value":{"text":"nil"}},{"name":"parameters","value":{"text":"nil"}},{"name":"unexpectedBetweenParametersAndEffectSpecifiers","value":{"text":"nil"}},{"name":"effectSpecifiers","value":{"text":"nil"}},{"name":"unexpectedBetweenEffectSpecifiersAndBody","value":{"text":"nil"}},{"name":"body","value":{"text":"nil"}},{"name":"unexpectedAfterBody","value":{"text":"nil"}}],"id":55,"range":{"startRow":6,"endRow":6,"endColumn":28,"startColumn":25},"type":"decl"},{"text":"AttributeList","parent":55,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"id":56,"range":{"startRow":6,"endRow":6,"endColumn":25,"startColumn":25},"type":"collection"},{"type":"other","text":"get","token":{"kind":"keyword(SwiftSyntax.Keyword.get)","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"startRow":6,"endRow":6,"endColumn":28,"startColumn":25},"parent":55,"structure":[],"id":57},{"type":"other","text":"}","token":{"kind":"rightBrace","leadingTrivia":"","trailingTrivia":""},"range":{"startRow":6,"endRow":6,"endColumn":30,"startColumn":29},"parent":52,"structure":[],"id":58},{"text":"MemberBlockItem","parent":18,"structure":[{"name":"unexpectedBeforeDecl","value":{"text":"nil"}},{"name":"decl","ref":"FunctionDeclSyntax","value":{"text":"FunctionDeclSyntax"}},{"name":"unexpectedBetweenDeclAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":59,"range":{"startRow":7,"endRow":7,"endColumn":17,"startColumn":5},"type":"other"},{"text":"FunctionDecl","parent":59,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","ref":"AttributeListSyntax","value":{"text":"AttributeListSyntax"}},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","ref":"DeclModifierListSyntax","value":{"text":"DeclModifierListSyntax"}},{"name":"unexpectedBetweenModifiersAndFuncKeyword","value":{"text":"nil"}},{"name":"funcKeyword","value":{"text":"func","kind":"keyword(SwiftSyntax.Keyword.func)"}},{"name":"unexpectedBetweenFuncKeywordAndName","value":{"text":"nil"}},{"name":"name","value":{"text":"start","kind":"identifier("start")"}},{"name":"unexpectedBetweenNameAndGenericParameterClause","value":{"text":"nil"}},{"name":"genericParameterClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericParameterClauseAndSignature","value":{"text":"nil"}},{"name":"signature","ref":"FunctionSignatureSyntax","value":{"text":"FunctionSignatureSyntax"}},{"name":"unexpectedBetweenSignatureAndGenericWhereClause","value":{"text":"nil"}},{"name":"genericWhereClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericWhereClauseAndBody","value":{"text":"nil"}},{"name":"body","value":{"text":"nil"}},{"name":"unexpectedAfterBody","value":{"text":"nil"}}],"id":60,"range":{"startRow":7,"endRow":7,"endColumn":17,"startColumn":5},"type":"decl"},{"text":"AttributeList","parent":60,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"id":61,"range":{"endRow":6,"endColumn":30,"startRow":6,"startColumn":30},"type":"collection"},{"text":"DeclModifierList","parent":60,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":62,"range":{"endRow":6,"endColumn":30,"startRow":6,"startColumn":30},"type":"collection"},{"type":"other","text":"func","token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.func)","trailingTrivia":"␣<\/span>"},"range":{"endRow":7,"endColumn":9,"startRow":7,"startColumn":5},"parent":60,"structure":[],"id":63},{"type":"other","text":"start","token":{"leadingTrivia":"","kind":"identifier("start")","trailingTrivia":""},"range":{"endRow":7,"endColumn":15,"startRow":7,"startColumn":10},"parent":60,"structure":[],"id":64},{"text":"FunctionSignature","parent":60,"structure":[{"name":"unexpectedBeforeParameterClause","value":{"text":"nil"}},{"name":"parameterClause","ref":"FunctionParameterClauseSyntax","value":{"text":"FunctionParameterClauseSyntax"}},{"name":"unexpectedBetweenParameterClauseAndEffectSpecifiers","value":{"text":"nil"}},{"name":"effectSpecifiers","value":{"text":"nil"}},{"name":"unexpectedBetweenEffectSpecifiersAndReturnClause","value":{"text":"nil"}},{"name":"returnClause","value":{"text":"nil"}},{"name":"unexpectedAfterReturnClause","value":{"text":"nil"}}],"id":65,"range":{"endRow":7,"endColumn":17,"startRow":7,"startColumn":15},"type":"other"},{"text":"FunctionParameterClause","parent":65,"structure":[{"name":"unexpectedBeforeLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndParameters","value":{"text":"nil"}},{"name":"parameters","ref":"FunctionParameterListSyntax","value":{"text":"FunctionParameterListSyntax"}},{"name":"unexpectedBetweenParametersAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}],"id":66,"range":{"endRow":7,"endColumn":17,"startRow":7,"startColumn":15},"type":"other"},{"type":"other","text":"(","token":{"leadingTrivia":"","kind":"leftParen","trailingTrivia":""},"range":{"endRow":7,"endColumn":16,"startRow":7,"startColumn":15},"parent":66,"structure":[],"id":67},{"text":"FunctionParameterList","parent":66,"structure":[{"name":"Element","value":{"text":"FunctionParameterSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":68,"range":{"endRow":7,"endColumn":16,"startRow":7,"startColumn":16},"type":"collection"},{"type":"other","text":")","token":{"leadingTrivia":"","kind":"rightParen","trailingTrivia":""},"range":{"endRow":7,"endColumn":17,"startRow":7,"startColumn":16},"parent":66,"structure":[],"id":69},{"text":"MemberBlockItem","parent":18,"structure":[{"name":"unexpectedBeforeDecl","value":{"text":"nil"}},{"name":"decl","ref":"FunctionDeclSyntax","value":{"text":"FunctionDeclSyntax"}},{"name":"unexpectedBetweenDeclAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":70,"range":{"endRow":8,"endColumn":16,"startRow":8,"startColumn":5},"type":"other"},{"text":"FunctionDecl","parent":70,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","ref":"AttributeListSyntax","value":{"text":"AttributeListSyntax"}},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","ref":"DeclModifierListSyntax","value":{"text":"DeclModifierListSyntax"}},{"name":"unexpectedBetweenModifiersAndFuncKeyword","value":{"text":"nil"}},{"name":"funcKeyword","value":{"text":"func","kind":"keyword(SwiftSyntax.Keyword.func)"}},{"name":"unexpectedBetweenFuncKeywordAndName","value":{"text":"nil"}},{"name":"name","value":{"text":"stop","kind":"identifier("stop")"}},{"name":"unexpectedBetweenNameAndGenericParameterClause","value":{"text":"nil"}},{"name":"genericParameterClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericParameterClauseAndSignature","value":{"text":"nil"}},{"name":"signature","ref":"FunctionSignatureSyntax","value":{"text":"FunctionSignatureSyntax"}},{"name":"unexpectedBetweenSignatureAndGenericWhereClause","value":{"text":"nil"}},{"name":"genericWhereClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericWhereClauseAndBody","value":{"text":"nil"}},{"name":"body","value":{"text":"nil"}},{"name":"unexpectedAfterBody","value":{"text":"nil"}}],"id":71,"range":{"endRow":8,"endColumn":16,"startRow":8,"startColumn":5},"type":"decl"},{"text":"AttributeList","parent":71,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"id":72,"range":{"startColumn":17,"endRow":7,"startRow":7,"endColumn":17},"type":"collection"},{"text":"DeclModifierList","parent":71,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":73,"range":{"startColumn":17,"endRow":7,"startRow":7,"endColumn":17},"type":"collection"},{"type":"other","text":"func","token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.func)"},"range":{"startColumn":5,"endRow":8,"startRow":8,"endColumn":9},"parent":71,"structure":[],"id":74},{"type":"other","text":"stop","token":{"trailingTrivia":"","leadingTrivia":"","kind":"identifier("stop")"},"range":{"startColumn":10,"endRow":8,"startRow":8,"endColumn":14},"parent":71,"structure":[],"id":75},{"text":"FunctionSignature","parent":71,"structure":[{"name":"unexpectedBeforeParameterClause","value":{"text":"nil"}},{"ref":"FunctionParameterClauseSyntax","name":"parameterClause","value":{"text":"FunctionParameterClauseSyntax"}},{"name":"unexpectedBetweenParameterClauseAndEffectSpecifiers","value":{"text":"nil"}},{"name":"effectSpecifiers","value":{"text":"nil"}},{"name":"unexpectedBetweenEffectSpecifiersAndReturnClause","value":{"text":"nil"}},{"name":"returnClause","value":{"text":"nil"}},{"name":"unexpectedAfterReturnClause","value":{"text":"nil"}}],"id":76,"range":{"startColumn":14,"endRow":8,"startRow":8,"endColumn":16},"type":"other"},{"text":"FunctionParameterClause","parent":76,"structure":[{"name":"unexpectedBeforeLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"kind":"leftParen","text":"("}},{"name":"unexpectedBetweenLeftParenAndParameters","value":{"text":"nil"}},{"ref":"FunctionParameterListSyntax","name":"parameters","value":{"text":"FunctionParameterListSyntax"}},{"name":"unexpectedBetweenParametersAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"kind":"rightParen","text":")"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}],"id":77,"range":{"startColumn":14,"endRow":8,"startRow":8,"endColumn":16},"type":"other"},{"type":"other","text":"(","token":{"trailingTrivia":"","leadingTrivia":"","kind":"leftParen"},"range":{"startColumn":14,"endRow":8,"startRow":8,"endColumn":15},"parent":77,"structure":[],"id":78},{"text":"FunctionParameterList","parent":77,"structure":[{"name":"Element","value":{"text":"FunctionParameterSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":79,"range":{"startColumn":15,"endRow":8,"startRow":8,"endColumn":15},"type":"collection"},{"type":"other","text":")","token":{"trailingTrivia":"","leadingTrivia":"","kind":"rightParen"},"range":{"startColumn":15,"endRow":8,"startRow":8,"endColumn":16},"parent":77,"structure":[],"id":80},{"type":"other","text":"}","token":{"trailingTrivia":"","leadingTrivia":"↲<\/span>","kind":"rightBrace"},"range":{"startColumn":1,"endRow":9,"startRow":9,"endColumn":2},"parent":16,"structure":[],"id":81},{"text":"CodeBlockItem","parent":1,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"ExtensionDeclSyntax","name":"item","value":{"text":"ExtensionDeclSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":82,"range":{"startColumn":1,"endRow":20,"startRow":12,"endColumn":2},"type":"other"},{"text":"ExtensionDecl","parent":82,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"ref":"AttributeListSyntax","name":"attributes","value":{"text":"AttributeListSyntax"}},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"ref":"DeclModifierListSyntax","name":"modifiers","value":{"text":"DeclModifierListSyntax"}},{"name":"unexpectedBetweenModifiersAndExtensionKeyword","value":{"text":"nil"}},{"name":"extensionKeyword","value":{"kind":"keyword(SwiftSyntax.Keyword.extension)","text":"extension"}},{"name":"unexpectedBetweenExtensionKeywordAndExtendedType","value":{"text":"nil"}},{"ref":"IdentifierTypeSyntax","name":"extendedType","value":{"text":"IdentifierTypeSyntax"}},{"name":"unexpectedBetweenExtendedTypeAndInheritanceClause","value":{"text":"nil"}},{"name":"inheritanceClause","value":{"text":"nil"}},{"name":"unexpectedBetweenInheritanceClauseAndGenericWhereClause","value":{"text":"nil"}},{"name":"genericWhereClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericWhereClauseAndMemberBlock","value":{"text":"nil"}},{"ref":"MemberBlockSyntax","name":"memberBlock","value":{"text":"MemberBlockSyntax"}},{"name":"unexpectedAfterMemberBlock","value":{"text":"nil"}}],"id":83,"range":{"startColumn":1,"endRow":20,"startRow":12,"endColumn":2},"type":"decl"},{"text":"AttributeList","parent":83,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"id":84,"range":{"startRow":9,"endColumn":2,"startColumn":2,"endRow":9},"type":"collection"},{"text":"DeclModifierList","parent":83,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":85,"range":{"startRow":9,"endColumn":2,"startColumn":2,"endRow":9},"type":"collection"},{"type":"other","text":"extension","token":{"leadingTrivia":"↲<\/span>↲<\/span>\/\/␣<\/span>MARK:␣<\/span>-␣<\/span>Protocol␣<\/span>Extension<\/span>↲<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.extension)"},"range":{"startRow":12,"endColumn":10,"startColumn":1,"endRow":12},"parent":83,"structure":[],"id":86},{"text":"IdentifierType","parent":83,"structure":[{"name":"unexpectedBeforeName","value":{"text":"nil"}},{"name":"name","value":{"kind":"identifier("Vehicle")","text":"Vehicle"}},{"name":"unexpectedBetweenNameAndGenericArgumentClause","value":{"text":"nil"}},{"name":"genericArgumentClause","value":{"text":"nil"}},{"name":"unexpectedAfterGenericArgumentClause","value":{"text":"nil"}}],"id":87,"range":{"startRow":12,"endColumn":18,"startColumn":11,"endRow":12},"type":"type"},{"type":"other","text":"Vehicle","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"identifier("Vehicle")"},"range":{"startRow":12,"endColumn":18,"startColumn":11,"endRow":12},"parent":87,"structure":[],"id":88},{"text":"MemberBlock","parent":83,"structure":[{"name":"unexpectedBeforeLeftBrace","value":{"text":"nil"}},{"name":"leftBrace","value":{"kind":"leftBrace","text":"{"}},{"name":"unexpectedBetweenLeftBraceAndMembers","value":{"text":"nil"}},{"ref":"MemberBlockItemListSyntax","name":"members","value":{"text":"MemberBlockItemListSyntax"}},{"name":"unexpectedBetweenMembersAndRightBrace","value":{"text":"nil"}},{"name":"rightBrace","value":{"kind":"rightBrace","text":"}"}},{"name":"unexpectedAfterRightBrace","value":{"text":"nil"}}],"id":89,"range":{"startRow":12,"endColumn":2,"startColumn":19,"endRow":20},"type":"other"},{"type":"other","text":"{","token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftBrace"},"range":{"startRow":12,"endColumn":20,"startColumn":19,"endRow":12},"parent":89,"structure":[],"id":90},{"text":"MemberBlockItemList","parent":89,"structure":[{"name":"Element","value":{"text":"MemberBlockItemSyntax"}},{"name":"Count","value":{"text":"2"}}],"id":91,"range":{"startRow":13,"endColumn":6,"startColumn":5,"endRow":19},"type":"collection"},{"text":"MemberBlockItem","parent":91,"structure":[{"name":"unexpectedBeforeDecl","value":{"text":"nil"}},{"ref":"FunctionDeclSyntax","name":"decl","value":{"text":"FunctionDeclSyntax"}},{"name":"unexpectedBetweenDeclAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":92,"range":{"startRow":13,"endColumn":6,"startColumn":5,"endRow":15},"type":"other"},{"text":"FunctionDecl","parent":92,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"ref":"AttributeListSyntax","name":"attributes","value":{"text":"AttributeListSyntax"}},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"ref":"DeclModifierListSyntax","name":"modifiers","value":{"text":"DeclModifierListSyntax"}},{"name":"unexpectedBetweenModifiersAndFuncKeyword","value":{"text":"nil"}},{"name":"funcKeyword","value":{"kind":"keyword(SwiftSyntax.Keyword.func)","text":"func"}},{"name":"unexpectedBetweenFuncKeywordAndName","value":{"text":"nil"}},{"name":"name","value":{"kind":"identifier("start")","text":"start"}},{"name":"unexpectedBetweenNameAndGenericParameterClause","value":{"text":"nil"}},{"name":"genericParameterClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericParameterClauseAndSignature","value":{"text":"nil"}},{"ref":"FunctionSignatureSyntax","name":"signature","value":{"text":"FunctionSignatureSyntax"}},{"name":"unexpectedBetweenSignatureAndGenericWhereClause","value":{"text":"nil"}},{"name":"genericWhereClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericWhereClauseAndBody","value":{"text":"nil"}},{"ref":"CodeBlockSyntax","name":"body","value":{"text":"CodeBlockSyntax"}},{"name":"unexpectedAfterBody","value":{"text":"nil"}}],"id":93,"range":{"startRow":13,"endColumn":6,"startColumn":5,"endRow":15},"type":"decl"},{"text":"AttributeList","parent":93,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"id":94,"range":{"endColumn":20,"startColumn":20,"endRow":12,"startRow":12},"type":"collection"},{"text":"DeclModifierList","parent":93,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":95,"range":{"endColumn":20,"startColumn":20,"endRow":12,"startRow":12},"type":"collection"},{"type":"other","text":"func","token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.func)"},"range":{"endColumn":9,"startColumn":5,"endRow":13,"startRow":13},"parent":93,"structure":[],"id":96},{"type":"other","text":"start","token":{"trailingTrivia":"","leadingTrivia":"","kind":"identifier("start")"},"range":{"endColumn":15,"startColumn":10,"endRow":13,"startRow":13},"parent":93,"structure":[],"id":97},{"text":"FunctionSignature","parent":93,"structure":[{"name":"unexpectedBeforeParameterClause","value":{"text":"nil"}},{"ref":"FunctionParameterClauseSyntax","name":"parameterClause","value":{"text":"FunctionParameterClauseSyntax"}},{"name":"unexpectedBetweenParameterClauseAndEffectSpecifiers","value":{"text":"nil"}},{"name":"effectSpecifiers","value":{"text":"nil"}},{"name":"unexpectedBetweenEffectSpecifiersAndReturnClause","value":{"text":"nil"}},{"name":"returnClause","value":{"text":"nil"}},{"name":"unexpectedAfterReturnClause","value":{"text":"nil"}}],"id":98,"range":{"endColumn":17,"startColumn":15,"endRow":13,"startRow":13},"type":"other"},{"text":"FunctionParameterClause","parent":98,"structure":[{"name":"unexpectedBeforeLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndParameters","value":{"text":"nil"}},{"ref":"FunctionParameterListSyntax","name":"parameters","value":{"text":"FunctionParameterListSyntax"}},{"name":"unexpectedBetweenParametersAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}],"id":99,"range":{"endColumn":17,"startColumn":15,"endRow":13,"startRow":13},"type":"other"},{"type":"other","text":"(","token":{"trailingTrivia":"","leadingTrivia":"","kind":"leftParen"},"range":{"endColumn":16,"startColumn":15,"endRow":13,"startRow":13},"parent":99,"structure":[],"id":100},{"text":"FunctionParameterList","parent":99,"structure":[{"name":"Element","value":{"text":"FunctionParameterSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":101,"range":{"endColumn":16,"startColumn":16,"endRow":13,"startRow":13},"type":"collection"},{"type":"other","text":")","token":{"trailingTrivia":"␣<\/span>","leadingTrivia":"","kind":"rightParen"},"range":{"endColumn":17,"startColumn":16,"endRow":13,"startRow":13},"parent":99,"structure":[],"id":102},{"text":"CodeBlock","parent":93,"structure":[{"name":"unexpectedBeforeLeftBrace","value":{"text":"nil"}},{"name":"leftBrace","value":{"text":"{","kind":"leftBrace"}},{"name":"unexpectedBetweenLeftBraceAndStatements","value":{"text":"nil"}},{"ref":"CodeBlockItemListSyntax","name":"statements","value":{"text":"CodeBlockItemListSyntax"}},{"name":"unexpectedBetweenStatementsAndRightBrace","value":{"text":"nil"}},{"name":"rightBrace","value":{"text":"}","kind":"rightBrace"}},{"name":"unexpectedAfterRightBrace","value":{"text":"nil"}}],"id":103,"range":{"endColumn":6,"startColumn":18,"endRow":15,"startRow":13},"type":"other"},{"type":"other","text":"{","token":{"trailingTrivia":"","leadingTrivia":"","kind":"leftBrace"},"range":{"endColumn":19,"startColumn":18,"endRow":13,"startRow":13},"parent":103,"structure":[],"id":104},{"text":"CodeBlockItemList","parent":103,"structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":105,"range":{"endColumn":46,"startColumn":9,"endRow":14,"startRow":14},"type":"collection"},{"text":"CodeBlockItem","parent":105,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"FunctionCallExprSyntax","name":"item","value":{"text":"FunctionCallExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":106,"range":{"endColumn":46,"startColumn":9,"endRow":14,"startRow":14},"type":"other"},{"text":"FunctionCallExpr","parent":106,"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"ref":"LabeledExprListSyntax","name":"arguments","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"id":107,"range":{"endColumn":46,"startColumn":9,"endRow":14,"startRow":14},"type":"expr"},{"text":"DeclReferenceExpr","parent":107,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"print","kind":"identifier("print")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":108,"range":{"endColumn":14,"startColumn":9,"endRow":14,"startRow":14},"type":"expr"},{"type":"other","text":"print","token":{"trailingTrivia":"","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","kind":"identifier("print")"},"range":{"endColumn":14,"startColumn":9,"endRow":14,"startRow":14},"parent":108,"structure":[],"id":109},{"type":"other","text":"(","token":{"trailingTrivia":"","leadingTrivia":"","kind":"leftParen"},"range":{"endColumn":15,"startColumn":14,"endRow":14,"startRow":14},"parent":107,"structure":[],"id":110},{"text":"LabeledExprList","parent":107,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":111,"range":{"endColumn":45,"startColumn":15,"endRow":14,"startRow":14},"type":"collection"},{"text":"LabeledExpr","parent":111,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"ref":"StringLiteralExprSyntax","name":"expression","value":{"text":"StringLiteralExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":112,"range":{"endColumn":45,"startColumn":15,"endRow":14,"startRow":14},"type":"other"},{"text":"StringLiteralExpr","parent":112,"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"ref":"StringLiteralSegmentListSyntax","name":"segments","value":{"text":"StringLiteralSegmentListSyntax"}},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"id":113,"range":{"endColumn":45,"startColumn":15,"endRow":14,"startRow":14},"type":"expr"},{"type":"other","text":""","token":{"trailingTrivia":"","leadingTrivia":"","kind":"stringQuote"},"range":{"endColumn":16,"startColumn":15,"endRow":14,"startRow":14},"parent":113,"structure":[],"id":114},{"text":"StringLiteralSegmentList","parent":113,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"3"}}],"id":115,"range":{"endColumn":44,"startColumn":16,"endRow":14,"startRow":14},"type":"collection"},{"text":"StringSegment","parent":115,"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":"Starting ","kind":"stringSegment("Starting ")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"id":116,"range":{"endColumn":25,"startColumn":16,"endRow":14,"startRow":14},"type":"other"},{"type":"other","text":"Starting␣<\/span>","token":{"trailingTrivia":"","leadingTrivia":"","kind":"stringSegment("Starting ")"},"range":{"endColumn":25,"startColumn":16,"endRow":14,"startRow":14},"parent":116,"structure":[],"id":117},{"text":"ExpressionSegment","parent":115,"structure":[{"name":"unexpectedBeforeBackslash","value":{"text":"nil"}},{"name":"backslash","value":{"text":"\\","kind":"backslash"}},{"name":"unexpectedBetweenBackslashAndPounds","value":{"text":"nil"}},{"name":"pounds","value":{"text":"nil"}},{"name":"unexpectedBetweenPoundsAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndExpressions","value":{"text":"nil"}},{"ref":"LabeledExprListSyntax","name":"expressions","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenExpressionsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}],"id":118,"range":{"endColumn":33,"startColumn":25,"endRow":14,"startRow":14},"type":"other"},{"type":"other","text":"\\","token":{"trailingTrivia":"","leadingTrivia":"","kind":"backslash"},"range":{"endColumn":26,"startColumn":25,"endRow":14,"startRow":14},"parent":118,"structure":[],"id":119},{"type":"other","text":"(","token":{"trailingTrivia":"","leadingTrivia":"","kind":"leftParen"},"range":{"endColumn":27,"startColumn":26,"endRow":14,"startRow":14},"parent":118,"structure":[],"id":120},{"text":"LabeledExprList","parent":118,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":121,"range":{"endColumn":32,"startColumn":27,"endRow":14,"startRow":14},"type":"collection"},{"text":"LabeledExpr","parent":121,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"expression","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":122,"range":{"endColumn":32,"startColumn":27,"endRow":14,"startRow":14},"type":"other"},{"text":"DeclReferenceExpr","parent":122,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"brand","kind":"identifier("brand")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":123,"range":{"endColumn":32,"startColumn":27,"endRow":14,"startRow":14},"type":"expr"},{"type":"other","text":"brand","token":{"trailingTrivia":"","leadingTrivia":"","kind":"identifier("brand")"},"range":{"endColumn":32,"startColumn":27,"endRow":14,"startRow":14},"parent":123,"structure":[],"id":124},{"type":"other","text":")","token":{"trailingTrivia":"","leadingTrivia":"","kind":"rightParen"},"range":{"endColumn":33,"startColumn":32,"endRow":14,"startRow":14},"parent":118,"structure":[],"id":125},{"text":"StringSegment","parent":115,"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":" vehicle...","kind":"stringSegment(" vehicle...")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"id":126,"range":{"endColumn":44,"startColumn":33,"endRow":14,"startRow":14},"type":"other"},{"type":"other","text":"␣<\/span>vehicle...","token":{"trailingTrivia":"","leadingTrivia":"","kind":"stringSegment(" vehicle...")"},"range":{"endColumn":44,"startColumn":33,"endRow":14,"startRow":14},"parent":126,"structure":[],"id":127},{"type":"other","text":""","token":{"trailingTrivia":"","leadingTrivia":"","kind":"stringQuote"},"range":{"endColumn":45,"startColumn":44,"endRow":14,"startRow":14},"parent":113,"structure":[],"id":128},{"type":"other","text":")","token":{"trailingTrivia":"","leadingTrivia":"","kind":"rightParen"},"range":{"endColumn":46,"startColumn":45,"endRow":14,"startRow":14},"parent":107,"structure":[],"id":129},{"text":"MultipleTrailingClosureElementList","parent":107,"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":130,"range":{"endColumn":46,"startColumn":46,"endRow":14,"startRow":14},"type":"collection"},{"type":"other","text":"}","token":{"trailingTrivia":"","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","kind":"rightBrace"},"range":{"endColumn":6,"startColumn":5,"endRow":15,"startRow":15},"parent":103,"structure":[],"id":131},{"text":"MemberBlockItem","parent":91,"structure":[{"name":"unexpectedBeforeDecl","value":{"text":"nil"}},{"ref":"FunctionDeclSyntax","name":"decl","value":{"text":"FunctionDeclSyntax"}},{"name":"unexpectedBetweenDeclAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":132,"range":{"endColumn":6,"startColumn":5,"endRow":19,"startRow":17},"type":"other"},{"text":"FunctionDecl","parent":132,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"ref":"AttributeListSyntax","name":"attributes","value":{"text":"AttributeListSyntax"}},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"ref":"DeclModifierListSyntax","name":"modifiers","value":{"text":"DeclModifierListSyntax"}},{"name":"unexpectedBetweenModifiersAndFuncKeyword","value":{"text":"nil"}},{"name":"funcKeyword","value":{"text":"func","kind":"keyword(SwiftSyntax.Keyword.func)"}},{"name":"unexpectedBetweenFuncKeywordAndName","value":{"text":"nil"}},{"name":"name","value":{"text":"stop","kind":"identifier("stop")"}},{"name":"unexpectedBetweenNameAndGenericParameterClause","value":{"text":"nil"}},{"name":"genericParameterClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericParameterClauseAndSignature","value":{"text":"nil"}},{"ref":"FunctionSignatureSyntax","name":"signature","value":{"text":"FunctionSignatureSyntax"}},{"name":"unexpectedBetweenSignatureAndGenericWhereClause","value":{"text":"nil"}},{"name":"genericWhereClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericWhereClauseAndBody","value":{"text":"nil"}},{"ref":"CodeBlockSyntax","name":"body","value":{"text":"CodeBlockSyntax"}},{"name":"unexpectedAfterBody","value":{"text":"nil"}}],"id":133,"range":{"endColumn":6,"startColumn":5,"endRow":19,"startRow":17},"type":"decl"},{"text":"AttributeList","parent":133,"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"id":134,"range":{"endColumn":6,"startRow":15,"startColumn":6,"endRow":15},"type":"collection"},{"text":"DeclModifierList","parent":133,"structure":[{"value":{"text":"DeclModifierSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"id":135,"range":{"endColumn":6,"startRow":15,"startColumn":6,"endRow":15},"type":"collection"},{"type":"other","text":"func","token":{"leadingTrivia":"↲<\/span>↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.func)"},"range":{"endColumn":9,"startRow":17,"startColumn":5,"endRow":17},"parent":133,"structure":[],"id":136},{"type":"other","text":"stop","token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("stop")"},"range":{"endColumn":14,"startRow":17,"startColumn":10,"endRow":17},"parent":133,"structure":[],"id":137},{"text":"FunctionSignature","parent":133,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeParameterClause"},{"value":{"text":"FunctionParameterClauseSyntax"},"ref":"FunctionParameterClauseSyntax","name":"parameterClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenParameterClauseAndEffectSpecifiers"},{"value":{"text":"nil"},"name":"effectSpecifiers"},{"value":{"text":"nil"},"name":"unexpectedBetweenEffectSpecifiersAndReturnClause"},{"value":{"text":"nil"},"name":"returnClause"},{"value":{"text":"nil"},"name":"unexpectedAfterReturnClause"}],"id":138,"range":{"endColumn":16,"startRow":17,"startColumn":14,"endRow":17},"type":"other"},{"text":"FunctionParameterClause","parent":138,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftParen"},{"value":{"kind":"leftParen","text":"("},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndParameters"},{"value":{"text":"FunctionParameterListSyntax"},"ref":"FunctionParameterListSyntax","name":"parameters"},{"value":{"text":"nil"},"name":"unexpectedBetweenParametersAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"id":139,"range":{"endColumn":16,"startRow":17,"startColumn":14,"endRow":17},"type":"other"},{"type":"other","text":"(","token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"range":{"endColumn":15,"startRow":17,"startColumn":14,"endRow":17},"parent":139,"structure":[],"id":140},{"text":"FunctionParameterList","parent":139,"structure":[{"value":{"text":"FunctionParameterSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"id":141,"range":{"endColumn":15,"startRow":17,"startColumn":15,"endRow":17},"type":"collection"},{"type":"other","text":")","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"rightParen"},"range":{"endColumn":16,"startRow":17,"startColumn":15,"endRow":17},"parent":139,"structure":[],"id":142},{"text":"CodeBlock","parent":133,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftBrace"},{"value":{"kind":"leftBrace","text":"{"},"name":"leftBrace"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftBraceAndStatements"},{"value":{"text":"CodeBlockItemListSyntax"},"ref":"CodeBlockItemListSyntax","name":"statements"},{"value":{"text":"nil"},"name":"unexpectedBetweenStatementsAndRightBrace"},{"value":{"kind":"rightBrace","text":"}"},"name":"rightBrace"},{"value":{"text":"nil"},"name":"unexpectedAfterRightBrace"}],"id":143,"range":{"endColumn":6,"startRow":17,"startColumn":17,"endRow":19},"type":"other"},{"type":"other","text":"{","token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftBrace"},"range":{"endColumn":18,"startRow":17,"startColumn":17,"endRow":17},"parent":143,"structure":[],"id":144},{"text":"CodeBlockItemList","parent":143,"structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"id":145,"range":{"endColumn":46,"startRow":18,"startColumn":9,"endRow":18},"type":"collection"},{"text":"CodeBlockItem","parent":145,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"FunctionCallExprSyntax"},"ref":"FunctionCallExprSyntax","name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"id":146,"range":{"endColumn":46,"startRow":18,"startColumn":9,"endRow":18},"type":"other"},{"text":"FunctionCallExpr","parent":146,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"calledExpression"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"kind":"leftParen","text":"("},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax","name":"arguments"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"value":{"text":"MultipleTrailingClosureElementListSyntax"},"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}],"id":147,"range":{"endColumn":46,"startRow":18,"startColumn":9,"endRow":18},"type":"expr"},{"text":"DeclReferenceExpr","parent":147,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("print")","text":"print"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"id":148,"range":{"endColumn":14,"startRow":18,"startColumn":9,"endRow":18},"type":"expr"},{"type":"other","text":"print","token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"","kind":"identifier("print")"},"range":{"endColumn":14,"startRow":18,"startColumn":9,"endRow":18},"parent":148,"structure":[],"id":149},{"type":"other","text":"(","token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"range":{"endColumn":15,"startRow":18,"startColumn":14,"endRow":18},"parent":147,"structure":[],"id":150},{"text":"LabeledExprList","parent":147,"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"id":151,"range":{"endColumn":45,"startRow":18,"startColumn":15,"endRow":18},"type":"collection"},{"text":"LabeledExpr","parent":151,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"id":152,"range":{"endColumn":45,"startRow":18,"startColumn":15,"endRow":18},"type":"other"},{"text":"StringLiteralExpr","parent":152,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"kind":"stringQuote","text":"""},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"value":{"text":"StringLiteralSegmentListSyntax"},"ref":"StringLiteralSegmentListSyntax","name":"segments"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"kind":"stringQuote","text":"""},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"id":153,"range":{"endColumn":45,"startRow":18,"startColumn":15,"endRow":18},"type":"expr"},{"type":"other","text":""","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"range":{"endColumn":16,"startRow":18,"startColumn":15,"endRow":18},"parent":153,"structure":[],"id":154},{"text":"StringLiteralSegmentList","parent":153,"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"3"},"name":"Count"}],"id":155,"range":{"endColumn":44,"startRow":18,"startColumn":16,"endRow":18},"type":"collection"},{"text":"StringSegment","parent":155,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"kind":"stringSegment("Stopping ")","text":"Stopping "},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"id":156,"range":{"endColumn":25,"startRow":18,"startColumn":16,"endRow":18},"type":"other"},{"type":"other","text":"Stopping␣<\/span>","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("Stopping ")"},"range":{"endColumn":25,"startRow":18,"startColumn":16,"endRow":18},"parent":156,"structure":[],"id":157},{"text":"ExpressionSegment","parent":155,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBackslash"},{"value":{"kind":"backslash","text":"\\"},"name":"backslash"},{"value":{"text":"nil"},"name":"unexpectedBetweenBackslashAndPounds"},{"value":{"text":"nil"},"name":"pounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenPoundsAndLeftParen"},{"value":{"kind":"leftParen","text":"("},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndExpressions"},{"value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax","name":"expressions"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"id":158,"range":{"endColumn":33,"startRow":18,"startColumn":25,"endRow":18},"type":"other"},{"type":"other","text":"\\","token":{"leadingTrivia":"","trailingTrivia":"","kind":"backslash"},"range":{"endColumn":26,"startRow":18,"startColumn":25,"endRow":18},"parent":158,"structure":[],"id":159},{"type":"other","text":"(","token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"range":{"endColumn":27,"startRow":18,"startColumn":26,"endRow":18},"parent":158,"structure":[],"id":160},{"text":"LabeledExprList","parent":158,"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"id":161,"range":{"endColumn":32,"startRow":18,"startColumn":27,"endRow":18},"type":"collection"},{"text":"LabeledExpr","parent":161,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"id":162,"range":{"endColumn":32,"startRow":18,"startColumn":27,"endRow":18},"type":"other"},{"text":"DeclReferenceExpr","parent":162,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("brand")","text":"brand"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"id":163,"range":{"endColumn":32,"startRow":18,"startColumn":27,"endRow":18},"type":"expr"},{"type":"other","text":"brand","token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("brand")"},"range":{"endColumn":32,"startRow":18,"startColumn":27,"endRow":18},"parent":163,"structure":[],"id":164},{"type":"other","text":")","token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"range":{"endColumn":33,"startRow":18,"startColumn":32,"endRow":18},"parent":158,"structure":[],"id":165},{"text":"StringSegment","parent":155,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"kind":"stringSegment(" vehicle...")","text":" vehicle..."},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"id":166,"range":{"endColumn":44,"startRow":18,"startColumn":33,"endRow":18},"type":"other"},{"type":"other","text":"␣<\/span>vehicle...","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment(" vehicle...")"},"range":{"endColumn":44,"startRow":18,"startColumn":33,"endRow":18},"parent":166,"structure":[],"id":167},{"type":"other","text":""","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"range":{"endColumn":45,"startRow":18,"startColumn":44,"endRow":18},"parent":153,"structure":[],"id":168},{"type":"other","text":")","token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"range":{"endColumn":46,"startRow":18,"startColumn":45,"endRow":18},"parent":147,"structure":[],"id":169},{"text":"MultipleTrailingClosureElementList","parent":147,"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"id":170,"range":{"endColumn":46,"startRow":18,"startColumn":46,"endRow":18},"type":"collection"},{"type":"other","text":"}","token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"","kind":"rightBrace"},"range":{"endColumn":6,"startRow":19,"startColumn":5,"endRow":19},"parent":143,"structure":[],"id":171},{"type":"other","text":"}","token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"","kind":"rightBrace"},"range":{"endColumn":2,"startRow":20,"startColumn":1,"endRow":20},"parent":89,"structure":[],"id":172},{"text":"CodeBlockItem","parent":1,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"ProtocolDeclSyntax"},"ref":"ProtocolDeclSyntax","name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"id":173,"range":{"endColumn":2,"startRow":23,"startColumn":1,"endRow":26},"type":"other"},{"text":"ProtocolDecl","parent":173,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttributes"},{"value":{"text":"AttributeListSyntax"},"ref":"AttributeListSyntax","name":"attributes"},{"value":{"text":"nil"},"name":"unexpectedBetweenAttributesAndModifiers"},{"value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax","name":"modifiers"},{"value":{"text":"nil"},"name":"unexpectedBetweenModifiersAndProtocolKeyword"},{"value":{"kind":"keyword(SwiftSyntax.Keyword.protocol)","text":"protocol"},"name":"protocolKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenProtocolKeywordAndName"},{"value":{"kind":"identifier("Electric")","text":"Electric"},"name":"name"},{"value":{"text":"nil"},"name":"unexpectedBetweenNameAndPrimaryAssociatedTypeClause"},{"value":{"text":"nil"},"name":"primaryAssociatedTypeClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenPrimaryAssociatedTypeClauseAndInheritanceClause"},{"value":{"text":"nil"},"name":"inheritanceClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenInheritanceClauseAndGenericWhereClause"},{"value":{"text":"nil"},"name":"genericWhereClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenGenericWhereClauseAndMemberBlock"},{"value":{"text":"MemberBlockSyntax"},"ref":"MemberBlockSyntax","name":"memberBlock"},{"value":{"text":"nil"},"name":"unexpectedAfterMemberBlock"}],"id":174,"range":{"endColumn":2,"startRow":23,"startColumn":1,"endRow":26},"type":"decl"},{"text":"AttributeList","parent":174,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"id":175,"range":{"endColumn":2,"startColumn":2,"startRow":20,"endRow":20},"type":"collection"},{"text":"DeclModifierList","parent":174,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":176,"range":{"endColumn":2,"startColumn":2,"startRow":20,"endRow":20},"type":"collection"},{"type":"other","text":"protocol","token":{"kind":"keyword(SwiftSyntax.Keyword.protocol)","leadingTrivia":"↲<\/span>↲<\/span>\/\/␣<\/span>MARK:␣<\/span>-␣<\/span>Protocol␣<\/span>Composition<\/span>↲<\/span>","trailingTrivia":"␣<\/span>"},"range":{"endColumn":9,"startColumn":1,"startRow":23,"endRow":23},"parent":174,"structure":[],"id":177},{"type":"other","text":"Electric","token":{"kind":"identifier("Electric")","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"endColumn":18,"startColumn":10,"startRow":23,"endRow":23},"parent":174,"structure":[],"id":178},{"text":"MemberBlock","parent":174,"structure":[{"name":"unexpectedBeforeLeftBrace","value":{"text":"nil"}},{"name":"leftBrace","value":{"text":"{","kind":"leftBrace"}},{"name":"unexpectedBetweenLeftBraceAndMembers","value":{"text":"nil"}},{"ref":"MemberBlockItemListSyntax","name":"members","value":{"text":"MemberBlockItemListSyntax"}},{"name":"unexpectedBetweenMembersAndRightBrace","value":{"text":"nil"}},{"name":"rightBrace","value":{"text":"}","kind":"rightBrace"}},{"name":"unexpectedAfterRightBrace","value":{"text":"nil"}}],"id":179,"range":{"endColumn":2,"startColumn":19,"startRow":23,"endRow":26},"type":"other"},{"type":"other","text":"{","token":{"kind":"leftBrace","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":20,"startColumn":19,"startRow":23,"endRow":23},"parent":179,"structure":[],"id":180},{"text":"MemberBlockItemList","parent":179,"structure":[{"name":"Element","value":{"text":"MemberBlockItemSyntax"}},{"name":"Count","value":{"text":"2"}}],"id":181,"range":{"endColumn":18,"startColumn":5,"startRow":24,"endRow":25},"type":"collection"},{"text":"MemberBlockItem","parent":181,"structure":[{"name":"unexpectedBeforeDecl","value":{"text":"nil"}},{"ref":"VariableDeclSyntax","name":"decl","value":{"text":"VariableDeclSyntax"}},{"name":"unexpectedBetweenDeclAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":182,"range":{"endColumn":41,"startColumn":5,"startRow":24,"endRow":24},"type":"other"},{"text":"VariableDecl","parent":182,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"ref":"AttributeListSyntax","name":"attributes","value":{"text":"AttributeListSyntax"}},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"ref":"DeclModifierListSyntax","name":"modifiers","value":{"text":"DeclModifierListSyntax"}},{"name":"unexpectedBetweenModifiersAndBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"text":"var","kind":"keyword(SwiftSyntax.Keyword.var)"}},{"name":"unexpectedBetweenBindingSpecifierAndBindings","value":{"text":"nil"}},{"ref":"PatternBindingListSyntax","name":"bindings","value":{"text":"PatternBindingListSyntax"}},{"name":"unexpectedAfterBindings","value":{"text":"nil"}}],"id":183,"range":{"endColumn":41,"startColumn":5,"startRow":24,"endRow":24},"type":"decl"},{"text":"AttributeList","parent":183,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"id":184,"range":{"endColumn":20,"startColumn":20,"startRow":23,"endRow":23},"type":"collection"},{"text":"DeclModifierList","parent":183,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":185,"range":{"endColumn":20,"startColumn":20,"startRow":23,"endRow":23},"type":"collection"},{"type":"other","text":"var","token":{"kind":"keyword(SwiftSyntax.Keyword.var)","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"␣<\/span>"},"range":{"endColumn":8,"startColumn":5,"startRow":24,"endRow":24},"parent":183,"structure":[],"id":186},{"text":"PatternBindingList","parent":183,"structure":[{"name":"Element","value":{"text":"PatternBindingSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":187,"range":{"endColumn":41,"startColumn":9,"startRow":24,"endRow":24},"type":"collection"},{"text":"PatternBinding","parent":187,"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"ref":"IdentifierPatternSyntax","name":"pattern","value":{"text":"IdentifierPatternSyntax"}},{"name":"unexpectedBetweenPatternAndTypeAnnotation","value":{"text":"nil"}},{"ref":"TypeAnnotationSyntax","name":"typeAnnotation","value":{"text":"TypeAnnotationSyntax"}},{"name":"unexpectedBetweenTypeAnnotationAndInitializer","value":{"text":"nil"}},{"name":"initializer","value":{"text":"nil"}},{"name":"unexpectedBetweenInitializerAndAccessorBlock","value":{"text":"nil"}},{"ref":"AccessorBlockSyntax","name":"accessorBlock","value":{"text":"AccessorBlockSyntax"}},{"name":"unexpectedBetweenAccessorBlockAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":188,"range":{"endColumn":41,"startColumn":9,"startRow":24,"endRow":24},"type":"other"},{"text":"IdentifierPattern","parent":188,"structure":[{"name":"unexpectedBeforeIdentifier","value":{"text":"nil"}},{"name":"identifier","value":{"text":"batteryLevel","kind":"identifier("batteryLevel")"}},{"name":"unexpectedAfterIdentifier","value":{"text":"nil"}}],"id":189,"range":{"endColumn":21,"startColumn":9,"startRow":24,"endRow":24},"type":"pattern"},{"type":"other","text":"batteryLevel","token":{"kind":"identifier("batteryLevel")","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":21,"startColumn":9,"startRow":24,"endRow":24},"parent":189,"structure":[],"id":190},{"text":"TypeAnnotation","parent":188,"structure":[{"name":"unexpectedBeforeColon","value":{"text":"nil"}},{"name":"colon","value":{"text":":","kind":"colon"}},{"name":"unexpectedBetweenColonAndType","value":{"text":"nil"}},{"ref":"IdentifierTypeSyntax","name":"type","value":{"text":"IdentifierTypeSyntax"}},{"name":"unexpectedAfterType","value":{"text":"nil"}}],"id":191,"range":{"endColumn":29,"startColumn":21,"startRow":24,"endRow":24},"type":"other"},{"type":"other","text":":","token":{"kind":"colon","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"endColumn":22,"startColumn":21,"startRow":24,"endRow":24},"parent":191,"structure":[],"id":192},{"text":"IdentifierType","parent":191,"structure":[{"name":"unexpectedBeforeName","value":{"text":"nil"}},{"name":"name","value":{"text":"Double","kind":"identifier("Double")"}},{"name":"unexpectedBetweenNameAndGenericArgumentClause","value":{"text":"nil"}},{"name":"genericArgumentClause","value":{"text":"nil"}},{"name":"unexpectedAfterGenericArgumentClause","value":{"text":"nil"}}],"id":193,"range":{"endColumn":29,"startColumn":23,"startRow":24,"endRow":24},"type":"type"},{"type":"other","text":"Double","token":{"kind":"identifier("Double")","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"endColumn":29,"startColumn":23,"startRow":24,"endRow":24},"parent":193,"structure":[],"id":194},{"text":"AccessorBlock","parent":188,"structure":[{"name":"unexpectedBeforeLeftBrace","value":{"text":"nil"}},{"name":"leftBrace","value":{"text":"{","kind":"leftBrace"}},{"name":"unexpectedBetweenLeftBraceAndAccessors","value":{"text":"nil"}},{"ref":"AccessorDeclListSyntax","name":"accessors","value":{"text":"AccessorDeclListSyntax"}},{"name":"unexpectedBetweenAccessorsAndRightBrace","value":{"text":"nil"}},{"name":"rightBrace","value":{"text":"}","kind":"rightBrace"}},{"name":"unexpectedAfterRightBrace","value":{"text":"nil"}}],"id":195,"range":{"endColumn":41,"startColumn":30,"startRow":24,"endRow":24},"type":"other"},{"type":"other","text":"{","token":{"kind":"leftBrace","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"endColumn":31,"startColumn":30,"startRow":24,"endRow":24},"parent":195,"structure":[],"id":196},{"text":"AccessorDeclList","parent":195,"structure":[{"name":"Element","value":{"text":"AccessorDeclSyntax"}},{"name":"Count","value":{"text":"2"}}],"id":197,"range":{"endColumn":39,"startColumn":32,"startRow":24,"endRow":24},"type":"collection"},{"text":"AccessorDecl","parent":197,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"ref":"AttributeListSyntax","name":"attributes","value":{"text":"AttributeListSyntax"}},{"name":"unexpectedBetweenAttributesAndModifier","value":{"text":"nil"}},{"name":"modifier","value":{"text":"nil"}},{"name":"unexpectedBetweenModifierAndAccessorSpecifier","value":{"text":"nil"}},{"name":"accessorSpecifier","value":{"text":"get","kind":"keyword(SwiftSyntax.Keyword.get)"}},{"name":"unexpectedBetweenAccessorSpecifierAndParameters","value":{"text":"nil"}},{"name":"parameters","value":{"text":"nil"}},{"name":"unexpectedBetweenParametersAndEffectSpecifiers","value":{"text":"nil"}},{"name":"effectSpecifiers","value":{"text":"nil"}},{"name":"unexpectedBetweenEffectSpecifiersAndBody","value":{"text":"nil"}},{"name":"body","value":{"text":"nil"}},{"name":"unexpectedAfterBody","value":{"text":"nil"}}],"id":198,"range":{"endColumn":35,"startColumn":32,"startRow":24,"endRow":24},"type":"decl"},{"text":"AttributeList","parent":198,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"id":199,"range":{"endColumn":32,"startColumn":32,"startRow":24,"endRow":24},"type":"collection"},{"type":"other","text":"get","token":{"kind":"keyword(SwiftSyntax.Keyword.get)","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"endColumn":35,"startColumn":32,"startRow":24,"endRow":24},"parent":198,"structure":[],"id":200},{"text":"AccessorDecl","parent":197,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"ref":"AttributeListSyntax","name":"attributes","value":{"text":"AttributeListSyntax"}},{"name":"unexpectedBetweenAttributesAndModifier","value":{"text":"nil"}},{"name":"modifier","value":{"text":"nil"}},{"name":"unexpectedBetweenModifierAndAccessorSpecifier","value":{"text":"nil"}},{"name":"accessorSpecifier","value":{"text":"set","kind":"keyword(SwiftSyntax.Keyword.set)"}},{"name":"unexpectedBetweenAccessorSpecifierAndParameters","value":{"text":"nil"}},{"name":"parameters","value":{"text":"nil"}},{"name":"unexpectedBetweenParametersAndEffectSpecifiers","value":{"text":"nil"}},{"name":"effectSpecifiers","value":{"text":"nil"}},{"name":"unexpectedBetweenEffectSpecifiersAndBody","value":{"text":"nil"}},{"name":"body","value":{"text":"nil"}},{"name":"unexpectedAfterBody","value":{"text":"nil"}}],"id":201,"range":{"endColumn":39,"startColumn":36,"startRow":24,"endRow":24},"type":"decl"},{"text":"AttributeList","parent":201,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"id":202,"range":{"endColumn":36,"startColumn":36,"startRow":24,"endRow":24},"type":"collection"},{"type":"other","text":"set","token":{"kind":"keyword(SwiftSyntax.Keyword.set)","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"endColumn":39,"startColumn":36,"startRow":24,"endRow":24},"parent":201,"structure":[],"id":203},{"type":"other","text":"}","token":{"kind":"rightBrace","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":41,"startColumn":40,"startRow":24,"endRow":24},"parent":195,"structure":[],"id":204},{"text":"MemberBlockItem","parent":181,"structure":[{"name":"unexpectedBeforeDecl","value":{"text":"nil"}},{"ref":"FunctionDeclSyntax","name":"decl","value":{"text":"FunctionDeclSyntax"}},{"name":"unexpectedBetweenDeclAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":205,"range":{"endColumn":18,"startColumn":5,"startRow":25,"endRow":25},"type":"other"},{"text":"FunctionDecl","parent":205,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"ref":"AttributeListSyntax","name":"attributes","value":{"text":"AttributeListSyntax"}},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"ref":"DeclModifierListSyntax","name":"modifiers","value":{"text":"DeclModifierListSyntax"}},{"name":"unexpectedBetweenModifiersAndFuncKeyword","value":{"text":"nil"}},{"name":"funcKeyword","value":{"text":"func","kind":"keyword(SwiftSyntax.Keyword.func)"}},{"name":"unexpectedBetweenFuncKeywordAndName","value":{"text":"nil"}},{"name":"name","value":{"text":"charge","kind":"identifier("charge")"}},{"name":"unexpectedBetweenNameAndGenericParameterClause","value":{"text":"nil"}},{"name":"genericParameterClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericParameterClauseAndSignature","value":{"text":"nil"}},{"ref":"FunctionSignatureSyntax","name":"signature","value":{"text":"FunctionSignatureSyntax"}},{"name":"unexpectedBetweenSignatureAndGenericWhereClause","value":{"text":"nil"}},{"name":"genericWhereClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericWhereClauseAndBody","value":{"text":"nil"}},{"name":"body","value":{"text":"nil"}},{"name":"unexpectedAfterBody","value":{"text":"nil"}}],"id":206,"range":{"endColumn":18,"startColumn":5,"startRow":25,"endRow":25},"type":"decl"},{"text":"AttributeList","parent":206,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"id":207,"range":{"endColumn":41,"startRow":24,"startColumn":41,"endRow":24},"type":"collection"},{"text":"DeclModifierList","parent":206,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":208,"range":{"endColumn":41,"startRow":24,"startColumn":41,"endRow":24},"type":"collection"},{"type":"other","text":"func","token":{"trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.func)","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"range":{"endColumn":9,"startRow":25,"startColumn":5,"endRow":25},"parent":206,"structure":[],"id":209},{"type":"other","text":"charge","token":{"trailingTrivia":"","kind":"identifier("charge")","leadingTrivia":""},"range":{"endColumn":16,"startRow":25,"startColumn":10,"endRow":25},"parent":206,"structure":[],"id":210},{"text":"FunctionSignature","parent":206,"structure":[{"name":"unexpectedBeforeParameterClause","value":{"text":"nil"}},{"name":"parameterClause","ref":"FunctionParameterClauseSyntax","value":{"text":"FunctionParameterClauseSyntax"}},{"name":"unexpectedBetweenParameterClauseAndEffectSpecifiers","value":{"text":"nil"}},{"name":"effectSpecifiers","value":{"text":"nil"}},{"name":"unexpectedBetweenEffectSpecifiersAndReturnClause","value":{"text":"nil"}},{"name":"returnClause","value":{"text":"nil"}},{"name":"unexpectedAfterReturnClause","value":{"text":"nil"}}],"id":211,"range":{"endColumn":18,"startRow":25,"startColumn":16,"endRow":25},"type":"other"},{"text":"FunctionParameterClause","parent":211,"structure":[{"name":"unexpectedBeforeLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndParameters","value":{"text":"nil"}},{"name":"parameters","ref":"FunctionParameterListSyntax","value":{"text":"FunctionParameterListSyntax"}},{"name":"unexpectedBetweenParametersAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}],"id":212,"range":{"endColumn":18,"startRow":25,"startColumn":16,"endRow":25},"type":"other"},{"type":"other","text":"(","token":{"trailingTrivia":"","kind":"leftParen","leadingTrivia":""},"range":{"endColumn":17,"startRow":25,"startColumn":16,"endRow":25},"parent":212,"structure":[],"id":213},{"text":"FunctionParameterList","parent":212,"structure":[{"name":"Element","value":{"text":"FunctionParameterSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":214,"range":{"endColumn":17,"startRow":25,"startColumn":17,"endRow":25},"type":"collection"},{"type":"other","text":")","token":{"trailingTrivia":"","kind":"rightParen","leadingTrivia":""},"range":{"endColumn":18,"startRow":25,"startColumn":17,"endRow":25},"parent":212,"structure":[],"id":215},{"type":"other","text":"}","token":{"trailingTrivia":"","kind":"rightBrace","leadingTrivia":"↲<\/span>"},"range":{"endColumn":2,"startRow":26,"startColumn":1,"endRow":26},"parent":179,"structure":[],"id":216},{"text":"CodeBlockItem","parent":1,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","ref":"StructDeclSyntax","value":{"text":"StructDeclSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":217,"range":{"endColumn":2,"startRow":29,"startColumn":1,"endRow":36},"type":"other"},{"text":"StructDecl","parent":217,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","ref":"AttributeListSyntax","value":{"text":"AttributeListSyntax"}},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","ref":"DeclModifierListSyntax","value":{"text":"DeclModifierListSyntax"}},{"name":"unexpectedBetweenModifiersAndStructKeyword","value":{"text":"nil"}},{"name":"structKeyword","value":{"text":"struct","kind":"keyword(SwiftSyntax.Keyword.struct)"}},{"name":"unexpectedBetweenStructKeywordAndName","value":{"text":"nil"}},{"name":"name","value":{"text":"Car","kind":"identifier("Car")"}},{"name":"unexpectedBetweenNameAndGenericParameterClause","value":{"text":"nil"}},{"name":"genericParameterClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericParameterClauseAndInheritanceClause","value":{"text":"nil"}},{"name":"inheritanceClause","ref":"InheritanceClauseSyntax","value":{"text":"InheritanceClauseSyntax"}},{"name":"unexpectedBetweenInheritanceClauseAndGenericWhereClause","value":{"text":"nil"}},{"name":"genericWhereClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericWhereClauseAndMemberBlock","value":{"text":"nil"}},{"name":"memberBlock","ref":"MemberBlockSyntax","value":{"text":"MemberBlockSyntax"}},{"name":"unexpectedAfterMemberBlock","value":{"text":"nil"}}],"id":218,"range":{"endColumn":2,"startRow":29,"startColumn":1,"endRow":36},"type":"decl"},{"text":"AttributeList","parent":218,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"id":219,"range":{"endRow":26,"startRow":26,"endColumn":2,"startColumn":2},"type":"collection"},{"text":"DeclModifierList","parent":218,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":220,"range":{"endRow":26,"startRow":26,"endColumn":2,"startColumn":2},"type":"collection"},{"type":"other","text":"struct","token":{"leadingTrivia":"↲<\/span>↲<\/span>\/\/␣<\/span>MARK:␣<\/span>-␣<\/span>Concrete␣<\/span>Types<\/span>↲<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.struct)"},"range":{"endRow":29,"startRow":29,"endColumn":7,"startColumn":1},"parent":218,"structure":[],"id":221},{"type":"other","text":"Car","token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("Car")"},"range":{"endRow":29,"startRow":29,"endColumn":11,"startColumn":8},"parent":218,"structure":[],"id":222},{"text":"InheritanceClause","parent":218,"structure":[{"name":"unexpectedBeforeColon","value":{"text":"nil"}},{"name":"colon","value":{"text":":","kind":"colon"}},{"name":"unexpectedBetweenColonAndInheritedTypes","value":{"text":"nil"}},{"name":"inheritedTypes","value":{"text":"InheritedTypeListSyntax"},"ref":"InheritedTypeListSyntax"},{"name":"unexpectedAfterInheritedTypes","value":{"text":"nil"}}],"id":223,"range":{"endRow":29,"startRow":29,"endColumn":20,"startColumn":11},"type":"other"},{"type":"other","text":":","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"colon"},"range":{"endRow":29,"startRow":29,"endColumn":12,"startColumn":11},"parent":223,"structure":[],"id":224},{"text":"InheritedTypeList","parent":223,"structure":[{"name":"Element","value":{"text":"InheritedTypeSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":225,"range":{"endRow":29,"startRow":29,"endColumn":20,"startColumn":13},"type":"collection"},{"text":"InheritedType","parent":225,"structure":[{"name":"unexpectedBeforeType","value":{"text":"nil"}},{"name":"type","value":{"text":"IdentifierTypeSyntax"},"ref":"IdentifierTypeSyntax"},{"name":"unexpectedBetweenTypeAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":226,"range":{"endRow":29,"startRow":29,"endColumn":20,"startColumn":13},"type":"other"},{"text":"IdentifierType","parent":226,"structure":[{"name":"unexpectedBeforeName","value":{"text":"nil"}},{"name":"name","value":{"text":"Vehicle","kind":"identifier("Vehicle")"}},{"name":"unexpectedBetweenNameAndGenericArgumentClause","value":{"text":"nil"}},{"name":"genericArgumentClause","value":{"text":"nil"}},{"name":"unexpectedAfterGenericArgumentClause","value":{"text":"nil"}}],"id":227,"range":{"endRow":29,"startRow":29,"endColumn":20,"startColumn":13},"type":"type"},{"type":"other","text":"Vehicle","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"identifier("Vehicle")"},"range":{"endRow":29,"startRow":29,"endColumn":20,"startColumn":13},"parent":227,"structure":[],"id":228},{"text":"MemberBlock","parent":218,"structure":[{"name":"unexpectedBeforeLeftBrace","value":{"text":"nil"}},{"name":"leftBrace","value":{"text":"{","kind":"leftBrace"}},{"name":"unexpectedBetweenLeftBraceAndMembers","value":{"text":"nil"}},{"name":"members","value":{"text":"MemberBlockItemListSyntax"},"ref":"MemberBlockItemListSyntax"},{"name":"unexpectedBetweenMembersAndRightBrace","value":{"text":"nil"}},{"name":"rightBrace","value":{"text":"}","kind":"rightBrace"}},{"name":"unexpectedAfterRightBrace","value":{"text":"nil"}}],"id":229,"range":{"endRow":36,"startRow":29,"endColumn":2,"startColumn":21},"type":"other"},{"type":"other","text":"{","token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftBrace"},"range":{"endRow":29,"startRow":29,"endColumn":22,"startColumn":21},"parent":229,"structure":[],"id":230},{"text":"MemberBlockItemList","parent":229,"structure":[{"name":"Element","value":{"text":"MemberBlockItemSyntax"}},{"name":"Count","value":{"text":"3"}}],"id":231,"range":{"endRow":35,"startRow":30,"endColumn":6,"startColumn":5},"type":"collection"},{"text":"MemberBlockItem","parent":231,"structure":[{"name":"unexpectedBeforeDecl","value":{"text":"nil"}},{"name":"decl","value":{"text":"VariableDeclSyntax"},"ref":"VariableDeclSyntax"},{"name":"unexpectedBetweenDeclAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":232,"range":{"endRow":30,"startRow":30,"endColumn":32,"startColumn":5},"type":"other"},{"text":"VariableDecl","parent":232,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","value":{"text":"AttributeListSyntax"},"ref":"AttributeListSyntax"},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax"},{"name":"unexpectedBetweenModifiersAndBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"text":"let","kind":"keyword(SwiftSyntax.Keyword.let)"}},{"name":"unexpectedBetweenBindingSpecifierAndBindings","value":{"text":"nil"}},{"name":"bindings","value":{"text":"PatternBindingListSyntax"},"ref":"PatternBindingListSyntax"},{"name":"unexpectedAfterBindings","value":{"text":"nil"}}],"id":233,"range":{"endRow":30,"startRow":30,"endColumn":32,"startColumn":5},"type":"decl"},{"text":"AttributeList","parent":233,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"id":234,"range":{"endRow":29,"startRow":29,"endColumn":22,"startColumn":22},"type":"collection"},{"text":"DeclModifierList","parent":233,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":235,"range":{"endRow":29,"startRow":29,"endColumn":22,"startColumn":22},"type":"collection"},{"type":"other","text":"let","token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.let)"},"range":{"endRow":30,"startRow":30,"endColumn":8,"startColumn":5},"parent":233,"structure":[],"id":236},{"text":"PatternBindingList","parent":233,"structure":[{"name":"Element","value":{"text":"PatternBindingSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":237,"range":{"endRow":30,"startRow":30,"endColumn":32,"startColumn":9},"type":"collection"},{"text":"PatternBinding","parent":237,"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"name":"pattern","value":{"text":"IdentifierPatternSyntax"},"ref":"IdentifierPatternSyntax"},{"name":"unexpectedBetweenPatternAndTypeAnnotation","value":{"text":"nil"}},{"name":"typeAnnotation","value":{"text":"TypeAnnotationSyntax"},"ref":"TypeAnnotationSyntax"},{"name":"unexpectedBetweenTypeAnnotationAndInitializer","value":{"text":"nil"}},{"name":"initializer","value":{"text":"InitializerClauseSyntax"},"ref":"InitializerClauseSyntax"},{"name":"unexpectedBetweenInitializerAndAccessorBlock","value":{"text":"nil"}},{"name":"accessorBlock","value":{"text":"nil"}},{"name":"unexpectedBetweenAccessorBlockAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":238,"range":{"endRow":30,"startRow":30,"endColumn":32,"startColumn":9},"type":"other"},{"text":"IdentifierPattern","parent":238,"structure":[{"name":"unexpectedBeforeIdentifier","value":{"text":"nil"}},{"name":"identifier","value":{"text":"numberOfWheels","kind":"identifier("numberOfWheels")"}},{"name":"unexpectedAfterIdentifier","value":{"text":"nil"}}],"id":239,"range":{"endRow":30,"startRow":30,"endColumn":23,"startColumn":9},"type":"pattern"},{"type":"other","text":"numberOfWheels","token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("numberOfWheels")"},"range":{"endRow":30,"startRow":30,"endColumn":23,"startColumn":9},"parent":239,"structure":[],"id":240},{"text":"TypeAnnotation","parent":238,"structure":[{"name":"unexpectedBeforeColon","value":{"text":"nil"}},{"name":"colon","value":{"text":":","kind":"colon"}},{"name":"unexpectedBetweenColonAndType","value":{"text":"nil"}},{"name":"type","value":{"text":"IdentifierTypeSyntax"},"ref":"IdentifierTypeSyntax"},{"name":"unexpectedAfterType","value":{"text":"nil"}}],"id":241,"range":{"endRow":30,"startRow":30,"endColumn":28,"startColumn":23},"type":"other"},{"type":"other","text":":","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"colon"},"range":{"endRow":30,"startRow":30,"endColumn":24,"startColumn":23},"parent":241,"structure":[],"id":242},{"text":"IdentifierType","parent":241,"structure":[{"name":"unexpectedBeforeName","value":{"text":"nil"}},{"name":"name","value":{"text":"Int","kind":"identifier("Int")"}},{"name":"unexpectedBetweenNameAndGenericArgumentClause","value":{"text":"nil"}},{"name":"genericArgumentClause","value":{"text":"nil"}},{"name":"unexpectedAfterGenericArgumentClause","value":{"text":"nil"}}],"id":243,"range":{"endRow":30,"startRow":30,"endColumn":28,"startColumn":25},"type":"type"},{"type":"other","text":"Int","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"identifier("Int")"},"range":{"endRow":30,"startRow":30,"endColumn":28,"startColumn":25},"parent":243,"structure":[],"id":244},{"text":"InitializerClause","parent":238,"structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"text":"=","kind":"equal"}},{"name":"unexpectedBetweenEqualAndValue","value":{"text":"nil"}},{"name":"value","value":{"text":"IntegerLiteralExprSyntax"},"ref":"IntegerLiteralExprSyntax"},{"name":"unexpectedAfterValue","value":{"text":"nil"}}],"id":245,"range":{"endRow":30,"startRow":30,"endColumn":32,"startColumn":29},"type":"other"},{"type":"other","text":"=","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"equal"},"range":{"endRow":30,"startRow":30,"endColumn":30,"startColumn":29},"parent":245,"structure":[],"id":246},{"text":"IntegerLiteralExpr","parent":245,"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"4","kind":"integerLiteral("4")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"id":247,"range":{"endRow":30,"startRow":30,"endColumn":32,"startColumn":31},"type":"expr"},{"type":"other","text":"4","token":{"leadingTrivia":"","trailingTrivia":"","kind":"integerLiteral("4")"},"range":{"endRow":30,"startRow":30,"endColumn":32,"startColumn":31},"parent":247,"structure":[],"id":248},{"text":"MemberBlockItem","parent":231,"structure":[{"name":"unexpectedBeforeDecl","value":{"text":"nil"}},{"name":"decl","value":{"text":"VariableDeclSyntax"},"ref":"VariableDeclSyntax"},{"name":"unexpectedBetweenDeclAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":249,"range":{"endRow":31,"startRow":31,"endColumn":22,"startColumn":5},"type":"other"},{"text":"VariableDecl","parent":249,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","value":{"text":"AttributeListSyntax"},"ref":"AttributeListSyntax"},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax"},{"name":"unexpectedBetweenModifiersAndBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"text":"let","kind":"keyword(SwiftSyntax.Keyword.let)"}},{"name":"unexpectedBetweenBindingSpecifierAndBindings","value":{"text":"nil"}},{"name":"bindings","value":{"text":"PatternBindingListSyntax"},"ref":"PatternBindingListSyntax"},{"name":"unexpectedAfterBindings","value":{"text":"nil"}}],"id":250,"range":{"endRow":31,"startRow":31,"endColumn":22,"startColumn":5},"type":"decl"},{"text":"AttributeList","parent":250,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"id":251,"range":{"endRow":30,"startRow":30,"endColumn":32,"startColumn":32},"type":"collection"},{"text":"DeclModifierList","parent":250,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":252,"range":{"endRow":30,"startRow":30,"endColumn":32,"startColumn":32},"type":"collection"},{"type":"other","text":"let","token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.let)"},"range":{"endRow":31,"startRow":31,"endColumn":8,"startColumn":5},"parent":250,"structure":[],"id":253},{"text":"PatternBindingList","parent":250,"structure":[{"name":"Element","value":{"text":"PatternBindingSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":254,"range":{"endRow":31,"startRow":31,"endColumn":22,"startColumn":9},"type":"collection"},{"text":"PatternBinding","parent":254,"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"name":"pattern","value":{"text":"IdentifierPatternSyntax"},"ref":"IdentifierPatternSyntax"},{"name":"unexpectedBetweenPatternAndTypeAnnotation","value":{"text":"nil"}},{"name":"typeAnnotation","value":{"text":"TypeAnnotationSyntax"},"ref":"TypeAnnotationSyntax"},{"name":"unexpectedBetweenTypeAnnotationAndInitializer","value":{"text":"nil"}},{"name":"initializer","value":{"text":"nil"}},{"name":"unexpectedBetweenInitializerAndAccessorBlock","value":{"text":"nil"}},{"name":"accessorBlock","value":{"text":"nil"}},{"name":"unexpectedBetweenAccessorBlockAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":255,"range":{"endRow":31,"startRow":31,"endColumn":22,"startColumn":9},"type":"other"},{"text":"IdentifierPattern","parent":255,"structure":[{"name":"unexpectedBeforeIdentifier","value":{"text":"nil"}},{"name":"identifier","value":{"text":"brand","kind":"identifier("brand")"}},{"name":"unexpectedAfterIdentifier","value":{"text":"nil"}}],"id":256,"range":{"endRow":31,"startRow":31,"endColumn":14,"startColumn":9},"type":"pattern"},{"type":"other","text":"brand","token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("brand")"},"range":{"endRow":31,"startRow":31,"endColumn":14,"startColumn":9},"parent":256,"structure":[],"id":257},{"text":"TypeAnnotation","parent":255,"structure":[{"name":"unexpectedBeforeColon","value":{"text":"nil"}},{"name":"colon","value":{"text":":","kind":"colon"}},{"name":"unexpectedBetweenColonAndType","value":{"text":"nil"}},{"name":"type","value":{"text":"IdentifierTypeSyntax"},"ref":"IdentifierTypeSyntax"},{"name":"unexpectedAfterType","value":{"text":"nil"}}],"id":258,"range":{"endRow":31,"startRow":31,"endColumn":22,"startColumn":14},"type":"other"},{"type":"other","text":":","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"colon"},"range":{"endRow":31,"startRow":31,"endColumn":15,"startColumn":14},"parent":258,"structure":[],"id":259},{"text":"IdentifierType","parent":258,"structure":[{"name":"unexpectedBeforeName","value":{"text":"nil"}},{"name":"name","value":{"text":"String","kind":"identifier("String")"}},{"name":"unexpectedBetweenNameAndGenericArgumentClause","value":{"text":"nil"}},{"name":"genericArgumentClause","value":{"text":"nil"}},{"name":"unexpectedAfterGenericArgumentClause","value":{"text":"nil"}}],"id":260,"range":{"endRow":31,"startRow":31,"endColumn":22,"startColumn":16},"type":"type"},{"type":"other","text":"String","token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("String")"},"range":{"endRow":31,"startRow":31,"endColumn":22,"startColumn":16},"parent":260,"structure":[],"id":261},{"text":"MemberBlockItem","parent":231,"structure":[{"name":"unexpectedBeforeDecl","value":{"text":"nil"}},{"name":"decl","value":{"text":"FunctionDeclSyntax"},"ref":"FunctionDeclSyntax"},{"name":"unexpectedBetweenDeclAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":262,"range":{"endRow":35,"startRow":33,"endColumn":6,"startColumn":5},"type":"other"},{"text":"FunctionDecl","parent":262,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","value":{"text":"AttributeListSyntax"},"ref":"AttributeListSyntax"},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax"},{"name":"unexpectedBetweenModifiersAndFuncKeyword","value":{"text":"nil"}},{"name":"funcKeyword","value":{"text":"func","kind":"keyword(SwiftSyntax.Keyword.func)"}},{"name":"unexpectedBetweenFuncKeywordAndName","value":{"text":"nil"}},{"name":"name","value":{"text":"start","kind":"identifier("start")"}},{"name":"unexpectedBetweenNameAndGenericParameterClause","value":{"text":"nil"}},{"name":"genericParameterClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericParameterClauseAndSignature","value":{"text":"nil"}},{"name":"signature","value":{"text":"FunctionSignatureSyntax"},"ref":"FunctionSignatureSyntax"},{"name":"unexpectedBetweenSignatureAndGenericWhereClause","value":{"text":"nil"}},{"name":"genericWhereClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericWhereClauseAndBody","value":{"text":"nil"}},{"name":"body","value":{"text":"CodeBlockSyntax"},"ref":"CodeBlockSyntax"},{"name":"unexpectedAfterBody","value":{"text":"nil"}}],"id":263,"range":{"endRow":35,"startRow":33,"endColumn":6,"startColumn":5},"type":"decl"},{"text":"AttributeList","parent":263,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"id":264,"range":{"endRow":31,"startRow":31,"startColumn":22,"endColumn":22},"type":"collection"},{"text":"DeclModifierList","parent":263,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":265,"range":{"endRow":31,"startRow":31,"startColumn":22,"endColumn":22},"type":"collection"},{"type":"other","text":"func","token":{"leadingTrivia":"↲<\/span>↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.func)"},"range":{"endRow":33,"startRow":33,"startColumn":5,"endColumn":9},"parent":263,"structure":[],"id":266},{"type":"other","text":"start","token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("start")"},"range":{"endRow":33,"startRow":33,"startColumn":10,"endColumn":15},"parent":263,"structure":[],"id":267},{"text":"FunctionSignature","parent":263,"structure":[{"name":"unexpectedBeforeParameterClause","value":{"text":"nil"}},{"name":"parameterClause","value":{"text":"FunctionParameterClauseSyntax"},"ref":"FunctionParameterClauseSyntax"},{"name":"unexpectedBetweenParameterClauseAndEffectSpecifiers","value":{"text":"nil"}},{"name":"effectSpecifiers","value":{"text":"nil"}},{"name":"unexpectedBetweenEffectSpecifiersAndReturnClause","value":{"text":"nil"}},{"name":"returnClause","value":{"text":"nil"}},{"name":"unexpectedAfterReturnClause","value":{"text":"nil"}}],"id":268,"range":{"endRow":33,"startRow":33,"startColumn":15,"endColumn":17},"type":"other"},{"text":"FunctionParameterClause","parent":268,"structure":[{"name":"unexpectedBeforeLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"kind":"leftParen","text":"("}},{"name":"unexpectedBetweenLeftParenAndParameters","value":{"text":"nil"}},{"name":"parameters","value":{"text":"FunctionParameterListSyntax"},"ref":"FunctionParameterListSyntax"},{"name":"unexpectedBetweenParametersAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"kind":"rightParen","text":")"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}],"id":269,"range":{"endRow":33,"startRow":33,"startColumn":15,"endColumn":17},"type":"other"},{"type":"other","text":"(","token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"range":{"endRow":33,"startRow":33,"startColumn":15,"endColumn":16},"parent":269,"structure":[],"id":270},{"text":"FunctionParameterList","parent":269,"structure":[{"name":"Element","value":{"text":"FunctionParameterSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":271,"range":{"endRow":33,"startRow":33,"startColumn":16,"endColumn":16},"type":"collection"},{"type":"other","text":")","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"rightParen"},"range":{"endRow":33,"startRow":33,"startColumn":16,"endColumn":17},"parent":269,"structure":[],"id":272},{"text":"CodeBlock","parent":263,"structure":[{"name":"unexpectedBeforeLeftBrace","value":{"text":"nil"}},{"name":"leftBrace","value":{"kind":"leftBrace","text":"{"}},{"name":"unexpectedBetweenLeftBraceAndStatements","value":{"text":"nil"}},{"name":"statements","value":{"text":"CodeBlockItemListSyntax"},"ref":"CodeBlockItemListSyntax"},{"name":"unexpectedBetweenStatementsAndRightBrace","value":{"text":"nil"}},{"name":"rightBrace","value":{"kind":"rightBrace","text":"}"}},{"name":"unexpectedAfterRightBrace","value":{"text":"nil"}}],"id":273,"range":{"endRow":35,"startRow":33,"startColumn":18,"endColumn":6},"type":"other"},{"type":"other","text":"{","token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftBrace"},"range":{"endRow":33,"startRow":33,"startColumn":18,"endColumn":19},"parent":273,"structure":[],"id":274},{"text":"CodeBlockItemList","parent":273,"structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":275,"range":{"endRow":34,"startRow":34,"startColumn":9,"endColumn":49},"type":"collection"},{"text":"CodeBlockItem","parent":275,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"FunctionCallExprSyntax"},"ref":"FunctionCallExprSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":276,"range":{"endRow":34,"startRow":34,"startColumn":9,"endColumn":49},"type":"other"},{"text":"FunctionCallExpr","parent":276,"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"kind":"leftParen","text":"("}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"name":"arguments","value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax"},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"kind":"rightParen","text":")"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"},"ref":"MultipleTrailingClosureElementListSyntax"},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"id":277,"range":{"endRow":34,"startRow":34,"startColumn":9,"endColumn":49},"type":"expr"},{"text":"DeclReferenceExpr","parent":277,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("print")","text":"print"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":278,"range":{"endRow":34,"startRow":34,"startColumn":9,"endColumn":14},"type":"expr"},{"type":"other","text":"print","token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"","kind":"identifier("print")"},"range":{"endRow":34,"startRow":34,"startColumn":9,"endColumn":14},"parent":278,"structure":[],"id":279},{"type":"other","text":"(","token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"range":{"endRow":34,"startRow":34,"startColumn":14,"endColumn":15},"parent":277,"structure":[],"id":280},{"text":"LabeledExprList","parent":277,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":281,"range":{"endRow":34,"startRow":34,"startColumn":15,"endColumn":48},"type":"collection"},{"text":"LabeledExpr","parent":281,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":282,"range":{"endRow":34,"startRow":34,"startColumn":15,"endColumn":48},"type":"other"},{"text":"StringLiteralExpr","parent":282,"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"kind":"stringQuote","text":"""}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"name":"segments","value":{"text":"StringLiteralSegmentListSyntax"},"ref":"StringLiteralSegmentListSyntax"},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"kind":"stringQuote","text":"""}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"id":283,"range":{"endRow":34,"startRow":34,"startColumn":15,"endColumn":48},"type":"expr"},{"type":"other","text":""","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"range":{"endRow":34,"startRow":34,"startColumn":15,"endColumn":16},"parent":283,"structure":[],"id":284},{"text":"StringLiteralSegmentList","parent":283,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"3"}}],"id":285,"range":{"endRow":34,"startRow":34,"startColumn":16,"endColumn":47},"type":"collection"},{"text":"StringSegment","parent":285,"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"kind":"stringSegment("Starting ")","text":"Starting "}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"id":286,"range":{"endRow":34,"startRow":34,"startColumn":16,"endColumn":25},"type":"other"},{"type":"other","text":"Starting␣<\/span>","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("Starting ")"},"range":{"endRow":34,"startRow":34,"startColumn":16,"endColumn":25},"parent":286,"structure":[],"id":287},{"text":"ExpressionSegment","parent":285,"structure":[{"name":"unexpectedBeforeBackslash","value":{"text":"nil"}},{"name":"backslash","value":{"kind":"backslash","text":"\\"}},{"name":"unexpectedBetweenBackslashAndPounds","value":{"text":"nil"}},{"name":"pounds","value":{"text":"nil"}},{"name":"unexpectedBetweenPoundsAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"kind":"leftParen","text":"("}},{"name":"unexpectedBetweenLeftParenAndExpressions","value":{"text":"nil"}},{"name":"expressions","value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax"},{"name":"unexpectedBetweenExpressionsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"kind":"rightParen","text":")"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}],"id":288,"range":{"endRow":34,"startRow":34,"startColumn":25,"endColumn":33},"type":"other"},{"type":"other","text":"\\","token":{"leadingTrivia":"","trailingTrivia":"","kind":"backslash"},"range":{"endRow":34,"startRow":34,"startColumn":25,"endColumn":26},"parent":288,"structure":[],"id":289},{"type":"other","text":"(","token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"range":{"endRow":34,"startRow":34,"startColumn":26,"endColumn":27},"parent":288,"structure":[],"id":290},{"text":"LabeledExprList","parent":288,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":291,"range":{"endRow":34,"startRow":34,"startColumn":27,"endColumn":32},"type":"collection"},{"text":"LabeledExpr","parent":291,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":292,"range":{"endRow":34,"startRow":34,"startColumn":27,"endColumn":32},"type":"other"},{"text":"DeclReferenceExpr","parent":292,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"kind":"identifier("brand")","text":"brand"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":293,"range":{"endRow":34,"startRow":34,"startColumn":27,"endColumn":32},"type":"expr"},{"type":"other","text":"brand","token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("brand")"},"range":{"endRow":34,"startRow":34,"startColumn":27,"endColumn":32},"parent":293,"structure":[],"id":294},{"type":"other","text":")","token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"range":{"endRow":34,"startRow":34,"startColumn":32,"endColumn":33},"parent":288,"structure":[],"id":295},{"text":"StringSegment","parent":285,"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"kind":"stringSegment(" car engine...")","text":" car engine..."}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"id":296,"range":{"endRow":34,"startRow":34,"startColumn":33,"endColumn":47},"type":"other"},{"type":"other","text":"␣<\/span>car␣<\/span>engine...","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment(" car engine...")"},"range":{"endRow":34,"startRow":34,"startColumn":33,"endColumn":47},"parent":296,"structure":[],"id":297},{"type":"other","text":""","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"range":{"endRow":34,"startRow":34,"startColumn":47,"endColumn":48},"parent":283,"structure":[],"id":298},{"type":"other","text":")","token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"range":{"endRow":34,"startRow":34,"startColumn":48,"endColumn":49},"parent":277,"structure":[],"id":299},{"text":"MultipleTrailingClosureElementList","parent":277,"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":300,"range":{"endRow":34,"startRow":34,"startColumn":49,"endColumn":49},"type":"collection"},{"type":"other","text":"}","token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"","kind":"rightBrace"},"range":{"endRow":35,"startRow":35,"startColumn":5,"endColumn":6},"parent":273,"structure":[],"id":301},{"type":"other","text":"}","token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"","kind":"rightBrace"},"range":{"endRow":36,"startRow":36,"startColumn":1,"endColumn":2},"parent":229,"structure":[],"id":302},{"text":"CodeBlockItem","parent":1,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"StructDeclSyntax"},"ref":"StructDeclSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":303,"range":{"endRow":47,"startRow":38,"startColumn":1,"endColumn":2},"type":"other"},{"text":"StructDecl","parent":303,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","value":{"text":"AttributeListSyntax"},"ref":"AttributeListSyntax"},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax"},{"name":"unexpectedBetweenModifiersAndStructKeyword","value":{"text":"nil"}},{"name":"structKeyword","value":{"kind":"keyword(SwiftSyntax.Keyword.struct)","text":"struct"}},{"name":"unexpectedBetweenStructKeywordAndName","value":{"text":"nil"}},{"name":"name","value":{"kind":"identifier("ElectricCar")","text":"ElectricCar"}},{"name":"unexpectedBetweenNameAndGenericParameterClause","value":{"text":"nil"}},{"name":"genericParameterClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericParameterClauseAndInheritanceClause","value":{"text":"nil"}},{"name":"inheritanceClause","value":{"text":"InheritanceClauseSyntax"},"ref":"InheritanceClauseSyntax"},{"name":"unexpectedBetweenInheritanceClauseAndGenericWhereClause","value":{"text":"nil"}},{"name":"genericWhereClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericWhereClauseAndMemberBlock","value":{"text":"nil"}},{"name":"memberBlock","value":{"text":"MemberBlockSyntax"},"ref":"MemberBlockSyntax"},{"name":"unexpectedAfterMemberBlock","value":{"text":"nil"}}],"id":304,"range":{"endRow":47,"startRow":38,"startColumn":1,"endColumn":2},"type":"decl"},{"text":"AttributeList","parent":304,"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"id":305,"range":{"endColumn":2,"startColumn":2,"startRow":36,"endRow":36},"type":"collection"},{"text":"DeclModifierList","parent":304,"structure":[{"value":{"text":"DeclModifierSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"id":306,"range":{"endColumn":2,"startColumn":2,"startRow":36,"endRow":36},"type":"collection"},{"type":"other","text":"struct","token":{"kind":"keyword(SwiftSyntax.Keyword.struct)","leadingTrivia":"↲<\/span>↲<\/span>","trailingTrivia":"␣<\/span>"},"range":{"endColumn":7,"startColumn":1,"startRow":38,"endRow":38},"parent":304,"structure":[],"id":307},{"type":"other","text":"ElectricCar","token":{"kind":"identifier("ElectricCar")","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":19,"startColumn":8,"startRow":38,"endRow":38},"parent":304,"structure":[],"id":308},{"text":"InheritanceClause","parent":304,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeColon"},{"value":{"text":":","kind":"colon"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndInheritedTypes"},{"value":{"text":"InheritedTypeListSyntax"},"name":"inheritedTypes","ref":"InheritedTypeListSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterInheritedTypes"}],"id":309,"range":{"endColumn":38,"startColumn":19,"startRow":38,"endRow":38},"type":"other"},{"type":"other","text":":","token":{"kind":"colon","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"endColumn":20,"startColumn":19,"startRow":38,"endRow":38},"parent":309,"structure":[],"id":310},{"text":"InheritedTypeList","parent":309,"structure":[{"value":{"text":"InheritedTypeSyntax"},"name":"Element"},{"value":{"text":"2"},"name":"Count"}],"id":311,"range":{"endColumn":38,"startColumn":21,"startRow":38,"endRow":38},"type":"collection"},{"text":"InheritedType","parent":311,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeType"},{"value":{"text":"IdentifierTypeSyntax"},"name":"type","ref":"IdentifierTypeSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAndTrailingComma"},{"value":{"text":",","kind":"comma"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"id":312,"range":{"endColumn":29,"startColumn":21,"startRow":38,"endRow":38},"type":"other"},{"text":"IdentifierType","parent":312,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeName"},{"value":{"text":"Vehicle","kind":"identifier("Vehicle")"},"name":"name"},{"value":{"text":"nil"},"name":"unexpectedBetweenNameAndGenericArgumentClause"},{"value":{"text":"nil"},"name":"genericArgumentClause"},{"value":{"text":"nil"},"name":"unexpectedAfterGenericArgumentClause"}],"id":313,"range":{"endColumn":28,"startColumn":21,"startRow":38,"endRow":38},"type":"type"},{"type":"other","text":"Vehicle","token":{"kind":"identifier("Vehicle")","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":28,"startColumn":21,"startRow":38,"endRow":38},"parent":313,"structure":[],"id":314},{"type":"other","text":",","token":{"kind":"comma","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"endColumn":29,"startColumn":28,"startRow":38,"endRow":38},"parent":312,"structure":[],"id":315},{"text":"InheritedType","parent":311,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeType"},{"value":{"text":"IdentifierTypeSyntax"},"name":"type","ref":"IdentifierTypeSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"id":316,"range":{"endColumn":38,"startColumn":30,"startRow":38,"endRow":38},"type":"other"},{"text":"IdentifierType","parent":316,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeName"},{"value":{"text":"Electric","kind":"identifier("Electric")"},"name":"name"},{"value":{"text":"nil"},"name":"unexpectedBetweenNameAndGenericArgumentClause"},{"value":{"text":"nil"},"name":"genericArgumentClause"},{"value":{"text":"nil"},"name":"unexpectedAfterGenericArgumentClause"}],"id":317,"range":{"endColumn":38,"startColumn":30,"startRow":38,"endRow":38},"type":"type"},{"type":"other","text":"Electric","token":{"kind":"identifier("Electric")","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"endColumn":38,"startColumn":30,"startRow":38,"endRow":38},"parent":317,"structure":[],"id":318},{"text":"MemberBlock","parent":304,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftBrace"},{"value":{"text":"{","kind":"leftBrace"},"name":"leftBrace"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftBraceAndMembers"},{"value":{"text":"MemberBlockItemListSyntax"},"name":"members","ref":"MemberBlockItemListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenMembersAndRightBrace"},{"value":{"text":"}","kind":"rightBrace"},"name":"rightBrace"},{"value":{"text":"nil"},"name":"unexpectedAfterRightBrace"}],"id":319,"range":{"endColumn":2,"startColumn":39,"startRow":38,"endRow":47},"type":"other"},{"type":"other","text":"{","token":{"kind":"leftBrace","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":40,"startColumn":39,"startRow":38,"endRow":38},"parent":319,"structure":[],"id":320},{"text":"MemberBlockItemList","parent":319,"structure":[{"value":{"text":"MemberBlockItemSyntax"},"name":"Element"},{"value":{"text":"4"},"name":"Count"}],"id":321,"range":{"endColumn":6,"startColumn":5,"startRow":39,"endRow":46},"type":"collection"},{"text":"MemberBlockItem","parent":321,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeDecl"},{"value":{"text":"VariableDeclSyntax"},"name":"decl","ref":"VariableDeclSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenDeclAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"id":322,"range":{"endColumn":32,"startColumn":5,"startRow":39,"endRow":39},"type":"other"},{"text":"VariableDecl","parent":322,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttributes"},{"value":{"text":"AttributeListSyntax"},"name":"attributes","ref":"AttributeListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenAttributesAndModifiers"},{"value":{"text":"DeclModifierListSyntax"},"name":"modifiers","ref":"DeclModifierListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenModifiersAndBindingSpecifier"},{"value":{"text":"let","kind":"keyword(SwiftSyntax.Keyword.let)"},"name":"bindingSpecifier"},{"value":{"text":"nil"},"name":"unexpectedBetweenBindingSpecifierAndBindings"},{"value":{"text":"PatternBindingListSyntax"},"name":"bindings","ref":"PatternBindingListSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterBindings"}],"id":323,"range":{"endColumn":32,"startColumn":5,"startRow":39,"endRow":39},"type":"decl"},{"text":"AttributeList","parent":323,"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"id":324,"range":{"endColumn":40,"startColumn":40,"startRow":38,"endRow":38},"type":"collection"},{"text":"DeclModifierList","parent":323,"structure":[{"value":{"text":"DeclModifierSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"id":325,"range":{"endColumn":40,"startColumn":40,"startRow":38,"endRow":38},"type":"collection"},{"type":"other","text":"let","token":{"kind":"keyword(SwiftSyntax.Keyword.let)","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"␣<\/span>"},"range":{"endColumn":8,"startColumn":5,"startRow":39,"endRow":39},"parent":323,"structure":[],"id":326},{"text":"PatternBindingList","parent":323,"structure":[{"value":{"text":"PatternBindingSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"id":327,"range":{"endColumn":32,"startColumn":9,"startRow":39,"endRow":39},"type":"collection"},{"text":"PatternBinding","parent":327,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"value":{"text":"IdentifierPatternSyntax"},"name":"pattern","ref":"IdentifierPatternSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTypeAnnotation"},{"value":{"text":"TypeAnnotationSyntax"},"name":"typeAnnotation","ref":"TypeAnnotationSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAnnotationAndInitializer"},{"value":{"text":"InitializerClauseSyntax"},"name":"initializer","ref":"InitializerClauseSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenInitializerAndAccessorBlock"},{"value":{"text":"nil"},"name":"accessorBlock"},{"value":{"text":"nil"},"name":"unexpectedBetweenAccessorBlockAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"id":328,"range":{"endColumn":32,"startColumn":9,"startRow":39,"endRow":39},"type":"other"},{"text":"IdentifierPattern","parent":328,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"text":"numberOfWheels","kind":"identifier("numberOfWheels")"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"id":329,"range":{"endColumn":23,"startColumn":9,"startRow":39,"endRow":39},"type":"pattern"},{"type":"other","text":"numberOfWheels","token":{"kind":"identifier("numberOfWheels")","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":23,"startColumn":9,"startRow":39,"endRow":39},"parent":329,"structure":[],"id":330},{"text":"TypeAnnotation","parent":328,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeColon"},{"value":{"text":":","kind":"colon"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndType"},{"value":{"text":"IdentifierTypeSyntax"},"name":"type","ref":"IdentifierTypeSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterType"}],"id":331,"range":{"endColumn":28,"startColumn":23,"startRow":39,"endRow":39},"type":"other"},{"type":"other","text":":","token":{"kind":"colon","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"endColumn":24,"startColumn":23,"startRow":39,"endRow":39},"parent":331,"structure":[],"id":332},{"text":"IdentifierType","parent":331,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeName"},{"value":{"text":"Int","kind":"identifier("Int")"},"name":"name"},{"value":{"text":"nil"},"name":"unexpectedBetweenNameAndGenericArgumentClause"},{"value":{"text":"nil"},"name":"genericArgumentClause"},{"value":{"text":"nil"},"name":"unexpectedAfterGenericArgumentClause"}],"id":333,"range":{"endColumn":28,"startColumn":25,"startRow":39,"endRow":39},"type":"type"},{"type":"other","text":"Int","token":{"kind":"identifier("Int")","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"endColumn":28,"startColumn":25,"startRow":39,"endRow":39},"parent":333,"structure":[],"id":334},{"text":"InitializerClause","parent":328,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeEqual"},{"value":{"text":"=","kind":"equal"},"name":"equal"},{"value":{"text":"nil"},"name":"unexpectedBetweenEqualAndValue"},{"value":{"text":"IntegerLiteralExprSyntax"},"name":"value","ref":"IntegerLiteralExprSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterValue"}],"id":335,"range":{"endColumn":32,"startColumn":29,"startRow":39,"endRow":39},"type":"other"},{"type":"other","text":"=","token":{"kind":"equal","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"endColumn":30,"startColumn":29,"startRow":39,"endRow":39},"parent":335,"structure":[],"id":336},{"text":"IntegerLiteralExpr","parent":335,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLiteral"},{"value":{"text":"4","kind":"integerLiteral("4")"},"name":"literal"},{"value":{"text":"nil"},"name":"unexpectedAfterLiteral"}],"id":337,"range":{"endColumn":32,"startColumn":31,"startRow":39,"endRow":39},"type":"expr"},{"type":"other","text":"4","token":{"kind":"integerLiteral("4")","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":32,"startColumn":31,"startRow":39,"endRow":39},"parent":337,"structure":[],"id":338},{"text":"MemberBlockItem","parent":321,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeDecl"},{"value":{"text":"VariableDeclSyntax"},"name":"decl","ref":"VariableDeclSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenDeclAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"id":339,"range":{"endColumn":22,"startColumn":5,"startRow":40,"endRow":40},"type":"other"},{"text":"VariableDecl","parent":339,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttributes"},{"value":{"text":"AttributeListSyntax"},"name":"attributes","ref":"AttributeListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenAttributesAndModifiers"},{"value":{"text":"DeclModifierListSyntax"},"name":"modifiers","ref":"DeclModifierListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenModifiersAndBindingSpecifier"},{"value":{"text":"let","kind":"keyword(SwiftSyntax.Keyword.let)"},"name":"bindingSpecifier"},{"value":{"text":"nil"},"name":"unexpectedBetweenBindingSpecifierAndBindings"},{"value":{"text":"PatternBindingListSyntax"},"name":"bindings","ref":"PatternBindingListSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterBindings"}],"id":340,"range":{"endColumn":22,"startColumn":5,"startRow":40,"endRow":40},"type":"decl"},{"text":"AttributeList","parent":340,"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"id":341,"range":{"endColumn":32,"startColumn":32,"startRow":39,"endRow":39},"type":"collection"},{"text":"DeclModifierList","parent":340,"structure":[{"value":{"text":"DeclModifierSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"id":342,"range":{"endColumn":32,"startColumn":32,"startRow":39,"endRow":39},"type":"collection"},{"type":"other","text":"let","token":{"kind":"keyword(SwiftSyntax.Keyword.let)","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"␣<\/span>"},"range":{"endColumn":8,"startColumn":5,"startRow":40,"endRow":40},"parent":340,"structure":[],"id":343},{"text":"PatternBindingList","parent":340,"structure":[{"value":{"text":"PatternBindingSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"id":344,"range":{"endColumn":22,"startColumn":9,"startRow":40,"endRow":40},"type":"collection"},{"text":"PatternBinding","parent":344,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"value":{"text":"IdentifierPatternSyntax"},"name":"pattern","ref":"IdentifierPatternSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTypeAnnotation"},{"value":{"text":"TypeAnnotationSyntax"},"name":"typeAnnotation","ref":"TypeAnnotationSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAnnotationAndInitializer"},{"value":{"text":"nil"},"name":"initializer"},{"value":{"text":"nil"},"name":"unexpectedBetweenInitializerAndAccessorBlock"},{"value":{"text":"nil"},"name":"accessorBlock"},{"value":{"text":"nil"},"name":"unexpectedBetweenAccessorBlockAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"id":345,"range":{"endColumn":22,"startColumn":9,"startRow":40,"endRow":40},"type":"other"},{"text":"IdentifierPattern","parent":345,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"text":"brand","kind":"identifier("brand")"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"id":346,"range":{"endColumn":14,"startColumn":9,"startRow":40,"endRow":40},"type":"pattern"},{"type":"other","text":"brand","token":{"kind":"identifier("brand")","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":14,"startColumn":9,"startRow":40,"endRow":40},"parent":346,"structure":[],"id":347},{"text":"TypeAnnotation","parent":345,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeColon"},{"value":{"text":":","kind":"colon"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndType"},{"value":{"text":"IdentifierTypeSyntax"},"name":"type","ref":"IdentifierTypeSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterType"}],"id":348,"range":{"endColumn":22,"startColumn":14,"startRow":40,"endRow":40},"type":"other"},{"type":"other","text":":","token":{"kind":"colon","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"endColumn":15,"startColumn":14,"startRow":40,"endRow":40},"parent":348,"structure":[],"id":349},{"text":"IdentifierType","parent":348,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeName"},{"value":{"text":"String","kind":"identifier("String")"},"name":"name"},{"value":{"text":"nil"},"name":"unexpectedBetweenNameAndGenericArgumentClause"},{"value":{"text":"nil"},"name":"genericArgumentClause"},{"value":{"text":"nil"},"name":"unexpectedAfterGenericArgumentClause"}],"id":350,"range":{"endColumn":22,"startColumn":16,"startRow":40,"endRow":40},"type":"type"},{"type":"other","text":"String","token":{"kind":"identifier("String")","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":22,"startColumn":16,"startRow":40,"endRow":40},"parent":350,"structure":[],"id":351},{"text":"MemberBlockItem","parent":321,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeDecl"},{"value":{"text":"VariableDeclSyntax"},"name":"decl","ref":"VariableDeclSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenDeclAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"id":352,"range":{"endColumn":29,"startColumn":5,"startRow":41,"endRow":41},"type":"other"},{"text":"VariableDecl","parent":352,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttributes"},{"value":{"text":"AttributeListSyntax"},"name":"attributes","ref":"AttributeListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenAttributesAndModifiers"},{"value":{"text":"DeclModifierListSyntax"},"name":"modifiers","ref":"DeclModifierListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenModifiersAndBindingSpecifier"},{"value":{"text":"var","kind":"keyword(SwiftSyntax.Keyword.var)"},"name":"bindingSpecifier"},{"value":{"text":"nil"},"name":"unexpectedBetweenBindingSpecifierAndBindings"},{"value":{"text":"PatternBindingListSyntax"},"name":"bindings","ref":"PatternBindingListSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterBindings"}],"id":353,"range":{"endColumn":29,"startColumn":5,"startRow":41,"endRow":41},"type":"decl"},{"text":"AttributeList","parent":353,"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"id":354,"range":{"endColumn":22,"startColumn":22,"startRow":40,"endRow":40},"type":"collection"},{"text":"DeclModifierList","parent":353,"structure":[{"value":{"text":"DeclModifierSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"id":355,"range":{"endColumn":22,"startColumn":22,"startRow":40,"endRow":40},"type":"collection"},{"type":"other","text":"var","token":{"kind":"keyword(SwiftSyntax.Keyword.var)","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"␣<\/span>"},"range":{"endColumn":8,"startColumn":5,"startRow":41,"endRow":41},"parent":353,"structure":[],"id":356},{"text":"PatternBindingList","parent":353,"structure":[{"value":{"text":"PatternBindingSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"id":357,"range":{"endColumn":29,"startColumn":9,"startRow":41,"endRow":41},"type":"collection"},{"text":"PatternBinding","parent":357,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforePattern"},{"value":{"text":"IdentifierPatternSyntax"},"name":"pattern","ref":"IdentifierPatternSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenPatternAndTypeAnnotation"},{"value":{"text":"TypeAnnotationSyntax"},"name":"typeAnnotation","ref":"TypeAnnotationSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAnnotationAndInitializer"},{"value":{"text":"nil"},"name":"initializer"},{"value":{"text":"nil"},"name":"unexpectedBetweenInitializerAndAccessorBlock"},{"value":{"text":"nil"},"name":"accessorBlock"},{"value":{"text":"nil"},"name":"unexpectedBetweenAccessorBlockAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"id":358,"range":{"endColumn":29,"startColumn":9,"startRow":41,"endRow":41},"type":"other"},{"text":"IdentifierPattern","parent":358,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeIdentifier"},{"value":{"text":"batteryLevel","kind":"identifier("batteryLevel")"},"name":"identifier"},{"value":{"text":"nil"},"name":"unexpectedAfterIdentifier"}],"id":359,"range":{"endColumn":21,"startColumn":9,"startRow":41,"endRow":41},"type":"pattern"},{"type":"other","text":"batteryLevel","token":{"kind":"identifier("batteryLevel")","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":21,"startColumn":9,"startRow":41,"endRow":41},"parent":359,"structure":[],"id":360},{"text":"TypeAnnotation","parent":358,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeColon"},{"value":{"text":":","kind":"colon"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndType"},{"value":{"text":"IdentifierTypeSyntax"},"name":"type","ref":"IdentifierTypeSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterType"}],"id":361,"range":{"endColumn":29,"startColumn":21,"startRow":41,"endRow":41},"type":"other"},{"type":"other","text":":","token":{"kind":"colon","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"endColumn":22,"startColumn":21,"startRow":41,"endRow":41},"parent":361,"structure":[],"id":362},{"text":"IdentifierType","parent":361,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeName"},{"value":{"text":"Double","kind":"identifier("Double")"},"name":"name"},{"value":{"text":"nil"},"name":"unexpectedBetweenNameAndGenericArgumentClause"},{"value":{"text":"nil"},"name":"genericArgumentClause"},{"value":{"text":"nil"},"name":"unexpectedAfterGenericArgumentClause"}],"id":363,"range":{"endColumn":29,"startColumn":23,"startRow":41,"endRow":41},"type":"type"},{"type":"other","text":"Double","token":{"kind":"identifier("Double")","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":29,"startColumn":23,"startRow":41,"endRow":41},"parent":363,"structure":[],"id":364},{"text":"MemberBlockItem","parent":321,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeDecl"},{"value":{"text":"FunctionDeclSyntax"},"name":"decl","ref":"FunctionDeclSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenDeclAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"id":365,"range":{"endColumn":6,"startColumn":5,"startRow":43,"endRow":46},"type":"other"},{"text":"FunctionDecl","parent":365,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttributes"},{"value":{"text":"AttributeListSyntax"},"name":"attributes","ref":"AttributeListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenAttributesAndModifiers"},{"value":{"text":"DeclModifierListSyntax"},"name":"modifiers","ref":"DeclModifierListSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenModifiersAndFuncKeyword"},{"value":{"text":"func","kind":"keyword(SwiftSyntax.Keyword.func)"},"name":"funcKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenFuncKeywordAndName"},{"value":{"text":"charge","kind":"identifier("charge")"},"name":"name"},{"value":{"text":"nil"},"name":"unexpectedBetweenNameAndGenericParameterClause"},{"value":{"text":"nil"},"name":"genericParameterClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenGenericParameterClauseAndSignature"},{"value":{"text":"FunctionSignatureSyntax"},"name":"signature","ref":"FunctionSignatureSyntax"},{"value":{"text":"nil"},"name":"unexpectedBetweenSignatureAndGenericWhereClause"},{"value":{"text":"nil"},"name":"genericWhereClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenGenericWhereClauseAndBody"},{"value":{"text":"CodeBlockSyntax"},"name":"body","ref":"CodeBlockSyntax"},{"value":{"text":"nil"},"name":"unexpectedAfterBody"}],"id":366,"range":{"endColumn":6,"startColumn":5,"startRow":43,"endRow":46},"type":"decl"},{"text":"AttributeList","parent":366,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"id":367,"range":{"startRow":41,"startColumn":29,"endColumn":29,"endRow":41},"type":"collection"},{"text":"DeclModifierList","parent":366,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":368,"range":{"startRow":41,"startColumn":29,"endColumn":29,"endRow":41},"type":"collection"},{"type":"other","text":"func","token":{"leadingTrivia":"↲<\/span>↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.func)"},"range":{"startRow":43,"startColumn":5,"endColumn":9,"endRow":43},"parent":366,"structure":[],"id":369},{"type":"other","text":"charge","token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("charge")"},"range":{"startRow":43,"startColumn":10,"endColumn":16,"endRow":43},"parent":366,"structure":[],"id":370},{"text":"FunctionSignature","parent":366,"structure":[{"name":"unexpectedBeforeParameterClause","value":{"text":"nil"}},{"name":"parameterClause","value":{"text":"FunctionParameterClauseSyntax"},"ref":"FunctionParameterClauseSyntax"},{"name":"unexpectedBetweenParameterClauseAndEffectSpecifiers","value":{"text":"nil"}},{"name":"effectSpecifiers","value":{"text":"nil"}},{"name":"unexpectedBetweenEffectSpecifiersAndReturnClause","value":{"text":"nil"}},{"name":"returnClause","value":{"text":"nil"}},{"name":"unexpectedAfterReturnClause","value":{"text":"nil"}}],"id":371,"range":{"startRow":43,"startColumn":16,"endColumn":18,"endRow":43},"type":"other"},{"text":"FunctionParameterClause","parent":371,"structure":[{"name":"unexpectedBeforeLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndParameters","value":{"text":"nil"}},{"name":"parameters","value":{"text":"FunctionParameterListSyntax"},"ref":"FunctionParameterListSyntax"},{"name":"unexpectedBetweenParametersAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}],"id":372,"range":{"startRow":43,"startColumn":16,"endColumn":18,"endRow":43},"type":"other"},{"type":"other","text":"(","token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"range":{"startRow":43,"startColumn":16,"endColumn":17,"endRow":43},"parent":372,"structure":[],"id":373},{"text":"FunctionParameterList","parent":372,"structure":[{"name":"Element","value":{"text":"FunctionParameterSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":374,"range":{"startRow":43,"startColumn":17,"endColumn":17,"endRow":43},"type":"collection"},{"type":"other","text":")","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"rightParen"},"range":{"startRow":43,"startColumn":17,"endColumn":18,"endRow":43},"parent":372,"structure":[],"id":375},{"text":"CodeBlock","parent":366,"structure":[{"name":"unexpectedBeforeLeftBrace","value":{"text":"nil"}},{"name":"leftBrace","value":{"text":"{","kind":"leftBrace"}},{"name":"unexpectedBetweenLeftBraceAndStatements","value":{"text":"nil"}},{"name":"statements","value":{"text":"CodeBlockItemListSyntax"},"ref":"CodeBlockItemListSyntax"},{"name":"unexpectedBetweenStatementsAndRightBrace","value":{"text":"nil"}},{"name":"rightBrace","value":{"text":"}","kind":"rightBrace"}},{"name":"unexpectedAfterRightBrace","value":{"text":"nil"}}],"id":376,"range":{"startRow":43,"startColumn":19,"endColumn":6,"endRow":46},"type":"other"},{"type":"other","text":"{","token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftBrace"},"range":{"startRow":43,"startColumn":19,"endColumn":20,"endRow":43},"parent":376,"structure":[],"id":377},{"text":"CodeBlockItemList","parent":376,"structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"2"}}],"id":378,"range":{"startRow":44,"startColumn":9,"endColumn":29,"endRow":45},"type":"collection"},{"text":"CodeBlockItem","parent":378,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"FunctionCallExprSyntax"},"ref":"FunctionCallExprSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":379,"range":{"startRow":44,"startColumn":9,"endColumn":51,"endRow":44},"type":"other"},{"text":"FunctionCallExpr","parent":379,"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"name":"arguments","value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax"},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"},"ref":"MultipleTrailingClosureElementListSyntax"},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"id":380,"range":{"startRow":44,"startColumn":9,"endColumn":51,"endRow":44},"type":"expr"},{"text":"DeclReferenceExpr","parent":380,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"print","kind":"identifier("print")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":381,"range":{"startRow":44,"startColumn":9,"endColumn":14,"endRow":44},"type":"expr"},{"type":"other","text":"print","token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"","kind":"identifier("print")"},"range":{"startRow":44,"startColumn":9,"endColumn":14,"endRow":44},"parent":381,"structure":[],"id":382},{"type":"other","text":"(","token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"range":{"startRow":44,"startColumn":14,"endColumn":15,"endRow":44},"parent":380,"structure":[],"id":383},{"text":"LabeledExprList","parent":380,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":384,"range":{"startRow":44,"startColumn":15,"endColumn":50,"endRow":44},"type":"collection"},{"text":"LabeledExpr","parent":384,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":385,"range":{"startRow":44,"startColumn":15,"endColumn":50,"endRow":44},"type":"other"},{"text":"StringLiteralExpr","parent":385,"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"name":"segments","value":{"text":"StringLiteralSegmentListSyntax"},"ref":"StringLiteralSegmentListSyntax"},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"id":386,"range":{"startRow":44,"startColumn":15,"endColumn":50,"endRow":44},"type":"expr"},{"type":"other","text":""","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"range":{"startRow":44,"startColumn":15,"endColumn":16,"endRow":44},"parent":386,"structure":[],"id":387},{"text":"StringLiteralSegmentList","parent":386,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"3"}}],"id":388,"range":{"startRow":44,"startColumn":16,"endColumn":49,"endRow":44},"type":"collection"},{"text":"StringSegment","parent":388,"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":"Charging ","kind":"stringSegment("Charging ")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"id":389,"range":{"startRow":44,"startColumn":16,"endColumn":25,"endRow":44},"type":"other"},{"type":"other","text":"Charging␣<\/span>","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("Charging ")"},"range":{"startRow":44,"startColumn":16,"endColumn":25,"endRow":44},"parent":389,"structure":[],"id":390},{"text":"ExpressionSegment","parent":388,"structure":[{"name":"unexpectedBeforeBackslash","value":{"text":"nil"}},{"name":"backslash","value":{"text":"\\","kind":"backslash"}},{"name":"unexpectedBetweenBackslashAndPounds","value":{"text":"nil"}},{"name":"pounds","value":{"text":"nil"}},{"name":"unexpectedBetweenPoundsAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndExpressions","value":{"text":"nil"}},{"name":"expressions","value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax"},{"name":"unexpectedBetweenExpressionsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}],"id":391,"range":{"startRow":44,"startColumn":25,"endColumn":33,"endRow":44},"type":"other"},{"type":"other","text":"\\","token":{"leadingTrivia":"","trailingTrivia":"","kind":"backslash"},"range":{"startRow":44,"startColumn":25,"endColumn":26,"endRow":44},"parent":391,"structure":[],"id":392},{"type":"other","text":"(","token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"range":{"startRow":44,"startColumn":26,"endColumn":27,"endRow":44},"parent":391,"structure":[],"id":393},{"text":"LabeledExprList","parent":391,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":394,"range":{"startRow":44,"startColumn":27,"endColumn":32,"endRow":44},"type":"collection"},{"text":"LabeledExpr","parent":394,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":395,"range":{"startRow":44,"startColumn":27,"endColumn":32,"endRow":44},"type":"other"},{"text":"DeclReferenceExpr","parent":395,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"brand","kind":"identifier("brand")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":396,"range":{"startRow":44,"startColumn":27,"endColumn":32,"endRow":44},"type":"expr"},{"type":"other","text":"brand","token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("brand")"},"range":{"startRow":44,"startColumn":27,"endColumn":32,"endRow":44},"parent":396,"structure":[],"id":397},{"type":"other","text":")","token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"range":{"startRow":44,"startColumn":32,"endColumn":33,"endRow":44},"parent":391,"structure":[],"id":398},{"text":"StringSegment","parent":388,"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":" electric car...","kind":"stringSegment(" electric car...")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"id":399,"range":{"startRow":44,"startColumn":33,"endColumn":49,"endRow":44},"type":"other"},{"type":"other","text":"␣<\/span>electric␣<\/span>car...","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment(" electric car...")"},"range":{"startRow":44,"startColumn":33,"endColumn":49,"endRow":44},"parent":399,"structure":[],"id":400},{"type":"other","text":""","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"range":{"startRow":44,"startColumn":49,"endColumn":50,"endRow":44},"parent":386,"structure":[],"id":401},{"type":"other","text":")","token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"range":{"startRow":44,"startColumn":50,"endColumn":51,"endRow":44},"parent":380,"structure":[],"id":402},{"text":"MultipleTrailingClosureElementList","parent":380,"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":403,"range":{"startRow":44,"startColumn":51,"endColumn":51,"endRow":44},"type":"collection"},{"text":"CodeBlockItem","parent":378,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"InfixOperatorExprSyntax"},"ref":"InfixOperatorExprSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":404,"range":{"startRow":45,"startColumn":9,"endColumn":29,"endRow":45},"type":"other"},{"text":"InfixOperatorExpr","parent":404,"structure":[{"name":"unexpectedBeforeLeftOperand","value":{"text":"nil"}},{"name":"leftOperand","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedBetweenLeftOperandAndOperator","value":{"text":"nil"}},{"name":"operator","value":{"text":"AssignmentExprSyntax"},"ref":"AssignmentExprSyntax"},{"name":"unexpectedBetweenOperatorAndRightOperand","value":{"text":"nil"}},{"name":"rightOperand","value":{"text":"FloatLiteralExprSyntax"},"ref":"FloatLiteralExprSyntax"},{"name":"unexpectedAfterRightOperand","value":{"text":"nil"}}],"id":405,"range":{"startRow":45,"startColumn":9,"endColumn":29,"endRow":45},"type":"expr"},{"text":"DeclReferenceExpr","parent":405,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"batteryLevel","kind":"identifier("batteryLevel")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":406,"range":{"startRow":45,"startColumn":9,"endColumn":21,"endRow":45},"type":"expr"},{"type":"other","text":"batteryLevel","token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"␣<\/span>","kind":"identifier("batteryLevel")"},"range":{"startRow":45,"startColumn":9,"endColumn":21,"endRow":45},"parent":406,"structure":[],"id":407},{"text":"AssignmentExpr","parent":405,"structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"text":"=","kind":"equal"}},{"name":"unexpectedAfterEqual","value":{"text":"nil"}}],"id":408,"range":{"startRow":45,"startColumn":22,"endColumn":23,"endRow":45},"type":"expr"},{"type":"other","text":"=","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"equal"},"range":{"startRow":45,"startColumn":22,"endColumn":23,"endRow":45},"parent":408,"structure":[],"id":409},{"text":"FloatLiteralExpr","parent":405,"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"100.0","kind":"floatLiteral("100.0")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"id":410,"range":{"startRow":45,"startColumn":24,"endColumn":29,"endRow":45},"type":"expr"},{"type":"other","text":"100.0","token":{"leadingTrivia":"","trailingTrivia":"","kind":"floatLiteral("100.0")"},"range":{"startRow":45,"startColumn":24,"endColumn":29,"endRow":45},"parent":410,"structure":[],"id":411},{"type":"other","text":"}","token":{"leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":"","kind":"rightBrace"},"range":{"startRow":46,"startColumn":5,"endColumn":6,"endRow":46},"parent":376,"structure":[],"id":412},{"type":"other","text":"}","token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"","kind":"rightBrace"},"range":{"startRow":47,"startColumn":1,"endColumn":2,"endRow":47},"parent":319,"structure":[],"id":413},{"text":"CodeBlockItem","parent":1,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"VariableDeclSyntax"},"ref":"VariableDeclSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":414,"range":{"startRow":50,"startColumn":1,"endColumn":60,"endRow":50},"type":"other"},{"text":"VariableDecl","parent":414,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","value":{"text":"AttributeListSyntax"},"ref":"AttributeListSyntax"},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax"},{"name":"unexpectedBetweenModifiersAndBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"text":"let","kind":"keyword(SwiftSyntax.Keyword.let)"}},{"name":"unexpectedBetweenBindingSpecifierAndBindings","value":{"text":"nil"}},{"name":"bindings","value":{"text":"PatternBindingListSyntax"},"ref":"PatternBindingListSyntax"},{"name":"unexpectedAfterBindings","value":{"text":"nil"}}],"id":415,"range":{"startRow":50,"startColumn":1,"endColumn":60,"endRow":50},"type":"decl"},{"text":"AttributeList","parent":415,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"id":416,"range":{"startRow":47,"startColumn":2,"endColumn":2,"endRow":47},"type":"collection"},{"text":"DeclModifierList","parent":415,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":417,"range":{"startRow":47,"startColumn":2,"endColumn":2,"endRow":47},"type":"collection"},{"type":"other","text":"let","token":{"leadingTrivia":"↲<\/span>↲<\/span>\/\/␣<\/span>MARK:␣<\/span>-␣<\/span>Usage␣<\/span>Example<\/span>↲<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.let)"},"range":{"startRow":50,"startColumn":1,"endColumn":4,"endRow":50},"parent":415,"structure":[],"id":418},{"text":"PatternBindingList","parent":415,"structure":[{"name":"Element","value":{"text":"PatternBindingSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":419,"range":{"startRow":50,"startColumn":5,"endColumn":60,"endRow":50},"type":"collection"},{"text":"PatternBinding","parent":419,"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"name":"pattern","value":{"text":"IdentifierPatternSyntax"},"ref":"IdentifierPatternSyntax"},{"name":"unexpectedBetweenPatternAndTypeAnnotation","value":{"text":"nil"}},{"name":"typeAnnotation","value":{"text":"nil"}},{"name":"unexpectedBetweenTypeAnnotationAndInitializer","value":{"text":"nil"}},{"name":"initializer","value":{"text":"InitializerClauseSyntax"},"ref":"InitializerClauseSyntax"},{"name":"unexpectedBetweenInitializerAndAccessorBlock","value":{"text":"nil"}},{"name":"accessorBlock","value":{"text":"nil"}},{"name":"unexpectedBetweenAccessorBlockAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":420,"range":{"startRow":50,"startColumn":5,"endColumn":60,"endRow":50},"type":"other"},{"text":"IdentifierPattern","parent":420,"structure":[{"name":"unexpectedBeforeIdentifier","value":{"text":"nil"}},{"name":"identifier","value":{"text":"tesla","kind":"identifier("tesla")"}},{"name":"unexpectedAfterIdentifier","value":{"text":"nil"}}],"id":421,"range":{"startRow":50,"startColumn":5,"endColumn":10,"endRow":50},"type":"pattern"},{"type":"other","text":"tesla","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"identifier("tesla")"},"range":{"startRow":50,"startColumn":5,"endColumn":10,"endRow":50},"parent":421,"structure":[],"id":422},{"text":"InitializerClause","parent":420,"structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"text":"=","kind":"equal"}},{"name":"unexpectedBetweenEqualAndValue","value":{"text":"nil"}},{"name":"value","value":{"text":"FunctionCallExprSyntax"},"ref":"FunctionCallExprSyntax"},{"name":"unexpectedAfterValue","value":{"text":"nil"}}],"id":423,"range":{"startRow":50,"startColumn":11,"endColumn":60,"endRow":50},"type":"other"},{"type":"other","text":"=","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"equal"},"range":{"startRow":50,"startColumn":11,"endColumn":12,"endRow":50},"parent":423,"structure":[],"id":424},{"text":"FunctionCallExpr","parent":423,"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"name":"arguments","value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax"},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"},"ref":"MultipleTrailingClosureElementListSyntax"},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"id":425,"range":{"startRow":50,"startColumn":13,"endColumn":60,"endRow":50},"type":"expr"},{"text":"DeclReferenceExpr","parent":425,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"ElectricCar","kind":"identifier("ElectricCar")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":426,"range":{"startRow":50,"startColumn":13,"endColumn":24,"endRow":50},"type":"expr"},{"type":"other","text":"ElectricCar","token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("ElectricCar")"},"range":{"startRow":50,"startColumn":13,"endColumn":24,"endRow":50},"parent":426,"structure":[],"id":427},{"type":"other","text":"(","token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"range":{"startRow":50,"startColumn":24,"endColumn":25,"endRow":50},"parent":425,"structure":[],"id":428},{"text":"LabeledExprList","parent":425,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"2"}}],"id":429,"range":{"startRow":50,"startColumn":25,"endColumn":59,"endRow":50},"type":"collection"},{"text":"LabeledExpr","parent":429,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"brand","kind":"identifier("brand")"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":":","kind":"colon"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":",","kind":"comma"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":430,"range":{"startRow":50,"startColumn":25,"endColumn":40,"endRow":50},"type":"other"},{"type":"other","text":"brand","token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("brand")"},"range":{"startRow":50,"startColumn":25,"endColumn":30,"endRow":50},"parent":430,"structure":[],"id":431},{"type":"other","text":":","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"colon"},"range":{"startRow":50,"startColumn":30,"endColumn":31,"endRow":50},"parent":430,"structure":[],"id":432},{"text":"StringLiteralExpr","parent":430,"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"name":"segments","value":{"text":"StringLiteralSegmentListSyntax"},"ref":"StringLiteralSegmentListSyntax"},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"id":433,"range":{"startRow":50,"startColumn":32,"endColumn":39,"endRow":50},"type":"expr"},{"type":"other","text":""","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"range":{"startRow":50,"startColumn":32,"endColumn":33,"endRow":50},"parent":433,"structure":[],"id":434},{"text":"StringLiteralSegmentList","parent":433,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"1"}}],"id":435,"range":{"startRow":50,"startColumn":33,"endColumn":38,"endRow":50},"type":"collection"},{"text":"StringSegment","parent":435,"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":"Tesla","kind":"stringSegment("Tesla")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"id":436,"range":{"startRow":50,"startColumn":33,"endColumn":38,"endRow":50},"type":"other"},{"type":"other","text":"Tesla","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("Tesla")"},"range":{"startRow":50,"startColumn":33,"endColumn":38,"endRow":50},"parent":436,"structure":[],"id":437},{"type":"other","text":""","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"range":{"startRow":50,"startColumn":38,"endColumn":39,"endRow":50},"parent":433,"structure":[],"id":438},{"type":"other","text":",","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"comma"},"range":{"startRow":50,"startColumn":39,"endColumn":40,"endRow":50},"parent":430,"structure":[],"id":439},{"text":"LabeledExpr","parent":429,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"batteryLevel","kind":"identifier("batteryLevel")"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":":","kind":"colon"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"FloatLiteralExprSyntax"},"ref":"FloatLiteralExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":440,"range":{"startRow":50,"startColumn":41,"endColumn":59,"endRow":50},"type":"other"},{"type":"other","text":"batteryLevel","token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("batteryLevel")"},"range":{"startRow":50,"startColumn":41,"endColumn":53,"endRow":50},"parent":440,"structure":[],"id":441},{"type":"other","text":":","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"colon"},"range":{"startRow":50,"startColumn":53,"endColumn":54,"endRow":50},"parent":440,"structure":[],"id":442},{"text":"FloatLiteralExpr","parent":440,"structure":[{"name":"unexpectedBeforeLiteral","value":{"text":"nil"}},{"name":"literal","value":{"text":"75.0","kind":"floatLiteral("75.0")"}},{"name":"unexpectedAfterLiteral","value":{"text":"nil"}}],"id":443,"range":{"startRow":50,"startColumn":55,"endColumn":59,"endRow":50},"type":"expr"},{"type":"other","text":"75.0","token":{"leadingTrivia":"","trailingTrivia":"","kind":"floatLiteral("75.0")"},"range":{"startRow":50,"startColumn":55,"endColumn":59,"endRow":50},"parent":443,"structure":[],"id":444},{"type":"other","text":")","token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"range":{"startRow":50,"startColumn":59,"endColumn":60,"endRow":50},"parent":425,"structure":[],"id":445},{"text":"MultipleTrailingClosureElementList","parent":425,"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":446,"range":{"startRow":50,"startColumn":60,"endColumn":60,"endRow":50},"type":"collection"},{"text":"CodeBlockItem","parent":1,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"VariableDeclSyntax"},"ref":"VariableDeclSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":447,"range":{"startRow":51,"startColumn":1,"endColumn":34,"endRow":51},"type":"other"},{"text":"VariableDecl","parent":447,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","value":{"text":"AttributeListSyntax"},"ref":"AttributeListSyntax"},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax"},{"name":"unexpectedBetweenModifiersAndBindingSpecifier","value":{"text":"nil"}},{"name":"bindingSpecifier","value":{"text":"let","kind":"keyword(SwiftSyntax.Keyword.let)"}},{"name":"unexpectedBetweenBindingSpecifierAndBindings","value":{"text":"nil"}},{"name":"bindings","value":{"text":"PatternBindingListSyntax"},"ref":"PatternBindingListSyntax"},{"name":"unexpectedAfterBindings","value":{"text":"nil"}}],"id":448,"range":{"startRow":51,"startColumn":1,"endColumn":34,"endRow":51},"type":"decl"},{"text":"AttributeList","parent":448,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"id":449,"range":{"startRow":50,"startColumn":60,"endColumn":60,"endRow":50},"type":"collection"},{"text":"DeclModifierList","parent":448,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":450,"range":{"startRow":50,"startColumn":60,"endColumn":60,"endRow":50},"type":"collection"},{"type":"other","text":"let","token":{"leadingTrivia":"↲<\/span>","trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.let)"},"range":{"startRow":51,"startColumn":1,"endColumn":4,"endRow":51},"parent":448,"structure":[],"id":451},{"text":"PatternBindingList","parent":448,"structure":[{"name":"Element","value":{"text":"PatternBindingSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":452,"range":{"startRow":51,"startColumn":5,"endColumn":34,"endRow":51},"type":"collection"},{"text":"PatternBinding","parent":452,"structure":[{"name":"unexpectedBeforePattern","value":{"text":"nil"}},{"name":"pattern","value":{"text":"IdentifierPatternSyntax"},"ref":"IdentifierPatternSyntax"},{"name":"unexpectedBetweenPatternAndTypeAnnotation","value":{"text":"nil"}},{"name":"typeAnnotation","value":{"text":"nil"}},{"name":"unexpectedBetweenTypeAnnotationAndInitializer","value":{"text":"nil"}},{"name":"initializer","value":{"text":"InitializerClauseSyntax"},"ref":"InitializerClauseSyntax"},{"name":"unexpectedBetweenInitializerAndAccessorBlock","value":{"text":"nil"}},{"name":"accessorBlock","value":{"text":"nil"}},{"name":"unexpectedBetweenAccessorBlockAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":453,"range":{"startRow":51,"startColumn":5,"endColumn":34,"endRow":51},"type":"other"},{"text":"IdentifierPattern","parent":453,"structure":[{"name":"unexpectedBeforeIdentifier","value":{"text":"nil"}},{"name":"identifier","value":{"text":"toyota","kind":"identifier("toyota")"}},{"name":"unexpectedAfterIdentifier","value":{"text":"nil"}}],"id":454,"range":{"startRow":51,"startColumn":5,"endColumn":11,"endRow":51},"type":"pattern"},{"type":"other","text":"toyota","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"identifier("toyota")"},"range":{"startRow":51,"startColumn":5,"endColumn":11,"endRow":51},"parent":454,"structure":[],"id":455},{"text":"InitializerClause","parent":453,"structure":[{"name":"unexpectedBeforeEqual","value":{"text":"nil"}},{"name":"equal","value":{"text":"=","kind":"equal"}},{"name":"unexpectedBetweenEqualAndValue","value":{"text":"nil"}},{"name":"value","value":{"text":"FunctionCallExprSyntax"},"ref":"FunctionCallExprSyntax"},{"name":"unexpectedAfterValue","value":{"text":"nil"}}],"id":456,"range":{"startRow":51,"startColumn":12,"endColumn":34,"endRow":51},"type":"other"},{"type":"other","text":"=","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"equal"},"range":{"startRow":51,"startColumn":12,"endColumn":13,"endRow":51},"parent":456,"structure":[],"id":457},{"text":"FunctionCallExpr","parent":456,"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax"},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"name":"arguments","value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax"},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"},"ref":"MultipleTrailingClosureElementListSyntax"},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"id":458,"range":{"startRow":51,"startColumn":14,"endColumn":34,"endRow":51},"type":"expr"},{"text":"DeclReferenceExpr","parent":458,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"Car","kind":"identifier("Car")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":459,"range":{"startRow":51,"startColumn":14,"endColumn":17,"endRow":51},"type":"expr"},{"type":"other","text":"Car","token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("Car")"},"range":{"startRow":51,"startColumn":14,"endColumn":17,"endRow":51},"parent":459,"structure":[],"id":460},{"type":"other","text":"(","token":{"leadingTrivia":"","trailingTrivia":"","kind":"leftParen"},"range":{"startRow":51,"startColumn":17,"endColumn":18,"endRow":51},"parent":458,"structure":[],"id":461},{"text":"LabeledExprList","parent":458,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":462,"range":{"startRow":51,"startColumn":18,"endColumn":33,"endRow":51},"type":"collection"},{"text":"LabeledExpr","parent":462,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"brand","kind":"identifier("brand")"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":":","kind":"colon"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"name":"expression","value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax"},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":463,"range":{"startRow":51,"startColumn":18,"endColumn":33,"endRow":51},"type":"other"},{"type":"other","text":"brand","token":{"leadingTrivia":"","trailingTrivia":"","kind":"identifier("brand")"},"range":{"startRow":51,"startColumn":18,"endColumn":23,"endRow":51},"parent":463,"structure":[],"id":464},{"type":"other","text":":","token":{"leadingTrivia":"","trailingTrivia":"␣<\/span>","kind":"colon"},"range":{"startRow":51,"startColumn":23,"endColumn":24,"endRow":51},"parent":463,"structure":[],"id":465},{"text":"StringLiteralExpr","parent":463,"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"name":"segments","value":{"text":"StringLiteralSegmentListSyntax"},"ref":"StringLiteralSegmentListSyntax"},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"id":466,"range":{"startRow":51,"startColumn":25,"endColumn":33,"endRow":51},"type":"expr"},{"type":"other","text":""","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"range":{"startRow":51,"startColumn":25,"endColumn":26,"endRow":51},"parent":466,"structure":[],"id":467},{"text":"StringLiteralSegmentList","parent":466,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"1"}}],"id":468,"range":{"startRow":51,"startColumn":26,"endColumn":32,"endRow":51},"type":"collection"},{"text":"StringSegment","parent":468,"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":"Toyota","kind":"stringSegment("Toyota")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"id":469,"range":{"startRow":51,"startColumn":26,"endColumn":32,"endRow":51},"type":"other"},{"type":"other","text":"Toyota","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringSegment("Toyota")"},"range":{"startRow":51,"startColumn":26,"endColumn":32,"endRow":51},"parent":469,"structure":[],"id":470},{"type":"other","text":""","token":{"leadingTrivia":"","trailingTrivia":"","kind":"stringQuote"},"range":{"startRow":51,"startColumn":32,"endColumn":33,"endRow":51},"parent":466,"structure":[],"id":471},{"type":"other","text":")","token":{"leadingTrivia":"","trailingTrivia":"","kind":"rightParen"},"range":{"startRow":51,"startColumn":33,"endColumn":34,"endRow":51},"parent":458,"structure":[],"id":472},{"text":"MultipleTrailingClosureElementList","parent":458,"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":473,"range":{"startRow":51,"startColumn":34,"endColumn":34,"endRow":51},"type":"collection"},{"text":"CodeBlockItem","parent":1,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"name":"item","value":{"text":"FunctionDeclSyntax"},"ref":"FunctionDeclSyntax"},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":474,"range":{"startRow":54,"startColumn":1,"endColumn":2,"endRow":59},"type":"other"},{"text":"FunctionDecl","parent":474,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"name":"attributes","value":{"text":"AttributeListSyntax"},"ref":"AttributeListSyntax"},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"name":"modifiers","value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax"},{"name":"unexpectedBetweenModifiersAndFuncKeyword","value":{"text":"nil"}},{"name":"funcKeyword","value":{"text":"func","kind":"keyword(SwiftSyntax.Keyword.func)"}},{"name":"unexpectedBetweenFuncKeywordAndName","value":{"text":"nil"}},{"name":"name","value":{"text":"demonstrateVehicle","kind":"identifier("demonstrateVehicle")"}},{"name":"unexpectedBetweenNameAndGenericParameterClause","value":{"text":"nil"}},{"name":"genericParameterClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericParameterClauseAndSignature","value":{"text":"nil"}},{"name":"signature","value":{"text":"FunctionSignatureSyntax"},"ref":"FunctionSignatureSyntax"},{"name":"unexpectedBetweenSignatureAndGenericWhereClause","value":{"text":"nil"}},{"name":"genericWhereClause","value":{"text":"nil"}},{"name":"unexpectedBetweenGenericWhereClauseAndBody","value":{"text":"nil"}},{"name":"body","value":{"text":"CodeBlockSyntax"},"ref":"CodeBlockSyntax"},{"name":"unexpectedAfterBody","value":{"text":"nil"}}],"id":475,"range":{"startRow":54,"startColumn":1,"endColumn":2,"endRow":59},"type":"decl"},{"text":"AttributeList","parent":475,"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"id":476,"range":{"endRow":51,"endColumn":34,"startRow":51,"startColumn":34},"type":"collection"},{"text":"DeclModifierList","parent":475,"structure":[{"value":{"text":"DeclModifierSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"id":477,"range":{"endRow":51,"endColumn":34,"startRow":51,"startColumn":34},"type":"collection"},{"type":"other","text":"func","token":{"trailingTrivia":"␣<\/span>","kind":"keyword(SwiftSyntax.Keyword.func)","leadingTrivia":"↲<\/span>↲<\/span>\/\/␣<\/span>Demonstrate␣<\/span>protocol␣<\/span>usage<\/span>↲<\/span>"},"range":{"endRow":54,"endColumn":5,"startRow":54,"startColumn":1},"parent":475,"structure":[],"id":478},{"type":"other","text":"demonstrateVehicle","token":{"trailingTrivia":"","kind":"identifier("demonstrateVehicle")","leadingTrivia":""},"range":{"endRow":54,"endColumn":24,"startRow":54,"startColumn":6},"parent":475,"structure":[],"id":479},{"text":"FunctionSignature","parent":475,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeParameterClause"},{"value":{"text":"FunctionParameterClauseSyntax"},"ref":"FunctionParameterClauseSyntax","name":"parameterClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenParameterClauseAndEffectSpecifiers"},{"value":{"text":"nil"},"name":"effectSpecifiers"},{"value":{"text":"nil"},"name":"unexpectedBetweenEffectSpecifiersAndReturnClause"},{"value":{"text":"nil"},"name":"returnClause"},{"value":{"text":"nil"},"name":"unexpectedAfterReturnClause"}],"id":480,"range":{"endRow":54,"endColumn":44,"startRow":54,"startColumn":24},"type":"other"},{"text":"FunctionParameterClause","parent":480,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftParen"},{"value":{"kind":"leftParen","text":"("},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndParameters"},{"value":{"text":"FunctionParameterListSyntax"},"ref":"FunctionParameterListSyntax","name":"parameters"},{"value":{"text":"nil"},"name":"unexpectedBetweenParametersAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"id":481,"range":{"endRow":54,"endColumn":44,"startRow":54,"startColumn":24},"type":"other"},{"type":"other","text":"(","token":{"trailingTrivia":"","kind":"leftParen","leadingTrivia":""},"range":{"endRow":54,"endColumn":25,"startRow":54,"startColumn":24},"parent":481,"structure":[],"id":482},{"text":"FunctionParameterList","parent":481,"structure":[{"value":{"text":"FunctionParameterSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"id":483,"range":{"endRow":54,"endColumn":43,"startRow":54,"startColumn":25},"type":"collection"},{"text":"FunctionParameter","parent":483,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttributes"},{"value":{"text":"AttributeListSyntax"},"ref":"AttributeListSyntax","name":"attributes"},{"value":{"text":"nil"},"name":"unexpectedBetweenAttributesAndModifiers"},{"value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax","name":"modifiers"},{"value":{"text":"nil"},"name":"unexpectedBetweenModifiersAndFirstName"},{"value":{"kind":"wildcard","text":"_"},"name":"firstName"},{"value":{"text":"nil"},"name":"unexpectedBetweenFirstNameAndSecondName"},{"value":{"kind":"identifier("vehicle")","text":"vehicle"},"name":"secondName"},{"value":{"text":"nil"},"name":"unexpectedBetweenSecondNameAndColon"},{"value":{"kind":"colon","text":":"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndType"},{"value":{"text":"IdentifierTypeSyntax"},"ref":"IdentifierTypeSyntax","name":"type"},{"value":{"text":"nil"},"name":"unexpectedBetweenTypeAndEllipsis"},{"value":{"text":"nil"},"name":"ellipsis"},{"value":{"text":"nil"},"name":"unexpectedBetweenEllipsisAndDefaultValue"},{"value":{"text":"nil"},"name":"defaultValue"},{"value":{"text":"nil"},"name":"unexpectedBetweenDefaultValueAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"id":484,"range":{"endRow":54,"endColumn":43,"startRow":54,"startColumn":25},"type":"other"},{"text":"AttributeList","parent":484,"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"id":485,"range":{"endRow":54,"endColumn":25,"startRow":54,"startColumn":25},"type":"collection"},{"text":"DeclModifierList","parent":484,"structure":[{"value":{"text":"DeclModifierSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"id":486,"range":{"endRow":54,"endColumn":25,"startRow":54,"startColumn":25},"type":"collection"},{"type":"other","text":"_","token":{"trailingTrivia":"␣<\/span>","kind":"wildcard","leadingTrivia":""},"range":{"endRow":54,"endColumn":26,"startRow":54,"startColumn":25},"parent":484,"structure":[],"id":487},{"type":"other","text":"vehicle","token":{"trailingTrivia":"","kind":"identifier("vehicle")","leadingTrivia":""},"range":{"endRow":54,"endColumn":34,"startRow":54,"startColumn":27},"parent":484,"structure":[],"id":488},{"type":"other","text":":","token":{"trailingTrivia":"␣<\/span>","kind":"colon","leadingTrivia":""},"range":{"endRow":54,"endColumn":35,"startRow":54,"startColumn":34},"parent":484,"structure":[],"id":489},{"text":"IdentifierType","parent":484,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeName"},{"value":{"kind":"identifier("Vehicle")","text":"Vehicle"},"name":"name"},{"value":{"text":"nil"},"name":"unexpectedBetweenNameAndGenericArgumentClause"},{"value":{"text":"nil"},"name":"genericArgumentClause"},{"value":{"text":"nil"},"name":"unexpectedAfterGenericArgumentClause"}],"id":490,"range":{"endRow":54,"endColumn":43,"startRow":54,"startColumn":36},"type":"type"},{"type":"other","text":"Vehicle","token":{"trailingTrivia":"","kind":"identifier("Vehicle")","leadingTrivia":""},"range":{"endRow":54,"endColumn":43,"startRow":54,"startColumn":36},"parent":490,"structure":[],"id":491},{"type":"other","text":")","token":{"trailingTrivia":"␣<\/span>","kind":"rightParen","leadingTrivia":""},"range":{"endRow":54,"endColumn":44,"startRow":54,"startColumn":43},"parent":481,"structure":[],"id":492},{"text":"CodeBlock","parent":475,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLeftBrace"},{"value":{"kind":"leftBrace","text":"{"},"name":"leftBrace"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftBraceAndStatements"},{"value":{"text":"CodeBlockItemListSyntax"},"ref":"CodeBlockItemListSyntax","name":"statements"},{"value":{"text":"nil"},"name":"unexpectedBetweenStatementsAndRightBrace"},{"value":{"kind":"rightBrace","text":"}"},"name":"rightBrace"},{"value":{"text":"nil"},"name":"unexpectedAfterRightBrace"}],"id":493,"range":{"endRow":59,"endColumn":2,"startRow":54,"startColumn":45},"type":"other"},{"type":"other","text":"{","token":{"trailingTrivia":"","kind":"leftBrace","leadingTrivia":""},"range":{"endRow":54,"endColumn":46,"startRow":54,"startColumn":45},"parent":493,"structure":[],"id":494},{"text":"CodeBlockItemList","parent":493,"structure":[{"value":{"text":"CodeBlockItemSyntax"},"name":"Element"},{"value":{"text":"4"},"name":"Count"}],"id":495,"range":{"endRow":58,"endColumn":19,"startRow":55,"startColumn":5},"type":"collection"},{"text":"CodeBlockItem","parent":495,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"FunctionCallExprSyntax"},"ref":"FunctionCallExprSyntax","name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"id":496,"range":{"endRow":55,"endColumn":45,"startRow":55,"startColumn":5},"type":"other"},{"text":"FunctionCallExpr","parent":496,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"calledExpression"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"kind":"leftParen","text":"("},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax","name":"arguments"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"value":{"text":"MultipleTrailingClosureElementListSyntax"},"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}],"id":497,"range":{"endRow":55,"endColumn":45,"startRow":55,"startColumn":5},"type":"expr"},{"text":"DeclReferenceExpr","parent":497,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("print")","text":"print"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"id":498,"range":{"endRow":55,"endColumn":10,"startRow":55,"startColumn":5},"type":"expr"},{"type":"other","text":"print","token":{"trailingTrivia":"","kind":"identifier("print")","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"range":{"endRow":55,"endColumn":10,"startRow":55,"startColumn":5},"parent":498,"structure":[],"id":499},{"type":"other","text":"(","token":{"trailingTrivia":"","kind":"leftParen","leadingTrivia":""},"range":{"endRow":55,"endColumn":11,"startRow":55,"startColumn":10},"parent":497,"structure":[],"id":500},{"text":"LabeledExprList","parent":497,"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"id":501,"range":{"endRow":55,"endColumn":44,"startRow":55,"startColumn":11},"type":"collection"},{"text":"LabeledExpr","parent":501,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"id":502,"range":{"endRow":55,"endColumn":44,"startRow":55,"startColumn":11},"type":"other"},{"text":"StringLiteralExpr","parent":502,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"kind":"stringQuote","text":"""},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"value":{"text":"StringLiteralSegmentListSyntax"},"ref":"StringLiteralSegmentListSyntax","name":"segments"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"kind":"stringQuote","text":"""},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"id":503,"range":{"endRow":55,"endColumn":44,"startRow":55,"startColumn":11},"type":"expr"},{"type":"other","text":""","token":{"trailingTrivia":"","kind":"stringQuote","leadingTrivia":""},"range":{"endRow":55,"endColumn":12,"startRow":55,"startColumn":11},"parent":503,"structure":[],"id":504},{"text":"StringLiteralSegmentList","parent":503,"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"3"},"name":"Count"}],"id":505,"range":{"endRow":55,"endColumn":43,"startRow":55,"startColumn":12},"type":"collection"},{"text":"StringSegment","parent":505,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"kind":"stringSegment("Vehicle brand: ")","text":"Vehicle brand: "},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"id":506,"range":{"endRow":55,"endColumn":27,"startRow":55,"startColumn":12},"type":"other"},{"type":"other","text":"Vehicle␣<\/span>brand:␣<\/span>","token":{"trailingTrivia":"","kind":"stringSegment("Vehicle brand: ")","leadingTrivia":""},"range":{"endRow":55,"endColumn":27,"startRow":55,"startColumn":12},"parent":506,"structure":[],"id":507},{"text":"ExpressionSegment","parent":505,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBackslash"},{"value":{"kind":"backslash","text":"\\"},"name":"backslash"},{"value":{"text":"nil"},"name":"unexpectedBetweenBackslashAndPounds"},{"value":{"text":"nil"},"name":"pounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenPoundsAndLeftParen"},{"value":{"kind":"leftParen","text":"("},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndExpressions"},{"value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax","name":"expressions"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"id":508,"range":{"endRow":55,"endColumn":43,"startRow":55,"startColumn":27},"type":"other"},{"type":"other","text":"\\","token":{"trailingTrivia":"","kind":"backslash","leadingTrivia":""},"range":{"endRow":55,"endColumn":28,"startRow":55,"startColumn":27},"parent":508,"structure":[],"id":509},{"type":"other","text":"(","token":{"trailingTrivia":"","kind":"leftParen","leadingTrivia":""},"range":{"endRow":55,"endColumn":29,"startRow":55,"startColumn":28},"parent":508,"structure":[],"id":510},{"text":"LabeledExprList","parent":508,"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"id":511,"range":{"endRow":55,"endColumn":42,"startRow":55,"startColumn":29},"type":"collection"},{"text":"LabeledExpr","parent":511,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"MemberAccessExprSyntax"},"ref":"MemberAccessExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"id":512,"range":{"endRow":55,"endColumn":42,"startRow":55,"startColumn":29},"type":"other"},{"text":"MemberAccessExpr","parent":512,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBase"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"base"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseAndPeriod"},{"value":{"kind":"period","text":"."},"name":"period"},{"value":{"text":"nil"},"name":"unexpectedBetweenPeriodAndDeclName"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"declName"},{"value":{"text":"nil"},"name":"unexpectedAfterDeclName"}],"id":513,"range":{"endRow":55,"endColumn":42,"startRow":55,"startColumn":29},"type":"expr"},{"text":"DeclReferenceExpr","parent":513,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("vehicle")","text":"vehicle"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"id":514,"range":{"endRow":55,"endColumn":36,"startRow":55,"startColumn":29},"type":"expr"},{"type":"other","text":"vehicle","token":{"trailingTrivia":"","kind":"identifier("vehicle")","leadingTrivia":""},"range":{"endRow":55,"endColumn":36,"startRow":55,"startColumn":29},"parent":514,"structure":[],"id":515},{"type":"other","text":".","token":{"trailingTrivia":"","kind":"period","leadingTrivia":""},"range":{"endRow":55,"endColumn":37,"startRow":55,"startColumn":36},"parent":513,"structure":[],"id":516},{"text":"DeclReferenceExpr","parent":513,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("brand")","text":"brand"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"id":517,"range":{"endRow":55,"endColumn":42,"startRow":55,"startColumn":37},"type":"expr"},{"type":"other","text":"brand","token":{"trailingTrivia":"","kind":"identifier("brand")","leadingTrivia":""},"range":{"endRow":55,"endColumn":42,"startRow":55,"startColumn":37},"parent":517,"structure":[],"id":518},{"type":"other","text":")","token":{"trailingTrivia":"","kind":"rightParen","leadingTrivia":""},"range":{"endRow":55,"endColumn":43,"startRow":55,"startColumn":42},"parent":508,"structure":[],"id":519},{"text":"StringSegment","parent":505,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"kind":"stringSegment("")","text":""},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"id":520,"range":{"endRow":55,"endColumn":43,"startRow":55,"startColumn":43},"type":"other"},{"type":"other","text":"","token":{"trailingTrivia":"","kind":"stringSegment("")","leadingTrivia":""},"range":{"endRow":55,"endColumn":43,"startRow":55,"startColumn":43},"parent":520,"structure":[],"id":521},{"type":"other","text":""","token":{"trailingTrivia":"","kind":"stringQuote","leadingTrivia":""},"range":{"endRow":55,"endColumn":44,"startRow":55,"startColumn":43},"parent":503,"structure":[],"id":522},{"type":"other","text":")","token":{"trailingTrivia":"","kind":"rightParen","leadingTrivia":""},"range":{"endRow":55,"endColumn":45,"startRow":55,"startColumn":44},"parent":497,"structure":[],"id":523},{"text":"MultipleTrailingClosureElementList","parent":497,"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"id":524,"range":{"endRow":55,"endColumn":45,"startRow":55,"startColumn":45},"type":"collection"},{"text":"CodeBlockItem","parent":495,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"FunctionCallExprSyntax"},"ref":"FunctionCallExprSyntax","name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"id":525,"range":{"endRow":56,"endColumn":57,"startRow":56,"startColumn":5},"type":"other"},{"text":"FunctionCallExpr","parent":525,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"calledExpression"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"kind":"leftParen","text":"("},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax","name":"arguments"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"value":{"text":"MultipleTrailingClosureElementListSyntax"},"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}],"id":526,"range":{"endRow":56,"endColumn":57,"startRow":56,"startColumn":5},"type":"expr"},{"text":"DeclReferenceExpr","parent":526,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("print")","text":"print"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"id":527,"range":{"endRow":56,"endColumn":10,"startRow":56,"startColumn":5},"type":"expr"},{"type":"other","text":"print","token":{"trailingTrivia":"","kind":"identifier("print")","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"range":{"endRow":56,"endColumn":10,"startRow":56,"startColumn":5},"parent":527,"structure":[],"id":528},{"type":"other","text":"(","token":{"trailingTrivia":"","kind":"leftParen","leadingTrivia":""},"range":{"endRow":56,"endColumn":11,"startRow":56,"startColumn":10},"parent":526,"structure":[],"id":529},{"text":"LabeledExprList","parent":526,"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"id":530,"range":{"endRow":56,"endColumn":56,"startRow":56,"startColumn":11},"type":"collection"},{"text":"LabeledExpr","parent":530,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"StringLiteralExprSyntax"},"ref":"StringLiteralExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"id":531,"range":{"endRow":56,"endColumn":56,"startRow":56,"startColumn":11},"type":"other"},{"text":"StringLiteralExpr","parent":531,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeOpeningPounds"},{"value":{"text":"nil"},"name":"openingPounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote"},{"value":{"kind":"stringQuote","text":"""},"name":"openingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenOpeningQuoteAndSegments"},{"value":{"text":"StringLiteralSegmentListSyntax"},"ref":"StringLiteralSegmentListSyntax","name":"segments"},{"value":{"text":"nil"},"name":"unexpectedBetweenSegmentsAndClosingQuote"},{"value":{"kind":"stringQuote","text":"""},"name":"closingQuote"},{"value":{"text":"nil"},"name":"unexpectedBetweenClosingQuoteAndClosingPounds"},{"value":{"text":"nil"},"name":"closingPounds"},{"value":{"text":"nil"},"name":"unexpectedAfterClosingPounds"}],"id":532,"range":{"endRow":56,"endColumn":56,"startRow":56,"startColumn":11},"type":"expr"},{"type":"other","text":""","token":{"trailingTrivia":"","kind":"stringQuote","leadingTrivia":""},"range":{"endRow":56,"endColumn":12,"startRow":56,"startColumn":11},"parent":532,"structure":[],"id":533},{"text":"StringLiteralSegmentList","parent":532,"structure":[{"value":{"text":"Element"},"name":"Element"},{"value":{"text":"3"},"name":"Count"}],"id":534,"range":{"endRow":56,"endColumn":55,"startRow":56,"startColumn":12},"type":"collection"},{"text":"StringSegment","parent":534,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"kind":"stringSegment("Number of wheels: ")","text":"Number of wheels: "},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"id":535,"range":{"endRow":56,"endColumn":30,"startRow":56,"startColumn":12},"type":"other"},{"type":"other","text":"Number␣<\/span>of␣<\/span>wheels:␣<\/span>","token":{"trailingTrivia":"","kind":"stringSegment("Number of wheels: ")","leadingTrivia":""},"range":{"endRow":56,"endColumn":30,"startRow":56,"startColumn":12},"parent":535,"structure":[],"id":536},{"text":"ExpressionSegment","parent":534,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBackslash"},{"value":{"kind":"backslash","text":"\\"},"name":"backslash"},{"value":{"text":"nil"},"name":"unexpectedBetweenBackslashAndPounds"},{"value":{"text":"nil"},"name":"pounds"},{"value":{"text":"nil"},"name":"unexpectedBetweenPoundsAndLeftParen"},{"value":{"kind":"leftParen","text":"("},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndExpressions"},{"value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax","name":"expressions"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedAfterRightParen"}],"id":537,"range":{"endRow":56,"endColumn":55,"startRow":56,"startColumn":30},"type":"other"},{"type":"other","text":"\\","token":{"trailingTrivia":"","kind":"backslash","leadingTrivia":""},"range":{"endRow":56,"endColumn":31,"startRow":56,"startColumn":30},"parent":537,"structure":[],"id":538},{"type":"other","text":"(","token":{"trailingTrivia":"","kind":"leftParen","leadingTrivia":""},"range":{"endRow":56,"endColumn":32,"startRow":56,"startColumn":31},"parent":537,"structure":[],"id":539},{"text":"LabeledExprList","parent":537,"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"1"},"name":"Count"}],"id":540,"range":{"endRow":56,"endColumn":54,"startRow":56,"startColumn":32},"type":"collection"},{"text":"LabeledExpr","parent":540,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeLabel"},{"value":{"text":"nil"},"name":"label"},{"value":{"text":"nil"},"name":"unexpectedBetweenLabelAndColon"},{"value":{"text":"nil"},"name":"colon"},{"value":{"text":"nil"},"name":"unexpectedBetweenColonAndExpression"},{"value":{"text":"MemberAccessExprSyntax"},"ref":"MemberAccessExprSyntax","name":"expression"},{"value":{"text":"nil"},"name":"unexpectedBetweenExpressionAndTrailingComma"},{"value":{"text":"nil"},"name":"trailingComma"},{"value":{"text":"nil"},"name":"unexpectedAfterTrailingComma"}],"id":541,"range":{"endRow":56,"endColumn":54,"startRow":56,"startColumn":32},"type":"other"},{"text":"MemberAccessExpr","parent":541,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBase"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"base"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseAndPeriod"},{"value":{"kind":"period","text":"."},"name":"period"},{"value":{"text":"nil"},"name":"unexpectedBetweenPeriodAndDeclName"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"declName"},{"value":{"text":"nil"},"name":"unexpectedAfterDeclName"}],"id":542,"range":{"endRow":56,"endColumn":54,"startRow":56,"startColumn":32},"type":"expr"},{"text":"DeclReferenceExpr","parent":542,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("vehicle")","text":"vehicle"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"id":543,"range":{"endRow":56,"endColumn":39,"startRow":56,"startColumn":32},"type":"expr"},{"type":"other","text":"vehicle","token":{"trailingTrivia":"","kind":"identifier("vehicle")","leadingTrivia":""},"range":{"endRow":56,"endColumn":39,"startRow":56,"startColumn":32},"parent":543,"structure":[],"id":544},{"type":"other","text":".","token":{"trailingTrivia":"","kind":"period","leadingTrivia":""},"range":{"endRow":56,"endColumn":40,"startRow":56,"startColumn":39},"parent":542,"structure":[],"id":545},{"text":"DeclReferenceExpr","parent":542,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("numberOfWheels")","text":"numberOfWheels"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"id":546,"range":{"endRow":56,"endColumn":54,"startRow":56,"startColumn":40},"type":"expr"},{"type":"other","text":"numberOfWheels","token":{"trailingTrivia":"","kind":"identifier("numberOfWheels")","leadingTrivia":""},"range":{"endRow":56,"endColumn":54,"startRow":56,"startColumn":40},"parent":546,"structure":[],"id":547},{"type":"other","text":")","token":{"trailingTrivia":"","kind":"rightParen","leadingTrivia":""},"range":{"endRow":56,"endColumn":55,"startRow":56,"startColumn":54},"parent":537,"structure":[],"id":548},{"text":"StringSegment","parent":534,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeContent"},{"value":{"kind":"stringSegment("")","text":""},"name":"content"},{"value":{"text":"nil"},"name":"unexpectedAfterContent"}],"id":549,"range":{"endRow":56,"endColumn":55,"startRow":56,"startColumn":55},"type":"other"},{"type":"other","text":"","token":{"trailingTrivia":"","kind":"stringSegment("")","leadingTrivia":""},"range":{"endRow":56,"endColumn":55,"startRow":56,"startColumn":55},"parent":549,"structure":[],"id":550},{"type":"other","text":""","token":{"trailingTrivia":"","kind":"stringQuote","leadingTrivia":""},"range":{"endRow":56,"endColumn":56,"startRow":56,"startColumn":55},"parent":532,"structure":[],"id":551},{"type":"other","text":")","token":{"trailingTrivia":"","kind":"rightParen","leadingTrivia":""},"range":{"endRow":56,"endColumn":57,"startRow":56,"startColumn":56},"parent":526,"structure":[],"id":552},{"text":"MultipleTrailingClosureElementList","parent":526,"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"id":553,"range":{"endRow":56,"endColumn":57,"startRow":56,"startColumn":57},"type":"collection"},{"text":"CodeBlockItem","parent":495,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"FunctionCallExprSyntax"},"ref":"FunctionCallExprSyntax","name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"id":554,"range":{"endRow":57,"endColumn":20,"startRow":57,"startColumn":5},"type":"other"},{"text":"FunctionCallExpr","parent":554,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"value":{"text":"MemberAccessExprSyntax"},"ref":"MemberAccessExprSyntax","name":"calledExpression"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"kind":"leftParen","text":"("},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax","name":"arguments"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"value":{"text":"MultipleTrailingClosureElementListSyntax"},"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}],"id":555,"range":{"endRow":57,"endColumn":20,"startRow":57,"startColumn":5},"type":"expr"},{"text":"MemberAccessExpr","parent":555,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBase"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"base"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseAndPeriod"},{"value":{"kind":"period","text":"."},"name":"period"},{"value":{"text":"nil"},"name":"unexpectedBetweenPeriodAndDeclName"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"declName"},{"value":{"text":"nil"},"name":"unexpectedAfterDeclName"}],"id":556,"range":{"endRow":57,"endColumn":18,"startRow":57,"startColumn":5},"type":"expr"},{"text":"DeclReferenceExpr","parent":556,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("vehicle")","text":"vehicle"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"id":557,"range":{"endRow":57,"endColumn":12,"startRow":57,"startColumn":5},"type":"expr"},{"type":"other","text":"vehicle","token":{"trailingTrivia":"","kind":"identifier("vehicle")","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"range":{"endRow":57,"endColumn":12,"startRow":57,"startColumn":5},"parent":557,"structure":[],"id":558},{"type":"other","text":".","token":{"trailingTrivia":"","kind":"period","leadingTrivia":""},"range":{"endRow":57,"endColumn":13,"startRow":57,"startColumn":12},"parent":556,"structure":[],"id":559},{"text":"DeclReferenceExpr","parent":556,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("start")","text":"start"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"id":560,"range":{"endRow":57,"endColumn":18,"startRow":57,"startColumn":13},"type":"expr"},{"type":"other","text":"start","token":{"trailingTrivia":"","kind":"identifier("start")","leadingTrivia":""},"range":{"endRow":57,"endColumn":18,"startRow":57,"startColumn":13},"parent":560,"structure":[],"id":561},{"type":"other","text":"(","token":{"trailingTrivia":"","kind":"leftParen","leadingTrivia":""},"range":{"endRow":57,"endColumn":19,"startRow":57,"startColumn":18},"parent":555,"structure":[],"id":562},{"text":"LabeledExprList","parent":555,"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"id":563,"range":{"endRow":57,"endColumn":19,"startRow":57,"startColumn":19},"type":"collection"},{"type":"other","text":")","token":{"trailingTrivia":"","kind":"rightParen","leadingTrivia":""},"range":{"endRow":57,"endColumn":20,"startRow":57,"startColumn":19},"parent":555,"structure":[],"id":564},{"text":"MultipleTrailingClosureElementList","parent":555,"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"id":565,"range":{"endRow":57,"endColumn":20,"startRow":57,"startColumn":20},"type":"collection"},{"text":"CodeBlockItem","parent":495,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"FunctionCallExprSyntax"},"ref":"FunctionCallExprSyntax","name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"id":566,"range":{"endRow":58,"endColumn":19,"startRow":58,"startColumn":5},"type":"other"},{"text":"FunctionCallExpr","parent":566,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeCalledExpression"},{"value":{"text":"MemberAccessExprSyntax"},"ref":"MemberAccessExprSyntax","name":"calledExpression"},{"value":{"text":"nil"},"name":"unexpectedBetweenCalledExpressionAndLeftParen"},{"value":{"kind":"leftParen","text":"("},"name":"leftParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenLeftParenAndArguments"},{"value":{"text":"LabeledExprListSyntax"},"ref":"LabeledExprListSyntax","name":"arguments"},{"value":{"text":"nil"},"name":"unexpectedBetweenArgumentsAndRightParen"},{"value":{"kind":"rightParen","text":")"},"name":"rightParen"},{"value":{"text":"nil"},"name":"unexpectedBetweenRightParenAndTrailingClosure"},{"value":{"text":"nil"},"name":"trailingClosure"},{"value":{"text":"nil"},"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures"},{"value":{"text":"MultipleTrailingClosureElementListSyntax"},"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures"},{"value":{"text":"nil"},"name":"unexpectedAfterAdditionalTrailingClosures"}],"id":567,"range":{"endRow":58,"endColumn":19,"startRow":58,"startColumn":5},"type":"expr"},{"text":"MemberAccessExpr","parent":567,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBase"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"base"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseAndPeriod"},{"value":{"kind":"period","text":"."},"name":"period"},{"value":{"text":"nil"},"name":"unexpectedBetweenPeriodAndDeclName"},{"value":{"text":"DeclReferenceExprSyntax"},"ref":"DeclReferenceExprSyntax","name":"declName"},{"value":{"text":"nil"},"name":"unexpectedAfterDeclName"}],"id":568,"range":{"endRow":58,"endColumn":17,"startRow":58,"startColumn":5},"type":"expr"},{"text":"DeclReferenceExpr","parent":568,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("vehicle")","text":"vehicle"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"id":569,"range":{"endRow":58,"endColumn":12,"startRow":58,"startColumn":5},"type":"expr"},{"type":"other","text":"vehicle","token":{"trailingTrivia":"","kind":"identifier("vehicle")","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>"},"range":{"endRow":58,"endColumn":12,"startRow":58,"startColumn":5},"parent":569,"structure":[],"id":570},{"type":"other","text":".","token":{"trailingTrivia":"","kind":"period","leadingTrivia":""},"range":{"endRow":58,"endColumn":13,"startRow":58,"startColumn":12},"parent":568,"structure":[],"id":571},{"text":"DeclReferenceExpr","parent":568,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeBaseName"},{"value":{"kind":"identifier("stop")","text":"stop"},"name":"baseName"},{"value":{"text":"nil"},"name":"unexpectedBetweenBaseNameAndArgumentNames"},{"value":{"text":"nil"},"name":"argumentNames"},{"value":{"text":"nil"},"name":"unexpectedAfterArgumentNames"}],"id":572,"range":{"endRow":58,"endColumn":17,"startRow":58,"startColumn":13},"type":"expr"},{"type":"other","text":"stop","token":{"trailingTrivia":"","kind":"identifier("stop")","leadingTrivia":""},"range":{"endRow":58,"endColumn":17,"startRow":58,"startColumn":13},"parent":572,"structure":[],"id":573},{"type":"other","text":"(","token":{"trailingTrivia":"","kind":"leftParen","leadingTrivia":""},"range":{"endRow":58,"endColumn":18,"startRow":58,"startColumn":17},"parent":567,"structure":[],"id":574},{"text":"LabeledExprList","parent":567,"structure":[{"value":{"text":"LabeledExprSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"id":575,"range":{"endRow":58,"endColumn":18,"startRow":58,"startColumn":18},"type":"collection"},{"type":"other","text":")","token":{"trailingTrivia":"","kind":"rightParen","leadingTrivia":""},"range":{"endRow":58,"endColumn":19,"startRow":58,"startColumn":18},"parent":567,"structure":[],"id":576},{"text":"MultipleTrailingClosureElementList","parent":567,"structure":[{"value":{"text":"MultipleTrailingClosureElementSyntax"},"name":"Element"},{"value":{"text":"0"},"name":"Count"}],"id":577,"range":{"endRow":58,"endColumn":19,"startRow":58,"startColumn":19},"type":"collection"},{"type":"other","text":"}","token":{"trailingTrivia":"","kind":"rightBrace","leadingTrivia":"↲<\/span>"},"range":{"endRow":59,"endColumn":2,"startRow":59,"startColumn":1},"parent":493,"structure":[],"id":578},{"text":"CodeBlockItem","parent":1,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeItem"},{"value":{"text":"FunctionDeclSyntax"},"ref":"FunctionDeclSyntax","name":"item"},{"value":{"text":"nil"},"name":"unexpectedBetweenItemAndSemicolon"},{"value":{"text":"nil"},"name":"semicolon"},{"value":{"text":"nil"},"name":"unexpectedAfterSemicolon"}],"id":579,"range":{"endRow":66,"endColumn":2,"startRow":62,"startColumn":1},"type":"other"},{"text":"FunctionDecl","parent":579,"structure":[{"value":{"text":"nil"},"name":"unexpectedBeforeAttributes"},{"value":{"text":"AttributeListSyntax"},"ref":"AttributeListSyntax","name":"attributes"},{"value":{"text":"nil"},"name":"unexpectedBetweenAttributesAndModifiers"},{"value":{"text":"DeclModifierListSyntax"},"ref":"DeclModifierListSyntax","name":"modifiers"},{"value":{"text":"nil"},"name":"unexpectedBetweenModifiersAndFuncKeyword"},{"value":{"kind":"keyword(SwiftSyntax.Keyword.func)","text":"func"},"name":"funcKeyword"},{"value":{"text":"nil"},"name":"unexpectedBetweenFuncKeywordAndName"},{"value":{"kind":"identifier("demonstrateElectricVehicle")","text":"demonstrateElectricVehicle"},"name":"name"},{"value":{"text":"nil"},"name":"unexpectedBetweenNameAndGenericParameterClause"},{"value":{"text":"nil"},"name":"genericParameterClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenGenericParameterClauseAndSignature"},{"value":{"text":"FunctionSignatureSyntax"},"ref":"FunctionSignatureSyntax","name":"signature"},{"value":{"text":"nil"},"name":"unexpectedBetweenSignatureAndGenericWhereClause"},{"value":{"text":"nil"},"name":"genericWhereClause"},{"value":{"text":"nil"},"name":"unexpectedBetweenGenericWhereClauseAndBody"},{"value":{"text":"CodeBlockSyntax"},"ref":"CodeBlockSyntax","name":"body"},{"value":{"text":"nil"},"name":"unexpectedAfterBody"}],"id":580,"range":{"endRow":66,"endColumn":2,"startRow":62,"startColumn":1},"type":"decl"},{"text":"AttributeList","parent":580,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"id":581,"range":{"endColumn":2,"startColumn":2,"endRow":59,"startRow":59},"type":"collection"},{"text":"DeclModifierList","parent":580,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":582,"range":{"endColumn":2,"startColumn":2,"endRow":59,"startRow":59},"type":"collection"},{"type":"other","text":"func","token":{"kind":"keyword(SwiftSyntax.Keyword.func)","leadingTrivia":"↲<\/span>↲<\/span>\/\/␣<\/span>Demonstrate␣<\/span>protocol␣<\/span>composition<\/span>↲<\/span>","trailingTrivia":"␣<\/span>"},"range":{"endColumn":5,"startColumn":1,"endRow":62,"startRow":62},"parent":580,"structure":[],"id":583},{"type":"other","text":"demonstrateElectricVehicle","token":{"kind":"identifier("demonstrateElectricVehicle")","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":32,"startColumn":6,"endRow":62,"startRow":62},"parent":580,"structure":[],"id":584},{"text":"FunctionSignature","parent":580,"structure":[{"name":"unexpectedBeforeParameterClause","value":{"text":"nil"}},{"ref":"FunctionParameterClauseSyntax","name":"parameterClause","value":{"text":"FunctionParameterClauseSyntax"}},{"name":"unexpectedBetweenParameterClauseAndEffectSpecifiers","value":{"text":"nil"}},{"name":"effectSpecifiers","value":{"text":"nil"}},{"name":"unexpectedBetweenEffectSpecifiersAndReturnClause","value":{"text":"nil"}},{"name":"returnClause","value":{"text":"nil"}},{"name":"unexpectedAfterReturnClause","value":{"text":"nil"}}],"id":585,"range":{"endColumn":63,"startColumn":32,"endRow":62,"startRow":62},"type":"other"},{"text":"FunctionParameterClause","parent":585,"structure":[{"name":"unexpectedBeforeLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndParameters","value":{"text":"nil"}},{"ref":"FunctionParameterListSyntax","name":"parameters","value":{"text":"FunctionParameterListSyntax"}},{"name":"unexpectedBetweenParametersAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}],"id":586,"range":{"endColumn":63,"startColumn":32,"endRow":62,"startRow":62},"type":"other"},{"type":"other","text":"(","token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":33,"startColumn":32,"endRow":62,"startRow":62},"parent":586,"structure":[],"id":587},{"text":"FunctionParameterList","parent":586,"structure":[{"name":"Element","value":{"text":"FunctionParameterSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":588,"range":{"endColumn":62,"startColumn":33,"endRow":62,"startRow":62},"type":"collection"},{"text":"FunctionParameter","parent":588,"structure":[{"name":"unexpectedBeforeAttributes","value":{"text":"nil"}},{"ref":"AttributeListSyntax","name":"attributes","value":{"text":"AttributeListSyntax"}},{"name":"unexpectedBetweenAttributesAndModifiers","value":{"text":"nil"}},{"ref":"DeclModifierListSyntax","name":"modifiers","value":{"text":"DeclModifierListSyntax"}},{"name":"unexpectedBetweenModifiersAndFirstName","value":{"text":"nil"}},{"name":"firstName","value":{"text":"_","kind":"wildcard"}},{"name":"unexpectedBetweenFirstNameAndSecondName","value":{"text":"nil"}},{"name":"secondName","value":{"text":"vehicle","kind":"identifier("vehicle")"}},{"name":"unexpectedBetweenSecondNameAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":":","kind":"colon"}},{"name":"unexpectedBetweenColonAndType","value":{"text":"nil"}},{"ref":"CompositionTypeSyntax","name":"type","value":{"text":"CompositionTypeSyntax"}},{"name":"unexpectedBetweenTypeAndEllipsis","value":{"text":"nil"}},{"name":"ellipsis","value":{"text":"nil"}},{"name":"unexpectedBetweenEllipsisAndDefaultValue","value":{"text":"nil"}},{"name":"defaultValue","value":{"text":"nil"}},{"name":"unexpectedBetweenDefaultValueAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":589,"range":{"endColumn":62,"startColumn":33,"endRow":62,"startRow":62},"type":"other"},{"text":"AttributeList","parent":589,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"0"}}],"id":590,"range":{"endColumn":33,"startColumn":33,"endRow":62,"startRow":62},"type":"collection"},{"text":"DeclModifierList","parent":589,"structure":[{"name":"Element","value":{"text":"DeclModifierSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":591,"range":{"endColumn":33,"startColumn":33,"endRow":62,"startRow":62},"type":"collection"},{"type":"other","text":"_","token":{"kind":"wildcard","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"endColumn":34,"startColumn":33,"endRow":62,"startRow":62},"parent":589,"structure":[],"id":592},{"type":"other","text":"vehicle","token":{"kind":"identifier("vehicle")","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":42,"startColumn":35,"endRow":62,"startRow":62},"parent":589,"structure":[],"id":593},{"type":"other","text":":","token":{"kind":"colon","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"endColumn":43,"startColumn":42,"endRow":62,"startRow":62},"parent":589,"structure":[],"id":594},{"text":"CompositionType","parent":589,"structure":[{"name":"unexpectedBeforeElements","value":{"text":"nil"}},{"ref":"CompositionTypeElementListSyntax","name":"elements","value":{"text":"CompositionTypeElementListSyntax"}},{"name":"unexpectedAfterElements","value":{"text":"nil"}}],"id":595,"range":{"endColumn":62,"startColumn":44,"endRow":62,"startRow":62},"type":"type"},{"text":"CompositionTypeElementList","parent":595,"structure":[{"name":"Element","value":{"text":"CompositionTypeElementSyntax"}},{"name":"Count","value":{"text":"2"}}],"id":596,"range":{"endColumn":62,"startColumn":44,"endRow":62,"startRow":62},"type":"collection"},{"text":"CompositionTypeElement","parent":596,"structure":[{"name":"unexpectedBeforeType","value":{"text":"nil"}},{"ref":"IdentifierTypeSyntax","name":"type","value":{"text":"IdentifierTypeSyntax"}},{"name":"unexpectedBetweenTypeAndAmpersand","value":{"text":"nil"}},{"name":"ampersand","value":{"text":"&","kind":"binaryOperator("&")"}},{"name":"unexpectedAfterAmpersand","value":{"text":"nil"}}],"id":597,"range":{"endColumn":53,"startColumn":44,"endRow":62,"startRow":62},"type":"other"},{"text":"IdentifierType","parent":597,"structure":[{"name":"unexpectedBeforeName","value":{"text":"nil"}},{"name":"name","value":{"text":"Vehicle","kind":"identifier("Vehicle")"}},{"name":"unexpectedBetweenNameAndGenericArgumentClause","value":{"text":"nil"}},{"name":"genericArgumentClause","value":{"text":"nil"}},{"name":"unexpectedAfterGenericArgumentClause","value":{"text":"nil"}}],"id":598,"range":{"endColumn":51,"startColumn":44,"endRow":62,"startRow":62},"type":"type"},{"type":"other","text":"Vehicle","token":{"kind":"identifier("Vehicle")","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"endColumn":51,"startColumn":44,"endRow":62,"startRow":62},"parent":598,"structure":[],"id":599},{"type":"other","text":"&","token":{"kind":"binaryOperator("&")","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"endColumn":53,"startColumn":52,"endRow":62,"startRow":62},"parent":597,"structure":[],"id":600},{"text":"CompositionTypeElement","parent":596,"structure":[{"name":"unexpectedBeforeType","value":{"text":"nil"}},{"ref":"IdentifierTypeSyntax","name":"type","value":{"text":"IdentifierTypeSyntax"}},{"name":"unexpectedBetweenTypeAndAmpersand","value":{"text":"nil"}},{"name":"ampersand","value":{"text":"nil"}},{"name":"unexpectedAfterAmpersand","value":{"text":"nil"}}],"id":601,"range":{"endColumn":62,"startColumn":54,"endRow":62,"startRow":62},"type":"other"},{"text":"IdentifierType","parent":601,"structure":[{"name":"unexpectedBeforeName","value":{"text":"nil"}},{"name":"name","value":{"text":"Electric","kind":"identifier("Electric")"}},{"name":"unexpectedBetweenNameAndGenericArgumentClause","value":{"text":"nil"}},{"name":"genericArgumentClause","value":{"text":"nil"}},{"name":"unexpectedAfterGenericArgumentClause","value":{"text":"nil"}}],"id":602,"range":{"endColumn":62,"startColumn":54,"endRow":62,"startRow":62},"type":"type"},{"type":"other","text":"Electric","token":{"kind":"identifier("Electric")","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":62,"startColumn":54,"endRow":62,"startRow":62},"parent":602,"structure":[],"id":603},{"type":"other","text":")","token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":"␣<\/span>"},"range":{"endColumn":63,"startColumn":62,"endRow":62,"startRow":62},"parent":586,"structure":[],"id":604},{"text":"CodeBlock","parent":580,"structure":[{"name":"unexpectedBeforeLeftBrace","value":{"text":"nil"}},{"name":"leftBrace","value":{"text":"{","kind":"leftBrace"}},{"name":"unexpectedBetweenLeftBraceAndStatements","value":{"text":"nil"}},{"ref":"CodeBlockItemListSyntax","name":"statements","value":{"text":"CodeBlockItemListSyntax"}},{"name":"unexpectedBetweenStatementsAndRightBrace","value":{"text":"nil"}},{"name":"rightBrace","value":{"text":"}","kind":"rightBrace"}},{"name":"unexpectedAfterRightBrace","value":{"text":"nil"}}],"id":605,"range":{"endColumn":2,"startColumn":64,"endRow":66,"startRow":62},"type":"other"},{"type":"other","text":"{","token":{"kind":"leftBrace","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":65,"startColumn":64,"endRow":62,"startRow":62},"parent":605,"structure":[],"id":606},{"text":"CodeBlockItemList","parent":605,"structure":[{"name":"Element","value":{"text":"CodeBlockItemSyntax"}},{"name":"Count","value":{"text":"3"}}],"id":607,"range":{"endColumn":21,"startColumn":5,"endRow":65,"startRow":63},"type":"collection"},{"text":"CodeBlockItem","parent":607,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"FunctionCallExprSyntax","name":"item","value":{"text":"FunctionCallExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":608,"range":{"endColumn":32,"startColumn":5,"endRow":63,"startRow":63},"type":"other"},{"text":"FunctionCallExpr","parent":608,"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"ref":"LabeledExprListSyntax","name":"arguments","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"id":609,"range":{"endColumn":32,"startColumn":5,"endRow":63,"startRow":63},"type":"expr"},{"text":"DeclReferenceExpr","parent":609,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"demonstrateVehicle","kind":"identifier("demonstrateVehicle")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":610,"range":{"endColumn":23,"startColumn":5,"endRow":63,"startRow":63},"type":"expr"},{"type":"other","text":"demonstrateVehicle","token":{"kind":"identifier("demonstrateVehicle")","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":""},"range":{"endColumn":23,"startColumn":5,"endRow":63,"startRow":63},"parent":610,"structure":[],"id":611},{"type":"other","text":"(","token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":24,"startColumn":23,"endRow":63,"startRow":63},"parent":609,"structure":[],"id":612},{"text":"LabeledExprList","parent":609,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":613,"range":{"endColumn":31,"startColumn":24,"endRow":63,"startRow":63},"type":"collection"},{"text":"LabeledExpr","parent":613,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"expression","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":614,"range":{"endColumn":31,"startColumn":24,"endRow":63,"startRow":63},"type":"other"},{"text":"DeclReferenceExpr","parent":614,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"vehicle","kind":"identifier("vehicle")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":615,"range":{"endColumn":31,"startColumn":24,"endRow":63,"startRow":63},"type":"expr"},{"type":"other","text":"vehicle","token":{"kind":"identifier("vehicle")","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":31,"startColumn":24,"endRow":63,"startRow":63},"parent":615,"structure":[],"id":616},{"type":"other","text":")","token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":32,"startColumn":31,"endRow":63,"startRow":63},"parent":609,"structure":[],"id":617},{"text":"MultipleTrailingClosureElementList","parent":609,"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":618,"range":{"endColumn":32,"startColumn":32,"endRow":63,"startRow":63},"type":"collection"},{"text":"CodeBlockItem","parent":607,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"FunctionCallExprSyntax","name":"item","value":{"text":"FunctionCallExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":619,"range":{"endColumn":53,"startColumn":5,"endRow":64,"startRow":64},"type":"other"},{"text":"FunctionCallExpr","parent":619,"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"ref":"LabeledExprListSyntax","name":"arguments","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"id":620,"range":{"endColumn":53,"startColumn":5,"endRow":64,"startRow":64},"type":"expr"},{"text":"DeclReferenceExpr","parent":620,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"print","kind":"identifier("print")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":621,"range":{"endColumn":10,"startColumn":5,"endRow":64,"startRow":64},"type":"expr"},{"type":"other","text":"print","token":{"kind":"identifier("print")","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":""},"range":{"endColumn":10,"startColumn":5,"endRow":64,"startRow":64},"parent":621,"structure":[],"id":622},{"type":"other","text":"(","token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":11,"startColumn":10,"endRow":64,"startRow":64},"parent":620,"structure":[],"id":623},{"text":"LabeledExprList","parent":620,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":624,"range":{"endColumn":52,"startColumn":11,"endRow":64,"startRow":64},"type":"collection"},{"text":"LabeledExpr","parent":624,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"ref":"StringLiteralExprSyntax","name":"expression","value":{"text":"StringLiteralExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":625,"range":{"endColumn":52,"startColumn":11,"endRow":64,"startRow":64},"type":"other"},{"text":"StringLiteralExpr","parent":625,"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"ref":"StringLiteralSegmentListSyntax","name":"segments","value":{"text":"StringLiteralSegmentListSyntax"}},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"id":626,"range":{"endColumn":52,"startColumn":11,"endRow":64,"startRow":64},"type":"expr"},{"type":"other","text":""","token":{"kind":"stringQuote","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":12,"startColumn":11,"endRow":64,"startRow":64},"parent":626,"structure":[],"id":627},{"text":"StringLiteralSegmentList","parent":626,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"3"}}],"id":628,"range":{"endColumn":51,"startColumn":12,"endRow":64,"startRow":64},"type":"collection"},{"text":"StringSegment","parent":628,"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":"Battery level: ","kind":"stringSegment("Battery level: ")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"id":629,"range":{"endColumn":27,"startColumn":12,"endRow":64,"startRow":64},"type":"other"},{"type":"other","text":"Battery␣<\/span>level:␣<\/span>","token":{"kind":"stringSegment("Battery level: ")","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":27,"startColumn":12,"endRow":64,"startRow":64},"parent":629,"structure":[],"id":630},{"text":"ExpressionSegment","parent":628,"structure":[{"name":"unexpectedBeforeBackslash","value":{"text":"nil"}},{"name":"backslash","value":{"text":"\\","kind":"backslash"}},{"name":"unexpectedBetweenBackslashAndPounds","value":{"text":"nil"}},{"name":"pounds","value":{"text":"nil"}},{"name":"unexpectedBetweenPoundsAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndExpressions","value":{"text":"nil"}},{"ref":"LabeledExprListSyntax","name":"expressions","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenExpressionsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedAfterRightParen","value":{"text":"nil"}}],"id":631,"range":{"endColumn":50,"startColumn":27,"endRow":64,"startRow":64},"type":"other"},{"type":"other","text":"\\","token":{"kind":"backslash","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":28,"startColumn":27,"endRow":64,"startRow":64},"parent":631,"structure":[],"id":632},{"type":"other","text":"(","token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":29,"startColumn":28,"endRow":64,"startRow":64},"parent":631,"structure":[],"id":633},{"text":"LabeledExprList","parent":631,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":634,"range":{"endColumn":49,"startColumn":29,"endRow":64,"startRow":64},"type":"collection"},{"text":"LabeledExpr","parent":634,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"ref":"MemberAccessExprSyntax","name":"expression","value":{"text":"MemberAccessExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":635,"range":{"endColumn":49,"startColumn":29,"endRow":64,"startRow":64},"type":"other"},{"text":"MemberAccessExpr","parent":635,"structure":[{"name":"unexpectedBeforeBase","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"base","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenBaseAndPeriod","value":{"text":"nil"}},{"name":"period","value":{"text":".","kind":"period"}},{"name":"unexpectedBetweenPeriodAndDeclName","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"declName","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedAfterDeclName","value":{"text":"nil"}}],"id":636,"range":{"endColumn":49,"startColumn":29,"endRow":64,"startRow":64},"type":"expr"},{"text":"DeclReferenceExpr","parent":636,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"vehicle","kind":"identifier("vehicle")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":637,"range":{"endColumn":36,"startColumn":29,"endRow":64,"startRow":64},"type":"expr"},{"type":"other","text":"vehicle","token":{"kind":"identifier("vehicle")","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":36,"startColumn":29,"endRow":64,"startRow":64},"parent":637,"structure":[],"id":638},{"type":"other","text":".","token":{"kind":"period","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":37,"startColumn":36,"endRow":64,"startRow":64},"parent":636,"structure":[],"id":639},{"text":"DeclReferenceExpr","parent":636,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"batteryLevel","kind":"identifier("batteryLevel")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":640,"range":{"endColumn":49,"startColumn":37,"endRow":64,"startRow":64},"type":"expr"},{"type":"other","text":"batteryLevel","token":{"kind":"identifier("batteryLevel")","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":49,"startColumn":37,"endRow":64,"startRow":64},"parent":640,"structure":[],"id":641},{"type":"other","text":")","token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":50,"startColumn":49,"endRow":64,"startRow":64},"parent":631,"structure":[],"id":642},{"text":"StringSegment","parent":628,"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":"%","kind":"stringSegment("%")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"id":643,"range":{"endColumn":51,"startColumn":50,"endRow":64,"startRow":64},"type":"other"},{"type":"other","text":"%","token":{"kind":"stringSegment("%")","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":51,"startColumn":50,"endRow":64,"startRow":64},"parent":643,"structure":[],"id":644},{"type":"other","text":""","token":{"kind":"stringQuote","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":52,"startColumn":51,"endRow":64,"startRow":64},"parent":626,"structure":[],"id":645},{"type":"other","text":")","token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":53,"startColumn":52,"endRow":64,"startRow":64},"parent":620,"structure":[],"id":646},{"text":"MultipleTrailingClosureElementList","parent":620,"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":647,"range":{"endColumn":53,"startColumn":53,"endRow":64,"startRow":64},"type":"collection"},{"text":"CodeBlockItem","parent":607,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"FunctionCallExprSyntax","name":"item","value":{"text":"FunctionCallExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":648,"range":{"endColumn":21,"startColumn":5,"endRow":65,"startRow":65},"type":"other"},{"text":"FunctionCallExpr","parent":648,"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"ref":"MemberAccessExprSyntax","name":"calledExpression","value":{"text":"MemberAccessExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"ref":"LabeledExprListSyntax","name":"arguments","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"id":649,"range":{"endColumn":21,"startColumn":5,"endRow":65,"startRow":65},"type":"expr"},{"text":"MemberAccessExpr","parent":649,"structure":[{"name":"unexpectedBeforeBase","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"base","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenBaseAndPeriod","value":{"text":"nil"}},{"name":"period","value":{"text":".","kind":"period"}},{"name":"unexpectedBetweenPeriodAndDeclName","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"declName","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedAfterDeclName","value":{"text":"nil"}}],"id":650,"range":{"endColumn":19,"startColumn":5,"endRow":65,"startRow":65},"type":"expr"},{"text":"DeclReferenceExpr","parent":650,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"vehicle","kind":"identifier("vehicle")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":651,"range":{"endColumn":12,"startColumn":5,"endRow":65,"startRow":65},"type":"expr"},{"type":"other","text":"vehicle","token":{"kind":"identifier("vehicle")","leadingTrivia":"↲<\/span>␣<\/span>␣<\/span>␣<\/span>␣<\/span>","trailingTrivia":""},"range":{"endColumn":12,"startColumn":5,"endRow":65,"startRow":65},"parent":651,"structure":[],"id":652},{"type":"other","text":".","token":{"kind":"period","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":13,"startColumn":12,"endRow":65,"startRow":65},"parent":650,"structure":[],"id":653},{"text":"DeclReferenceExpr","parent":650,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"charge","kind":"identifier("charge")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":654,"range":{"endColumn":19,"startColumn":13,"endRow":65,"startRow":65},"type":"expr"},{"type":"other","text":"charge","token":{"kind":"identifier("charge")","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":19,"startColumn":13,"endRow":65,"startRow":65},"parent":654,"structure":[],"id":655},{"type":"other","text":"(","token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":20,"startColumn":19,"endRow":65,"startRow":65},"parent":649,"structure":[],"id":656},{"text":"LabeledExprList","parent":649,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":657,"range":{"endColumn":20,"startColumn":20,"endRow":65,"startRow":65},"type":"collection"},{"type":"other","text":")","token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":21,"startColumn":20,"endRow":65,"startRow":65},"parent":649,"structure":[],"id":658},{"text":"MultipleTrailingClosureElementList","parent":649,"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":659,"range":{"endColumn":21,"startColumn":21,"endRow":65,"startRow":65},"type":"collection"},{"type":"other","text":"}","token":{"kind":"rightBrace","leadingTrivia":"↲<\/span>","trailingTrivia":""},"range":{"endColumn":2,"startColumn":1,"endRow":66,"startRow":66},"parent":605,"structure":[],"id":660},{"text":"CodeBlockItem","parent":1,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"FunctionCallExprSyntax","name":"item","value":{"text":"FunctionCallExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":661,"range":{"endColumn":30,"startColumn":1,"endRow":69,"startRow":69},"type":"other"},{"text":"FunctionCallExpr","parent":661,"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"ref":"LabeledExprListSyntax","name":"arguments","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"id":662,"range":{"endColumn":30,"startColumn":1,"endRow":69,"startRow":69},"type":"expr"},{"text":"DeclReferenceExpr","parent":662,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"print","kind":"identifier("print")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":663,"range":{"endColumn":6,"startColumn":1,"endRow":69,"startRow":69},"type":"expr"},{"type":"other","text":"print","token":{"kind":"identifier("print")","leadingTrivia":"↲<\/span>↲<\/span>\/\/␣<\/span>Test␣<\/span>the␣<\/span>implementations<\/span>↲<\/span>","trailingTrivia":""},"range":{"endColumn":6,"startColumn":1,"endRow":69,"startRow":69},"parent":663,"structure":[],"id":664},{"type":"other","text":"(","token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":7,"startColumn":6,"endRow":69,"startRow":69},"parent":662,"structure":[],"id":665},{"text":"LabeledExprList","parent":662,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":666,"range":{"endColumn":29,"startColumn":7,"endRow":69,"startRow":69},"type":"collection"},{"text":"LabeledExpr","parent":666,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"ref":"StringLiteralExprSyntax","name":"expression","value":{"text":"StringLiteralExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":667,"range":{"endColumn":29,"startColumn":7,"endRow":69,"startRow":69},"type":"other"},{"text":"StringLiteralExpr","parent":667,"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"ref":"StringLiteralSegmentListSyntax","name":"segments","value":{"text":"StringLiteralSegmentListSyntax"}},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"id":668,"range":{"endColumn":29,"startColumn":7,"endRow":69,"startRow":69},"type":"expr"},{"type":"other","text":""","token":{"kind":"stringQuote","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":8,"startColumn":7,"endRow":69,"startRow":69},"parent":668,"structure":[],"id":669},{"text":"StringLiteralSegmentList","parent":668,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"1"}}],"id":670,"range":{"endColumn":28,"startColumn":8,"endRow":69,"startRow":69},"type":"collection"},{"text":"StringSegment","parent":670,"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":"Testing regular car:","kind":"stringSegment("Testing regular car:")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"id":671,"range":{"endColumn":28,"startColumn":8,"endRow":69,"startRow":69},"type":"other"},{"type":"other","text":"Testing␣<\/span>regular␣<\/span>car:","token":{"kind":"stringSegment("Testing regular car:")","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":28,"startColumn":8,"endRow":69,"startRow":69},"parent":671,"structure":[],"id":672},{"type":"other","text":""","token":{"kind":"stringQuote","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":29,"startColumn":28,"endRow":69,"startRow":69},"parent":668,"structure":[],"id":673},{"type":"other","text":")","token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":30,"startColumn":29,"endRow":69,"startRow":69},"parent":662,"structure":[],"id":674},{"text":"MultipleTrailingClosureElementList","parent":662,"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":675,"range":{"endColumn":30,"startColumn":30,"endRow":69,"startRow":69},"type":"collection"},{"text":"CodeBlockItem","parent":1,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"FunctionCallExprSyntax","name":"item","value":{"text":"FunctionCallExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":676,"range":{"endColumn":27,"startColumn":1,"endRow":70,"startRow":70},"type":"other"},{"text":"FunctionCallExpr","parent":676,"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"ref":"LabeledExprListSyntax","name":"arguments","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"id":677,"range":{"endColumn":27,"startColumn":1,"endRow":70,"startRow":70},"type":"expr"},{"text":"DeclReferenceExpr","parent":677,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"demonstrateVehicle","kind":"identifier("demonstrateVehicle")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":678,"range":{"endColumn":19,"startColumn":1,"endRow":70,"startRow":70},"type":"expr"},{"type":"other","text":"demonstrateVehicle","token":{"kind":"identifier("demonstrateVehicle")","leadingTrivia":"↲<\/span>","trailingTrivia":""},"range":{"endColumn":19,"startColumn":1,"endRow":70,"startRow":70},"parent":678,"structure":[],"id":679},{"type":"other","text":"(","token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":20,"startColumn":19,"endRow":70,"startRow":70},"parent":677,"structure":[],"id":680},{"text":"LabeledExprList","parent":677,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":681,"range":{"endColumn":26,"startColumn":20,"endRow":70,"startRow":70},"type":"collection"},{"text":"LabeledExpr","parent":681,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"expression","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":682,"range":{"endColumn":26,"startColumn":20,"endRow":70,"startRow":70},"type":"other"},{"text":"DeclReferenceExpr","parent":682,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"toyota","kind":"identifier("toyota")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":683,"range":{"endColumn":26,"startColumn":20,"endRow":70,"startRow":70},"type":"expr"},{"type":"other","text":"toyota","token":{"kind":"identifier("toyota")","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":26,"startColumn":20,"endRow":70,"startRow":70},"parent":683,"structure":[],"id":684},{"type":"other","text":")","token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":27,"startColumn":26,"endRow":70,"startRow":70},"parent":677,"structure":[],"id":685},{"text":"MultipleTrailingClosureElementList","parent":677,"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":686,"range":{"endColumn":27,"startColumn":27,"endRow":70,"startRow":70},"type":"collection"},{"text":"CodeBlockItem","parent":1,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"FunctionCallExprSyntax","name":"item","value":{"text":"FunctionCallExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":687,"range":{"endColumn":33,"startColumn":1,"endRow":72,"startRow":72},"type":"other"},{"text":"FunctionCallExpr","parent":687,"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"ref":"LabeledExprListSyntax","name":"arguments","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"id":688,"range":{"endColumn":33,"startColumn":1,"endRow":72,"startRow":72},"type":"expr"},{"text":"DeclReferenceExpr","parent":688,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"print","kind":"identifier("print")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":689,"range":{"endColumn":6,"startColumn":1,"endRow":72,"startRow":72},"type":"expr"},{"type":"other","text":"print","token":{"kind":"identifier("print")","leadingTrivia":"↲<\/span>↲<\/span>","trailingTrivia":""},"range":{"endColumn":6,"startColumn":1,"endRow":72,"startRow":72},"parent":689,"structure":[],"id":690},{"type":"other","text":"(","token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":7,"startColumn":6,"endRow":72,"startRow":72},"parent":688,"structure":[],"id":691},{"text":"LabeledExprList","parent":688,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":692,"range":{"endColumn":32,"startColumn":7,"endRow":72,"startRow":72},"type":"collection"},{"text":"LabeledExpr","parent":692,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"ref":"StringLiteralExprSyntax","name":"expression","value":{"text":"StringLiteralExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":693,"range":{"endColumn":32,"startColumn":7,"endRow":72,"startRow":72},"type":"other"},{"text":"StringLiteralExpr","parent":693,"structure":[{"name":"unexpectedBeforeOpeningPounds","value":{"text":"nil"}},{"name":"openingPounds","value":{"text":"nil"}},{"name":"unexpectedBetweenOpeningPoundsAndOpeningQuote","value":{"text":"nil"}},{"name":"openingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenOpeningQuoteAndSegments","value":{"text":"nil"}},{"ref":"StringLiteralSegmentListSyntax","name":"segments","value":{"text":"StringLiteralSegmentListSyntax"}},{"name":"unexpectedBetweenSegmentsAndClosingQuote","value":{"text":"nil"}},{"name":"closingQuote","value":{"text":""","kind":"stringQuote"}},{"name":"unexpectedBetweenClosingQuoteAndClosingPounds","value":{"text":"nil"}},{"name":"closingPounds","value":{"text":"nil"}},{"name":"unexpectedAfterClosingPounds","value":{"text":"nil"}}],"id":694,"range":{"endColumn":32,"startColumn":7,"endRow":72,"startRow":72},"type":"expr"},{"type":"other","text":""","token":{"kind":"stringQuote","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":8,"startColumn":7,"endRow":72,"startRow":72},"parent":694,"structure":[],"id":695},{"text":"StringLiteralSegmentList","parent":694,"structure":[{"name":"Element","value":{"text":"Element"}},{"name":"Count","value":{"text":"2"}}],"id":696,"range":{"endColumn":31,"startColumn":8,"endRow":72,"startRow":72},"type":"collection"},{"text":"StringSegment","parent":696,"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":"\\n","kind":"stringSegment("\\\\n")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"id":697,"range":{"endColumn":10,"startColumn":8,"endRow":72,"startRow":72},"type":"other"},{"type":"other","text":"\\n","token":{"kind":"stringSegment("\\\\n")","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":10,"startColumn":8,"endRow":72,"startRow":72},"parent":697,"structure":[],"id":698},{"text":"StringSegment","parent":696,"structure":[{"name":"unexpectedBeforeContent","value":{"text":"nil"}},{"name":"content","value":{"text":"Testing electric car:","kind":"stringSegment("Testing electric car:")"}},{"name":"unexpectedAfterContent","value":{"text":"nil"}}],"id":699,"range":{"endColumn":31,"startColumn":10,"endRow":72,"startRow":72},"type":"other"},{"type":"other","text":"Testing␣<\/span>electric␣<\/span>car:","token":{"kind":"stringSegment("Testing electric car:")","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":31,"startColumn":10,"endRow":72,"startRow":72},"parent":699,"structure":[],"id":700},{"type":"other","text":""","token":{"kind":"stringQuote","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":32,"startColumn":31,"endRow":72,"startRow":72},"parent":694,"structure":[],"id":701},{"type":"other","text":")","token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":33,"startColumn":32,"endRow":72,"startRow":72},"parent":688,"structure":[],"id":702},{"text":"MultipleTrailingClosureElementList","parent":688,"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":703,"range":{"endColumn":33,"startColumn":33,"endRow":72,"startRow":72},"type":"collection"},{"text":"CodeBlockItem","parent":1,"structure":[{"name":"unexpectedBeforeItem","value":{"text":"nil"}},{"ref":"FunctionCallExprSyntax","name":"item","value":{"text":"FunctionCallExprSyntax"}},{"name":"unexpectedBetweenItemAndSemicolon","value":{"text":"nil"}},{"name":"semicolon","value":{"text":"nil"}},{"name":"unexpectedAfterSemicolon","value":{"text":"nil"}}],"id":704,"range":{"endColumn":34,"startColumn":1,"endRow":73,"startRow":73},"type":"other"},{"text":"FunctionCallExpr","parent":704,"structure":[{"name":"unexpectedBeforeCalledExpression","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"calledExpression","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenCalledExpressionAndLeftParen","value":{"text":"nil"}},{"name":"leftParen","value":{"text":"(","kind":"leftParen"}},{"name":"unexpectedBetweenLeftParenAndArguments","value":{"text":"nil"}},{"ref":"LabeledExprListSyntax","name":"arguments","value":{"text":"LabeledExprListSyntax"}},{"name":"unexpectedBetweenArgumentsAndRightParen","value":{"text":"nil"}},{"name":"rightParen","value":{"text":")","kind":"rightParen"}},{"name":"unexpectedBetweenRightParenAndTrailingClosure","value":{"text":"nil"}},{"name":"trailingClosure","value":{"text":"nil"}},{"name":"unexpectedBetweenTrailingClosureAndAdditionalTrailingClosures","value":{"text":"nil"}},{"ref":"MultipleTrailingClosureElementListSyntax","name":"additionalTrailingClosures","value":{"text":"MultipleTrailingClosureElementListSyntax"}},{"name":"unexpectedAfterAdditionalTrailingClosures","value":{"text":"nil"}}],"id":705,"range":{"endColumn":34,"startColumn":1,"endRow":73,"startRow":73},"type":"expr"},{"text":"DeclReferenceExpr","parent":705,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"demonstrateElectricVehicle","kind":"identifier("demonstrateElectricVehicle")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":706,"range":{"endColumn":27,"startColumn":1,"endRow":73,"startRow":73},"type":"expr"},{"type":"other","text":"demonstrateElectricVehicle","token":{"kind":"identifier("demonstrateElectricVehicle")","leadingTrivia":"↲<\/span>","trailingTrivia":""},"range":{"endColumn":27,"startColumn":1,"endRow":73,"startRow":73},"parent":706,"structure":[],"id":707},{"type":"other","text":"(","token":{"kind":"leftParen","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":28,"startColumn":27,"endRow":73,"startRow":73},"parent":705,"structure":[],"id":708},{"text":"LabeledExprList","parent":705,"structure":[{"name":"Element","value":{"text":"LabeledExprSyntax"}},{"name":"Count","value":{"text":"1"}}],"id":709,"range":{"endColumn":33,"startColumn":28,"endRow":73,"startRow":73},"type":"collection"},{"text":"LabeledExpr","parent":709,"structure":[{"name":"unexpectedBeforeLabel","value":{"text":"nil"}},{"name":"label","value":{"text":"nil"}},{"name":"unexpectedBetweenLabelAndColon","value":{"text":"nil"}},{"name":"colon","value":{"text":"nil"}},{"name":"unexpectedBetweenColonAndExpression","value":{"text":"nil"}},{"ref":"DeclReferenceExprSyntax","name":"expression","value":{"text":"DeclReferenceExprSyntax"}},{"name":"unexpectedBetweenExpressionAndTrailingComma","value":{"text":"nil"}},{"name":"trailingComma","value":{"text":"nil"}},{"name":"unexpectedAfterTrailingComma","value":{"text":"nil"}}],"id":710,"range":{"endColumn":33,"startColumn":28,"endRow":73,"startRow":73},"type":"other"},{"text":"DeclReferenceExpr","parent":710,"structure":[{"name":"unexpectedBeforeBaseName","value":{"text":"nil"}},{"name":"baseName","value":{"text":"tesla","kind":"identifier("tesla")"}},{"name":"unexpectedBetweenBaseNameAndArgumentNames","value":{"text":"nil"}},{"name":"argumentNames","value":{"text":"nil"}},{"name":"unexpectedAfterArgumentNames","value":{"text":"nil"}}],"id":711,"range":{"endColumn":33,"startColumn":28,"endRow":73,"startRow":73},"type":"expr"},{"type":"other","text":"tesla","token":{"kind":"identifier("tesla")","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":33,"startColumn":28,"endRow":73,"startRow":73},"parent":711,"structure":[],"id":712},{"type":"other","text":")","token":{"kind":"rightParen","leadingTrivia":"","trailingTrivia":""},"range":{"endColumn":34,"startColumn":33,"endRow":73,"startRow":73},"parent":705,"structure":[],"id":713},{"text":"MultipleTrailingClosureElementList","parent":705,"structure":[{"name":"Element","value":{"text":"MultipleTrailingClosureElementSyntax"}},{"name":"Count","value":{"text":"0"}}],"id":714,"range":{"endColumn":34,"startColumn":34,"endRow":73,"startRow":73},"type":"collection"},{"type":"other","text":"","token":{"kind":"endOfFile","leadingTrivia":"↲<\/span>","trailingTrivia":""},"range":{"endColumn":1,"startColumn":1,"endRow":74,"startRow":74},"parent":0,"structure":[],"id":715}] diff --git a/Examples/Remaining/concurrency/code.swift b/Examples/Remaining/concurrency/code.swift deleted file mode 100644 index 21be8c3..0000000 --- a/Examples/Remaining/concurrency/code.swift +++ /dev/null @@ -1,87 +0,0 @@ -import Foundation - -// MARK: - Async Functions -func fetchUserData(id: Int) async throws -> String { - // Simulate network delay - try await Task.sleep(nanoseconds: 1_000_000_000) // 1 second - return "User data for ID: \(id)" -} - -func fetchUserPosts(id: Int) async throws -> [String] { - // Simulate network delay - try await Task.sleep(nanoseconds: 2_000_000_000) // 2 seconds - return ["Post 1", "Post 2", "Post 3"] -} - -// MARK: - Async Sequence -struct Countdown: AsyncSequence { - let start: Int - - struct AsyncIterator: AsyncIteratorProtocol { - var count: Int - - mutating func next() async -> Int? { - guard !isEmpty else { return nil } - try? await Task.sleep(nanoseconds: 500_000_000) // 0.5 seconds - let current = count - count -= 1 - return current - } - } - - func makeAsyncIterator() -> AsyncIterator { - AsyncIterator(count: start) - } -} - -// MARK: - Task Groups -func fetchMultipleUsers(ids: [Int]) async throws -> [String] { - try await withThrowingTaskGroup(of: String.self) { group in - for id in ids { - group.addTask { - try await fetchUserData(id: id) - } - } - - var results: [String] = [] - for try await result in group { - results.append(result) - } - return results - } -} - -// MARK: - Usage Example -@main -struct ConcurrencyExample { - static func main() async { - do { - // Demonstrate basic async/await - print("Fetching user data...") - let userData = try await fetchUserData(id: 1) - print(userData) - - // Demonstrate concurrent tasks - print("\nFetching user data and posts concurrently...") - async let data = fetchUserData(id: 1) - async let posts = fetchUserPosts(id: 1) - let (fetchedData, fetchedPosts) = try await (data, posts) - print("Data: \(fetchedData)") - print("Posts: \(fetchedPosts)") - - // Demonstrate async sequence - print("\nStarting countdown:") - for await number in Countdown(start: 3) { - print(number) - } - print("Liftoff!") - - // Demonstrate task groups - print("\nFetching multiple users:") - let users = try await fetchMultipleUsers(ids: [1, 2, 3]) - print(users) - } catch { - print("Error: \(error)") - } - } -} diff --git a/Examples/Remaining/result_builders/code.swift b/Examples/Remaining/result_builders/code.swift new file mode 100644 index 0000000..148b74e --- /dev/null +++ b/Examples/Remaining/result_builders/code.swift @@ -0,0 +1,58 @@ + +var vendingMachine = VendingMachine() +vendingMachine.coinsDeposited = 8 +do { + try buyFavoriteSnack(person: "Alice", vendingMachine: vendingMachine) + print("Success! Yum.") +} catch VendingMachineError.invalidSelection { + print("Invalid Selection.") +} catch VendingMachineError.outOfStock { + print("Out of Stock.") +} catch VendingMachineError.insufficientFunds(let coinsNeeded) { + print("Insufficient funds. Please insert an additional \(coinsNeeded) coins.") +} catch { + print("Unexpected error: \(error).") +} + +func summarize(_ ratings: [Int]) throws(StatisticsError) { + guard !ratings.isEmpty else { throw .noRatings } +} + +// MARK: - Task Groups +func fetchMultipleUsers(ids: [Int]) async throws -> [String] { + try await withThrowingTaskGroup(of: String.self) { group in + for id in ids { + group.addTask { + try await fetchUserData(id: id) + } + } + + var results: [String] = [] + for try await result in group { + results.append(result) + } + return results + } +} + +// Demonstrate concurrent tasks +print("\nFetching user data and posts concurrently...") +async let data = fetchUserData(id: 1) +async let posts = fetchUserPosts(id: 1) +let (fetchedData, fetchedPosts) = try await (data, posts) +print("Data: \(fetchedData)") +print("Posts: \(fetchedPosts)") + + +Task { + _ = try await fetchUserData(id: 1) +} + +Task { @MainActor [unowned self] in + _ = try await fetchUserData(id: 1) +} + + +func nonThrowingFunction() throws(Never) { + +} \ No newline at end of file diff --git a/Line.swift b/Line.swift index 29be4c6..41374c1 100644 --- a/Line.swift +++ b/Line.swift @@ -5,7 +5,8 @@ // Created by Leo Dion on 6/16/25. // -/// Represents a single comment line that can be attached to a syntax node when using `.comment { ... }` in the DSL. +/// Represents a single comment line that can be attached to a syntax node when using +/// `.comment { ... }` in the DSL. public struct Line { public enum Kind { /// Regular line comment that starts with `//`. diff --git a/Macros/Options/.github/workflows/Options.yml b/Macros/Options/.github/workflows/Options.yml new file mode 100644 index 0000000..1f13ac5 --- /dev/null +++ b/Macros/Options/.github/workflows/Options.yml @@ -0,0 +1,242 @@ +name: macOS +on: + push: + branches-ignore: + - '*WIP' +env: + PACKAGE_NAME: Options +jobs: + build-ubuntu: + name: Build on Ubuntu + env: + PACKAGE_NAME: Options + SWIFT_VER: ${{ matrix.swift-version }} + runs-on: ${{ matrix.runs-on }} + if: "!contains(github.event.head_commit.message, 'ci skip')" + strategy: + matrix: + runs-on: [ubuntu-20.04, ubuntu-22.04] + swift-version: ["5.7.1", "5.8.1", "5.9", "5.9.2", "5.10"] + steps: + - uses: actions/checkout@v4 + - name: Set Ubuntu Release DOT + run: echo "RELEASE_DOT=$(lsb_release -sr)" >> $GITHUB_ENV + - name: Set Ubuntu Release NUM + run: echo "RELEASE_NUM=${RELEASE_DOT//[-._]/}" >> $GITHUB_ENV + - name: Set Ubuntu Codename + run: echo "RELEASE_NAME=$(lsb_release -sc)" >> $GITHUB_ENV + - name: Cache swift package modules + id: cache-spm-linux + uses: actions/cache@v4 + env: + cache-name: cache-spm + with: + path: .build + key: ${{ runner.os }}-${{ env.RELEASE_DOT }}-${{ env.cache-name }}-${{ matrix.swift-version }}-${{ hashFiles('Package.resolved') }} + restore-keys: | + ${{ runner.os }}-${{ env.RELEASE_DOT }}-${{ env.cache-name }}-${{ matrix.swift-version }}- + ${{ runner.os }}-${{ env.RELEASE_DOT }}-${{ env.cache-name }}- + - name: Cache swift + id: cache-swift-linux + uses: actions/cache@v4 + env: + cache-name: cache-swift + with: + path: swift-${{ env.SWIFT_VER }}-RELEASE-ubuntu${{ env.RELEASE_DOT }} + key: ${{ runner.os }}-${{ env.cache-name }}-${{ matrix.swift-version }}-${{ env.RELEASE_DOT }} + restore-keys: | + ${{ runner.os }}-${{ env.cache-name }}-${{ matrix.swift-version }}- + - name: Download Swift + if: steps.cache-swift-linux.outputs.cache-hit != 'true' + run: curl -O https://download.swift.org/swift-${SWIFT_VER}-release/ubuntu${RELEASE_NUM}/swift-${SWIFT_VER}-RELEASE/swift-${SWIFT_VER}-RELEASE-ubuntu${RELEASE_DOT}.tar.gz + - name: Extract Swift + if: steps.cache-swift-linux.outputs.cache-hit != 'true' + run: tar xzf swift-${SWIFT_VER}-RELEASE-ubuntu${RELEASE_DOT}.tar.gz + - name: Add Path + run: echo "$GITHUB_WORKSPACE/swift-${SWIFT_VER}-RELEASE-ubuntu${RELEASE_DOT}/usr/bin" >> $GITHUB_PATH + - name: Test + run: swift test --enable-code-coverage + - uses: sersoft-gmbh/swift-coverage-action@v4 + id: coverage-files + with: + fail-on-empty-output: true + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v4 + with: + fail_ci_if_error: true + flags: swift-${{ matrix.swift-version }},ubuntu-${{ matrix.RELEASE_DOT }} + verbose: true + token: ${{ secrets.CODECOV_TOKEN }} + files: ${{ join(fromJSON(steps.coverage-files.outputs.files), ',') }} + build-macos: + name: Build on macOS + runs-on: ${{ matrix.os }} + if: "!contains(github.event.head_commit.message, 'ci skip')" + env: + PACKAGE_NAME: Options + strategy: + matrix: + include: + - xcode: "/Applications/Xcode_14.1.app" + os: macos-12 + iOSVersion: "16.1" + watchOSVersion: "9.0" + watchName: "Apple Watch Series 5 - 40mm" + iPhoneName: "iPhone 12 mini" + - xcode: "/Applications/Xcode_14.2.app" + os: macos-12 + iOSVersion: "16.2" + watchOSVersion: "9.1" + watchName: "Apple Watch Ultra (49mm)" + iPhoneName: "iPhone 14" + - xcode: "/Applications/Xcode_15.0.1.app" + os: macos-13 + iOSVersion: "17.0.1" + watchOSVersion: "10.0" + watchName: "Apple Watch Series 9 (41mm)" + iPhoneName: "iPhone 15" + - xcode: "/Applications/Xcode_15.1.app" + os: macos-13 + iOSVersion: "17.2" + watchOSVersion: "10.2" + watchName: "Apple Watch Series 9 (45mm)" + iPhoneName: "iPhone 15 Plus" + - xcode: "/Applications/Xcode_15.2.app" + os: macos-14 + iOSVersion: "17.2" + watchOSVersion: "10.2" + watchName: "Apple Watch Ultra (49mm)" + iPhoneName: "iPhone 15 Pro" + - xcode: "/Applications/Xcode_15.3.app" + os: macos-14 + iOSVersion: "17.4" + watchOSVersion: "10.4" + watchName: "Apple Watch Ultra 2 (49mm)" + iPhoneName: "iPhone 15 Pro Max" + steps: + - uses: actions/checkout@v4 + - name: Cache swift package modules + id: cache-spm-macos + uses: actions/cache@v4 + env: + cache-name: cache-spm + with: + path: .build + key: ${{ matrix.os }}-build-${{ env.cache-name }}-${{ matrix.xcode }}-${{ hashFiles('Package.resolved') }} + restore-keys: | + ${{ matrix.os }}-build-${{ env.cache-name }}-${{ matrix.xcode }}- + - name: Cache mint + if: startsWith(matrix.xcode,'/Applications/Xcode_15.3') + id: cache-mint + uses: actions/cache@v4 + env: + cache-name: cache-mint + with: + path: .mint + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('Mintfile') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + - name: Set Xcode Name + run: echo "XCODE_NAME=$(basename -- ${{ matrix.xcode }} | sed 's/\.[^.]*$//' | cut -d'_' -f2)" >> $GITHUB_ENV + - name: Setup Xcode + run: sudo xcode-select -s ${{ matrix.xcode }}/Contents/Developer + - name: Install mint + if: startsWith(matrix.xcode,'/Applications/Xcode_15.3') + run: | + brew update + brew install mint + - name: Build + run: swift build + - name: Run Swift Package tests + run: swift test --enable-code-coverage + - uses: sersoft-gmbh/swift-coverage-action@v4 + id: coverage-files-spm + with: + fail-on-empty-output: true + - name: Upload coverage reports to Codecov + uses: codecov/codecov-action@v4 + with: + files: ${{ join(fromJSON(steps.coverage-files-spm.outputs.files), ',') }} + token: ${{ secrets.CODECOV_TOKEN }} + flags: macOS,${{ env.XCODE_NAME }},${{ matrix.runs-on }} + - name: Clean up spm build directory + run: rm -rf .build + - name: Lint + run: ./scripts/lint.sh + if: startsWith(matrix.xcode,'/Applications/Xcode_15.3') + # - name: Run iOS target tests + # run: xcodebuild test -scheme ${{ env.PACKAGE_NAME }} -sdk "iphonesimulator" -destination 'platform=iOS Simulator,name=${{ matrix.iPhoneName }},OS=${{ matrix.iOSVersion }}' -enableCodeCoverage YES build test + # - uses: sersoft-gmbh/swift-coverage-action@v4 + # id: coverage-files-iOS + # with: + # fail-on-empty-output: true + # - name: Upload coverage to Codecov + # uses: codecov/codecov-action@v4 + # with: + # fail_ci_if_error: true + # verbose: true + # token: ${{ secrets.CODECOV_TOKEN }} + # files: ${{ join(fromJSON(steps.coverage-files-iOS.outputs.files), ',') }} + # flags: iOS,iOS${{ matrix.iOSVersion }},macOS,${{ env.XCODE_NAME }} + # - name: Run watchOS target tests + # run: xcodebuild test -scheme ${{ env.PACKAGE_NAME }} -sdk "watchsimulator" -destination 'platform=watchOS Simulator,name=${{ matrix.watchName }},OS=${{ matrix.watchOSVersion }}' -enableCodeCoverage YES build test + # - uses: sersoft-gmbh/swift-coverage-action@v4 + # id: coverage-files-watchOS + # with: + # fail-on-empty-output: true + # - name: Upload coverage to Codecov + # uses: codecov/codecov-action@v4 + # with: + # fail_ci_if_error: true + # verbose: true + # token: ${{ secrets.CODECOV_TOKEN }} + # files: ${{ join(fromJSON(steps.coverage-files-watchOS.outputs.files), ',') }} + # flags: watchOS,watchOS${{ matrix.watchOSVersion }},macOS,${{ env.XCODE_NAME }} + build-self: + name: Build on Self-Hosting macOS + runs-on: [self-hosted, macOS] + if: github.event.repository.owner.login == github.event.organization.login && !contains(github.event.head_commit.message, 'ci skip') + steps: + - uses: actions/checkout@v4 + - name: Cache swift package modules + id: cache-spm-macos + uses: actions/cache@v4 + env: + cache-name: cache-spm + with: + path: .build + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('Package.resolved') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + - name: Cache mint + id: cache-mint + uses: actions/cache@v4 + env: + cache-name: cache-mint + with: + path: .mint + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('Mintfile') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + - name: Build + run: swift build + - name: Run Swift Package tests + run: swift test --enable-code-coverage + - uses: sersoft-gmbh/swift-coverage-action@v4 + with: + fail-on-empty-output: true + - name: Upload coverage reports to Codecov + uses: codecov/codecov-action@v4 + with: + token: ${{ secrets.CODECOV_TOKEN }} + flags: macOS,${{ env.XCODE_NAME }} + - name: Clean up spm build directory + run: rm -rf .build + - name: Lint + run: ./scripts/lint.sh diff --git a/Macros/Options/.gitignore b/Macros/Options/.gitignore new file mode 100644 index 0000000..008465e --- /dev/null +++ b/Macros/Options/.gitignore @@ -0,0 +1,133 @@ +# Created by https://www.toptal.com/developers/gitignore/api/swift,swiftpm,swiftpackagemanager,xcode,macos +# Edit at https://www.toptal.com/developers/gitignore?templates=swift,swiftpm,swiftpackagemanager,xcode,macos + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### macOS Patch ### +# iCloud generated files +*.icloud + +### Swift ### +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## User settings +xcuserdata/ + +## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) +*.xcscmblueprint +*.xccheckout + +## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) +build/ +DerivedData/ +*.moved-aside +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 + +## Obj-C/Swift specific +*.hmap + +## App packaging +*.ipa +*.dSYM.zip +*.dSYM + +## Playgrounds +timeline.xctimeline +playground.xcworkspace + +# Swift Package Manager +# +# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. +# Packages/ +# Package.pins +# Package.resolved +*.xcodeproj +# +# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata +# hence it is not needed unless you have added a package configuration file to your project +.swiftpm + +.build/ + +# CocoaPods +# +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# +# Pods/ +# +# Add this line if you want to avoid checking in source code from the Xcode workspace +# *.xcworkspace + +# Carthage +# +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts + +Carthage/Build/ + +# Accio dependency management +Dependencies/ +.accio/ + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. +# Instead, use fastlane to re-generate the screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/#source-control + +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots/**/*.png +fastlane/test_output + +# Code Injection +# +# After new code Injection tools there's a generated folder /iOSInjectionProject +# https://github.com/johnno1962/injectionforxcode + +iOSInjectionProject/ + +.mint +Output + +# Due to support for 5.10 and below +Package.resolved \ No newline at end of file diff --git a/Macros/Options/.gitrepo b/Macros/Options/.gitrepo new file mode 100644 index 0000000..394e5c2 --- /dev/null +++ b/Macros/Options/.gitrepo @@ -0,0 +1,12 @@ +; DO NOT EDIT (unless you know what you are doing) +; +; This subdirectory is a git "subrepo", and this file is maintained by the +; git-subrepo command. See https://github.com/ingydotnet/git-subrepo#readme +; +[subrepo] + remote = git@github.com:brightdigit/Options.git + branch = syntaxkit-sample + commit = a2fd9e31d5fdf1a0e9d61fe76ab5a4461d10b08a + parent = 12b377f8e1df18994e1c9693f6c6399e7f9ddeb2 + method = merge + cmdver = 0.4.9 diff --git a/Macros/Options/.hound.yml b/Macros/Options/.hound.yml new file mode 100644 index 0000000..6941f63 --- /dev/null +++ b/Macros/Options/.hound.yml @@ -0,0 +1,2 @@ +swiftlint: + config_file: .swiftlint.yml diff --git a/Macros/Options/.periphery.yml b/Macros/Options/.periphery.yml new file mode 100644 index 0000000..85b884a --- /dev/null +++ b/Macros/Options/.periphery.yml @@ -0,0 +1 @@ +retain_public: true diff --git a/Macros/Options/.spi.yml b/Macros/Options/.spi.yml new file mode 100644 index 0000000..2c312f8 --- /dev/null +++ b/Macros/Options/.spi.yml @@ -0,0 +1,4 @@ +version: 1 +builder: + configs: + - documentation_targets: [Options] diff --git a/Macros/Options/.swift-version b/Macros/Options/.swift-version new file mode 100644 index 0000000..760606e --- /dev/null +++ b/Macros/Options/.swift-version @@ -0,0 +1 @@ +5.7 diff --git a/Macros/Options/.swiftformat b/Macros/Options/.swiftformat new file mode 100644 index 0000000..c510d49 --- /dev/null +++ b/Macros/Options/.swiftformat @@ -0,0 +1,7 @@ +--indent 2 +--header "\n .*?\.swift\n SimulatorServices\n\n Created by Leo Dion.\n Copyright © {year} BrightDigit.\n\n Permission is hereby granted, free of charge, to any person\n obtaining a copy of this software and associated documentation\n files (the “Software”), to deal in the Software without\n restriction, including without limitation the rights to use,\n copy, modify, merge, publish, distribute, sublicense, and/or\n sell copies of the Software, and to permit persons to whom the\n Software is furnished to do so, subject to the following\n conditions:\n \n The above copyright notice and this permission notice shall be\n included in all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND,\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n OTHER DEALINGS IN THE SOFTWARE.\n" +--commas inline +--disable wrapMultilineStatementBraces, redundantInternal +--extensionacl on-declarations +--decimalgrouping 3,4 +--exclude .build, DerivedData, .swiftpm diff --git a/Macros/Options/.swiftlint.yml b/Macros/Options/.swiftlint.yml new file mode 100644 index 0000000..6be46e8 --- /dev/null +++ b/Macros/Options/.swiftlint.yml @@ -0,0 +1,118 @@ +opt_in_rules: + - array_init + - attributes + - closure_body_length + - closure_end_indentation + - closure_spacing + - collection_alignment + - conditional_returns_on_newline + - contains_over_filter_count + - contains_over_filter_is_empty + - contains_over_first_not_nil + - contains_over_range_nil_comparison + - convenience_type + - discouraged_object_literal + - discouraged_optional_boolean + - empty_collection_literal + - empty_count + - empty_string + - empty_xctest_method + - enum_case_associated_values_count + - expiring_todo + - explicit_acl + - explicit_init + - explicit_top_level_acl + - fallthrough + - fatal_error_message + - file_name + - file_name_no_space + - file_types_order + - first_where + - flatmap_over_map_reduce + - force_unwrapping + - function_default_parameter_at_end + - ibinspectable_in_extension + - identical_operands + - implicit_return + - implicitly_unwrapped_optional + - indentation_width + - joined_default_parameter + - last_where + - legacy_multiple + - legacy_random + - literal_expression_end_indentation + - lower_acl_than_parent + - missing_docs + - modifier_order + - multiline_arguments + - multiline_arguments_brackets + - multiline_function_chains + - multiline_literal_brackets + - multiline_parameters + - nimble_operator + - nslocalizedstring_key + - nslocalizedstring_require_bundle + - number_separator + - object_literal + - operator_usage_whitespace + - optional_enum_case_matching + - overridden_super_call + - override_in_extension + - pattern_matching_keywords + - prefer_self_type_over_type_of_self + - prefer_zero_over_explicit_init + - private_action + - private_outlet + - prohibited_interface_builder + - prohibited_super_call + - quick_discouraged_call + - quick_discouraged_focused_test + - quick_discouraged_pending_test + - reduce_into + - redundant_nil_coalescing + - redundant_type_annotation + - required_enum_case + - single_test_class + - sorted_first_last + - sorted_imports + - static_operator + - strong_iboutlet + - toggle_bool + - trailing_closure + - type_contents_order + - unavailable_function + - unneeded_parentheses_in_closure_argument + - unowned_variable_capture + - untyped_error_in_catch + - vertical_parameter_alignment_on_call + - vertical_whitespace_closing_braces + - vertical_whitespace_opening_braces + - xct_specific_matcher + - yoda_condition +analyzer_rules: + - explicit_self + - unused_declaration + - unused_import +type_body_length: + - 100 + - 200 +file_length: + - 200 + - 300 +function_body_length: + - 18 + - 40 +function_parameter_count: 8 +line_length: + - 90 + - 90 +identifier_name: + excluded: + - id +excluded: + - Tests + - DerivedData + - .build + - .swiftpm +indentation_width: + indentation_width: 2 diff --git a/Macros/Options/LICENSE b/Macros/Options/LICENSE new file mode 100644 index 0000000..59f9701 --- /dev/null +++ b/Macros/Options/LICENSE @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2020 Bright Digit, LLC + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Macros/Options/Mintfile b/Macros/Options/Mintfile new file mode 100644 index 0000000..c1dc548 --- /dev/null +++ b/Macros/Options/Mintfile @@ -0,0 +1,2 @@ +nicklockwood/SwiftFormat@0.53.5 +realm/SwiftLint@0.54.0 \ No newline at end of file diff --git a/Macros/Options/Package.swift b/Macros/Options/Package.swift new file mode 100644 index 0000000..5646b68 --- /dev/null +++ b/Macros/Options/Package.swift @@ -0,0 +1,34 @@ +// swift-tools-version: 5.7.1 + +// swiftlint:disable explicit_top_level_acl +// swiftlint:disable prefixed_toplevel_constant +// swiftlint:disable explicit_acl + +import PackageDescription + +let package = Package( + name: "Options", + products: [ + .library( + name: "Options", + targets: ["Options"] + ) + ], + dependencies: [ + // Dependencies declare other packages that this package depends on. + ], + targets: [ + .target( + name: "Options", + dependencies: [] + ), + .testTarget( + name: "OptionsTests", + dependencies: ["Options"] + ) + ] +) + +// swiftlint:enable explicit_top_level_acl +// swiftlint:enable prefixed_toplevel_constant +// swiftlint:enable explicit_acl diff --git a/Macros/Options/Package@swift-5.10.swift b/Macros/Options/Package@swift-5.10.swift new file mode 100644 index 0000000..da62733 --- /dev/null +++ b/Macros/Options/Package@swift-5.10.swift @@ -0,0 +1,65 @@ +// swift-tools-version: 5.10 + +// swiftlint:disable explicit_top_level_acl +// swiftlint:disable prefixed_toplevel_constant +// swiftlint:disable explicit_acl + +import CompilerPluginSupport +import PackageDescription + +let swiftSettings = [ + SwiftSetting.enableUpcomingFeature("BareSlashRegexLiterals"), + SwiftSetting.enableUpcomingFeature("ConciseMagicFile"), + SwiftSetting.enableUpcomingFeature("ExistentialAny"), + SwiftSetting.enableUpcomingFeature("ForwardTrailingClosures"), + SwiftSetting.enableUpcomingFeature("ImplicitOpenExistentials"), + SwiftSetting.enableUpcomingFeature("StrictConcurrency"), + SwiftSetting.enableUpcomingFeature("DisableOutwardActorInference"), + SwiftSetting.enableExperimentalFeature("StrictConcurrency") +] + +let package = Package( + name: "Options", + platforms: [ + .macOS(.v10_15), + .iOS(.v13), + .tvOS(.v13), + .watchOS(.v6), + .macCatalyst(.v13), + .visionOS(.v1) + ], + products: [ + .library( + name: "Options", + targets: ["Options"] + ) + ], + dependencies: [ + .package(url: "https://github.com/apple/swift-syntax", from: "510.0.0") + // Dependencies declare other packages that this package depends on. + // .package(url: /* package url */, from: "1.0.0") + ], + targets: [ + .target( + name: "Options", + dependencies: ["OptionsMacros"], + swiftSettings: swiftSettings + ), + .macro( + name: "OptionsMacros", + dependencies: [ + .product(name: "SwiftSyntaxMacros", package: "swift-syntax"), + .product(name: "SwiftCompilerPlugin", package: "swift-syntax") + ], + swiftSettings: swiftSettings + ), + .testTarget( + name: "OptionsTests", + dependencies: ["Options"] + ) + ] +) + +// swiftlint:enable explicit_top_level_acl +// swiftlint:enable prefixed_toplevel_constant +// swiftlint:enable explicit_acl diff --git a/Macros/Options/Package@swift-6.1.swift b/Macros/Options/Package@swift-6.1.swift new file mode 100644 index 0000000..402bd68 --- /dev/null +++ b/Macros/Options/Package@swift-6.1.swift @@ -0,0 +1,54 @@ +// swift-tools-version: 6.1 + +// swiftlint:disable explicit_top_level_acl +// swiftlint:disable prefixed_toplevel_constant +// swiftlint:disable explicit_acl + +import CompilerPluginSupport +import PackageDescription + + +let package = Package( + name: "Options", + platforms: [ + .macOS(.v13), + .iOS(.v13), + .watchOS(.v6), + .tvOS(.v13), + .visionOS(.v1) + ], + products: [ + .library( + name: "Options", + targets: ["Options"] + ) + ], + dependencies: [ + .package(path: "../.."), + .package(url: "https://github.com/apple/swift-syntax.git", from: "601.0.1") + // Dependencies declare other packages that this package depends on. + // .package(url: /* package url */, from: "1.0.0") + ], + targets: [ + .target( + name: "Options", + dependencies: ["OptionsMacros"] + ), + .macro( + name: "OptionsMacros", + dependencies: [ + .product(name: "SyntaxKit", package: "SyntaxKit"), + .product(name: "SwiftSyntaxMacros", package: "swift-syntax"), + .product(name: "SwiftCompilerPlugin", package: "swift-syntax") + ] + ), + .testTarget( + name: "OptionsTests", + dependencies: ["Options"] + ) + ] +) + +// swiftlint:enable explicit_top_level_acl +// swiftlint:enable prefixed_toplevel_constant +// swiftlint:enable explicit_acl diff --git a/Macros/Options/README.md b/Macros/Options/README.md new file mode 100644 index 0000000..40ed2ed --- /dev/null +++ b/Macros/Options/README.md @@ -0,0 +1,182 @@ + +

+ Options +

+

Options

+ +More powerful options for `Enum` and `OptionSet` types. + +[![SwiftPM](https://img.shields.io/badge/SPM-Linux%20%7C%20iOS%20%7C%20macOS%20%7C%20watchOS%20%7C%20tvOS-success?logo=swift)](https://swift.org) +[![Twitter](https://img.shields.io/badge/twitter-@brightdigit-blue.svg?style=flat)](http://twitter.com/brightdigit) +![GitHub](https://img.shields.io/github/license/brightdigit/Options) +![GitHub issues](https://img.shields.io/github/issues/brightdigit/Options) +![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/brightdigit/Options/Options.yml?label=actions&logo=github&?branch=main) + +[![](https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2Fbrightdigit%2FOptions%2Fbadge%3Ftype%3Dswift-versions)](https://swiftpackageindex.com/brightdigit/Options) +[![](https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2Fbrightdigit%2FOptions%2Fbadge%3Ftype%3Dplatforms)](https://swiftpackageindex.com/brightdigit/Options) + +[![Codecov](https://img.shields.io/codecov/c/github/brightdigit/Options)](https://codecov.io/gh/brightdigit/Options) +[![CodeFactor Grade](https://img.shields.io/codefactor/grade/github/brightdigit/Options)](https://www.codefactor.io/repository/github/brightdigit/Options) +[![codebeat badge](https://codebeat.co/badges/c47b7e58-867c-410b-80c5-57e10140ba0f)](https://codebeat.co/projects/github-com-brightdigit-mistkit-main) +[![Code Climate maintainability](https://img.shields.io/codeclimate/maintainability/brightdigit/Options)](https://codeclimate.com/github/brightdigit/Options) +[![Code Climate technical debt](https://img.shields.io/codeclimate/tech-debt/brightdigit/Options?label=debt)](https://codeclimate.com/github/brightdigit/Options) +[![Code Climate issues](https://img.shields.io/codeclimate/issues/brightdigit/Options)](https://codeclimate.com/github/brightdigit/Options) +[![Reviewed by Hound](https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg)](https://houndci.com) + + +# Table of Contents + + * [Introduction](#introduction) + * [Requirements](#requirements) + * [Installation](#installation) + * [Usage](#usage) + * [Versatile Options with Enums and OptionSets](#versatile-options-with-enums-and-optionsets) + * [Multiple Value Types](#multiple-value-types) + * [Creating an OptionSet](#creating-an-optionset) + * [Further Code Documentation](#further-code-documentation) + * [License](#license) + +# Introduction + +**Options** provides a powerful set of features for `Enum` and `OptionSet` types: + +- Providing additional representations for `Enum` types besides the `RawType rawValue` +- Being able to interchange between `Enum` and `OptionSet` types +- Using an additional value type for a `Codable` `OptionSet` + +# Requirements + +**Apple Platforms** + +- Xcode 14.1 or later +- Swift 5.7.1 or later +- iOS 16 / watchOS 9 / tvOS 16 / macOS 12 or later deployment targets + +**Linux** + +- Ubuntu 20.04 or later +- Swift 5.7.1 or later + +# Installation + +Use the Swift Package Manager to install this library via the repository url: + +``` +https://github.com/brightdigit/Options.git +``` + +Use version up to `1.0`. + +# Usage + +## Versatile Options + +Let's say we are using an `Enum` for a list of popular social media networks: + +```swift +enum SocialNetwork : Int { + case digg + case aim + case bebo + case delicious + case eworld + case googleplus + case itunesping + case jaiku + case miiverse + case musically + case orkut + case posterous + case stumbleupon + case windowslive + case yahoo +} +``` + +We'll be using this as a way to define a particular social handle: + +```swift +struct SocialHandle { + let name : String + let network : SocialNetwork +} +``` + +However we also want to provide a way to have a unique set of social networks available: + +```swift +struct SocialNetworkSet : Int, OptionSet { +... +} + +let user : User +let networks : SocialNetworkSet = user.availableNetworks() +``` + +We can then simply use ``Options()`` macro to generate both these types: + +```swift +@Options +enum SocialNetwork : Int { + case digg + case aim + case bebo + case delicious + case eworld + case googleplus + case itunesping + case jaiku + case miiverse + case musically + case orkut + case posterous + case stumbleupon + case windowslive + case yahoo +} +``` + +Now we can use the newly create `SocialNetworkSet` type to store a set of values: + +```swift +let networks : SocialNetworkSet +networks = [.aim, .delicious, .googleplus, .windowslive] +``` + +## Multiple Value Types + +With the ``Options()`` macro, we add the ability to encode and decode values not only from their raw value but also from a another type such as a string. This is useful for when you want to store the values in JSON format. + +For instance, with a type like `SocialNetwork` we need need to store the value as an Integer: + +```json +5 +``` + +However by adding the ``Options()`` macro we can also decode from a String: + +``` +"googleplus" +``` + +## Creating an OptionSet + +We can also have a new `OptionSet` type created. ``Options()`` create a new `OptionSet` type with the suffix `-Set`. This new `OptionSet` will automatically work with your enum to create a distinct set of values. Additionally it will decode and encode your values as an Array of String. This means the value: + +```swift +[.aim, .delicious, .googleplus, .windowslive] +``` + +is encoded as: + +```json +["aim", "delicious", "googleplus", "windowslive"] +``` + +# Further Code Documentation + +[Documentation Here](https://swiftpackageindex.com/brightdigit/Options/main/documentation/options) + +# License + +This code is distributed under the MIT license. See the [LICENSE](LICENSE) file for more info. diff --git a/Macros/Options/Scripts/docc.sh b/Macros/Options/Scripts/docc.sh new file mode 100755 index 0000000..3e4c918 --- /dev/null +++ b/Macros/Options/Scripts/docc.sh @@ -0,0 +1,3 @@ +#!/bin/sh +xcodebuild docbuild -scheme SimulatorServices -derivedDataPath DerivedData -destination 'platform=macOS' +$(xcrun --find docc) process-archive transform-for-static-hosting DerivedData/Build/Products/Debug/SimulatorServices.doccarchive --output-path Output \ No newline at end of file diff --git a/Macros/Options/Scripts/gh-md-toc b/Macros/Options/Scripts/gh-md-toc new file mode 100755 index 0000000..03b5ddd --- /dev/null +++ b/Macros/Options/Scripts/gh-md-toc @@ -0,0 +1,421 @@ +#!/usr/bin/env bash + +# +# Steps: +# +# 1. Download corresponding html file for some README.md: +# curl -s $1 +# +# 2. Discard rows where no substring 'user-content-' (github's markup): +# awk '/user-content-/ { ... +# +# 3.1 Get last number in each row like ' ...
sitemap.js.*<\/h/)+2, RLENGTH-5) +# +# 5. Find anchor and insert it inside "(...)": +# substr($0, match($0, "href=\"[^\"]+?\" ")+6, RLENGTH-8) +# + +gh_toc_version="0.10.0" + +gh_user_agent="gh-md-toc v$gh_toc_version" + +# +# Download rendered into html README.md by its url. +# +# +gh_toc_load() { + local gh_url=$1 + + if type curl &>/dev/null; then + curl --user-agent "$gh_user_agent" -s "$gh_url" + elif type wget &>/dev/null; then + wget --user-agent="$gh_user_agent" -qO- "$gh_url" + else + echo "Please, install 'curl' or 'wget' and try again." + exit 1 + fi +} + +# +# Converts local md file into html by GitHub +# +# -> curl -X POST --data '{"text": "Hello world github/linguist#1 **cool**, and #1!"}' https://api.github.com/markdown +#

Hello world github/linguist#1 cool, and #1!

'" +gh_toc_md2html() { + local gh_file_md=$1 + local skip_header=$2 + + URL=https://api.github.com/markdown/raw + + if [ -n "$GH_TOC_TOKEN" ]; then + TOKEN=$GH_TOC_TOKEN + else + TOKEN_FILE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/token.txt" + if [ -f "$TOKEN_FILE" ]; then + TOKEN="$(cat "$TOKEN_FILE")" + fi + fi + if [ -n "${TOKEN}" ]; then + AUTHORIZATION="Authorization: token ${TOKEN}" + fi + + local gh_tmp_file_md=$gh_file_md + if [ "$skip_header" = "yes" ]; then + if grep -Fxq "" "$gh_src"; then + # cut everything before the toc + gh_tmp_file_md=$gh_file_md~~ + sed '1,//d' "$gh_file_md" > "$gh_tmp_file_md" + fi + fi + + # echo $URL 1>&2 + OUTPUT=$(curl -s \ + --user-agent "$gh_user_agent" \ + --data-binary @"$gh_tmp_file_md" \ + -H "Content-Type:text/plain" \ + -H "$AUTHORIZATION" \ + "$URL") + + rm -f "${gh_file_md}~~" + + if [ "$?" != "0" ]; then + echo "XXNetworkErrorXX" + fi + if [ "$(echo "${OUTPUT}" | awk '/API rate limit exceeded/')" != "" ]; then + echo "XXRateLimitXX" + else + echo "${OUTPUT}" + fi +} + + +# +# Is passed string url +# +gh_is_url() { + case $1 in + https* | http*) + echo "yes";; + *) + echo "no";; + esac +} + +# +# TOC generator +# +gh_toc(){ + local gh_src=$1 + local gh_src_copy=$1 + local gh_ttl_docs=$2 + local need_replace=$3 + local no_backup=$4 + local no_footer=$5 + local indent=$6 + local skip_header=$7 + + if [ "$gh_src" = "" ]; then + echo "Please, enter URL or local path for a README.md" + exit 1 + fi + + + # Show "TOC" string only if working with one document + if [ "$gh_ttl_docs" = "1" ]; then + + echo "Table of Contents" + echo "=================" + echo "" + gh_src_copy="" + + fi + + if [ "$(gh_is_url "$gh_src")" == "yes" ]; then + gh_toc_load "$gh_src" | gh_toc_grab "$gh_src_copy" "$indent" + if [ "${PIPESTATUS[0]}" != "0" ]; then + echo "Could not load remote document." + echo "Please check your url or network connectivity" + exit 1 + fi + if [ "$need_replace" = "yes" ]; then + echo + echo "!! '$gh_src' is not a local file" + echo "!! Can't insert the TOC into it." + echo + fi + else + local rawhtml + rawhtml=$(gh_toc_md2html "$gh_src" "$skip_header") + if [ "$rawhtml" == "XXNetworkErrorXX" ]; then + echo "Parsing local markdown file requires access to github API" + echo "Please make sure curl is installed and check your network connectivity" + exit 1 + fi + if [ "$rawhtml" == "XXRateLimitXX" ]; then + echo "Parsing local markdown file requires access to github API" + echo "Error: You exceeded the hourly limit. See: https://developer.github.com/v3/#rate-limiting" + TOKEN_FILE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/token.txt" + echo "or place GitHub auth token here: ${TOKEN_FILE}" + exit 1 + fi + local toc + toc=`echo "$rawhtml" | gh_toc_grab "$gh_src_copy" "$indent"` + echo "$toc" + if [ "$need_replace" = "yes" ]; then + if grep -Fxq "" "$gh_src" && grep -Fxq "" "$gh_src"; then + echo "Found markers" + else + echo "You don't have or in your file...exiting" + exit 1 + fi + local ts="<\!--ts-->" + local te="<\!--te-->" + local dt + dt=$(date +'%F_%H%M%S') + local ext=".orig.${dt}" + local toc_path="${gh_src}.toc.${dt}" + local toc_createdby="" + local toc_footer + toc_footer="" + # http://fahdshariff.blogspot.ru/2012/12/sed-mutli-line-replacement-between-two.html + # clear old TOC + sed -i"${ext}" "/${ts}/,/${te}/{//!d;}" "$gh_src" + # create toc file + echo "${toc}" > "${toc_path}" + if [ "${no_footer}" != "yes" ]; then + echo -e "\n${toc_createdby}\n${toc_footer}\n" >> "$toc_path" + fi + + # insert toc file + if ! sed --version > /dev/null 2>&1; then + sed -i "" "/${ts}/r ${toc_path}" "$gh_src" + else + sed -i "/${ts}/r ${toc_path}" "$gh_src" + fi + echo + if [ "${no_backup}" = "yes" ]; then + rm "$toc_path" "$gh_src$ext" + fi + echo "!! TOC was added into: '$gh_src'" + if [ -z "${no_backup}" ]; then + echo "!! Origin version of the file: '${gh_src}${ext}'" + echo "!! TOC added into a separate file: '${toc_path}'" + fi + echo + fi + fi +} + +# +# Grabber of the TOC from rendered html +# +# $1 - a source url of document. +# It's need if TOC is generated for multiple documents. +# $2 - number of spaces used to indent. +# +gh_toc_grab() { + + href_regex="/href=\"[^\"]+?\"/" + common_awk_script=' + modified_href = "" + split(href, chars, "") + for (i=1;i <= length(href); i++) { + c = chars[i] + res = "" + if (c == "+") { + res = " " + } else { + if (c == "%") { + res = "\\x" + } else { + res = c "" + } + } + modified_href = modified_href res + } + print sprintf("%*s", (level-1)*'"$2"', "") "* [" text "](" gh_url modified_href ")" + ' + if [ "`uname -s`" == "OS/390" ]; then + grepcmd="pcregrep -o" + echoargs="" + awkscript='{ + level = substr($0, 3, 1) + text = substr($0, match($0, /<\/span><\/a>[^<]*<\/h/)+11, RLENGTH-14) + href = substr($0, match($0, '$href_regex')+6, RLENGTH-7) + '"$common_awk_script"' + }' + else + grepcmd="grep -Eo" + echoargs="-e" + awkscript='{ + level = substr($0, 3, 1) + text = substr($0, match($0, /">.*<\/h/)+2, RLENGTH-5) + href = substr($0, match($0, '$href_regex')+6, RLENGTH-7) + '"$common_awk_script"' + }' + fi + + # if closed is on the new line, then move it on the prev line + # for example: + # was: The command foo1 + # + # became: The command foo1 + sed -e ':a' -e 'N' -e '$!ba' -e 's/\n<\/h/<\/h/g' | + + # Sometimes a line can start with . Fix that. + sed -e ':a' -e 'N' -e '$!ba' -e 's/\n//g' | sed 's/<\/code>//g' | + + # remove g-emoji + sed 's/]*[^<]*<\/g-emoji> //g' | + + # now all rows are like: + #

title

.. + # format result line + # * $0 - whole string + # * last element of each row: "/dev/null; then + $tool --version | head -n 1 + else + echo "not installed" + fi + done +} + +show_help() { + local app_name + app_name=$(basename "$0") + echo "GitHub TOC generator ($app_name): $gh_toc_version" + echo "" + echo "Usage:" + echo " $app_name [options] src [src] Create TOC for a README file (url or local path)" + echo " $app_name - Create TOC for markdown from STDIN" + echo " $app_name --help Show help" + echo " $app_name --version Show version" + echo "" + echo "Options:" + echo " --indent Set indent size. Default: 3." + echo " --insert Insert new TOC into original file. For local files only. Default: false." + echo " See https://github.com/ekalinin/github-markdown-toc/issues/41 for details." + echo " --no-backup Remove backup file. Set --insert as well. Default: false." + echo " --hide-footer Do not write date & author of the last TOC update. Set --insert as well. Default: false." + echo " --skip-header Hide entry of the topmost headlines. Default: false." + echo " See https://github.com/ekalinin/github-markdown-toc/issues/125 for details." + echo "" +} + +# +# Options handlers +# +gh_toc_app() { + local need_replace="no" + local indent=3 + + if [ "$1" = '--help' ] || [ $# -eq 0 ] ; then + show_help + return + fi + + if [ "$1" = '--version' ]; then + show_version + return + fi + + if [ "$1" = '--indent' ]; then + indent="$2" + shift 2 + fi + + if [ "$1" = "-" ]; then + if [ -z "$TMPDIR" ]; then + TMPDIR="/tmp" + elif [ -n "$TMPDIR" ] && [ ! -d "$TMPDIR" ]; then + mkdir -p "$TMPDIR" + fi + local gh_tmp_md + if [ "`uname -s`" == "OS/390" ]; then + local timestamp + timestamp=$(date +%m%d%Y%H%M%S) + gh_tmp_md="$TMPDIR/tmp.$timestamp" + else + gh_tmp_md=$(mktemp "$TMPDIR/tmp.XXXXXX") + fi + while read -r input; do + echo "$input" >> "$gh_tmp_md" + done + gh_toc_md2html "$gh_tmp_md" | gh_toc_grab "" "$indent" + return + fi + + if [ "$1" = '--insert' ]; then + need_replace="yes" + shift + fi + + if [ "$1" = '--no-backup' ]; then + need_replace="yes" + no_backup="yes" + shift + fi + + if [ "$1" = '--hide-footer' ]; then + need_replace="yes" + no_footer="yes" + shift + fi + + if [ "$1" = '--skip-header' ]; then + skip_header="yes" + shift + fi + + + for md in "$@" + do + echo "" + gh_toc "$md" "$#" "$need_replace" "$no_backup" "$no_footer" "$indent" "$skip_header" + done + + echo "" + echo "" +} + +# +# Entry point +# +gh_toc_app "$@" \ No newline at end of file diff --git a/Macros/Options/Scripts/lint.sh b/Macros/Options/Scripts/lint.sh new file mode 100755 index 0000000..31c3fa9 --- /dev/null +++ b/Macros/Options/Scripts/lint.sh @@ -0,0 +1,44 @@ +#!/bin/sh + +if [ -z "$SRCROOT" ]; then + SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + PACKAGE_DIR="${SCRIPT_DIR}/.." +else + PACKAGE_DIR="${SRCROOT}" +fi + +if [ -z "$GITHUB_ACTION" ]; then + MINT_CMD="/opt/homebrew/bin/mint" +else + MINT_CMD="mint" +fi + +export MINT_PATH="$PACKAGE_DIR/.mint" +MINT_ARGS="-n -m $PACKAGE_DIR/Mintfile --silent" +MINT_RUN="$MINT_CMD run $MINT_ARGS" + +pushd $PACKAGE_DIR + +$MINT_CMD bootstrap -m Mintfile + +if [ "$LINT_MODE" == "NONE" ]; then + exit +elif [ "$LINT_MODE" == "STRICT" ]; then + SWIFTFORMAT_OPTIONS="" + SWIFTLINT_OPTIONS="--strict" +else + SWIFTFORMAT_OPTIONS="" + SWIFTLINT_OPTIONS="" +fi + +pushd $PACKAGE_DIR + +if [ -z "$CI" ]; then + $MINT_RUN swiftformat . + $MINT_RUN swiftlint --fix +fi + +$MINT_RUN swiftformat --lint $SWIFTFORMAT_OPTIONS . +$MINT_RUN swiftlint lint $SWIFTLINT_OPTIONS + +popd diff --git a/Macros/Options/Sources/Options/Array.swift b/Macros/Options/Sources/Options/Array.swift new file mode 100644 index 0000000..0c4db74 --- /dev/null +++ b/Macros/Options/Sources/Options/Array.swift @@ -0,0 +1,58 @@ +// +// Array.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +// swiftlint:disable:next line_length +@available(*, deprecated, renamed: "MappedValueGenericRepresented", message: "Use MappedValueGenericRepresented instead.") +public protocol MappedValueCollectionRepresented: MappedValueRepresented + where MappedValueType: Sequence {} + +extension Array: MappedValues where Element: Equatable {} + +extension Collection where Element: Equatable, Self: MappedValues { + /// Get the index based on the value passed. + /// - Parameter value: Value to search. + /// - Returns: Index found. + public func key(value: Element) throws -> Self.Index { + guard let index = firstIndex(of: value) else { + throw MappedValueRepresentableError.valueNotFound + } + + return index + } + + /// Gets the value based on the index. + /// - Parameter key: The index. + /// - Returns: The value at index. + public func value(key: Self.Index) throws -> Element { + guard key < endIndex, key >= startIndex else { + throw MappedValueRepresentableError.valueNotFound + } + return self[key] + } +} diff --git a/Macros/Options/Sources/Options/CodingOptions.swift b/Macros/Options/Sources/Options/CodingOptions.swift new file mode 100644 index 0000000..e26ad68 --- /dev/null +++ b/Macros/Options/Sources/Options/CodingOptions.swift @@ -0,0 +1,49 @@ +// +// CodingOptions.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation + +/// Options for how a ``MappedValueRepresentable`` type is encoding and decoded. +public struct CodingOptions: OptionSet, Sendable { + /// Allow decoding from String + public static let allowMappedValueDecoding: CodingOptions = .init(rawValue: 1) + + /// Encode the value as a String. + public static let encodeAsMappedValue: CodingOptions = .init(rawValue: 2) + + /// Default options. + public static let `default`: CodingOptions = + [.allowMappedValueDecoding, encodeAsMappedValue] + + public let rawValue: Int + + public init(rawValue: Int) { + self.rawValue = rawValue + } +} diff --git a/Macros/Options/Sources/Options/Dictionary.swift b/Macros/Options/Sources/Options/Dictionary.swift new file mode 100644 index 0000000..a7a3b31 --- /dev/null +++ b/Macros/Options/Sources/Options/Dictionary.swift @@ -0,0 +1,51 @@ +// +// Dictionary.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +// swiftlint:disable:next line_length +@available(*, deprecated, renamed: "MappedValueGenericRepresented", message: "Use MappedValueGenericRepresented instead.") +public protocol MappedValueDictionaryRepresented: MappedValueRepresented + where MappedValueType == [Int: MappedType] {} + +extension Dictionary: MappedValues where Value: Equatable { + public func key(value: Value) throws -> Key { + let pair = first { $0.value == value } + guard let key = pair?.key else { + throw MappedValueRepresentableError.valueNotFound + } + + return key + } + + public func value(key: Key) throws -> Value { + guard let value = self[key] else { + throw MappedValueRepresentableError.valueNotFound + } + return value + } +} diff --git a/Macros/Options/Sources/Options/Documentation.docc/Documentation.md b/Macros/Options/Sources/Options/Documentation.docc/Documentation.md new file mode 100644 index 0000000..994798d --- /dev/null +++ b/Macros/Options/Sources/Options/Documentation.docc/Documentation.md @@ -0,0 +1,162 @@ +# ``Options`` + +More powerful options for `Enum` and `OptionSet` types. + +## Overview + +**Options** provides a powerful set of features for `Enum` and `OptionSet` types: + +- Providing additional representations for `Enum` types besides the `RawType rawValue` +- Being able to interchange between `Enum` and `OptionSet` types +- Using an additional value type for a `Codable` `OptionSet` + +### Requirements + +**Apple Platforms** + +- Xcode 14.1 or later +- Swift 5.7.1 or later +- iOS 16 / watchOS 9 / tvOS 16 / macOS 12 or later deployment targets + +**Linux** + +- Ubuntu 20.04 or later +- Swift 5.7.1 or later + +### Installation + +Use the Swift Package Manager to install this library via the repository url: + +``` +https://github.com/brightdigit/Options.git +``` + +Use version up to `1.0`. + +### Versatile Options + +Let's say we are using an `Enum` for a list of popular social media networks: + +```swift +enum SocialNetwork : Int { + case digg + case aim + case bebo + case delicious + case eworld + case googleplus + case itunesping + case jaiku + case miiverse + case musically + case orkut + case posterous + case stumbleupon + case windowslive + case yahoo +} +``` + +We'll be using this as a way to define a particular social handle: + +```swift +struct SocialHandle { + let name : String + let network : SocialNetwork +} +``` + +However we also want to provide a way to have a unique set of social networks available: + +```swift +struct SocialNetworkSet : Int, OptionSet { +... +} + +let user : User +let networks : SocialNetworkSet = user.availableNetworks() +``` + +We can then simply use ``Options()`` macro to generate both these types: + +```swift +@Options +enum SocialNetwork : Int { + case digg + case aim + case bebo + case delicious + case eworld + case googleplus + case itunesping + case jaiku + case miiverse + case musically + case orkut + case posterous + case stumbleupon + case windowslive + case yahoo +} +``` + +Now we can use the newly create `SocialNetworkSet` type to store a set of values: + +```swift +let networks : SocialNetworkSet +networks = [.aim, .delicious, .googleplus, .windowslive] +``` + +### Multiple Value Types + +With the ``Options()`` macro, we add the ability to encode and decode values not only from their raw value but also from a another type such as a string. This is useful for when you want to store the values in JSON format. + +For instance, with a type like `SocialNetwork` we need need to store the value as an Integer: + +```json +5 +``` + +However by adding the ``Options()`` macro we can also decode from a String: + +``` +"googleplus" +``` + +### Creating an OptionSet + +We can also have a new `OptionSet` type created. ``Options()`` create a new `OptionSet` type with the suffix `-Set`. This new `OptionSet` will automatically work with your enum to create a distinct set of values. Additionally it will decode and encode your values as an Array of String. This means the value: + +```swift +[.aim, .delicious, .googleplus, .windowslive] +``` + +is encoded as: + +```json +["aim", "delicious", "googleplus", "windowslive"] +``` + +## Topics + +### Options conformance + +- ``Options()`` +- ``MappedValueRepresentable`` +- ``MappedValueRepresented`` +- ``EnumSet`` + +### Advanced customization + +- ``CodingOptions`` +- ``MappedValues`` + +### Errors + +- ``MappedValueRepresentableError-2k4ki`` + +### Deprecated + +- ``MappedValueCollectionRepresented`` +- ``MappedValueDictionaryRepresented`` +- ``MappedEnum`` diff --git a/Macros/Options/Sources/Options/EnumSet.swift b/Macros/Options/Sources/Options/EnumSet.swift new file mode 100644 index 0000000..c2e447e --- /dev/null +++ b/Macros/Options/Sources/Options/EnumSet.swift @@ -0,0 +1,139 @@ +/// Generic struct for using Enums with `RawValue`. +/// +/// If you have an `enum` such as: +/// ```swift +/// @Options +/// enum SocialNetwork : Int { +/// case digg +/// case aim +/// case bebo +/// case delicious +/// case eworld +/// case googleplus +/// case itunesping +/// case jaiku +/// case miiverse +/// case musically +/// case orkut +/// case posterous +/// case stumbleupon +/// case windowslive +/// case yahoo +/// } +/// ``` +/// An ``EnumSet`` could be used to store multiple values as an `OptionSet`: +/// ```swift +/// let socialNetworks : EnumSet = +/// [.digg, .aim, .yahoo, .miiverse] +/// ``` +public struct EnumSet: + OptionSet, Sendable, ExpressibleByArrayLiteral + where EnumType.RawValue: FixedWidthInteger & Sendable { + public typealias RawValue = EnumType.RawValue + + /// Raw Value of the OptionSet + public let rawValue: RawValue + + /// Creates the EnumSet based on the `rawValue` + /// - Parameter rawValue: Integer raw value of the OptionSet + public init(rawValue: RawValue) { + self.rawValue = rawValue + } + + public init(arrayLiteral elements: EnumType...) { + self.init(values: elements) + } + + /// Creates the EnumSet based on the values in the array. + /// - Parameter values: Array of enum values. + public init(values: [EnumType]) { + let set = Set(values.map(\.rawValue)) + rawValue = Self.cumulativeValue(basedOnRawValues: set) + } + + internal static func cumulativeValue( + basedOnRawValues rawValues: Set) -> RawValue { + rawValues.map { 1 << $0 }.reduce(0, |) + } +} + +extension FixedWidthInteger { + fileprivate static var one: Self { + 1 + } +} + +extension EnumSet where EnumType: CaseIterable { + internal static func enums(basedOnRawValue rawValue: RawValue) -> [EnumType] { + let cases = EnumType.allCases.sorted { $0.rawValue < $1.rawValue } + var values = [EnumType]() + var current = rawValue + for item in cases { + guard current > 0 else { + break + } + let rawValue = RawValue.one << item.rawValue + if current & rawValue != .zero { + values.append(item) + current -= rawValue + } + } + return values + } + + /// Returns an array of the enum values based on the OptionSet + /// - Returns: Array for each value represented by the enum. + public func array() -> [EnumType] { + Self.enums(basedOnRawValue: rawValue) + } +} + +#if swift(>=5.9) + extension EnumSet: Codable + where EnumType: MappedValueRepresentable, EnumType.MappedType: Codable { + /// Decodes the EnumSet based on an Array of MappedTypes. + /// - Parameter decoder: Decoder which contains info as an array of MappedTypes. + public init(from decoder: any Decoder) throws { + let container = try decoder.singleValueContainer() + let values = try container.decode([EnumType.MappedType].self) + let rawValues = try values.map(EnumType.rawValue(basedOn:)) + let set = Set(rawValues) + rawValue = Self.cumulativeValue(basedOnRawValues: set) + } + + /// Encodes the EnumSet based on an Array of MappedTypes. + /// - Parameter encoder: Encoder which will contain info as an array of MappedTypes. + public func encode(to encoder: any Encoder) throws { + var container = encoder.singleValueContainer() + let values = Self.enums(basedOnRawValue: rawValue) + let mappedValues = try values + .map(\.rawValue) + .map(EnumType.mappedValue(basedOn:)) + try container.encode(mappedValues) + } + } +#else + extension EnumSet: Codable + where EnumType: MappedValueRepresentable, EnumType.MappedType: Codable { + /// Decodes the EnumSet based on an Array of MappedTypes. + /// - Parameter decoder: Decoder which contains info as an array of MappedTypes. + public init(from decoder: Decoder) throws { + let container = try decoder.singleValueContainer() + let values = try container.decode([EnumType.MappedType].self) + let rawValues = try values.map(EnumType.rawValue(basedOn:)) + let set = Set(rawValues) + rawValue = Self.cumulativeValue(basedOnRawValues: set) + } + + /// Encodes the EnumSet based on an Array of MappedTypes. + /// - Parameter encoder: Encoder which will contain info as an array of MappedTypes. + public func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + let values = Self.enums(basedOnRawValue: rawValue) + let mappedValues = try values + .map(\.rawValue) + .map(EnumType.mappedValue(basedOn:)) + try container.encode(mappedValues) + } + } +#endif diff --git a/Macros/Options/Sources/Options/Macro.swift b/Macros/Options/Sources/Options/Macro.swift new file mode 100644 index 0000000..ab7ff7b --- /dev/null +++ b/Macros/Options/Sources/Options/Macro.swift @@ -0,0 +1,42 @@ +// +// Macro.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation + +#if swift(>=5.10) + /// Sets an enumeration up to implement + /// ``MappedValueRepresentable`` and ``MappedValueRepresented``. + @attached( + extension, + conformances: MappedValueRepresentable, MappedValueRepresented, + names: named(MappedType), named(mappedValues) + ) + @attached(peer, names: suffixed(Set)) + public macro Options() = #externalMacro(module: "OptionsMacros", type: "OptionsMacro") +#endif diff --git a/Macros/Options/Sources/Options/MappedEnum.swift b/Macros/Options/Sources/Options/MappedEnum.swift new file mode 100644 index 0000000..9298ada --- /dev/null +++ b/Macros/Options/Sources/Options/MappedEnum.swift @@ -0,0 +1,66 @@ +/// A generic struct for enumerations which allow for additional values attached. +@available( + *, + deprecated, + renamed: "MappedValueRepresentable", + message: "Use `MappedValueRepresentable` with `CodingOptions`." +) +public struct MappedEnum: Codable, Sendable + where EnumType.MappedType: Codable { + /// Base Enumeraion value. + public let value: EnumType + + /// Creates an instance based on the base enumeration value. + /// - Parameter value: Base Enumeration value. + public init(value: EnumType) { + self.value = value + } +} + +#if swift(>=5.9) + extension MappedEnum { + /// Decodes the value based on the mapped value. + /// - Parameter decoder: Decoder. + public init(from decoder: any Decoder) throws { + let container = try decoder.singleValueContainer() + let label = try container.decode(EnumType.MappedType.self) + let rawValue = try EnumType.rawValue(basedOn: label) + guard let value = EnumType(rawValue: rawValue) else { + assertionFailure("Every mappedValue should always return a valid rawValue.") + throw DecodingError.invalidRawValue(rawValue) + } + self.value = value + } + + /// Encodes the value based on the mapped value. + /// - Parameter encoder: Encoder. + public func encode(to encoder: any Encoder) throws { + let string = try EnumType.mappedValue(basedOn: value.rawValue) + var container = encoder.singleValueContainer() + try container.encode(string) + } + } +#else + extension MappedEnum { + /// Decodes the value based on the mapped value. + /// - Parameter decoder: Decoder. + public init(from decoder: Decoder) throws { + let container = try decoder.singleValueContainer() + let label = try container.decode(EnumType.MappedType.self) + let rawValue = try EnumType.rawValue(basedOn: label) + guard let value = EnumType(rawValue: rawValue) else { + assertionFailure("Every mappedValue should always return a valid rawValue.") + throw DecodingError.invalidRawValue(rawValue) + } + self.value = value + } + + /// Encodes the value based on the mapped value. + /// - Parameter encoder: Encoder. + public func encode(to encoder: Encoder) throws { + let string = try EnumType.mappedValue(basedOn: value.rawValue) + var container = encoder.singleValueContainer() + try container.encode(string) + } + } +#endif diff --git a/Macros/Options/Sources/Options/MappedValueRepresentable+Codable.swift b/Macros/Options/Sources/Options/MappedValueRepresentable+Codable.swift new file mode 100644 index 0000000..550f7c6 --- /dev/null +++ b/Macros/Options/Sources/Options/MappedValueRepresentable+Codable.swift @@ -0,0 +1,97 @@ +// +// MappedValueRepresentable+Codable.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation + +extension DecodingError { + internal static func invalidRawValue(_ rawValue: some Any) -> DecodingError { + .dataCorrupted( + .init(codingPath: [], debugDescription: "Raw Value \(rawValue) is invalid.") + ) + } +} + +extension SingleValueDecodingContainer { + fileprivate func decodeAsRawValue() throws -> T + where T.RawValue: Decodable { + let rawValue = try decode(T.RawValue.self) + guard let value = T(rawValue: rawValue) else { + throw DecodingError.invalidRawValue(rawValue) + } + return value + } + + fileprivate func decodeAsMappedType() throws -> T + where T.RawValue: Decodable, T.MappedType: Decodable { + let mappedValues: T.MappedType + do { + mappedValues = try decode(T.MappedType.self) + } catch { + return try decodeAsRawValue() + } + + let rawValue = try T.rawValue(basedOn: mappedValues) + + guard let value = T(rawValue: rawValue) else { + assertionFailure("Every mappedValue should always return a valid rawValue.") + throw DecodingError.invalidRawValue(rawValue) + } + + return value + } +} + +extension MappedValueRepresentable + where Self: Decodable, MappedType: Decodable, RawValue: Decodable { + /// Decodes the type. + /// - Parameter decoder: Decoder. + public init(from decoder: any Decoder) throws { + let container = try decoder.singleValueContainer() + + if Self.codingOptions.contains(.allowMappedValueDecoding) { + self = try container.decodeAsMappedType() + } else { + self = try container.decodeAsRawValue() + } + } +} + +extension MappedValueRepresentable + where Self: Encodable, MappedType: Encodable, RawValue: Encodable { + /// Encoding the type. + /// - Parameter decoder: Encodes. + public func encode(to encoder: any Encoder) throws { + var container = encoder.singleValueContainer() + if Self.codingOptions.contains(.encodeAsMappedValue) { + try container.encode(mappedValue()) + } else { + try container.encode(rawValue) + } + } +} diff --git a/Macros/Options/Sources/Options/MappedValueRepresentable.swift b/Macros/Options/Sources/Options/MappedValueRepresentable.swift new file mode 100644 index 0000000..896f4a9 --- /dev/null +++ b/Macros/Options/Sources/Options/MappedValueRepresentable.swift @@ -0,0 +1,68 @@ +// +// MappedValueRepresentable.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +/// An enum which has an additional value attached. +/// - Note: ``Options()`` macro will automatically set this up for you. +public protocol MappedValueRepresentable: RawRepresentable, CaseIterable, Sendable { + /// The additional value type. + associatedtype MappedType = String + + /// Options for how the enum should be decoded or encoded. + static var codingOptions: CodingOptions { + get + } + + /// Gets the raw value based on the MappedType. + /// - Parameter value: MappedType value. + /// - Returns: The raw value of the enumeration based on the `MappedType `value. + static func rawValue(basedOn string: MappedType) throws -> RawValue + + /// Gets the `MappedType` value based on the `rawValue`. + /// - Parameter rawValue: The raw value of the enumeration. + /// - Returns: The Mapped Type value based on the `rawValue`. + static func mappedValue(basedOn rawValue: RawValue) throws -> MappedType +} + +extension MappedValueRepresentable { + /// Options regarding how the type can be decoded or encoded. + public static var codingOptions: CodingOptions { + .default + } + + /// Gets the mapped value of the enumeration. + /// - Parameter rawValue: The raw value of the enumeration + /// which pretains to its index in the `mappedValues` Array. + /// - Throws: `MappedValueCollectionRepresentedError.valueNotFound` + /// if the raw value (i.e. index) is outside the range of the `mappedValues` array. + /// - Returns: + /// The Mapped Type value based on the value in the array at the raw value index. + public func mappedValue() throws -> MappedType { + try Self.mappedValue(basedOn: rawValue) + } +} diff --git a/Macros/Options/Sources/Options/MappedValueRepresentableError.swift b/Macros/Options/Sources/Options/MappedValueRepresentableError.swift new file mode 100644 index 0000000..d303174 --- /dev/null +++ b/Macros/Options/Sources/Options/MappedValueRepresentableError.swift @@ -0,0 +1,47 @@ +// +// MappedValueRepresentableError.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation + +// swiftlint:disable file_types_order +#if swift(>=5.10) + /// An Error thrown when the `MappedType` value or `RawType` value + /// are invalid for an `Enum`. + public enum MappedValueRepresentableError: Error, Sendable { + /// Whenever a value or key cannot be found. + case valueNotFound + } +#else + /// An Error thrown when the `MappedType` value or `RawType` value + /// are invalid for an `Enum`. + public enum MappedValueRepresentableError: Error { + case valueNotFound + } +#endif +// swiftlint:enable file_types_order diff --git a/Macros/Options/Sources/Options/MappedValueRepresented.swift b/Macros/Options/Sources/Options/MappedValueRepresented.swift new file mode 100644 index 0000000..26ef4e5 --- /dev/null +++ b/Macros/Options/Sources/Options/MappedValueRepresented.swift @@ -0,0 +1,62 @@ +// +// MappedValueRepresented.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +/// Protocol which simplifies ``MappedValueRepresentable``by using a ``MappedValues``. +public protocol MappedValueRepresented: MappedValueRepresentable + where MappedType: Equatable { + /// A object to lookup values and keys for mapped values. + associatedtype MappedValueType: MappedValues + /// An array of the mapped values which lines up with each case. + static var mappedValues: MappedValueType { get } +} + +extension MappedValueRepresented { + /// Gets the raw value based on the MappedType by finding the index of the mapped value. + /// - Parameter value: MappedType value. + /// - Throws: `MappedValueCollectionRepresentedError.valueNotFound` + /// If the value was not found in the array + /// - Returns: + /// The raw value of the enumeration + /// based on the index the MappedType value was found at. + public static func rawValue(basedOn value: MappedType) throws -> RawValue { + try mappedValues.key(value: value) + } + + /// Gets the mapped value based on the rawValue + /// by access the array at the raw value subscript. + /// - Parameter rawValue: The raw value of the enumeration + /// which pretains to its index in the `mappedValues` Array. + /// - Throws: `MappedValueCollectionRepresentedError.valueNotFound` + /// if the raw value (i.e. index) is outside the range of the `mappedValues` array. + /// - Returns: + /// The Mapped Type value based on the value in the array at the raw value index. + public static func mappedValue(basedOn rawValue: RawValue) throws -> MappedType { + try mappedValues.value(key: rawValue) + } +} diff --git a/Macros/Options/Sources/Options/MappedValues.swift b/Macros/Options/Sources/Options/MappedValues.swift new file mode 100644 index 0000000..67d0a45 --- /dev/null +++ b/Macros/Options/Sources/Options/MappedValues.swift @@ -0,0 +1,42 @@ +// +// MappedValues.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation + +/// Protocol which provides a method for ``MappedValueRepresented`` to pull values. +public protocol MappedValues { + /// Raw Value Type + associatedtype Value: Equatable + /// Key Value Type + associatedtype Key: Equatable + /// get the key vased on the value. + func key(value: Value) throws -> Key + /// get the value based on the key/index. + func value(key: Key) throws -> Value +} diff --git a/Macros/Options/Sources/OptionsMacros/Extensions/Array.swift b/Macros/Options/Sources/OptionsMacros/Extensions/Array.swift new file mode 100644 index 0000000..78275fe --- /dev/null +++ b/Macros/Options/Sources/OptionsMacros/Extensions/Array.swift @@ -0,0 +1,42 @@ +// +// Array.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation + +extension Array { + internal init?(keyValues: KeyValues) where Element == String { + self.init() + for key in 0 ..< keyValues.count { + guard let value = keyValues.get(key) else { + return nil + } + append(value) + } + } +} diff --git a/Macros/Options/Sources/OptionsMacros/Extensions/ArrayExprSyntax.swift b/Macros/Options/Sources/OptionsMacros/Extensions/ArrayExprSyntax.swift new file mode 100644 index 0000000..20e52d7 --- /dev/null +++ b/Macros/Options/Sources/OptionsMacros/Extensions/ArrayExprSyntax.swift @@ -0,0 +1,46 @@ +// +// ArrayExprSyntax.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + + +#if !canImport(SyntaxKit) +extension ArrayExprSyntax { + internal init( + from items: some Collection, + _ closure: @escaping @Sendable (T) -> some ExprSyntaxProtocol + ) { + let values = items.map(closure).map { ArrayElementSyntax(expression: $0) } + let arrayElement = ArrayElementListSyntax { + .init(values) + } + self.init(elements: arrayElement) + } +} +#endif diff --git a/Macros/Options/Sources/OptionsMacros/Extensions/DeclModifierListSyntax.swift b/Macros/Options/Sources/OptionsMacros/Extensions/DeclModifierListSyntax.swift new file mode 100644 index 0000000..bc36764 --- /dev/null +++ b/Macros/Options/Sources/OptionsMacros/Extensions/DeclModifierListSyntax.swift @@ -0,0 +1,45 @@ +// +// DeclModifierListSyntax.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + + +#if !canImport(SyntaxKit) +extension DeclModifierListSyntax { + internal init(keywordModifier: Keyword?) { + if let keywordModifier { + self.init { + DeclModifierSyntax(name: .keyword(keywordModifier)) + } + } else { + self.init([]) + } + } +} +#endif diff --git a/Macros/Options/Sources/OptionsMacros/Extensions/DeclModifierSyntax.swift b/Macros/Options/Sources/OptionsMacros/Extensions/DeclModifierSyntax.swift new file mode 100644 index 0000000..49d781c --- /dev/null +++ b/Macros/Options/Sources/OptionsMacros/Extensions/DeclModifierSyntax.swift @@ -0,0 +1,41 @@ +// +// DeclModifierSyntax.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +#if !canImport(SyntaxKit) +extension DeclModifierSyntax { + internal var isNeededAccessLevelModifier: Bool { + switch name.tokenKind { + case .keyword(.public): return true + default: return false + } + } +} +#endif diff --git a/Macros/Options/Sources/OptionsMacros/Extensions/DictionaryElementSyntax.swift b/Macros/Options/Sources/OptionsMacros/Extensions/DictionaryElementSyntax.swift new file mode 100644 index 0000000..810087b --- /dev/null +++ b/Macros/Options/Sources/OptionsMacros/Extensions/DictionaryElementSyntax.swift @@ -0,0 +1,50 @@ +// +// DictionaryElementSyntax.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + + +#if !canImport(SyntaxKit) +extension DictionaryElementSyntax { + internal init(pair: (key: Int, value: String)) { + self.init(key: pair.key, value: pair.value) + } + + internal init(key: Int, value: String) { + self.init( + key: IntegerLiteralExprSyntax(integerLiteral: key), + value: StringLiteralExprSyntax( + openingQuote: .stringQuoteToken(), + segments: .init([.stringSegment(.init(content: .stringSegment(value)))]), + closingQuote: .stringQuoteToken() + ) + ) + } +} +#endif diff --git a/Macros/Options/Sources/OptionsMacros/Extensions/DictionaryExprSyntax.swift b/Macros/Options/Sources/OptionsMacros/Extensions/DictionaryExprSyntax.swift new file mode 100644 index 0000000..025638d --- /dev/null +++ b/Macros/Options/Sources/OptionsMacros/Extensions/DictionaryExprSyntax.swift @@ -0,0 +1,44 @@ +// +// DictionaryExprSyntax.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + + +#if !canImport(SyntaxKit) +extension DictionaryExprSyntax { + internal init(keyValues: KeyValues) { + let dictionaryElements = keyValues.dictionary.map(DictionaryElementSyntax.init(pair:)) + + let list = DictionaryElementListSyntax { + .init(dictionaryElements) + } + self.init(content: .elements(list)) + } +} +#endif diff --git a/Macros/Options/Sources/OptionsMacros/Extensions/EnumDeclSyntax.swift b/Macros/Options/Sources/OptionsMacros/Extensions/EnumDeclSyntax.swift new file mode 100644 index 0000000..9ca3717 --- /dev/null +++ b/Macros/Options/Sources/OptionsMacros/Extensions/EnumDeclSyntax.swift @@ -0,0 +1,45 @@ +// +// EnumDeclSyntax.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + + +#if !canImport(SyntaxKit) +extension EnumDeclSyntax { + internal var caseElements: [EnumCaseElementSyntax] { + memberBlock.members.flatMap { member in + guard let caseDecl = member.decl.as(EnumCaseDeclSyntax.self) else { + return [EnumCaseElementSyntax]() + } + + return Array(caseDecl.elements) + } + } +} +#endif diff --git a/Macros/Options/Sources/OptionsMacros/Extensions/ExtensionDeclSyntax.swift b/Macros/Options/Sources/OptionsMacros/Extensions/ExtensionDeclSyntax.swift new file mode 100644 index 0000000..8f42eae --- /dev/null +++ b/Macros/Options/Sources/OptionsMacros/Extensions/ExtensionDeclSyntax.swift @@ -0,0 +1,59 @@ +// +// ExtensionDeclSyntax.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +#if !canImport(SyntaxKit) +extension ExtensionDeclSyntax { + internal init( + enumDecl: EnumDeclSyntax, + conformingTo protocols: [SwiftSyntax.TypeSyntax] + ) throws { + let typeName = enumDecl.name + + let access = enumDecl.modifiers.first(where: \.isNeededAccessLevelModifier) + + let mappedValues = try VariableDeclSyntax.mappedValuesDeclarationForCases( + enumDecl.caseElements + ) + + self.init( + modifiers: DeclModifierListSyntax([access].compactMap { $0 }), + extendedType: IdentifierTypeSyntax(name: typeName), + inheritanceClause: InheritanceClauseSyntax(protocols: protocols), + memberBlock: MemberBlockSyntax( + members: MemberBlockItemListSyntax { + TypeAliasDeclSyntax(name: "MappedType", for: "String") + mappedValues + } + ) + ) + } +} +#endif diff --git a/Macros/Options/Sources/OptionsMacros/Extensions/InheritanceClauseSyntax.swift b/Macros/Options/Sources/OptionsMacros/Extensions/InheritanceClauseSyntax.swift new file mode 100644 index 0000000..84156e9 --- /dev/null +++ b/Macros/Options/Sources/OptionsMacros/Extensions/InheritanceClauseSyntax.swift @@ -0,0 +1,47 @@ +// +// InheritanceClauseSyntax.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + + +#if !canImport(SyntaxKit) +extension InheritanceClauseSyntax { + internal init(protocols: [SwiftSyntax.TypeSyntax]) { + self.init( + inheritedTypes: .init { + .init( + protocols.map { typeSyntax in + InheritedTypeSyntax(type: typeSyntax) + } + ) + } + ) + } +} +#endif diff --git a/Macros/Options/Sources/OptionsMacros/Extensions/KeyValues.swift b/Macros/Options/Sources/OptionsMacros/Extensions/KeyValues.swift new file mode 100644 index 0000000..7800a73 --- /dev/null +++ b/Macros/Options/Sources/OptionsMacros/Extensions/KeyValues.swift @@ -0,0 +1,70 @@ +// +// KeyValues.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +internal struct KeyValues { + internal private(set) var lastKey: Int? + internal private(set) var dictionary = [Int: String]() + + internal var count: Int { + dictionary.count + } + + internal var nextKey: Int { + (lastKey ?? -1) + 1 + } + + internal mutating func append(value: String, withKey key: Int? = nil) throws { + let key = key ?? nextKey + guard dictionary[key] == nil else { + throw InvalidDeclError.rawValue(key) + } + lastKey = key + dictionary[key] = value + } + + internal func get(_ key: Int) -> String? { + dictionary[key] + } +} + +extension KeyValues { + internal init(caseElements: [EnumCaseElementSyntax]) throws { + self.init() + for caseElement in caseElements { + let intText = caseElement.rawValue?.value + .as(IntegerLiteralExprSyntax.self)?.literal.text + let key = intText.flatMap { Int($0) } + let value = + caseElement.name.trimmed.text + try append(value: value, withKey: key) + } + } +} diff --git a/Macros/Options/Sources/OptionsMacros/Extensions/TypeAliasDeclSyntax.swift b/Macros/Options/Sources/OptionsMacros/Extensions/TypeAliasDeclSyntax.swift new file mode 100644 index 0000000..f3e24b2 --- /dev/null +++ b/Macros/Options/Sources/OptionsMacros/Extensions/TypeAliasDeclSyntax.swift @@ -0,0 +1,42 @@ +// +// TypeAliasDeclSyntax.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + + +#if !canImport(SyntaxKit) +extension TypeAliasDeclSyntax { + internal init(name: TokenSyntax, for initializerTypeName: TokenSyntax) { + self.init( + name: name, + initializer: .init(value: IdentifierTypeSyntax(name: initializerTypeName)) + ) + } +} +#endif diff --git a/Macros/Options/Sources/OptionsMacros/Extensions/VariableDeclSyntax.swift b/Macros/Options/Sources/OptionsMacros/Extensions/VariableDeclSyntax.swift new file mode 100644 index 0000000..9b221a6 --- /dev/null +++ b/Macros/Options/Sources/OptionsMacros/Extensions/VariableDeclSyntax.swift @@ -0,0 +1,84 @@ +// +// VariableDeclSyntax.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + + +#if !canImport(SyntaxKit) +extension VariableDeclSyntax { + internal init( + keywordModifier: Keyword?, + bindingKeyword: Keyword, + variableName: String, + initializerExpression: (some ExprSyntaxProtocol)? + ) { + let modifiers = DeclModifierListSyntax(keywordModifier: keywordModifier) + + let initializer: InitializerClauseSyntax? = + initializerExpression.map { .init(value: $0) } + + self.init( + modifiers: modifiers, + bindingSpecifier: .keyword(bindingKeyword), + bindings: .init { + PatternBindingSyntax( + pattern: IdentifierPatternSyntax(identifier: .identifier(variableName)), + initializer: initializer + ) + } + ) + } + + internal static func initializerExpression( + from caseElements: [EnumCaseElementSyntax] + ) throws -> any ExprSyntaxProtocol { + let keyValues = try KeyValues(caseElements: caseElements) + if let array = Array(keyValues: keyValues) { + return ArrayExprSyntax(from: array) { value in + StringLiteralExprSyntax(content: value) + } + } else { + return DictionaryExprSyntax(keyValues: keyValues) + } + } + + internal static func mappedValuesDeclarationForCases( + _ caseElements: [EnumCaseElementSyntax] + ) throws -> VariableDeclSyntax { + let arrayExpression = try Self.initializerExpression(from: caseElements) + + return VariableDeclSyntax( + keywordModifier: .static, + bindingKeyword: .let, + variableName: "mappedValues", + initializerExpression: arrayExpression + ) + } +} +#endif diff --git a/Macros/Options/Sources/OptionsMacros/InvalidDeclError.swift b/Macros/Options/Sources/OptionsMacros/InvalidDeclError.swift new file mode 100644 index 0000000..ea31645 --- /dev/null +++ b/Macros/Options/Sources/OptionsMacros/InvalidDeclError.swift @@ -0,0 +1,35 @@ +// +// InvalidDeclError.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +@preconcurrency import SwiftSyntax + +internal enum InvalidDeclError: Error, Sendable { + case kind(SyntaxKind) + case rawValue(Int) +} diff --git a/Macros/Options/Sources/OptionsMacros/MacrosPlugin.swift b/Macros/Options/Sources/OptionsMacros/MacrosPlugin.swift new file mode 100644 index 0000000..1bc8833 --- /dev/null +++ b/Macros/Options/Sources/OptionsMacros/MacrosPlugin.swift @@ -0,0 +1,39 @@ +// +// MacrosPlugin.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftCompilerPlugin +import SwiftSyntax +import SwiftSyntaxMacros + +@main +internal struct MacrosPlugin: CompilerPlugin { + internal let providingMacros: [any Macro.Type] = [ + OptionsMacro.self + ] +} diff --git a/Macros/Options/Sources/OptionsMacros/OptionsMacro.swift b/Macros/Options/Sources/OptionsMacros/OptionsMacro.swift new file mode 100644 index 0000000..81c4e31 --- /dev/null +++ b/Macros/Options/Sources/OptionsMacros/OptionsMacro.swift @@ -0,0 +1,138 @@ +// +// OptionsMacro.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax +import SwiftSyntaxMacros + +#if canImport(SyntaxKit) +import SyntaxKit +public struct OptionsMacro: ExtensionMacro, PeerMacro { + public static func expansion(of node: SwiftSyntax.AttributeSyntax, attachedTo declaration: some SwiftSyntax.DeclGroupSyntax, providingExtensionsOf type: some SwiftSyntax.TypeSyntaxProtocol, conformingTo protocols: [SwiftSyntax.TypeSyntax], in context: some SwiftSyntaxMacros.MacroExpansionContext) throws -> [SwiftSyntax.ExtensionDeclSyntax] { + guard let enumDecl = declaration.as(EnumDeclSyntax.self) else { + throw InvalidDeclError.kind(declaration.kind) + } + + // Extract the type name + let typeName = enumDecl.name + + // Extract all EnumCaseElementSyntax from the enum + let caseElements: [EnumCaseElementSyntax] = enumDecl.memberBlock.members.flatMap { (member) -> [EnumCaseElementSyntax] in + guard let caseDecl = member.decl.as(EnumCaseDeclSyntax.self) else { + return [EnumCaseElementSyntax]() + } + return Array(caseDecl.elements) + } + + // Build mappedValues variable declaration (static let mappedValues = [...]) + // Check if any case has a raw value to determine if we need a dictionary + let hasRawValues = caseElements.contains { $0.rawValue != nil } + + let mappedValuesVariable: Variable + if hasRawValues { + let keyValues: [Int: String] = caseElements.reduce(into: [:]) { (result, element) in + guard let rawValue = element.rawValue?.value.as(IntegerLiteralExprSyntax.self)?.literal.text, + let key = Int(rawValue) else { + return + } + result[key] = element.name.trimmed.text + } + mappedValuesVariable = Variable(.let, name: "mappedValues", equals: keyValues).static() + } else { + let caseNames: [String] = caseElements.map { element in + element.name.trimmed.text + } + mappedValuesVariable = Variable(.let, name: "mappedValues", equals: caseNames).static() + } + + let extensionDecl = Extension(typeName.trimmed.text) { + TypeAlias("MappedType", equals: "String") + mappedValuesVariable + }.inherits("MappedValueRepresentable", "MappedValueRepresented") + + return [extensionDecl.syntax.as(ExtensionDeclSyntax.self)!] + + } + + public static func expansion(of node: SwiftSyntax.AttributeSyntax, providingPeersOf declaration: some SwiftSyntax.DeclSyntaxProtocol, in context: some SwiftSyntaxMacros.MacroExpansionContext) throws -> [SwiftSyntax.DeclSyntax] { + guard let enumDecl = declaration.as(EnumDeclSyntax.self) else { + throw InvalidDeclError.kind(declaration.kind) + } + + let typeName = enumDecl.name + let aliasName = "\(typeName.trimmed)Set" + let aliasDecl = TypeAlias(aliasName, equals: "EnumSet<\(typeName)>").syntax + + guard let declSyntax : DeclSyntax = DeclSyntax(aliasDecl.as(TypeAliasDeclSyntax.self)) else { + throw InvalidDeclError.kind(declaration.kind) + } + return [ + declSyntax + ] + } + +} +#else +public struct OptionsMacro: ExtensionMacro, PeerMacro { + public static func expansion( + of _: SwiftSyntax.AttributeSyntax, + providingPeersOf declaration: some SwiftSyntax.DeclSyntaxProtocol, + in _: some SwiftSyntaxMacros.MacroExpansionContext + ) throws -> [SwiftSyntax.DeclSyntax] { + guard let enumDecl = declaration.as(EnumDeclSyntax.self) else { + throw InvalidDeclError.kind(declaration.kind) + } + let typeName = enumDecl.name + + let aliasName: TokenSyntax = "\(typeName.trimmed)Set" + + let initializerName: TokenSyntax = "EnumSet<\(typeName)>" + + return [ + .init(TypeAliasDeclSyntax(name: aliasName, for: initializerName)) + ] + } + + public static func expansion( + of _: SwiftSyntax.AttributeSyntax, + attachedTo declaration: some SwiftSyntax.DeclGroupSyntax, + providingExtensionsOf _: some SwiftSyntax.TypeSyntaxProtocol, + conformingTo protocols: [SwiftSyntax.TypeSyntax], + in _: some SwiftSyntaxMacros.MacroExpansionContext + ) throws -> [SwiftSyntax.ExtensionDeclSyntax] { + guard let enumDecl = declaration.as(EnumDeclSyntax.self) else { + throw InvalidDeclError.kind(declaration.kind) + } + + let extensionDecl = try ExtensionDeclSyntax( + enumDecl: enumDecl, conformingTo: protocols + ) + return [extensionDecl] + } +} +#endif diff --git a/Macros/Options/Tests/OptionsTests/EnumSetTests.swift b/Macros/Options/Tests/OptionsTests/EnumSetTests.swift new file mode 100644 index 0000000..5e55439 --- /dev/null +++ b/Macros/Options/Tests/OptionsTests/EnumSetTests.swift @@ -0,0 +1,90 @@ +// +// EnumSetTests.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +@testable import Options +import XCTest + +internal final class EnumSetTests: XCTestCase { + private static let text = "[\"a\",\"b\",\"c\"]" + + internal func testDecoder() { + // swiftlint:disable:next force_unwrapping + let data = Self.text.data(using: .utf8)! + let decoder = JSONDecoder() + let actual: EnumSet + do { + actual = try decoder.decode(EnumSet.self, from: data) + } catch { + XCTAssertNil(error) + return + } + XCTAssertEqual(actual.rawValue, 7) + } + + internal func testEncoder() { + let enumSet = EnumSet(values: [.a, .b, .c]) + let encoder = JSONEncoder() + let data: Data + do { + data = try encoder.encode(enumSet) + } catch { + XCTAssertNil(error) + return + } + + let dataText = String(bytes: data, encoding: .utf8) + + guard let text = dataText else { + XCTAssertNotNil(dataText) + return + } + + XCTAssertEqual(text, Self.text) + } + + internal func testInitValue() { + let set = EnumSet(rawValue: 7) + XCTAssertEqual(set.rawValue, 7) + } + + internal func testInitValues() { + let values: [MockCollectionEnum] = [.a, .b, .c] + let setA = EnumSet(values: values) + XCTAssertEqual(setA.rawValue, 7) + let setB: MockCollectionEnumSet = [.a, .b, .c] + XCTAssertEqual(setB.rawValue, 7) + } + + internal func testArray() { + let expected: [MockCollectionEnum] = [.b, .d] + let enumSet = EnumSet(values: expected) + let actual = enumSet.array() + XCTAssertEqual(actual, expected) + } +} diff --git a/Macros/Options/Tests/OptionsTests/MappedEnumTests.swift b/Macros/Options/Tests/OptionsTests/MappedEnumTests.swift new file mode 100644 index 0000000..1e19650 --- /dev/null +++ b/Macros/Options/Tests/OptionsTests/MappedEnumTests.swift @@ -0,0 +1,69 @@ +// +// MappedEnumTests.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +@testable import Options +import XCTest + +internal final class MappedEnumTests: XCTestCase { + private static let text = "\"a\"" + internal func testDecoder() throws { + // swiftlint:disable:next force_unwrapping + let data = Self.text.data(using: .utf8)! + let decoder = JSONDecoder() + let actual: MappedEnum + do { + actual = try decoder.decode(MappedEnum.self, from: data) + } catch { + XCTAssertNil(error) + return + } + XCTAssertEqual(actual.value, .a) + } + + internal func testEncoder() throws { + let encoder = JSONEncoder() + let describedEnum: MappedEnum = .init(value: .a) + let data: Data + do { + data = try encoder.encode(describedEnum) + } catch { + XCTAssertNil(error) + return + } + + let dataText = String(bytes: data, encoding: .utf8) + + guard let text = dataText else { + XCTAssertNotNil(dataText) + return + } + + XCTAssertEqual(text, Self.text) + } +} diff --git a/Macros/Options/Tests/OptionsTests/MappedValueCollectionRepresentedTests.swift b/Macros/Options/Tests/OptionsTests/MappedValueCollectionRepresentedTests.swift new file mode 100644 index 0000000..98565ea --- /dev/null +++ b/Macros/Options/Tests/OptionsTests/MappedValueCollectionRepresentedTests.swift @@ -0,0 +1,157 @@ +// +// MappedValueCollectionRepresentedTests.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +@testable import Options +import XCTest + +internal final class MappedValueCollectionRepresentedTests: XCTestCase { + internal func testRawValue() { + try XCTAssertEqual(MockCollectionEnum.rawValue(basedOn: "a"), 0) + try XCTAssertEqual(MockCollectionEnum.rawValue(basedOn: "b"), 1) + try XCTAssertEqual(MockCollectionEnum.rawValue(basedOn: "c"), 2) + try XCTAssertEqual(MockCollectionEnum.rawValue(basedOn: "d"), 3) + } + + internal func testString() { + try XCTAssertEqual(MockCollectionEnum.mappedValue(basedOn: 0), "a") + try XCTAssertEqual(MockCollectionEnum.mappedValue(basedOn: 1), "b") + try XCTAssertEqual(MockCollectionEnum.mappedValue(basedOn: 2), "c") + try XCTAssertEqual(MockCollectionEnum.mappedValue(basedOn: 3), "d") + } + + internal func testRawValueFailure() { + let caughtError: MappedValueRepresentableError? + do { + _ = try MockCollectionEnum.rawValue(basedOn: "e") + caughtError = nil + } catch let error as MappedValueRepresentableError { + caughtError = error + } catch { + XCTAssertNil(error) + caughtError = nil + } + + XCTAssertEqual(caughtError, .valueNotFound) + } + + internal func testStringFailure() { + let caughtError: MappedValueRepresentableError? + do { + _ = try MockCollectionEnum.mappedValue(basedOn: .max) + caughtError = nil + } catch let error as MappedValueRepresentableError { + caughtError = error + } catch { + XCTAssertNil(error) + caughtError = nil + } + + XCTAssertEqual(caughtError, .valueNotFound) + } + + internal func testCodingOptions() { + XCTAssertEqual(MockDictionaryEnum.codingOptions, .default) + } + + internal func testInvalidRaw() throws { + let rawValue = Int.random(in: 5 ... 1_000) + + let rawValueJSON = "\(rawValue)" + + let rawValueJSONData = rawValueJSON.data(using: .utf8)! + + let decodingError: DecodingError + do { + let value = try Self.decoder.decode(MockCollectionEnum.self, from: rawValueJSONData) + XCTAssertNil(value) + return + } catch let error as DecodingError { + decodingError = error + } + + XCTAssertNotNil(decodingError) + } + + internal func testCodable() throws { + let argumentSets = MockCollectionEnum.allCases.flatMap { + [($0, true), ($0, false)] + }.flatMap { + [($0.0, $0.1, true), ($0.0, $0.1, false)] + } + + for arguments in argumentSets { + try codableTest(value: arguments.0, allowMappedValue: arguments.1, encodeAsMappedValue: arguments.2) + } + } + + static let encoder = JSONEncoder() + static let decoder = JSONDecoder() + + private func codableTest(value: MockCollectionEnum, allowMappedValue: Bool, encodeAsMappedValue: Bool) throws { + let mappedValue = try value.mappedValue() + let rawValue = value.rawValue + + let mappedValueJSON = "\"\(mappedValue)\"" + let rawValueJSON = "\(rawValue)" + + let mappedValueJSONData = mappedValueJSON.data(using: .utf8)! + let rawValueJSONData = rawValueJSON.data(using: .utf8)! + + let oldOptions = MockCollectionEnum.codingOptions + MockCollectionEnum.codingOptions = .init([ + allowMappedValue ? CodingOptions.allowMappedValueDecoding : nil, + encodeAsMappedValue ? CodingOptions.encodeAsMappedValue : nil + ].compactMap { $0 }) + + defer { + MockCollectionEnum.codingOptions = oldOptions + } + + let mappedDecodeResult = Result { + try Self.decoder.decode(MockCollectionEnum.self, from: mappedValueJSONData) + } + + let actualRawValueDecoded = try Self.decoder.decode(MockCollectionEnum.self, from: rawValueJSONData) + + let actualEncodedJSON = try Self.encoder.encode(value) + + switch (allowMappedValue, mappedDecodeResult) { + case (true, let .success(actualMappedDecodedValue)): + XCTAssertEqual(actualMappedDecodedValue, value) + case (false, let .failure(error)): + XCTAssert(error is DecodingError) + default: + XCTFail("Unmatched situation \(allowMappedValue): \(mappedDecodeResult)") + } + + XCTAssertEqual(actualRawValueDecoded, value) + + XCTAssertEqual(actualEncodedJSON, encodeAsMappedValue ? mappedValueJSONData : rawValueJSONData) + } +} diff --git a/Macros/Options/Tests/OptionsTests/MappedValueDictionaryRepresentedTests.swift b/Macros/Options/Tests/OptionsTests/MappedValueDictionaryRepresentedTests.swift new file mode 100644 index 0000000..8aca268 --- /dev/null +++ b/Macros/Options/Tests/OptionsTests/MappedValueDictionaryRepresentedTests.swift @@ -0,0 +1,77 @@ +// +// MappedValueDictionaryRepresentedTests.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +@testable import Options +import XCTest + +internal final class MappedValueDictionaryRepresentedTests: XCTestCase { + internal func testRawValue() { + try XCTAssertEqual(MockDictionaryEnum.rawValue(basedOn: "a"), 2) + try XCTAssertEqual(MockDictionaryEnum.rawValue(basedOn: "b"), 5) + try XCTAssertEqual(MockDictionaryEnum.rawValue(basedOn: "c"), 6) + try XCTAssertEqual(MockDictionaryEnum.rawValue(basedOn: "d"), 12) + } + + internal func testString() { + try XCTAssertEqual(MockDictionaryEnum.mappedValue(basedOn: 2), "a") + try XCTAssertEqual(MockDictionaryEnum.mappedValue(basedOn: 5), "b") + try XCTAssertEqual(MockDictionaryEnum.mappedValue(basedOn: 6), "c") + try XCTAssertEqual(MockDictionaryEnum.mappedValue(basedOn: 12), "d") + } + + internal func testRawValueFailure() { + let caughtError: MappedValueRepresentableError? + do { + _ = try MockDictionaryEnum.rawValue(basedOn: "e") + caughtError = nil + } catch let error as MappedValueRepresentableError { + caughtError = error + } catch { + XCTAssertNil(error) + caughtError = nil + } + + XCTAssertEqual(caughtError, .valueNotFound) + } + + internal func testStringFailure() { + let caughtError: MappedValueRepresentableError? + do { + _ = try MockDictionaryEnum.mappedValue(basedOn: 0) + caughtError = nil + } catch let error as MappedValueRepresentableError { + caughtError = error + } catch { + XCTAssertNil(error) + caughtError = nil + } + + XCTAssertEqual(caughtError, .valueNotFound) + } +} diff --git a/Macros/Options/Tests/OptionsTests/MappedValueRepresentableTests.swift b/Macros/Options/Tests/OptionsTests/MappedValueRepresentableTests.swift new file mode 100644 index 0000000..e400539 --- /dev/null +++ b/Macros/Options/Tests/OptionsTests/MappedValueRepresentableTests.swift @@ -0,0 +1,40 @@ +// +// MappedValueRepresentableTests.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +@testable import Options +import XCTest + +internal final class MappedValueRepresentableTests: XCTestCase { + internal func testStringValue() { + try XCTAssertEqual(MockCollectionEnum.a.mappedValue(), "a") + try XCTAssertEqual(MockCollectionEnum.b.mappedValue(), "b") + try XCTAssertEqual(MockCollectionEnum.c.mappedValue(), "c") + try XCTAssertEqual(MockCollectionEnum.d.mappedValue(), "d") + } +} diff --git a/Macros/Options/Tests/OptionsTests/Mocks/MockCollectionEnum.swift b/Macros/Options/Tests/OptionsTests/Mocks/MockCollectionEnum.swift new file mode 100644 index 0000000..6dc0e00 --- /dev/null +++ b/Macros/Options/Tests/OptionsTests/Mocks/MockCollectionEnum.swift @@ -0,0 +1,61 @@ +// +// MockCollectionEnum.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Options + +#if swift(>=5.10) + // swiftlint:disable identifier_name + @Options + internal enum MockCollectionEnum: Int, Sendable, Codable { + case a + case b + case c + case d + + nonisolated(unsafe) static var codingOptions: CodingOptions = .default + } +#else + // swiftlint:disable identifier_name + internal enum MockCollectionEnum: Int, MappedValueCollectionRepresented, Codable { + case a + case b + case c + case d + internal typealias MappedType = String + internal static let mappedValues = [ + "a", + "b", + "c", + "d" + ] + static var codingOptions: CodingOptions = .default + } + + typealias MockCollectionEnumSet = EnumSet +#endif diff --git a/Macros/Options/Tests/OptionsTests/Mocks/MockDictionaryEnum.swift b/Macros/Options/Tests/OptionsTests/Mocks/MockDictionaryEnum.swift new file mode 100644 index 0000000..0cb80da --- /dev/null +++ b/Macros/Options/Tests/OptionsTests/Mocks/MockDictionaryEnum.swift @@ -0,0 +1,58 @@ +// +// MockDictionaryEnum.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Options + +#if swift(>=5.10) + // swiftlint:disable identifier_name + @Options + internal enum MockDictionaryEnum: Int, Sendable { + case a = 2 + case b = 5 + case c = 6 + case d = 12 + } +#else + // swiftlint:disable identifier_name + internal enum MockDictionaryEnum: Int, MappedValueDictionaryRepresented, Codable { + case a = 2 + case b = 5 + case c = 6 + case d = 12 + internal typealias MappedType = String + internal static var mappedValues = [ + 2: "a", + 5: "b", + 6: "c", + 12: "d" + ] + } + + typealias MockDictionaryEnumSet = EnumSet +#endif diff --git a/Macros/Options/Tests/OptionsTests/Mocks/MockError.swift b/Macros/Options/Tests/OptionsTests/Mocks/MockError.swift new file mode 100644 index 0000000..9915aeb --- /dev/null +++ b/Macros/Options/Tests/OptionsTests/Mocks/MockError.swift @@ -0,0 +1,34 @@ +// +// MockError.swift +// SimulatorServices +// +// Created by Leo Dion. +// Copyright © 2024 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation + +internal struct MockError: Error { + internal let value: T +} diff --git a/Macros/Options/codecov.yml b/Macros/Options/codecov.yml new file mode 100644 index 0000000..951b97b --- /dev/null +++ b/Macros/Options/codecov.yml @@ -0,0 +1,2 @@ +ignore: + - "Tests" diff --git a/Macros/Options/logo.png b/Macros/Options/logo.png new file mode 100644 index 0000000..02c0f98 Binary files /dev/null and b/Macros/Options/logo.png differ diff --git a/Macros/Options/logo.svg b/Macros/Options/logo.svg new file mode 100644 index 0000000..0345444 --- /dev/null +++ b/Macros/Options/logo.svg @@ -0,0 +1,551 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Macros/Options/project.yml b/Macros/Options/project.yml new file mode 100644 index 0000000..abfabb5 --- /dev/null +++ b/Macros/Options/project.yml @@ -0,0 +1,13 @@ +name: Options +settings: + LINT_MODE: ${LINT_MODE} +packages: + StealthyStash: + path: . +aggregateTargets: + Lint: + buildScripts: + - path: Scripts/lint.sh + name: Lint + basedOnDependencyAnalysis: false + schemes: {} \ No newline at end of file diff --git a/Macros/SKSampleMacro/.gitignore b/Macros/SKSampleMacro/.gitignore new file mode 100644 index 0000000..0023a53 --- /dev/null +++ b/Macros/SKSampleMacro/.gitignore @@ -0,0 +1,8 @@ +.DS_Store +/.build +/Packages +xcuserdata/ +DerivedData/ +.swiftpm/configuration/registries.json +.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +.netrc diff --git a/Macros/SKSampleMacro/Package.resolved b/Macros/SKSampleMacro/Package.resolved new file mode 100644 index 0000000..25225ed --- /dev/null +++ b/Macros/SKSampleMacro/Package.resolved @@ -0,0 +1,15 @@ +{ + "originHash" : "9eace0238bc49301f22ac682c8f3e981d6f1a63573efd4e1a727b71527c4ebb0", + "pins" : [ + { + "identity" : "swift-syntax", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-syntax.git", + "state" : { + "revision" : "f99ae8aa18f0cf0d53481901f88a0991dc3bd4a2", + "version" : "601.0.1" + } + } + ], + "version" : 3 +} diff --git a/Macros/SKSampleMacro/Package.swift b/Macros/SKSampleMacro/Package.swift new file mode 100644 index 0000000..b0688ff --- /dev/null +++ b/Macros/SKSampleMacro/Package.swift @@ -0,0 +1,59 @@ +// swift-tools-version: 6.2 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription +import CompilerPluginSupport + +let package = Package( + name: "SKSampleMacro", + platforms: [ + .macOS(.v13), + .iOS(.v13), + .watchOS(.v6), + .tvOS(.v13), + .visionOS(.v1) + ], + products: [ + // Products define the executables and libraries a package produces, making them visible to other packages. + .library( + name: "SKSampleMacro", + targets: ["SKSampleMacro"] + ), + .executable( + name: "SKSampleMacroClient", + targets: ["SKSampleMacroClient"] + ), + ], + dependencies: [ + .package(path: "../.."), + .package(url: "https://github.com/apple/swift-syntax.git", from: "601.0.1") + ], + targets: [ + // Targets are the basic building blocks of a package, defining a module or a test suite. + // Targets can depend on other targets in this package and products from dependencies. + // Macro implementation that performs the source transformation of a macro. + .macro( + name: "SKSampleMacroMacros", + dependencies: [ + .product(name: "SyntaxKit", package: "SyntaxKit"), + .product(name: "SwiftSyntaxMacros", package: "swift-syntax"), + .product(name: "SwiftCompilerPlugin", package: "swift-syntax") + ] + ), + + // Library that exposes a macro as part of its API, which is used in client programs. + .target(name: "SKSampleMacro", dependencies: ["SKSampleMacroMacros"]), + + // A client of the library, which is able to use the macro in its own code. + .executableTarget(name: "SKSampleMacroClient", dependencies: ["SKSampleMacro"]), + + // A test target used to develop the macro implementation. + .testTarget( + name: "SKSampleMacroTests", + dependencies: [ + "SKSampleMacroMacros", + .product(name: "SwiftSyntaxMacrosTestSupport", package: "swift-syntax"), + ] + ), + ] +) diff --git a/Macros/SKSampleMacro/Sources/SKSampleMacro/SKSampleMacro.swift b/Macros/SKSampleMacro/Sources/SKSampleMacro/SKSampleMacro.swift new file mode 100644 index 0000000..d812512 --- /dev/null +++ b/Macros/SKSampleMacro/Sources/SKSampleMacro/SKSampleMacro.swift @@ -0,0 +1,11 @@ +// The Swift Programming Language +// https://docs.swift.org/swift-book + +/// A macro that produces both a value and a string containing the +/// source code that generated the value. For example, +/// +/// #stringify(x + y) +/// +/// produces a tuple `(x + y, "x + y")`. +@freestanding(expression) +public macro stringify(_ lhs: T, _ rhs: T) -> (T, String) = #externalMacro(module: "SKSampleMacroMacros", type: "StringifyMacro") diff --git a/Macros/SKSampleMacro/Sources/SKSampleMacroClient/main.swift b/Macros/SKSampleMacro/Sources/SKSampleMacroClient/main.swift new file mode 100644 index 0000000..1fdb254 --- /dev/null +++ b/Macros/SKSampleMacro/Sources/SKSampleMacroClient/main.swift @@ -0,0 +1,8 @@ +import SKSampleMacro + +let a = 17 +let b = 25 + +let (result, code) = #stringify(a, b) + +print("The value \(result) was produced by the code \"\(code)\"") diff --git a/Macros/SKSampleMacro/Sources/SKSampleMacroMacros/SKSampleMacroMacro.swift b/Macros/SKSampleMacro/Sources/SKSampleMacroMacros/SKSampleMacroMacro.swift new file mode 100644 index 0000000..014fb7e --- /dev/null +++ b/Macros/SKSampleMacro/Sources/SKSampleMacroMacros/SKSampleMacroMacro.swift @@ -0,0 +1,42 @@ +import SwiftCompilerPlugin +import SwiftSyntax +//import SwiftSyntaxBuilder +import SwiftSyntaxMacros +import SyntaxKit + +/// Implementation of the `stringify` macro, which takes an expression +/// of any type and produces a tuple containing the value of that expression +/// and the source code that produced the value. For example +/// +/// #stringify(x + y) +/// +/// will expand to +/// +/// (x + y, "x + y") +public struct StringifyMacro: ExpressionMacro { + public static func expansion( + of node: some FreestandingMacroExpansionSyntax, + in context: some MacroExpansionContext + ) -> ExprSyntax { + let first = node.arguments.first?.expression + let second = node.arguments.last?.expression + guard let first, let second else { + fatalError("compiler bug: the macro does not have any arguments") + } + + return Tuple{ + Infix("+") { + VariableExp(first.description) + VariableExp(second.description) + } + Literal.string("\(first.description) + \(second.description)") + }.expr + } +} + +@main +struct SKSampleMacroPlugin: CompilerPlugin { + let providingMacros: [Macro.Type] = [ + StringifyMacro.self, + ] +} diff --git a/Macros/SKSampleMacro/Tests/SKSampleMacroTests/SKSampleMacroTests.swift b/Macros/SKSampleMacro/Tests/SKSampleMacroTests/SKSampleMacroTests.swift new file mode 100644 index 0000000..ca69367 --- /dev/null +++ b/Macros/SKSampleMacro/Tests/SKSampleMacroTests/SKSampleMacroTests.swift @@ -0,0 +1,48 @@ +import SwiftSyntax +import SwiftSyntaxBuilder +import SwiftSyntaxMacros +import SwiftSyntaxMacrosTestSupport +import XCTest + +// Macro implementations build for the host, so the corresponding module is not available when cross-compiling. Cross-compiled tests may still make use of the macro itself in end-to-end tests. +#if canImport(SKSampleMacroMacros) +import SKSampleMacroMacros + +let testMacros: [String: Macro.Type] = [ + "stringify": StringifyMacro.self, +] +#endif + +final class SKSampleMacroTests: XCTestCase { + func testMacro() throws { + #if canImport(SKSampleMacroMacros) + assertMacroExpansion( + """ + #stringify(a + b) + """, + expandedSource: """ + (a + b, "a + b") + """, + macros: testMacros + ) + #else + throw XCTSkip("macros are only supported when running tests for the host platform") + #endif + } + + func testMacroWithStringLiteral() throws { + #if canImport(SKSampleMacroMacros) + assertMacroExpansion( + #""" + #stringify("Hello, \(name)") + """#, + expandedSource: #""" + ("Hello, \(name)", #""Hello, \(name)""#) + """#, + macros: testMacros + ) + #else + throw XCTSkip("macros are only supported when running tests for the host platform") + #endif + } +} diff --git a/Package.resolved b/Package.resolved index 9a2ef48..fc91c87 100644 --- a/Package.resolved +++ b/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "b5881f7ff763cf360a3639d99029de2b3ab4a457e0d8f08ce744bae51c2bf670", + "originHash" : "79e6b2b96efe3d22ee340e623938e0363d6ce8fb0edfd7ccdf90e98b766f59ec", "pins" : [ { "identity" : "swift-syntax", diff --git a/Package.swift b/Package.swift index 42c9345..6a95649 100644 --- a/Package.swift +++ b/Package.swift @@ -3,6 +3,7 @@ import PackageDescription +// swiftlint:disable:next explicit_top_level_acl explicit_acl let package = Package( name: "SyntaxKit", platforms: [ diff --git a/Sources/SyntaxKit/Array+LiteralValue.swift b/Sources/SyntaxKit/Array+LiteralValue.swift new file mode 100644 index 0000000..baf3c7b --- /dev/null +++ b/Sources/SyntaxKit/Array+LiteralValue.swift @@ -0,0 +1,51 @@ +// +// Array+LiteralValue.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation + +extension Array: LiteralValue where Element == String { + /// The Swift type name for an array of strings. + public var typeName: String { "[String]" } + + /// Renders this array as a Swift literal string with proper escaping. + public var literalString: String { + let elements = self.map { element in + // Escape quotes and newlines + let escaped = + element + .replacingOccurrences(of: "\\", with: "\\\\") + .replacingOccurrences(of: "\"", with: "\\\"") + .replacingOccurrences(of: "\n", with: "\\n") + .replacingOccurrences(of: "\r", with: "\\r") + .replacingOccurrences(of: "\t", with: "\\t") + return "\"\(escaped)\"" + }.joined(separator: ", ") + return "[\(elements)]" + } +} diff --git a/Sources/SyntaxKit/ArrayLiteral.swift b/Sources/SyntaxKit/ArrayLiteral.swift new file mode 100644 index 0000000..e752bc1 --- /dev/null +++ b/Sources/SyntaxKit/ArrayLiteral.swift @@ -0,0 +1,74 @@ +// +// ArrayLiteral.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation + +/// An array value that can be used as a literal. +public struct ArrayLiteral: LiteralValue { + let elements: [Literal] + + /// Creates an array with the given elements. + /// - Parameter elements: The array elements. + public init(_ elements: [Literal]) { + self.elements = elements + } + + /// The Swift type name for this array. + public var typeName: String { + if elements.isEmpty { + return "[Any]" + } + let elementType = elements.first?.typeName ?? "Any" + return "[\(elementType)]" + } + + /// Renders this array as a Swift literal string. + public var literalString: String { + let elementStrings = elements.map { element in + switch element { + case .integer(let value): return String(value) + case .float(let value): return String(value) + case .string(let value): return "\"\(value)\"" + case .boolean(let value): return value ? "true" : "false" + case .nil: return "nil" + case .ref(let value): return value + case .tuple(let tupleElements): + let tuple = TupleLiteral(tupleElements) + return tuple.literalString + case .array(let arrayElements): + let array = ArrayLiteral(arrayElements) + return array.literalString + case .dictionary(let dictionaryElements): + let dictionary = DictionaryLiteral(dictionaryElements) + return dictionary.literalString + } + } + return "[\(elementStrings.joined(separator: ", "))]" + } +} diff --git a/Sources/SyntaxKit/Assignment.swift b/Sources/SyntaxKit/Assignment.swift index 4a0af2e..b3e26ac 100644 --- a/Sources/SyntaxKit/Assignment.swift +++ b/Sources/SyntaxKit/Assignment.swift @@ -32,40 +32,52 @@ import SwiftSyntax /// An assignment expression. public struct Assignment: CodeBlock { private let target: String - private let value: String + private let valueExpr: ExprSyntax - /// Creates an assignment expression. - /// - Parameters: - /// - target: The variable to assign to. - /// - value: The value to assign. - public init(_ target: String, _ value: String) { + /// Creates an assignment where the value is a literal. + public init(_ target: String, _ literal: Literal) { self.target = target - self.value = value + guard let expr = literal.syntax.as(ExprSyntax.self) else { + fatalError("Literal.syntax did not produce ExprSyntax") + } + self.valueExpr = expr + } + + /// Creates an assignment with an integer literal value. + public init(_ target: String, _ value: Int) { + self.init(target, .integer(value)) + } + + /// Creates an assignment with a string literal value. + public init(_ target: String, _ value: String) { + self.init(target, .string(value)) } + + /// Creates an assignment with a boolean literal value. + public init(_ target: String, _ value: Bool) { + self.init(target, .boolean(value)) + } + + /// Creates an assignment with a double literal value. + public init(_ target: String, _ value: Double) { + self.init(target, .float(value)) + } + public var syntax: SyntaxProtocol { let left = ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(target))) - let right: ExprSyntax - if value.hasPrefix("\"") && value.hasSuffix("\"") || value.contains("\\(") { - right = ExprSyntax( - StringLiteralExprSyntax( - openingQuote: .stringQuoteToken(), - segments: StringLiteralSegmentListSyntax([ - .stringSegment( - StringSegmentSyntax(content: .stringSegment(String(value.dropFirst().dropLast())))) - ]), - closingQuote: .stringQuoteToken() - )) - } else { - right = ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(value))) - } - let assign = ExprSyntax( - AssignmentExprSyntax(equal: .equalToken(leadingTrivia: .space, trailingTrivia: .space))) - return SequenceExprSyntax( - elements: ExprListSyntax([ - left, - assign, - right, - ]) + let right = valueExpr + let assignmentExpr = ExprSyntax( + SequenceExprSyntax( + elements: ExprListSyntax([ + left, + ExprSyntax( + AssignmentExprSyntax(equal: .equalToken(leadingTrivia: .space, trailingTrivia: .space)) + ), + right, + ]) + ) ) + // Wrap the expression as a statement + return StmtSyntax(ExpressionStmtSyntax(expression: assignmentExpr)) } } diff --git a/Sources/SyntaxKit/Attribute.swift b/Sources/SyntaxKit/Attribute.swift new file mode 100644 index 0000000..526a55a --- /dev/null +++ b/Sources/SyntaxKit/Attribute.swift @@ -0,0 +1,100 @@ +// +// Attribute.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +/// Internal representation of a Swift attribute with its arguments. +internal struct AttributeInfo { + internal let name: String + internal let arguments: [String] + + internal init(name: String, arguments: [String] = []) { + self.name = name + self.arguments = arguments + } +} + +/// A Swift attribute that can be used as a property wrapper. +public struct Attribute: CodeBlock { + private let name: String + private let arguments: [String] + + /// Creates an attribute with the given name and optional arguments. + /// - Parameters: + /// - name: The attribute name (without the @ symbol). + /// - arguments: The arguments for the attribute, if any. + public init(_ name: String, arguments: [String] = []) { + self.name = name + self.arguments = arguments + } + + /// Creates an attribute with a name and a single argument. + /// - Parameters: + /// - name: The name of the attribute (without the @ symbol). + /// - argument: The argument for the attribute. + public init(_ name: String, argument: String) { + self.name = name + self.arguments = [argument] + } + + public var syntax: SyntaxProtocol { + var leftParen: TokenSyntax? + var rightParen: TokenSyntax? + var argumentsSyntax: AttributeSyntax.Arguments? + + if !arguments.isEmpty { + leftParen = .leftParenToken() + rightParen = .rightParenToken() + + let argumentList = arguments.map { argument in + DeclReferenceExprSyntax(baseName: .identifier(argument)) + } + + argumentsSyntax = .argumentList( + LabeledExprListSyntax( + argumentList.enumerated().map { index, expr in + var element = LabeledExprSyntax(expression: ExprSyntax(expr)) + if index < argumentList.count - 1 { + element = element.with(\.trailingComma, .commaToken(trailingTrivia: .space)) + } + return element + } + ) + ) + } + + return AttributeSyntax( + atSign: .atSignToken(), + attributeName: IdentifierTypeSyntax(name: .identifier(name)), + leftParen: leftParen, + arguments: argumentsSyntax, + rightParen: rightParen + ) + } +} diff --git a/Sources/SyntaxKit/Break.swift b/Sources/SyntaxKit/Break.swift new file mode 100644 index 0000000..6237c15 --- /dev/null +++ b/Sources/SyntaxKit/Break.swift @@ -0,0 +1,58 @@ +// +// Break.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +/// A `break` statement. +public struct Break: CodeBlock { + private let label: String? + + /// Creates a `break` statement. + /// - Parameter label: An optional label to break from a specific loop or switch. + public init(_ label: String? = nil) { + self.label = label + } + + public var syntax: SyntaxProtocol { + let breakStmt = BreakStmtSyntax( + breakKeyword: .keyword(.break, trailingTrivia: .newline) + ) + + if let label = label { + return StmtSyntax( + breakStmt.with( + \.label, + .identifier(label) + ) + ) + } else { + return StmtSyntax(breakStmt) + } + } +} diff --git a/Sources/SyntaxKit/Call.swift b/Sources/SyntaxKit/Call.swift new file mode 100644 index 0000000..f3df787 --- /dev/null +++ b/Sources/SyntaxKit/Call.swift @@ -0,0 +1,119 @@ +// +// Call.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +/// An expression that calls a global function. +public struct Call: CodeBlock { + private let functionName: String + private let parameters: [ParameterExp] + private var isThrowing: Bool = false + private var isAsync: Bool = false + + /// Creates a global function call expression. + /// - Parameter functionName: The name of the function to call. + public init(_ functionName: String) { + self.functionName = functionName + self.parameters = [] + } + + /// Creates a global function call expression with parameters. + /// - Parameters: + /// - functionName: The name of the function to call. + /// - params: A ``ParameterExpBuilder`` that provides the parameters for the function call. + public init(_ functionName: String, @ParameterExpBuilderResult _ params: () -> [ParameterExp]) { + self.functionName = functionName + self.parameters = params() + } + + /// Marks this function call as throwing. + /// - Returns: A copy of the call marked as throwing. + public func throwing() -> Self { + var copy = self + copy.isThrowing = true + return copy + } + + /// Marks this function call as async. + /// - Returns: A copy of the call marked as async. + public func async() -> Self { + var copy = self + copy.isAsync = true + return copy + } + + public var syntax: SyntaxProtocol { + let function = TokenSyntax.identifier(functionName) + let args = LabeledExprListSyntax( + parameters.enumerated().map { index, param in + let expr = param.syntax + if let labeled = expr as? LabeledExprSyntax { + var element = labeled + if index < parameters.count - 1 { + element = element.with(\.trailingComma, .commaToken(trailingTrivia: .space)) + } + return element + } else if let unlabeled = expr as? ExprSyntax { + return LabeledExprSyntax( + label: nil, + colon: nil, + expression: unlabeled, + trailingComma: index < parameters.count - 1 ? .commaToken(trailingTrivia: .space) : nil + ) + } else { + fatalError("ParameterExp.syntax must return LabeledExprSyntax or ExprSyntax") + } + }) + + let functionCall = FunctionCallExprSyntax( + calledExpression: ExprSyntax(DeclReferenceExprSyntax(baseName: function)), + leftParen: .leftParenToken(), + arguments: args, + rightParen: .rightParenToken() + ) + + if isThrowing { + return ExprSyntax( + TryExprSyntax( + tryKeyword: .keyword(.try, trailingTrivia: .space), + expression: functionCall + ) + ) + } else if isAsync { + return ExprSyntax( + AwaitExprSyntax( + awaitKeyword: .keyword(.await, trailingTrivia: .space), + expression: functionCall + ) + ) + } else { + return ExprSyntax(functionCall) + } + } +} diff --git a/Sources/SyntaxKit/Case.swift b/Sources/SyntaxKit/Case.swift index 2ff34da..14951df 100644 --- a/Sources/SyntaxKit/Case.swift +++ b/Sources/SyntaxKit/Case.swift @@ -29,45 +29,74 @@ import SwiftSyntax -/// A `case` in a `switch` statement with tuple-style patterns. +/// A `case` in a `switch` statement with tuple-style patterns, or an enum case declaration. public struct Case: CodeBlock { - private let patterns: [String] + private let patterns: [PatternConvertible] private let body: [CodeBlock] + private let isEnumCase: Bool + private let enumCaseName: String? + private var associatedValue: (name: String, type: String)? /// Creates a `case` for a `switch` statement. /// - Parameters: /// - patterns: The patterns to match for the case. /// - content: A ``CodeBlockBuilder`` that provides the body of the case. - public init(_ patterns: String..., @CodeBlockBuilderResult content: () -> [CodeBlock]) { + public init(_ patterns: PatternConvertible..., @CodeBlockBuilderResult content: () -> [CodeBlock]) + { self.patterns = patterns self.body = content() + self.isEnumCase = false + self.enumCaseName = nil + self.associatedValue = nil + } + + /// Creates an enum case declaration. + /// - Parameter name: The name of the enum case. + public init(_ name: String) { + self.patterns = [] + self.body = [] + self.isEnumCase = true + self.enumCaseName = name + self.associatedValue = nil + } + + /// Sets the associated value for the enum case. + /// - Parameters: + /// - name: The name of the associated value. + /// - type: The type of the associated value. + /// - Returns: A copy of the case with the associated value set. + public func associatedValue(_ name: String, type: String) -> Self { + var copy = self + copy.associatedValue = (name: name, type: type) + return copy } public var switchCaseSyntax: SwitchCaseSyntax { - let patternList = TuplePatternElementListSyntax( - patterns.map { - TuplePatternElementSyntax( - label: nil, - colon: nil, - pattern: PatternSyntax(IdentifierPatternSyntax(identifier: .identifier($0))) - ) - } - ) - let caseItems = SwitchCaseItemListSyntax([ - SwitchCaseItemSyntax( - pattern: TuplePatternSyntax( - leftParen: .leftParenToken(), - elements: patternList, - rightParen: .rightParenToken() - ) - ) - ]) + let caseItems = SwitchCaseItemListSyntax( + patterns.enumerated().map { index, pat in + var item = SwitchCaseItemSyntax(pattern: pat.patternSyntax) + if index < patterns.count - 1 { + item = item.with(\.trailingComma, .commaToken(trailingTrivia: .space)) + } + return item + }) + let statements = CodeBlockItemListSyntax( - body.compactMap { $0.syntax.as(CodeBlockItemSyntax.self) }) + body.compactMap { + var item: CodeBlockItemSyntax? + if let decl = $0.syntax.as(DeclSyntax.self) { + item = CodeBlockItemSyntax(item: .decl(decl)) + } else if let expr = $0.syntax.as(ExprSyntax.self) { + item = CodeBlockItemSyntax(item: .expr(expr)) + } else if let stmt = $0.syntax.as(StmtSyntax.self) { + item = CodeBlockItemSyntax(item: .stmt(stmt)) + } + return item?.with(\.trailingTrivia, .newline) + }) let label = SwitchCaseLabelSyntax( caseKeyword: .keyword(.case, trailingTrivia: .space), caseItems: caseItems, - colon: .colonToken() + colon: .colonToken(trailingTrivia: .newline) ) return SwitchCaseSyntax( label: .case(label), @@ -75,5 +104,47 @@ public struct Case: CodeBlock { ) } - public var syntax: SyntaxProtocol { switchCaseSyntax } + public var syntax: SyntaxProtocol { + if isEnumCase { + // Handle enum case declaration + let caseKeyword = TokenSyntax.keyword(.case, trailingTrivia: .space) + let identifier = TokenSyntax.identifier(enumCaseName ?? "", trailingTrivia: .space) + + var parameterClause: EnumCaseParameterClauseSyntax? + if let associated = associatedValue { + let parameter = EnumCaseParameterSyntax( + firstName: nil, + secondName: .identifier(associated.name), + colon: .colonToken(leadingTrivia: .space, trailingTrivia: .space), + type: TypeSyntax(IdentifierTypeSyntax(name: .identifier(associated.type))) + ) + parameterClause = EnumCaseParameterClauseSyntax( + leftParen: .leftParenToken(), + parameters: EnumCaseParameterListSyntax([parameter]), + rightParen: .rightParenToken() + ) + } + + return EnumCaseDeclSyntax( + caseKeyword: caseKeyword, + elements: EnumCaseElementListSyntax([ + EnumCaseElementSyntax( + leadingTrivia: .space, + _: nil, + name: associatedValue != nil ? TokenSyntax.identifier(enumCaseName ?? "") : identifier, + _: nil, + parameterClause: parameterClause, + _: nil, + rawValue: nil, + _: nil, + trailingComma: nil, + trailingTrivia: .newline + ) + ]) + ) + } else { + // Handle switch case + return switchCaseSyntax + } + } } diff --git a/Sources/SyntaxKit/Catch.swift b/Sources/SyntaxKit/Catch.swift new file mode 100644 index 0000000..a4db19a --- /dev/null +++ b/Sources/SyntaxKit/Catch.swift @@ -0,0 +1,198 @@ +// +// Catch.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation +import SwiftSyntax + +/// A Swift `catch` clause for error handling. +public struct Catch: CodeBlock { + private let pattern: CodeBlock? + private let body: [CodeBlock] + + /// Creates a `catch` clause with a pattern. + /// - Parameters: + /// - pattern: The pattern to match for this catch clause. + /// - content: A ``CodeBlockBuilder`` that provides the body of the catch clause. + public init( + _ pattern: CodeBlock, + @CodeBlockBuilderResult _ content: () -> [CodeBlock] + ) { + self.pattern = pattern + self.body = content() + } + + /// Creates a `catch` clause without a pattern (catches all errors). + /// - Parameter content: A ``CodeBlockBuilder`` that provides the body of the catch clause. + public init(@CodeBlockBuilderResult _ content: () -> [CodeBlock]) { + self.pattern = nil + self.body = content() + } + + /// Creates a `catch` clause for a specific enum case. + /// - Parameters: + /// - enumCase: The enum case to catch. + /// - content: A ``CodeBlockBuilder`` that provides the body of the catch clause. + public static func `catch`( + _ enumCase: EnumCase, + @CodeBlockBuilderResult _ content: () -> [CodeBlock] + ) -> Catch { + Catch(enumCase, content) + } + + public var catchClauseSyntax: CatchClauseSyntax { + // Build catch items (patterns) + var catchItems: CatchItemListSyntax? + if let pattern = pattern { + var patternSyntax: PatternSyntax + + if let enumCase = pattern as? EnumCase { + if !enumCase.caseAssociatedValues.isEmpty { + let baseName = enumCase.caseName + let baseParts = baseName.split(separator: ".") + let (typeName, caseName) = + baseParts.count == 2 ? (String(baseParts[0]), String(baseParts[1])) : ("", baseName) + // Build the pattern: .caseName(let a, let b) + let memberAccess = MemberAccessExprSyntax( + base: typeName.isEmpty + ? nil : ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(typeName))), + dot: .periodToken(), + name: .identifier(caseName) + ) + let patternWithTuple = PatternSyntax( + ValueBindingPatternSyntax( + bindingSpecifier: .keyword(.case, trailingTrivia: .space), + pattern: PatternSyntax( + ExpressionPatternSyntax( + expression: ExprSyntax(memberAccess) + ) + ) + ) + ) + // Actually, Swift's catch pattern for associated values is: .caseName(let a, let b) + // So we want: ExpressionPatternSyntax(MemberAccessExprSyntax + tuplePattern) + let tuplePattern = TuplePatternSyntax( + leftParen: .leftParenToken(), + elements: TuplePatternElementListSyntax( + enumCase.caseAssociatedValues.enumerated().map { index, associated in + TuplePatternElementSyntax( + pattern: PatternSyntax( + ValueBindingPatternSyntax( + bindingSpecifier: .keyword(.let, trailingTrivia: .space), + pattern: PatternSyntax( + IdentifierPatternSyntax(identifier: .identifier(associated.name)) + ) + ) + ), + trailingComma: index < enumCase.caseAssociatedValues.count - 1 + ? .commaToken(trailingTrivia: .space) : nil + ) + } + ), + rightParen: .rightParenToken() + ) + let patternSyntaxExpr = ExprSyntax( + FunctionCallExprSyntax( + calledExpression: ExprSyntax(memberAccess), + leftParen: .leftParenToken(), + arguments: LabeledExprListSyntax( + enumCase.caseAssociatedValues.enumerated().map { index, associated in + LabeledExprSyntax( + label: nil, + colon: nil, + expression: ExprSyntax( + PatternExprSyntax( + pattern: PatternSyntax( + ValueBindingPatternSyntax( + bindingSpecifier: .keyword(.let, trailingTrivia: .space), + pattern: PatternSyntax( + IdentifierPatternSyntax(identifier: .identifier(associated.name)) + ) + ) + ) + ) + ), + trailingComma: index < enumCase.caseAssociatedValues.count - 1 + ? .commaToken(trailingTrivia: .space) : nil + ) + } + ), + rightParen: .rightParenToken() + ) + ) + patternSyntax = PatternSyntax(ExpressionPatternSyntax(expression: patternSyntaxExpr)) + } else { + let enumCaseExpr = enumCase.asExpressionSyntax + patternSyntax = PatternSyntax(ExpressionPatternSyntax(expression: enumCaseExpr)) + } + } else { + // Handle other patterns + patternSyntax = PatternSyntax( + ExpressionPatternSyntax( + expression: ExprSyntax( + fromProtocol: pattern.syntax.as(ExprSyntax.self) + ?? DeclReferenceExprSyntax(baseName: .identifier("")) + ) + ) + ) + } + + catchItems = CatchItemListSyntax([ + CatchItemSyntax(pattern: patternSyntax) + ]) + } + + // Build catch body + let catchBody = CodeBlockSyntax( + leftBrace: .leftBraceToken(leadingTrivia: .space, trailingTrivia: .newline), + statements: CodeBlockItemListSyntax( + body.compactMap { + var item: CodeBlockItemSyntax? + if let decl = $0.syntax.as(DeclSyntax.self) { + item = CodeBlockItemSyntax(item: .decl(decl)) + } else if let expr = $0.syntax.as(ExprSyntax.self) { + item = CodeBlockItemSyntax(item: .expr(expr)) + } else if let stmt = $0.syntax.as(StmtSyntax.self) { + item = CodeBlockItemSyntax(item: .stmt(stmt)) + } + return item?.with(\.trailingTrivia, .newline) + }), + rightBrace: .rightBraceToken(leadingTrivia: .newline, trailingTrivia: .space) + ) + + return CatchClauseSyntax( + catchKeyword: .keyword(.catch, trailingTrivia: .space), + catchItems: catchItems ?? CatchItemListSyntax([]), + body: catchBody + ) + } + + public var syntax: SyntaxProtocol { + catchClauseSyntax + } +} diff --git a/Sources/SyntaxKit/CatchBuilder.swift b/Sources/SyntaxKit/CatchBuilder.swift new file mode 100644 index 0000000..6991d2a --- /dev/null +++ b/Sources/SyntaxKit/CatchBuilder.swift @@ -0,0 +1,62 @@ +// +// CatchBuilder.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +/// A result builder for creating catch clauses in a do-catch statement. +@resultBuilder +public struct CatchBuilder { + public static func buildBlock(_ components: CatchClauseSyntax...) -> CatchClauseListSyntax { + CatchClauseListSyntax(components) + } + + public static func buildExpression(_ expression: CatchClauseSyntax) -> CatchClauseSyntax { + expression + } + + public static func buildExpression(_ expression: Catch) -> CatchClauseSyntax { + expression.catchClauseSyntax + } + + public static func buildOptional(_ component: CatchClauseSyntax?) -> CatchClauseSyntax? { + component + } + + public static func buildEither(first component: CatchClauseSyntax) -> CatchClauseSyntax { + component + } + + public static func buildEither(second component: CatchClauseSyntax) -> CatchClauseSyntax { + component + } + + public static func buildArray(_ components: [CatchClauseSyntax]) -> CatchClauseListSyntax { + CatchClauseListSyntax(components) + } +} diff --git a/Sources/SyntaxKit/Class.swift b/Sources/SyntaxKit/Class.swift new file mode 100644 index 0000000..bf28ff4 --- /dev/null +++ b/Sources/SyntaxKit/Class.swift @@ -0,0 +1,216 @@ +// +// Class.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +/// A Swift `class` declaration. +public struct Class: CodeBlock { + private let name: String + private let members: [CodeBlock] + private var inheritance: [String] = [] + private var genericParameters: [String] = [] + private var isFinal: Bool = false + private var attributes: [AttributeInfo] = [] + + /// Creates a `class` declaration. + /// - Parameters: + /// - name: The name of the class. + /// - content: A ``CodeBlockBuilder`` that provides the members of the class. + public init(_ name: String, @CodeBlockBuilderResult _ content: () -> [CodeBlock]) { + self.name = name + self.members = content() + } + + /// Sets the generic parameters for the class. + /// - Parameter generics: The list of generic parameter names. + /// - Returns: A copy of the class with the generic parameters set. + public func generic(_ generics: String...) -> Self { + var copy = self + copy.genericParameters = generics + return copy + } + + /// Sets the inheritance for the class. + /// - Parameter inheritance: The types to inherit from. + /// - Returns: A copy of the class with the inheritance set. + public func inherits(_ inheritance: String...) -> Self { + var copy = self + copy.inheritance = inheritance + return copy + } + + /// Marks the class declaration as `final`. + /// - Returns: A copy of the class marked as `final`. + public func final() -> Self { + var copy = self + copy.isFinal = true + return copy + } + + /// Adds an attribute to the class declaration. + /// - Parameters: + /// - attribute: The attribute name (without the @ symbol). + /// - arguments: The arguments for the attribute, if any. + /// - Returns: A copy of the class with the attribute added. + public func attribute(_ attribute: String, arguments: [String] = []) -> Self { + var copy = self + copy.attributes.append(AttributeInfo(name: attribute, arguments: arguments)) + return copy + } + + public var syntax: SyntaxProtocol { + let classKeyword = TokenSyntax.keyword(.class, trailingTrivia: .space) + let identifier = TokenSyntax.identifier(name) + + // Build attributes + let attributeList = buildAttributeList(from: attributes) + + // Generic parameter clause + var genericParameterClause: GenericParameterClauseSyntax? + if !genericParameters.isEmpty { + let parameterList = GenericParameterListSyntax( + genericParameters.enumerated().map { idx, name in + var param = GenericParameterSyntax(name: .identifier(name)) + if idx < genericParameters.count - 1 { + param = param.with( + \.trailingComma, + TokenSyntax.commaToken(trailingTrivia: .space) + ) + } + return param + } + ) + genericParameterClause = GenericParameterClauseSyntax( + leftAngle: .leftAngleToken(), + parameters: parameterList, + rightAngle: .rightAngleToken() + ) + } + + // Inheritance clause + var inheritanceClause: InheritanceClauseSyntax? + if !inheritance.isEmpty { + let inheritedTypes = inheritance.map { type in + InheritedTypeSyntax(type: IdentifierTypeSyntax(name: .identifier(type))) + } + inheritanceClause = InheritanceClauseSyntax( + colon: .colonToken(), + inheritedTypes: InheritedTypeListSyntax( + inheritedTypes.enumerated().map { idx, inherited in + var inheritedType = inherited + if idx < inheritedTypes.count - 1 { + inheritedType = inheritedType.with( + \.trailingComma, + TokenSyntax.commaToken(trailingTrivia: .space) + ) + } + return inheritedType + } + ) + ) + } + + // Member block + let memberBlock = MemberBlockSyntax( + leftBrace: .leftBraceToken(leadingTrivia: .space, trailingTrivia: .newline), + members: MemberBlockItemListSyntax( + members.compactMap { member in + guard let decl = member.syntax.as(DeclSyntax.self) else { return nil } + return MemberBlockItemSyntax(decl: decl, trailingTrivia: .newline) + } + ), + rightBrace: .rightBraceToken(leadingTrivia: .newline) + ) + + // Modifiers + var modifiers: DeclModifierListSyntax = [] + if isFinal { + modifiers = DeclModifierListSyntax([ + DeclModifierSyntax(name: .keyword(.final, trailingTrivia: .space)) + ]) + } + + return ClassDeclSyntax( + attributes: attributeList, + modifiers: modifiers, + classKeyword: classKeyword, + name: identifier, + genericParameterClause: genericParameterClause, + inheritanceClause: inheritanceClause, + memberBlock: memberBlock + ) + } + + private func buildAttributeList(from attributes: [AttributeInfo]) -> AttributeListSyntax { + if attributes.isEmpty { + return AttributeListSyntax([]) + } + + let attributeElements = attributes.map { attribute in + let arguments = attribute.arguments + + var leftParen: TokenSyntax? + var rightParen: TokenSyntax? + var argumentsSyntax: AttributeSyntax.Arguments? + + if !arguments.isEmpty { + leftParen = .leftParenToken() + rightParen = .rightParenToken() + + let argumentList = arguments.map { argument in + DeclReferenceExprSyntax(baseName: .identifier(argument)) + } + + argumentsSyntax = .argumentList( + LabeledExprListSyntax( + argumentList.enumerated().map { index, expr in + var element = LabeledExprSyntax(expression: ExprSyntax(expr)) + if index < argumentList.count - 1 { + element = element.with(\.trailingComma, .commaToken(trailingTrivia: .space)) + } + return element + } + ) + ) + } + + return AttributeListSyntax.Element( + AttributeSyntax( + atSign: .atSignToken(), + attributeName: IdentifierTypeSyntax(name: .identifier(attribute.name)), + leftParen: leftParen, + arguments: argumentsSyntax, + rightParen: rightParen + ) + ) + } + + return AttributeListSyntax(attributeElements) + } +} diff --git a/Sources/SyntaxKit/CodeBlock+ExprSyntax.swift b/Sources/SyntaxKit/CodeBlock+ExprSyntax.swift new file mode 100644 index 0000000..b8b9f30 --- /dev/null +++ b/Sources/SyntaxKit/CodeBlock+ExprSyntax.swift @@ -0,0 +1,51 @@ +// +// CodeBlock+ExprSyntax.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +extension CodeBlock { + /// Attempts to treat this `CodeBlock` as an expression and return its `ExprSyntax` form. + /// + /// If the underlying syntax already *is* an `ExprSyntax`, it is returned directly. If the + /// underlying syntax is a bare `TokenSyntax` (commonly the case for `VariableExp` which + /// produces an identifier token), we wrap it in a `DeclReferenceExprSyntax` so that it becomes + /// a valid expression node. Any other kind of syntax results in a runtime error, because it + /// cannot be represented as an expression (e.g. declarations or statements). + public var expr: ExprSyntax { + if let expr = self.syntax.as(ExprSyntax.self) { + return expr + } + + if let token = self.syntax.as(TokenSyntax.self) { + return ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(token.text))) + } + + fatalError("CodeBlock of type \(type(of: self.syntax)) cannot be represented as ExprSyntax") + } +} diff --git a/Sources/SyntaxKit/CodeBlock+Generate.swift b/Sources/SyntaxKit/CodeBlock+Generate.swift index c912232..ecde6e4 100644 --- a/Sources/SyntaxKit/CodeBlock+Generate.swift +++ b/Sources/SyntaxKit/CodeBlock+Generate.swift @@ -37,6 +37,9 @@ extension CodeBlock { let statements: CodeBlockItemListSyntax if let list = self.syntax.as(CodeBlockItemListSyntax.self) { statements = list + } else if let codeBlock = self.syntax.as(CodeBlockSyntax.self) { + // Handle CodeBlockSyntax by extracting its statements + statements = codeBlock.statements } else { let item: CodeBlockItemSyntax.Item if let decl = self.syntax.as(DeclSyntax.self) { @@ -45,9 +48,25 @@ extension CodeBlock { item = .stmt(stmt) } else if let expr = self.syntax.as(ExprSyntax.self) { item = .expr(expr) + } else if let token = self.syntax.as(TokenSyntax.self) { + // Wrap TokenSyntax in DeclReferenceExprSyntax and then in ExprSyntax + let expr = ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(token.text))) + item = .expr(expr) + } else if let switchCase = self.syntax.as(SwitchCaseSyntax.self) { + // Wrap SwitchCaseSyntax in a SwitchExprSyntax and treat it as an expression + // This is a fallback for when SwitchCase is used standalone + let switchExpr = SwitchExprSyntax( + switchKeyword: .keyword(.switch, trailingTrivia: .space), + subject: ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier("_"))), + leftBrace: .leftBraceToken(leadingTrivia: .space, trailingTrivia: .newline), + cases: SwitchCaseListSyntax([SwitchCaseListSyntax.Element(switchCase)]), + rightBrace: .rightBraceToken(leadingTrivia: .newline) + ) + item = .expr(ExprSyntax(switchExpr)) } else { fatalError( - "Unsupported syntax type at top level: \(type(of: self.syntax)) generating from \(self)") + "Unsupported syntax type at top level: \(type(of: self.syntax)) (\(self.syntax)) generating from \(self)" + ) } statements = CodeBlockItemListSyntax([ CodeBlockItemSyntax(item: item, trailingTrivia: .newline) diff --git a/Sources/SyntaxKit/CommentedCodeBlock.swift b/Sources/SyntaxKit/CommentedCodeBlock.swift index 351a5df..79f6ef3 100644 --- a/Sources/SyntaxKit/CommentedCodeBlock.swift +++ b/Sources/SyntaxKit/CommentedCodeBlock.swift @@ -33,10 +33,10 @@ import SwiftSyntax // MARK: - Wrapper `CodeBlock` that injects leading trivia internal struct CommentedCodeBlock: CodeBlock { - let base: CodeBlock - let lines: [Line] + internal let base: CodeBlock + internal let lines: [Line] - var syntax: SyntaxProtocol { + internal var syntax: SyntaxProtocol { // Shortcut if there are no comment lines guard !lines.isEmpty else { return base.syntax } diff --git a/Sources/SyntaxKit/Continue.swift b/Sources/SyntaxKit/Continue.swift new file mode 100644 index 0000000..26271bc --- /dev/null +++ b/Sources/SyntaxKit/Continue.swift @@ -0,0 +1,58 @@ +// +// Continue.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +/// A `continue` statement. +public struct Continue: CodeBlock { + private let label: String? + + /// Creates a `continue` statement. + /// - Parameter label: An optional label to continue to a specific loop. + public init(_ label: String? = nil) { + self.label = label + } + + public var syntax: SyntaxProtocol { + let continueStmt = ContinueStmtSyntax( + continueKeyword: .keyword(.continue, trailingTrivia: .newline) + ) + + if let label = label { + return StmtSyntax( + continueStmt.with( + \.label, + .identifier(label) + ) + ) + } else { + return StmtSyntax(continueStmt) + } + } +} diff --git a/Sources/SyntaxKit/Default.swift b/Sources/SyntaxKit/Default.swift index 470a7e9..9ccb5b3 100644 --- a/Sources/SyntaxKit/Default.swift +++ b/Sources/SyntaxKit/Default.swift @@ -50,10 +50,11 @@ public struct Default: CodeBlock { item = CodeBlockItemSyntax(item: .stmt(stmt)) } return item?.with(\.trailingTrivia, .newline) - }) + } + ) let label = SwitchDefaultLabelSyntax( - defaultKeyword: .keyword(.default, trailingTrivia: .space), - colon: .colonToken() + defaultKeyword: .keyword(.default), + colon: .colonToken(trailingTrivia: .newline) ) return SwitchCaseSyntax( label: .default(label), diff --git a/Sources/SyntaxKit/Dictionary+LiteralValue.swift b/Sources/SyntaxKit/Dictionary+LiteralValue.swift new file mode 100644 index 0000000..980dc16 --- /dev/null +++ b/Sources/SyntaxKit/Dictionary+LiteralValue.swift @@ -0,0 +1,51 @@ +// +// Dictionary+LiteralValue.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation + +extension Dictionary: LiteralValue where Key == Int, Value == String { + /// The Swift type name for a dictionary mapping integers to strings. + public var typeName: String { "[Int: String]" } + + /// Renders this dictionary as a Swift literal string with proper escaping. + public var literalString: String { + let elements = self.map { key, value in + // Escape quotes and newlines + let escaped = + value + .replacingOccurrences(of: "\\", with: "\\\\") + .replacingOccurrences(of: "\"", with: "\\\"") + .replacingOccurrences(of: "\n", with: "\\n") + .replacingOccurrences(of: "\r", with: "\\r") + .replacingOccurrences(of: "\t", with: "\\t") + return "\(key): \"\(escaped)\"" + }.joined(separator: ", ") + return "[\(elements)]" + } +} diff --git a/Sources/SyntaxKit/DictionaryExpr.swift b/Sources/SyntaxKit/DictionaryExpr.swift new file mode 100644 index 0000000..5ff079c --- /dev/null +++ b/Sources/SyntaxKit/DictionaryExpr.swift @@ -0,0 +1,89 @@ +// +// DictionaryExpr.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +/// A dictionary expression that can contain both Literal types and CodeBlock types. +public struct DictionaryExpr: CodeBlock, LiteralValue { + private let elements: [(DictionaryValue, DictionaryValue)] + + /// Creates a dictionary expression with the given key-value pairs. + /// - Parameter elements: The dictionary key-value pairs. + public init(_ elements: [(DictionaryValue, DictionaryValue)]) { + self.elements = elements + } + + /// The Swift type name for this dictionary. + public var typeName: String { + if elements.isEmpty { + return "[Any: Any]" + } + return "[String: Any]" + } + + /// Renders this dictionary as a Swift literal string. + public var literalString: String { + let elementStrings = elements.map { _, _ in + let keyString: String + let valueString: String + + // For now, we'll use a simple representation + // In a real implementation, we'd need to convert DictionaryValue to string + keyString = "key" + valueString = "value" + + return "\(keyString): \(valueString)" + } + return "[\(elementStrings.joined(separator: ", "))]" + } + + public var syntax: SyntaxProtocol { + if elements.isEmpty { + // Empty dictionary should generate [:] + return DictionaryExprSyntax( + leftSquare: .leftSquareToken(), + content: .colon(.colonToken(leadingTrivia: .init(), trailingTrivia: .init())), + rightSquare: .rightSquareToken() + ) + } else { + let dictionaryElements = DictionaryElementListSyntax( + elements.enumerated().map { index, keyValue in + let (key, value) = keyValue + return DictionaryElementSyntax( + keyExpression: key.exprSyntax, + colon: .colonToken(), + valueExpression: value.exprSyntax, + trailingComma: index < elements.count - 1 ? .commaToken(trailingTrivia: .space) : nil + ) + } + ) + return DictionaryExprSyntax(content: .elements(dictionaryElements)) + } + } +} diff --git a/Sources/SyntaxKit/DictionaryLiteral.swift b/Sources/SyntaxKit/DictionaryLiteral.swift new file mode 100644 index 0000000..c2d7de7 --- /dev/null +++ b/Sources/SyntaxKit/DictionaryLiteral.swift @@ -0,0 +1,98 @@ +// +// DictionaryLiteral.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation + +/// A dictionary literal value that can be used as a literal. +public struct DictionaryLiteral: LiteralValue { + let elements: [(Literal, Literal)] + + /// Creates a dictionary with the given key-value pairs. + /// - Parameter elements: The dictionary key-value pairs. + public init(_ elements: [(Literal, Literal)]) { + self.elements = elements + } + + /// The Swift type name for this dictionary. + public var typeName: String { + if elements.isEmpty { + return "[Any: Any]" + } + let keyType = elements.first?.0.typeName ?? "Any" + let valueType = elements.first?.1.typeName ?? "Any" + return "[\(keyType): \(valueType)]" + } + + /// Renders this dictionary as a Swift literal string. + public var literalString: String { + let elementStrings = elements.map { key, value in + let keyString: String + let valueString: String + + switch key { + case .integer(let key): keyString = String(key) + case .float(let key): keyString = String(key) + case .string(let key): keyString = "\"\(key)\"" + case .boolean(let key): keyString = key ? "true" : "false" + case .nil: keyString = "nil" + case .ref(let key): keyString = key + case .tuple(let tupleElements): + let tuple = TupleLiteral(tupleElements) + keyString = tuple.literalString + case .array(let arrayElements): + let array = ArrayLiteral(arrayElements) + keyString = array.literalString + case .dictionary(let dictionaryElements): + let dictionary = DictionaryLiteral(dictionaryElements) + keyString = dictionary.literalString + } + + switch value { + case .integer(let value): valueString = String(value) + case .float(let value): valueString = String(value) + case .string(let value): valueString = "\"\(value)\"" + case .boolean(let value): valueString = value ? "true" : "false" + case .nil: valueString = "nil" + case .ref(let value): valueString = value + case .tuple(let tupleElements): + let tuple = TupleLiteral(tupleElements) + valueString = tuple.literalString + case .array(let arrayElements): + let array = ArrayLiteral(arrayElements) + valueString = array.literalString + case .dictionary(let dictionaryElements): + let dictionary = DictionaryLiteral(dictionaryElements) + valueString = dictionary.literalString + } + + return "\(keyString): \(valueString)" + } + return "[\(elementStrings.joined(separator: ", "))]" + } +} diff --git a/Sources/SyntaxKit/DictionaryValue.swift b/Sources/SyntaxKit/DictionaryValue.swift new file mode 100644 index 0000000..b8bb8e2 --- /dev/null +++ b/Sources/SyntaxKit/DictionaryValue.swift @@ -0,0 +1,72 @@ +// +// DictionaryValue.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +/// A protocol for types that can be used as dictionary keys or values. +/// This includes both Literal types and CodeBlock types that can be converted to expressions. +public protocol DictionaryValue { + /// The expression syntax representation of this dictionary value. + var exprSyntax: ExprSyntax { get } +} + +// MARK: - Literal Conformance + +extension Literal: DictionaryValue { + // Literal already has exprSyntax from ExprCodeBlock protocol +} + +// MARK: - CodeBlock Conformance + +extension CodeBlock where Self: DictionaryValue { + /// Converts this code block to an expression syntax. + /// If the code block is already an expression, returns it directly. + /// If it's a token, wraps it in a declaration reference expression. + /// Otherwise, throws a fatal error. + public var exprSyntax: ExprSyntax { + if let expr = self.syntax.as(ExprSyntax.self) { + return expr + } + + if let token = self.syntax.as(TokenSyntax.self) { + return ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(token.text))) + } + + fatalError("CodeBlock of type \(type(of: self.syntax)) cannot be represented as ExprSyntax") + } +} + +// MARK: - Specific CodeBlock Types + +extension Call: DictionaryValue {} +extension Init: DictionaryValue {} +extension VariableExp: DictionaryValue {} +extension PropertyAccessExp: DictionaryValue {} +extension FunctionCallExp: DictionaryValue {} +extension Infix: DictionaryValue {} diff --git a/Sources/SyntaxKit/Do.swift b/Sources/SyntaxKit/Do.swift new file mode 100644 index 0000000..d9279db --- /dev/null +++ b/Sources/SyntaxKit/Do.swift @@ -0,0 +1,78 @@ +// +// Do.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation +import SwiftSyntax + +/// A Swift `do` statement for error handling. +public struct Do: CodeBlock { + private let body: [CodeBlock] + private let catchClauses: CatchClauseListSyntax + + /// Creates a `do-catch` statement. + /// - Parameters: + /// - body: A ``CodeBlockBuilder`` that provides the body of the do block. + /// - catchClauses: A ``CatchBuilder`` that provides the catch clauses. + public init( + @CodeBlockBuilderResult _ body: () -> [CodeBlock], + @CatchBuilder catch catchClauses: () -> CatchClauseListSyntax + ) { + self.body = body() + self.catchClauses = catchClauses() + } + + public var syntax: SyntaxProtocol { + // Build the do body + let doBody = CodeBlockSyntax( + leftBrace: .leftBraceToken(leadingTrivia: .space, trailingTrivia: .newline), + statements: CodeBlockItemListSyntax( + body.compactMap { + var item: CodeBlockItemSyntax? + if let decl = $0.syntax.as(DeclSyntax.self) { + item = CodeBlockItemSyntax(item: .decl(decl)) + } else if let expr = $0.syntax.as(ExprSyntax.self) { + item = CodeBlockItemSyntax(item: .expr(expr)) + } else if let stmt = $0.syntax.as(StmtSyntax.self) { + item = CodeBlockItemSyntax(item: .stmt(stmt)) + } + return item?.with(\.trailingTrivia, .newline) + } + ), + rightBrace: .rightBraceToken(leadingTrivia: .newline, trailingTrivia: .space) + ) + + return StmtSyntax( + DoStmtSyntax( + doKeyword: .keyword(.do, trailingTrivia: .space), + body: doBody, + catchClauses: catchClauses + ) + ) + } +} diff --git a/Sources/SyntaxKit/Documentation.docc/Documentation.md b/Sources/SyntaxKit/Documentation.docc/Documentation.md index 091cbee..cb4a2ca 100644 --- a/Sources/SyntaxKit/Documentation.docc/Documentation.md +++ b/Sources/SyntaxKit/Documentation.docc/Documentation.md @@ -198,6 +198,14 @@ struct BlackjackCard { - ``VariableDecl`` - ``Let`` - ``Variable`` +- ``Extension`` +- ``Class`` +- ``Protocol`` +- ``Tuple`` +- ``TypeAlias`` +- ``Infix`` +- ``PropertyRequirement`` +- ``FunctionRequirement`` ### Expressions & Statements - ``Assignment`` diff --git a/Sources/SyntaxKit/Enum.swift b/Sources/SyntaxKit/Enum.swift index 170f78b..a8c8e52 100644 --- a/Sources/SyntaxKit/Enum.swift +++ b/Sources/SyntaxKit/Enum.swift @@ -33,7 +33,8 @@ import SwiftSyntax public struct Enum: CodeBlock { private let name: String private let members: [CodeBlock] - private var inheritance: String? + private var inheritance: [String] = [] + private var attributes: [AttributeInfo] = [] /// Creates an `enum` declaration. /// - Parameters: @@ -45,11 +46,22 @@ public struct Enum: CodeBlock { } /// Sets the inheritance for the enum. - /// - Parameter type: The type to inherit from. + /// - Parameter inheritance: The types to inherit from. /// - Returns: A copy of the enum with the inheritance set. - public func inherits(_ type: String) -> Self { + public func inherits(_ inheritance: String...) -> Self { var copy = self - copy.inheritance = type + copy.inheritance = inheritance + return copy + } + + /// Adds an attribute to the enum declaration. + /// - Parameters: + /// - attribute: The attribute name (without the @ symbol). + /// - arguments: The arguments for the attribute, if any. + /// - Returns: A copy of the enum with the attribute added. + public func attribute(_ attribute: String, arguments: [String] = []) -> Self { + var copy = self + copy.attributes.append(AttributeInfo(name: attribute, arguments: arguments)) return copy } @@ -58,11 +70,26 @@ public struct Enum: CodeBlock { let identifier = TokenSyntax.identifier(name, trailingTrivia: .space) var inheritanceClause: InheritanceClauseSyntax? - if let inheritance = inheritance { - let inheritedType = InheritedTypeSyntax( - type: IdentifierTypeSyntax(name: .identifier(inheritance))) + if !inheritance.isEmpty { + let inheritedTypes = inheritance.map { type in + InheritedTypeSyntax( + type: IdentifierTypeSyntax(name: .identifier(type))) + } inheritanceClause = InheritanceClauseSyntax( - colon: .colonToken(), inheritedTypes: InheritedTypeListSyntax([inheritedType])) + colon: .colonToken(), + inheritedTypes: InheritedTypeListSyntax( + inheritedTypes.enumerated().map { idx, inherited in + var inheritedType = inherited + if idx < inheritedTypes.count - 1 { + inheritedType = inheritedType.with( + \.trailingComma, + TokenSyntax.commaToken(trailingTrivia: .space) + ) + } + return inheritedType + } + ) + ) } let memberBlock = MemberBlockSyntax( @@ -76,85 +103,56 @@ public struct Enum: CodeBlock { ) return EnumDeclSyntax( + attributes: buildAttributeList(from: attributes), enumKeyword: enumKeyword, name: identifier, inheritanceClause: inheritanceClause, memberBlock: memberBlock ) } -} -/// A Swift `case` declaration inside an `enum`. -public struct EnumCase: CodeBlock { - private let name: String - private var value: String? - private var intValue: Int? + private func buildAttributeList(from attributes: [AttributeInfo]) -> AttributeListSyntax { + if attributes.isEmpty { + return AttributeListSyntax([]) + } + let attributeElements = attributes.map { attributeInfo in + let arguments = attributeInfo.arguments - /// Creates a `case` declaration. - /// - Parameter name: The name of the case. - public init(_ name: String) { - self.name = name - } + var leftParen: TokenSyntax? + var rightParen: TokenSyntax? + var argumentsSyntax: AttributeSyntax.Arguments? - /// Sets the raw value of the case to a string. - /// - Parameter value: The string value. - /// - Returns: A copy of the case with the raw value set. - public func equals(_ value: String) -> Self { - var copy = self - copy.value = value - copy.intValue = nil - return copy - } + if !arguments.isEmpty { + leftParen = .leftParenToken() + rightParen = .rightParenToken() - /// Sets the raw value of the case to an integer. - /// - Parameter value: The integer value. - /// - Returns: A copy of the case with the raw value set. - public func equals(_ value: Int) -> Self { - var copy = self - copy.value = nil - copy.intValue = value - return copy - } + let argumentList = arguments.map { argument in + DeclReferenceExprSyntax(baseName: .identifier(argument)) + } - public var syntax: SyntaxProtocol { - let caseKeyword = TokenSyntax.keyword(.case, trailingTrivia: .space) - let identifier = TokenSyntax.identifier(name, trailingTrivia: .space) + argumentsSyntax = .argumentList( + LabeledExprListSyntax( + argumentList.enumerated().map { index, expr in + var element = LabeledExprSyntax(expression: ExprSyntax(expr)) + if index < argumentList.count - 1 { + element = element.with(\.trailingComma, .commaToken(trailingTrivia: .space)) + } + return element + } + ) + ) + } - var initializer: InitializerClauseSyntax? - if let value = value { - initializer = InitializerClauseSyntax( - equal: .equalToken(leadingTrivia: .space, trailingTrivia: .space), - value: StringLiteralExprSyntax( - openingQuote: .stringQuoteToken(), - segments: StringLiteralSegmentListSyntax([ - .stringSegment(StringSegmentSyntax(content: .stringSegment(value))) - ]), - closingQuote: .stringQuoteToken() + return AttributeListSyntax.Element( + AttributeSyntax( + atSign: .atSignToken(), + attributeName: IdentifierTypeSyntax(name: .identifier(attributeInfo.name)), + leftParen: leftParen, + arguments: argumentsSyntax, + rightParen: rightParen ) ) - } else if let intValue = intValue { - initializer = InitializerClauseSyntax( - equal: .equalToken(leadingTrivia: .space, trailingTrivia: .space), - value: IntegerLiteralExprSyntax(digits: .integerLiteral(String(intValue))) - ) } - - return EnumCaseDeclSyntax( - caseKeyword: caseKeyword, - elements: EnumCaseElementListSyntax([ - EnumCaseElementSyntax( - leadingTrivia: .space, - _: nil, - name: identifier, - _: nil, - parameterClause: nil, - _: nil, - rawValue: initializer, - _: nil, - trailingComma: nil, - trailingTrivia: .newline - ) - ]) - ) + return AttributeListSyntax(attributeElements) } } diff --git a/Sources/SyntaxKit/EnumCase+Syntax.swift b/Sources/SyntaxKit/EnumCase+Syntax.swift new file mode 100644 index 0000000..d122bf8 --- /dev/null +++ b/Sources/SyntaxKit/EnumCase+Syntax.swift @@ -0,0 +1,133 @@ +// +// EnumCase+Syntax.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +extension EnumCase { + /// Returns the appropriate syntax based on context. + /// When used in expressions (throw, return, if bodies), returns expression syntax. + /// When used in declarations (enum cases), returns declaration syntax. + public var syntax: SyntaxProtocol { + // Check if we're in an expression context by looking at the call stack + // For now, we'll use a heuristic: if this is being used in a context that expects expressions, + // we'll return the expression syntax. Otherwise, we'll return the declaration syntax. + + // Since we can't easily determine context from here, we'll provide both options + // and let the calling code choose. For now, we'll default to declaration syntax + // and let specific contexts (like Throw) handle the conversion. + + let caseKeyword = TokenSyntax.keyword(.case, trailingTrivia: .space) + let identifier = TokenSyntax.identifier(name, trailingTrivia: .space) + + var parameterClause: EnumCaseParameterClauseSyntax? + if !associatedValues.isEmpty { + let parameters = EnumCaseParameterListSyntax( + associatedValues.map { associated in + EnumCaseParameterSyntax( + firstName: .identifier(associated.name), + secondName: .identifier(associated.name), + colon: .colonToken(leadingTrivia: .space, trailingTrivia: .space), + type: TypeSyntax(IdentifierTypeSyntax(name: .identifier(associated.type))) + ) + } + ) + parameterClause = EnumCaseParameterClauseSyntax( + leftParen: .leftParenToken(), + parameters: parameters, + rightParen: .rightParenToken() + ) + } + + var initializer: InitializerClauseSyntax? + if let literal = literalValue { + switch literal { + case .string(let value): + initializer = InitializerClauseSyntax( + equal: .equalToken(leadingTrivia: .space, trailingTrivia: .space), + value: StringLiteralExprSyntax( + openingQuote: .stringQuoteToken(), + segments: StringLiteralSegmentListSyntax([ + .stringSegment(StringSegmentSyntax(content: .stringSegment(value))) + ]), + closingQuote: .stringQuoteToken() + ) + ) + case .float(let value): + initializer = InitializerClauseSyntax( + equal: .equalToken(leadingTrivia: .space, trailingTrivia: .space), + value: FloatLiteralExprSyntax(literal: .floatLiteral(String(value))) + ) + case .integer(let value): + initializer = InitializerClauseSyntax( + equal: .equalToken(leadingTrivia: .space, trailingTrivia: .space), + value: IntegerLiteralExprSyntax(digits: .integerLiteral(String(value))) + ) + case .nil: + initializer = InitializerClauseSyntax( + equal: .equalToken(leadingTrivia: .space, trailingTrivia: .space), + value: NilLiteralExprSyntax(nilKeyword: .keyword(.nil)) + ) + case .boolean(let value): + initializer = InitializerClauseSyntax( + equal: .equalToken(leadingTrivia: .space, trailingTrivia: .space), + value: BooleanLiteralExprSyntax(literal: value ? .keyword(.true) : .keyword(.false)) + ) + case .ref(let value): + initializer = InitializerClauseSyntax( + equal: .equalToken(leadingTrivia: .space, trailingTrivia: .space), + value: DeclReferenceExprSyntax(baseName: .identifier(value)) + ) + case .tuple: + fatalError("Tuple is not supported as a raw value for enum cases.") + case .array: + fatalError("Array is not supported as a raw value for enum cases.") + case .dictionary: + fatalError("Dictionary is not supported as a raw value for enum cases.") + } + } + + return EnumCaseDeclSyntax( + caseKeyword: caseKeyword, + elements: EnumCaseElementListSyntax([ + EnumCaseElementSyntax( + leadingTrivia: .space, + _: nil, + name: identifier, + _: nil, + parameterClause: parameterClause, + _: nil, + rawValue: initializer, + _: nil, + trailingComma: nil, + trailingTrivia: .newline + ) + ]) + ) + } +} diff --git a/Sources/SyntaxKit/EnumCase.swift b/Sources/SyntaxKit/EnumCase.swift new file mode 100644 index 0000000..9a17724 --- /dev/null +++ b/Sources/SyntaxKit/EnumCase.swift @@ -0,0 +1,138 @@ +// +// EnumCase.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +/// A Swift `case` declaration inside an `enum`. +public struct EnumCase: CodeBlock { + internal let name: String + internal var literalValue: Literal? + internal var associatedValues: [(name: String, type: String)] = [] + + /// The name of the enum case. + public var caseName: String { name } + + /// The associated values for the enum case, if any. + public var caseAssociatedValues: [(name: String, type: String)] { associatedValues } + + /// Creates a `case` declaration. + /// - Parameter name: The name of the case. + public init(_ name: String) { + self.name = name + self.literalValue = nil + } + + /// Sets the associated value for the case. + /// - Parameters: + /// - name: The name of the associated value. + /// - type: The type of the associated value. + /// - Returns: A copy of the case with the associated value set. + public func associatedValue(_ name: String, type: String) -> Self { + var copy = self + copy.associatedValues.append((name: name, type: type)) + return copy + } + + /// Sets the raw value of the case to a Literal. + /// - Parameter value: The literal value. + /// - Returns: A copy of the case with the raw value set. + public func equals(_ value: Literal) -> Self { + var copy = self + copy.literalValue = value + return copy + } + + /// Sets the raw value of the case to a string (for backward compatibility). + /// - Parameter value: The string value. + /// - Returns: A copy of the case with the raw value set. + public func equals(_ value: String) -> Self { + self.equals(.string(value)) + } + + /// Sets the raw value of the case to an integer (for backward compatibility). + /// - Parameter value: The integer value. + /// - Returns: A copy of the case with the raw value set. + public func equals(_ value: Int) -> Self { + self.equals(.integer(value)) + } + + /// Sets the raw value of the case to a float (for backward compatibility). + /// - Parameter value: The float value. + /// - Returns: A copy of the case with the raw value set. + public func equals(_ value: Double) -> Self { + self.equals(.float(value)) + } + + /// Returns a SwiftSyntax expression for this enum case (for use in throw/return/etc). + public var asExpressionSyntax: ExprSyntax { + let parts = name.split(separator: ".", maxSplits: 1) + let base: ExprSyntax? = + parts.count == 2 + ? ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(String(parts[0])))) + : nil + let caseName = parts.count == 2 ? String(parts[1]) : name + let memberAccess = MemberAccessExprSyntax( + base: base, + dot: .periodToken(), + name: .identifier(caseName) + ) + if !associatedValues.isEmpty { + let tuple = TupleExprSyntax( + leftParen: .leftParenToken(), + elements: TupleExprElementListSyntax( + associatedValues.map { associated in + TupleExprElementSyntax( + label: nil, + colon: nil, + expression: ExprSyntax( + DeclReferenceExprSyntax(baseName: .identifier(associated.name))), + trailingComma: nil + ) + } + ), + rightParen: .rightParenToken() + ) + return ExprSyntax( + FunctionCallExprSyntax( + calledExpression: ExprSyntax(memberAccess), + leftParen: tuple.leftParen, + arguments: tuple.elements, + rightParen: tuple.rightParen + )) + } else { + return ExprSyntax(memberAccess) + } + } + + /// Returns the expression syntax for this enum case. + /// This is the preferred method when using EnumCase in expression contexts. + public var exprSyntax: ExprSyntax { + asExpressionSyntax + } +} diff --git a/Sources/SyntaxKit/ExprCodeBlock.swift b/Sources/SyntaxKit/ExprCodeBlock.swift new file mode 100644 index 0000000..34794ba --- /dev/null +++ b/Sources/SyntaxKit/ExprCodeBlock.swift @@ -0,0 +1,36 @@ +// +// ExprCodeBlock.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +/// A protocol for types that can be represented as an ExprSyntax node. +public protocol ExprCodeBlock { + /// The SwiftSyntax expression representation of the code block. + var exprSyntax: ExprSyntax { get } +} diff --git a/Sources/SyntaxKit/Extension.swift b/Sources/SyntaxKit/Extension.swift new file mode 100644 index 0000000..a61f803 --- /dev/null +++ b/Sources/SyntaxKit/Extension.swift @@ -0,0 +1,154 @@ +// +// Extension.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +/// A Swift `extension` declaration. +public struct Extension: CodeBlock { + private let extendedType: String + private let members: [CodeBlock] + private var inheritance: [String] = [] + private var attributes: [AttributeInfo] = [] + + /// Creates an extension declaration. + /// - Parameters: + /// - extendedType: The type being extended. + /// - content: A ``CodeBlockBuilder`` that provides the members of the extension. + public init(_ extendedType: String, @CodeBlockBuilderResult _ content: () -> [CodeBlock]) { + self.extendedType = extendedType + self.members = content() + } + + /// Sets one or more inherited protocols. + /// - Parameter types: The list of protocols this extension conforms to. + /// - Returns: A copy of the extension with the inheritance set. + public func inherits(_ types: String...) -> Self { + var copy = self + copy.inheritance = types + return copy + } + + /// Adds an attribute to the extension declaration. + /// - Parameters: + /// - attribute: The attribute name (without the @ symbol). + /// - arguments: The arguments for the attribute, if any. + /// - Returns: A copy of the extension with the attribute added. + public func attribute(_ attribute: String, arguments: [String] = []) -> Self { + var copy = self + copy.attributes.append(AttributeInfo(name: attribute, arguments: arguments)) + return copy + } + + public var syntax: SyntaxProtocol { + let extensionKeyword = TokenSyntax.keyword(.extension, trailingTrivia: .space) + let identifier = TokenSyntax.identifier(extendedType, trailingTrivia: .space) + + var inheritanceClause: InheritanceClauseSyntax? + if !inheritance.isEmpty { + let inheritedTypes = inheritance.map { type in + InheritedTypeSyntax(type: IdentifierTypeSyntax(name: .identifier(type))) + } + inheritanceClause = InheritanceClauseSyntax( + colon: .colonToken(), + inheritedTypes: InheritedTypeListSyntax( + inheritedTypes.enumerated().map { idx, inherited in + var type = inherited + if idx < inheritedTypes.count - 1 { + type = type.with(\.trailingComma, TokenSyntax.commaToken(trailingTrivia: .space)) + } + return type + } + ) + ) + } + + let memberBlock = MemberBlockSyntax( + leftBrace: .leftBraceToken(leadingTrivia: .space, trailingTrivia: .newline), + members: MemberBlockItemListSyntax( + members.compactMap { member in + guard let syntax = member.syntax.as(DeclSyntax.self) else { return nil } + return MemberBlockItemSyntax(decl: syntax, trailingTrivia: .newline) + }), + rightBrace: .rightBraceToken(leadingTrivia: .newline) + ) + + return ExtensionDeclSyntax( + attributes: buildAttributeList(from: attributes), + extensionKeyword: extensionKeyword, + extendedType: IdentifierTypeSyntax(name: identifier), + inheritanceClause: inheritanceClause, + memberBlock: memberBlock + ) + } + + private func buildAttributeList(from attributes: [AttributeInfo]) -> AttributeListSyntax { + if attributes.isEmpty { + return AttributeListSyntax([]) + } + let attributeElements = attributes.map { attribute in + let arguments = attribute.arguments + + var leftParen: TokenSyntax? + var rightParen: TokenSyntax? + var argumentsSyntax: AttributeSyntax.Arguments? + + if !arguments.isEmpty { + leftParen = .leftParenToken() + rightParen = .rightParenToken() + + let argumentList = arguments.map { argument in + DeclReferenceExprSyntax(baseName: .identifier(argument)) + } + + argumentsSyntax = .argumentList( + LabeledExprListSyntax( + argumentList.enumerated().map { index, expr in + var element = LabeledExprSyntax(expression: ExprSyntax(expr)) + if index < argumentList.count - 1 { + element = element.with(\.trailingComma, .commaToken(trailingTrivia: .space)) + } + return element + } + ) + ) + } + + return AttributeListSyntax.Element( + AttributeSyntax( + atSign: .atSignToken(), + attributeName: IdentifierTypeSyntax(name: .identifier(attribute.name)), + leftParen: leftParen, + arguments: argumentsSyntax, + rightParen: rightParen + ) + ) + } + return AttributeListSyntax(attributeElements) + } +} diff --git a/Sources/SyntaxKit/Fallthrough.swift b/Sources/SyntaxKit/Fallthrough.swift new file mode 100644 index 0000000..74cee65 --- /dev/null +++ b/Sources/SyntaxKit/Fallthrough.swift @@ -0,0 +1,44 @@ +// +// Fallthrough.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +/// A `fallthrough` statement. +public struct Fallthrough: CodeBlock { + /// Creates a `fallthrough` statement. + public init() {} + + public var syntax: SyntaxProtocol { + StmtSyntax( + FallthroughStmtSyntax( + fallthroughKeyword: .keyword(.fallthrough, trailingTrivia: .newline) + ) + ) + } +} diff --git a/Sources/SyntaxKit/For.swift b/Sources/SyntaxKit/For.swift new file mode 100644 index 0000000..ed3c963 --- /dev/null +++ b/Sources/SyntaxKit/For.swift @@ -0,0 +1,140 @@ +// +// For.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +/// A `for-in` loop statement. +public struct For: CodeBlock { + private let pattern: any CodeBlock & PatternConvertible + private let sequence: CodeBlock + private let whereClause: CodeBlock? + private let body: [CodeBlock] + + /// Creates a `for-in` loop statement. + /// - Parameters: + /// - pattern: A `CodeBlock` that also conforms to `PatternConvertible` for the loop variable(s). + /// - sequence: A `CodeBlock` that produces the sequence to iterate over. + /// - whereClause: An optional `CodeBlockBuilder` that produces the where clause condition. + /// - then: A ``CodeBlockBuilder`` that provides the body of the loop. + public init( + _ pattern: any CodeBlock & PatternConvertible, + in sequence: CodeBlock, + @CodeBlockBuilderResult where whereClause: () -> [CodeBlock] = { [] }, + @CodeBlockBuilderResult then: () -> [CodeBlock] + ) { + self.pattern = pattern + self.sequence = sequence + let whereBlocks = whereClause() + self.whereClause = whereBlocks.isEmpty ? nil : whereBlocks[0] + self.body = then() + } + + /// Creates a `for-in` loop statement with a closure-based pattern. + /// - Parameters: + /// - pattern: A `CodeBlockBuilder` that produces the pattern for the loop variable(s). + /// - sequence: A `CodeBlock` that produces the sequence to iterate over. + /// - whereClause: An optional `CodeBlockBuilder` that produces the where clause condition. + /// - then: A ``CodeBlockBuilder`` that provides the body of the loop. + public init( + @CodeBlockBuilderResult _ pattern: () -> [CodeBlock], + in sequence: CodeBlock, + @CodeBlockBuilderResult where whereClause: () -> [CodeBlock] = { [] }, + @CodeBlockBuilderResult then: () -> [CodeBlock] + ) { + let patterns = pattern() + guard patterns.count == 1 else { + fatalError("For requires exactly one pattern CodeBlock") + } + guard let patternBlock = patterns[0] as? (any CodeBlock & PatternConvertible) else { + fatalError("For pattern must implement both CodeBlock and PatternConvertible protocols") + } + self.pattern = patternBlock + self.sequence = sequence + let whereBlocks = whereClause() + self.whereClause = whereBlocks.isEmpty ? nil : whereBlocks[0] + self.body = then() + } + + public var syntax: SyntaxProtocol { + // Build the pattern using the PatternConvertible protocol + let patternSyntax = pattern.patternSyntax + + // Build the sequence expression + let sequenceExpr = ExprSyntax( + fromProtocol: sequence.syntax.as(ExprSyntax.self) + ?? DeclReferenceExprSyntax(baseName: .identifier("")) + ) + + // Build the where clause if present + var whereClauseSyntax: WhereClauseSyntax? + if let whereBlock = whereClause { + let whereExpr = ExprSyntax( + fromProtocol: whereBlock.syntax.as(ExprSyntax.self) + ?? DeclReferenceExprSyntax(baseName: .identifier("")) + ) + whereClauseSyntax = WhereClauseSyntax( + whereKeyword: .keyword(.where, leadingTrivia: .space, trailingTrivia: .space), + guardResult: whereExpr + ) + } + + // Build the body + let bodyBlock = CodeBlockSyntax( + leftBrace: .leftBraceToken(leadingTrivia: .space, trailingTrivia: .newline), + statements: CodeBlockItemListSyntax( + body.compactMap { + var item: CodeBlockItemSyntax? + if let decl = $0.syntax.as(DeclSyntax.self) { + item = CodeBlockItemSyntax(item: .decl(decl)) + } else if let expr = $0.syntax.as(ExprSyntax.self) { + item = CodeBlockItemSyntax(item: .expr(expr)) + } else if let stmt = $0.syntax.as(StmtSyntax.self) { + item = CodeBlockItemSyntax(item: .stmt(stmt)) + } + return item?.with(\.trailingTrivia, .newline) + }), + rightBrace: .rightBraceToken(leadingTrivia: .newline) + ) + + return StmtSyntax( + ForInStmtSyntax( + forKeyword: .keyword(.for, trailingTrivia: .space), + tryKeyword: nil, + awaitKeyword: nil, + caseKeyword: nil, + pattern: patternSyntax, + typeAnnotation: nil, + inKeyword: .keyword(.in, leadingTrivia: .space, trailingTrivia: .space), + sequence: sequenceExpr, + whereClause: whereClauseSyntax, + body: bodyBlock + ) + ) + } +} diff --git a/Sources/SyntaxKit/Function+EffectSpecifiers.swift b/Sources/SyntaxKit/Function+EffectSpecifiers.swift new file mode 100644 index 0000000..f985770 --- /dev/null +++ b/Sources/SyntaxKit/Function+EffectSpecifiers.swift @@ -0,0 +1,88 @@ +// +// Function+EffectSpecifiers.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +extension Function { + /// Builds the effect specifiers (async / throws) for the function. + internal func buildEffectSpecifiers() -> FunctionEffectSpecifiersSyntax? { + switch effect { + case .none: + return nil + case .throws(let isRethrows, let errorType): + let throwsSpecifier = buildThrowsSpecifier(isRethrows: isRethrows) + if let errorType = errorType { + return FunctionEffectSpecifiersSyntax( + asyncSpecifier: nil, + throwsClause: buildThrowsClause(throwsSpecifier: throwsSpecifier, errorType: errorType) + ) + } else { + return FunctionEffectSpecifiersSyntax( + asyncSpecifier: nil, + throwsSpecifier: throwsSpecifier + ) + } + case .async: + return FunctionEffectSpecifiersSyntax( + asyncSpecifier: .keyword(.async, leadingTrivia: .space, trailingTrivia: .space), + throwsSpecifier: nil + ) + case .asyncThrows(let isRethrows, let errorType): + let throwsSpecifier = buildThrowsSpecifier(isRethrows: isRethrows) + if let errorType = errorType { + return FunctionEffectSpecifiersSyntax( + asyncSpecifier: .keyword(.async, leadingTrivia: .space, trailingTrivia: .space), + throwsClause: buildThrowsClause(throwsSpecifier: throwsSpecifier, errorType: errorType) + ) + } else { + return FunctionEffectSpecifiersSyntax( + asyncSpecifier: .keyword(.async, leadingTrivia: .space, trailingTrivia: .space), + throwsSpecifier: throwsSpecifier + ) + } + } + } + + /// Builds the throws specifier token. + private func buildThrowsSpecifier(isRethrows: Bool) -> TokenSyntax { + .keyword(isRethrows ? .rethrows : .throws, leadingTrivia: .space) + } + + /// Builds the throws clause with error type. + private func buildThrowsClause(throwsSpecifier: TokenSyntax, errorType: String) + -> ThrowsClauseSyntax + { + ThrowsClauseSyntax( + throwsSpecifier: throwsSpecifier, + leftParen: .leftParenToken(), + type: IdentifierTypeSyntax(name: .identifier(errorType)), + rightParen: .rightParenToken() + ) + } +} diff --git a/Sources/SyntaxKit/Function+Effects.swift b/Sources/SyntaxKit/Function+Effects.swift new file mode 100644 index 0000000..ff6766c --- /dev/null +++ b/Sources/SyntaxKit/Function+Effects.swift @@ -0,0 +1,91 @@ +// +// Function+Effects.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +extension Function { + /// Function effect specifiers (async/throws combinations) + internal enum Effect { + case none + /// synchronous effect specifier: throws or rethrows + case `throws`(isRethrows: Bool, errorType: String?) + case async + /// combined async and throws/rethrows + case asyncThrows(isRethrows: Bool, errorType: String?) + } + + /// Marks the function as `throws` or `rethrows`. + /// - Parameter rethrows: Pass `true` to emit `rethrows` instead of `throws`. + public func `throws`(isRethrows: Bool = false) -> Self { + var copy = self + switch effect { + case .async: + copy.effect = .asyncThrows(isRethrows: isRethrows, errorType: nil) + default: + copy.effect = .throws(isRethrows: isRethrows, errorType: nil) + } + return copy + } + + /// Marks the function as `throws` with a specific error type. + /// - Parameter errorType: The error type to specify in the throws clause. + public func `throws`(_ errorType: String) -> Self { + var copy = self + switch effect { + case .async: + copy.effect = .asyncThrows(isRethrows: false, errorType: errorType) + default: + copy.effect = .throws(isRethrows: false, errorType: errorType) + } + return copy + } + + /// Marks the function as `async`. + public func async() -> Self { + var copy = self + copy.effect = .async + return copy + } + + /// Marks the function as `async throws` or `async rethrows`. + /// - Parameter rethrows: Pass `true` to emit `async rethrows`. + public func asyncThrows(isRethrows: Bool = false) -> Self { + var copy = self + copy.effect = .asyncThrows(isRethrows: isRethrows, errorType: nil) + return copy + } + + /// Marks the function as `async throws` with a specific error type. + /// - Parameter errorType: The error type to specify in the throws clause. + public func asyncThrows(_ errorType: String) -> Self { + var copy = self + copy.effect = .asyncThrows(isRethrows: false, errorType: errorType) + return copy + } +} diff --git a/Sources/SyntaxKit/Function+Modifiers.swift b/Sources/SyntaxKit/Function+Modifiers.swift new file mode 100644 index 0000000..cb1a734 --- /dev/null +++ b/Sources/SyntaxKit/Function+Modifiers.swift @@ -0,0 +1,59 @@ +// +// Function+Modifiers.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +extension Function { + /// Marks the function as `static`. + /// - Returns: A copy of the function marked as `static`. + public func `static`() -> Self { + var copy = self + copy.isStatic = true + return copy + } + + /// Marks the function as `mutating`. + /// - Returns: A copy of the function marked as `mutating`. + public func mutating() -> Self { + var copy = self + copy.isMutating = true + return copy + } + + /// Adds an attribute to the function declaration. + /// - Parameters: + /// - attribute: The attribute name (without the @ symbol). + /// - arguments: The arguments for the attribute, if any. + /// - Returns: A copy of the function with the attribute added. + public func attribute(_ attribute: String, arguments: [String] = []) -> Self { + var copy = self + copy.attributes.append(AttributeInfo(name: attribute, arguments: arguments)) + return copy + } +} diff --git a/Sources/SyntaxKit/Function+Syntax.swift b/Sources/SyntaxKit/Function+Syntax.swift new file mode 100644 index 0000000..5c03603 --- /dev/null +++ b/Sources/SyntaxKit/Function+Syntax.swift @@ -0,0 +1,195 @@ +// +// Function+Syntax.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +extension Function { + /// The syntax representation of this function. + public var syntax: SyntaxProtocol { + let funcKeyword = TokenSyntax.keyword(.func, trailingTrivia: .space) + let identifier = TokenSyntax.identifier(name) + + // Build parameter list + let paramList = FunctionParameterListSyntax( + parameters.enumerated().compactMap { index, param in + // Skip empty placeholders (possible in some builder scenarios) + guard !param.name.isEmpty || param.defaultValue != nil else { return nil } + + // Attributes for parameter + let paramAttributes = buildAttributeList(from: param.attributes) + + let firstNameLeading: Trivia = paramAttributes.isEmpty ? [] : .space + + // Determine first & second names + let firstNameToken: TokenSyntax + let secondNameToken: TokenSyntax? + + if param.isUnnamed { + firstNameToken = .wildcardToken(leadingTrivia: firstNameLeading, trailingTrivia: .space) + secondNameToken = .identifier(param.name) + } else if let label = param.label { + firstNameToken = .identifier( + label, leadingTrivia: firstNameLeading, trailingTrivia: .space) + secondNameToken = .identifier(param.name) + } else { + firstNameToken = .identifier( + param.name, leadingTrivia: firstNameLeading, trailingTrivia: .space) + secondNameToken = nil + } + + var paramSyntax = FunctionParameterSyntax( + attributes: paramAttributes, + firstName: firstNameToken, + secondName: secondNameToken, + colon: .colonToken(trailingTrivia: .space), + type: IdentifierTypeSyntax(name: .identifier(param.type)), + defaultValue: param.defaultValue.map { + InitializerClauseSyntax( + equal: .equalToken(leadingTrivia: .space, trailingTrivia: .space), + value: ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier($0))) + ) + } + ) + if index < parameters.count - 1 { + paramSyntax = paramSyntax.with(\.trailingComma, .commaToken(trailingTrivia: .space)) + } + return paramSyntax + }) + + // Build return type if specified + var returnClause: ReturnClauseSyntax? + if let returnType = returnType { + returnClause = ReturnClauseSyntax( + arrow: .arrowToken(leadingTrivia: .space, trailingTrivia: .space), + type: IdentifierTypeSyntax(name: .identifier(returnType)) + ) + } + + // Build function body + let bodyBlock = CodeBlockSyntax( + leftBrace: .leftBraceToken(leadingTrivia: .space, trailingTrivia: .newline), + statements: CodeBlockItemListSyntax( + body.compactMap { + var item: CodeBlockItemSyntax? + if let decl = $0.syntax.as(DeclSyntax.self) { + item = CodeBlockItemSyntax(item: .decl(decl)) + } else if let expr = $0.syntax.as(ExprSyntax.self) { + item = CodeBlockItemSyntax(item: .expr(expr)) + } else if let stmt = $0.syntax.as(StmtSyntax.self) { + item = CodeBlockItemSyntax(item: .stmt(stmt)) + } + return item?.with(\.trailingTrivia, .newline) + }), + rightBrace: .rightBraceToken(leadingTrivia: .newline) + ) + + // Build effect specifiers (async / throws) + let effectSpecifiers = buildEffectSpecifiers() + + // Build modifiers + var modifiers: DeclModifierListSyntax = [] + if isStatic { + modifiers = DeclModifierListSyntax([ + DeclModifierSyntax(name: .keyword(.static, trailingTrivia: .space)) + ]) + } + if isMutating { + modifiers = DeclModifierListSyntax( + modifiers + [ + DeclModifierSyntax(name: .keyword(.mutating, trailingTrivia: .space)) + ]) + } + + return FunctionDeclSyntax( + attributes: buildAttributeList(from: attributes), + modifiers: modifiers, + funcKeyword: funcKeyword, + name: identifier, + genericParameterClause: nil, + signature: FunctionSignatureSyntax( + parameterClause: FunctionParameterClauseSyntax( + leftParen: .leftParenToken(), + parameters: paramList, + rightParen: .rightParenToken() + ), + effectSpecifiers: effectSpecifiers, + returnClause: returnClause + ), + genericWhereClause: nil, + body: bodyBlock + ) + } + + private func buildAttributeList(from attributes: [AttributeInfo]) -> AttributeListSyntax { + if attributes.isEmpty { + return AttributeListSyntax([]) + } + + let attributeElements = attributes.map { attributeInfo in + let arguments = attributeInfo.arguments + + var leftParen: TokenSyntax? + var rightParen: TokenSyntax? + var argumentsSyntax: AttributeSyntax.Arguments? + + if !arguments.isEmpty { + leftParen = .leftParenToken() + rightParen = .rightParenToken() + + let argumentList = arguments.map { argument in + DeclReferenceExprSyntax(baseName: .identifier(argument)) + } + + argumentsSyntax = .argumentList( + LabeledExprListSyntax( + argumentList.enumerated().map { index, expr in + var element = LabeledExprSyntax(expression: ExprSyntax(expr)) + if index < argumentList.count - 1 { + element = element.with(\.trailingComma, .commaToken(trailingTrivia: .space)) + } + return element + } + ) + ) + } + + return AttributeListSyntax.Element( + AttributeSyntax( + atSign: .atSignToken(), + attributeName: IdentifierTypeSyntax(name: .identifier(attributeInfo.name)), + leftParen: leftParen, + arguments: argumentsSyntax, + rightParen: rightParen + ) + ) + } + + return AttributeListSyntax(attributeElements) + } +} diff --git a/Sources/SyntaxKit/Function.swift b/Sources/SyntaxKit/Function.swift index bac906f..655970b 100644 --- a/Sources/SyntaxKit/Function.swift +++ b/Sources/SyntaxKit/Function.swift @@ -31,12 +31,14 @@ import SwiftSyntax /// A Swift `func` declaration. public struct Function: CodeBlock { - private let name: String - private let parameters: [Parameter] - private let returnType: String? - private let body: [CodeBlock] - private var isStatic: Bool = false - private var isMutating: Bool = false + internal let name: String + internal let parameters: [Parameter] + internal let returnType: String? + internal let body: [CodeBlock] + internal var isStatic: Bool = false + internal var isMutating: Bool = false + internal var effect: Effect = .none + internal var attributes: [AttributeInfo] = [] /// Creates a `func` declaration. /// - Parameters: @@ -70,112 +72,19 @@ public struct Function: CodeBlock { self.body = content() } - /// Marks the function as `static`. - /// - Returns: A copy of the function marked as `static`. - public func `static`() -> Self { - var copy = self - copy.isStatic = true - return copy - } - - /// Marks the function as `mutating`. - /// - Returns: A copy of the function marked as `mutating`. - public func mutating() -> Self { - var copy = self - copy.isMutating = true - return copy - } - - public var syntax: SyntaxProtocol { - let funcKeyword = TokenSyntax.keyword(.func, trailingTrivia: .space) - let identifier = TokenSyntax.identifier(name) - - // Build parameter list - let paramList: FunctionParameterListSyntax - if parameters.isEmpty { - paramList = FunctionParameterListSyntax([]) - } else { - paramList = FunctionParameterListSyntax( - parameters.enumerated().compactMap { index, param in - guard !param.name.isEmpty, !param.type.isEmpty else { return nil } - var paramSyntax = FunctionParameterSyntax( - firstName: param.isUnnamed - ? .wildcardToken(trailingTrivia: .space) : .identifier(param.name), - secondName: param.isUnnamed ? .identifier(param.name) : nil, - colon: .colonToken(leadingTrivia: .space, trailingTrivia: .space), - type: IdentifierTypeSyntax(name: .identifier(param.type)), - defaultValue: param.defaultValue.map { - InitializerClauseSyntax( - equal: .equalToken(leadingTrivia: .space, trailingTrivia: .space), - value: ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier($0))) - ) - } - ) - if index < parameters.count - 1 { - paramSyntax = paramSyntax.with(\.trailingComma, .commaToken(trailingTrivia: .space)) - } - return paramSyntax - }) - } - - // Build return type if specified - var returnClause: ReturnClauseSyntax? - if let returnType = returnType { - returnClause = ReturnClauseSyntax( - arrow: .arrowToken(leadingTrivia: .space, trailingTrivia: .space), - type: IdentifierTypeSyntax(name: .identifier(returnType)) - ) - } - - // Build function body - let bodyBlock = CodeBlockSyntax( - leftBrace: .leftBraceToken(leadingTrivia: .space, trailingTrivia: .newline), - statements: CodeBlockItemListSyntax( - body.compactMap { - var item: CodeBlockItemSyntax? - if let decl = $0.syntax.as(DeclSyntax.self) { - item = CodeBlockItemSyntax(item: .decl(decl)) - } else if let expr = $0.syntax.as(ExprSyntax.self) { - item = CodeBlockItemSyntax(item: .expr(expr)) - } else if let stmt = $0.syntax.as(StmtSyntax.self) { - item = CodeBlockItemSyntax(item: .stmt(stmt)) - } - return item?.with(\.trailingTrivia, .newline) - }), - rightBrace: .rightBraceToken(leadingTrivia: .newline) - ) - - // Build modifiers - var modifiers: DeclModifierListSyntax = [] - if isStatic { - modifiers = DeclModifierListSyntax([ - DeclModifierSyntax(name: .keyword(.static, trailingTrivia: .space)) - ]) - } - if isMutating { - modifiers = DeclModifierListSyntax( - modifiers + [ - DeclModifierSyntax(name: .keyword(.mutating, trailingTrivia: .space)) - ]) - } - - return FunctionDeclSyntax( - attributes: AttributeListSyntax([]), - modifiers: modifiers, - funcKeyword: funcKeyword, - name: identifier, - genericParameterClause: nil, - signature: FunctionSignatureSyntax( - parameterClause: FunctionParameterClauseSyntax( - leftParen: .leftParenToken(), - parameters: paramList, - rightParen: .rightParenToken() - ), - effectSpecifiers: nil, - returnClause: returnClause - ), - genericWhereClause: nil, - body: bodyBlock - ) + /// Creates a `func` declaration with parameters and body using the DSL syntax. + /// - Parameters: + /// - name: The name of the function. + /// - params: A ``ParameterBuilder`` that provides the parameters of the function. + /// - body: A ``CodeBlockBuilder`` that provides the body of the function. + public init( + _ name: String, + @ParameterBuilderResult _ params: () -> [Parameter], + @CodeBlockBuilderResult _ body: () -> [CodeBlock] + ) { + self.name = name + self.parameters = params() + self.returnType = nil + self.body = body() } } diff --git a/Sources/SyntaxKit/FunctionRequirement.swift b/Sources/SyntaxKit/FunctionRequirement.swift new file mode 100644 index 0000000..3faf7ae --- /dev/null +++ b/Sources/SyntaxKit/FunctionRequirement.swift @@ -0,0 +1,147 @@ +// +// FunctionRequirement.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +/// A function requirement within a protocol declaration (no body). +public struct FunctionRequirement: CodeBlock { + private let name: String + private let parameters: [Parameter] + private let returnType: String? + private var isStatic: Bool = false + private var isMutating: Bool = false + + /// Creates a parameterless function requirement. + /// - Parameters: + /// - name: The function name. + /// - returnType: Optional return type. + public init(_ name: String, returns returnType: String? = nil) { + self.name = name + self.parameters = [] + self.returnType = returnType + } + + /// Creates a function requirement with parameters. + /// - Parameters: + /// - name: The function name. + /// - returnType: Optional return type. + /// - params: A ParameterBuilderResult providing the parameters. + public init( + _ name: String, returns returnType: String? = nil, + @ParameterBuilderResult _ params: () -> [Parameter] + ) { + self.name = name + self.parameters = params() + self.returnType = returnType + } + + /// Marks the function requirement as `static`. + public func `static`() -> Self { + var copy = self + copy.isStatic = true + return copy + } + + /// Marks the function requirement as `mutating`. + public func mutating() -> Self { + var copy = self + copy.isMutating = true + return copy + } + + public var syntax: SyntaxProtocol { + let funcKeyword = TokenSyntax.keyword(.func, trailingTrivia: .space) + let identifier = TokenSyntax.identifier(name) + + // Parameters + let paramList: FunctionParameterListSyntax + if parameters.isEmpty { + paramList = FunctionParameterListSyntax([]) + } else { + paramList = FunctionParameterListSyntax( + parameters.enumerated().compactMap { index, param in + guard !param.name.isEmpty, !param.type.isEmpty else { return nil } + var paramSyntax = FunctionParameterSyntax( + firstName: param.isUnnamed + ? .wildcardToken(trailingTrivia: .space) : .identifier(param.name), + secondName: param.isUnnamed ? .identifier(param.name) : nil, + colon: .colonToken(leadingTrivia: .space, trailingTrivia: .space), + type: IdentifierTypeSyntax(name: .identifier(param.type)), + defaultValue: param.defaultValue.map { + InitializerClauseSyntax( + equal: .equalToken(leadingTrivia: .space, trailingTrivia: .space), + value: ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier($0))) + ) + } + ) + if index < parameters.count - 1 { + paramSyntax = paramSyntax.with(\.trailingComma, .commaToken(trailingTrivia: .space)) + } + return paramSyntax + }) + } + + // Return clause + var returnClause: ReturnClauseSyntax? + if let returnType = returnType { + returnClause = ReturnClauseSyntax( + arrow: .arrowToken(leadingTrivia: .space, trailingTrivia: .space), + type: IdentifierTypeSyntax(name: .identifier(returnType)) + ) + } + + // Modifiers + var modifiers: DeclModifierListSyntax = [] + if isStatic { + modifiers = DeclModifierListSyntax([ + DeclModifierSyntax(name: .keyword(.static, trailingTrivia: .space)) + ]) + } + if isMutating { + modifiers = DeclModifierListSyntax( + modifiers + [DeclModifierSyntax(name: .keyword(.mutating, trailingTrivia: .space))] + ) + } + + return FunctionDeclSyntax( + attributes: AttributeListSyntax([]), + modifiers: modifiers, + funcKeyword: funcKeyword, + name: identifier, + signature: FunctionSignatureSyntax( + parameterClause: FunctionParameterClauseSyntax( + leftParen: .leftParenToken(), parameters: paramList, rightParen: .rightParenToken() + ), + effectSpecifiers: nil, + returnClause: returnClause + ), + body: nil + ) + } +} diff --git a/Sources/SyntaxKit/Group.swift b/Sources/SyntaxKit/Group.swift index 7b3e824..329574a 100644 --- a/Sources/SyntaxKit/Group.swift +++ b/Sources/SyntaxKit/Group.swift @@ -31,7 +31,7 @@ import SwiftSyntax /// A group of code blocks. public struct Group: CodeBlock { - let members: [CodeBlock] + internal let members: [CodeBlock] /// Creates a group of code blocks. /// - Parameter content: A ``CodeBlockBuilder`` that provides the members of the group. diff --git a/Sources/SyntaxKit/Guard.swift b/Sources/SyntaxKit/Guard.swift new file mode 100644 index 0000000..b5e9bf5 --- /dev/null +++ b/Sources/SyntaxKit/Guard.swift @@ -0,0 +1,143 @@ +// +// Guard.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +/// A `guard … else { … }` statement. +public struct Guard: CodeBlock { + private let conditions: [CodeBlock] + private let elseBody: [CodeBlock] + + /// Creates a `guard` statement. + /// - Parameters: + /// - condition: A builder that returns one or more ``CodeBlock`` items representing the guard + /// conditions. + /// - elseBody: Builder that produces the statements inside the `else` block. + public init( + @CodeBlockBuilderResult _ condition: () -> [CodeBlock], + @CodeBlockBuilderResult else elseBody: () -> [CodeBlock] + ) { + let allConditions = condition() + guard !allConditions.isEmpty else { + fatalError("Guard requires at least one condition CodeBlock") + } + self.conditions = allConditions + self.elseBody = elseBody() + } + + /// Convenience initializer that accepts a single condition ``CodeBlock``. + public init( + _ condition: CodeBlock, + @CodeBlockBuilderResult else elseBody: () -> [CodeBlock] + ) { + self.init({ condition }, else: elseBody) + } + + public var syntax: SyntaxProtocol { + // MARK: Build conditions list (mirror implementation from `If`) + let condList = ConditionElementListSyntax( + conditions.enumerated().map { index, block in + let needsComma = index < conditions.count - 1 + func appendComma(_ element: ConditionElementSyntax) -> ConditionElementSyntax { + needsComma ? element.with(\.trailingComma, .commaToken(trailingTrivia: .space)) : element + } + + if let letCond = block as? Let { + let element = ConditionElementSyntax( + condition: .optionalBinding( + OptionalBindingConditionSyntax( + bindingSpecifier: .keyword(.let, trailingTrivia: .space), + pattern: IdentifierPatternSyntax(identifier: .identifier(letCond.name)), + initializer: InitializerClauseSyntax( + equal: .equalToken(leadingTrivia: .space, trailingTrivia: .space), + value: letCond.value.syntax.as(ExprSyntax.self) + ?? ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(""))) + ) + ) + ) + ) + return appendComma(element) + } else { + let element = ConditionElementSyntax( + condition: .expression( + ExprSyntax( + fromProtocol: block.syntax.as(ExprSyntax.self) + ?? DeclReferenceExprSyntax(baseName: .identifier("")) + ) + ) + ) + return appendComma(element) + } + } + ) + + // MARK: Build else body code block + var elseItems: [CodeBlockItemSyntax] = elseBody.compactMap { block in + if let decl = block.syntax.as(DeclSyntax.self) { + return CodeBlockItemSyntax(item: .decl(decl)).with(\.trailingTrivia, .newline) + } else if let expr = block.syntax.as(ExprSyntax.self) { + return CodeBlockItemSyntax(item: .expr(expr)).with(\.trailingTrivia, .newline) + } else if let stmt = block.syntax.as(StmtSyntax.self) { + return CodeBlockItemSyntax(item: .stmt(stmt)).with(\.trailingTrivia, .newline) + } + return nil + } + + // Automatically append a bare `return` if the user didn't provide a terminating statement. + let containsTerminatingStatement = elseItems.contains { item in + if case .stmt(let stmt) = item.item { + return stmt.is(ReturnStmtSyntax.self) || stmt.is(ThrowStmtSyntax.self) + || stmt.is(BreakStmtSyntax.self) || stmt.is(ContinueStmtSyntax.self) + } + return false + } + if !containsTerminatingStatement { + let retStmt = ReturnStmtSyntax(returnKeyword: .keyword(.return)) + elseItems.append( + CodeBlockItemSyntax(item: .stmt(StmtSyntax(retStmt))).with(\.trailingTrivia, .newline) + ) + } + + let elseBlock = CodeBlockSyntax( + leftBrace: .leftBraceToken(leadingTrivia: .space, trailingTrivia: .newline), + statements: CodeBlockItemListSyntax(elseItems), + rightBrace: .rightBraceToken(leadingTrivia: .newline) + ) + + // Build and return GuardStmtSyntax wrapped in `StmtSyntax` + return StmtSyntax( + GuardStmtSyntax( + guardKeyword: .keyword(.guard, trailingTrivia: .space), + conditions: condList, + elseKeyword: .keyword(.else, leadingTrivia: .space, trailingTrivia: .space), + body: elseBlock + ) + ) + } +} diff --git a/Sources/SyntaxKit/If.swift b/Sources/SyntaxKit/If.swift index 53e7bd5..b916df7 100644 --- a/Sources/SyntaxKit/If.swift +++ b/Sources/SyntaxKit/If.swift @@ -31,53 +31,86 @@ import SwiftSyntax /// An `if` statement. public struct If: CodeBlock { - private let condition: CodeBlock + private let conditions: [CodeBlock] private let body: [CodeBlock] private let elseBody: [CodeBlock]? - /// Creates an `if` statement. + /// Creates an `if` statement with optional `else`. /// - Parameters: - /// - condition: The condition to evaluate. This can be a ``Let`` for optional binding. - /// - then: A ``CodeBlockBuilder`` that provides the body of the `if` block. - /// - elseBody: A ``CodeBlockBuilder`` that provides the body of the `else` block, if any. + /// - condition: A single `CodeBlock` produced by the builder that describes the `if` condition. + /// - then: Builder that produces the body for the `if` branch. + /// - elseBody: Builder that produces the body for the `else` branch. The body may contain + /// nested `If` instances (representing `else if`) and/or a ``Then`` block for the + /// final `else` statements. public init( - _ condition: CodeBlock, @CodeBlockBuilderResult then: () -> [CodeBlock], - else elseBody: (() -> [CodeBlock])? = nil + @CodeBlockBuilderResult _ condition: () -> [CodeBlock], + @CodeBlockBuilderResult then: () -> [CodeBlock], + @CodeBlockBuilderResult else elseBody: () -> [CodeBlock] = { [] } ) { - self.condition = condition + let allConditions = condition() + guard !allConditions.isEmpty else { + fatalError("If requires at least one condition CodeBlock") + } + self.conditions = allConditions self.body = then() - self.elseBody = elseBody?() + let generatedElse = elseBody() + self.elseBody = generatedElse.isEmpty ? nil : generatedElse + } + + /// Convenience initializer that keeps the previous API: pass the condition directly. + public init( + _ condition: CodeBlock, + @CodeBlockBuilderResult then: () -> [CodeBlock], + @CodeBlockBuilderResult else elseBody: () -> [CodeBlock] = { [] } + ) { + self.init({ condition }, then: then, else: elseBody) } public var syntax: SyntaxProtocol { - let cond: ConditionElementSyntax - if let letCond = condition as? Let { - cond = ConditionElementSyntax( - condition: .optionalBinding( - OptionalBindingConditionSyntax( - bindingSpecifier: .keyword(.let, trailingTrivia: .space), - pattern: IdentifierPatternSyntax(identifier: .identifier(letCond.name)), - initializer: InitializerClauseSyntax( - equal: .equalToken(leadingTrivia: .space, trailingTrivia: .space), - value: ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(letCond.value))) + // Build list of ConditionElements from all provided conditions + let condList = ConditionElementListSyntax( + conditions.enumerated().map { index, block in + let needsComma = index < conditions.count - 1 + + func appendComma(_ element: ConditionElementSyntax) -> ConditionElementSyntax { + needsComma ? element.with(\.trailingComma, .commaToken(trailingTrivia: .space)) : element + } + + if let letCond = block as? Let { + let element = ConditionElementSyntax( + condition: .optionalBinding( + OptionalBindingConditionSyntax( + bindingSpecifier: .keyword(.let, trailingTrivia: .space), + pattern: IdentifierPatternSyntax(identifier: .identifier(letCond.name)), + initializer: InitializerClauseSyntax( + equal: .equalToken(leadingTrivia: .space, trailingTrivia: .space), + value: letCond.value.syntax.as(ExprSyntax.self) + ?? ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(""))) + ) + ) ) ) - ) - ) - } else { - cond = ConditionElementSyntax( - condition: .expression( - ExprSyntax( - fromProtocol: condition.syntax.as(ExprSyntax.self) - ?? DeclReferenceExprSyntax(baseName: .identifier("")))) - ) - } + return appendComma(element) + } else { + let element = ConditionElementSyntax( + condition: .expression( + ExprSyntax( + fromProtocol: block.syntax.as(ExprSyntax.self) + ?? DeclReferenceExprSyntax(baseName: .identifier("")))) + ) + return appendComma(element) + } + } + ) let bodyBlock = CodeBlockSyntax( leftBrace: .leftBraceToken(leadingTrivia: .space, trailingTrivia: .newline), statements: CodeBlockItemListSyntax( body.compactMap { var item: CodeBlockItemSyntax? - if let decl = $0.syntax.as(DeclSyntax.self) { + if let enumCase = $0 as? EnumCase { + // Handle EnumCase specially - use expression syntax for enum cases in expressions + item = CodeBlockItemSyntax(item: .expr(enumCase.exprSyntax)) + } else if let decl = $0.syntax.as(DeclSyntax.self) { item = CodeBlockItemSyntax(item: .decl(decl)) } else if let expr = $0.syntax.as(ExprSyntax.self) { item = CodeBlockItemSyntax(item: .expr(expr)) @@ -88,31 +121,102 @@ public struct If: CodeBlock { }), rightBrace: .rightBraceToken(leadingTrivia: .newline) ) - let elseBlock = elseBody.map { - IfExprSyntax.ElseBody( - CodeBlockSyntax( - leftBrace: .leftBraceToken(leadingTrivia: .space, trailingTrivia: .newline), - statements: CodeBlockItemListSyntax( - $0.compactMap { - var item: CodeBlockItemSyntax? - if let decl = $0.syntax.as(DeclSyntax.self) { - item = CodeBlockItemSyntax(item: .decl(decl)) - } else if let expr = $0.syntax.as(ExprSyntax.self) { - item = CodeBlockItemSyntax(item: .expr(expr)) - } else if let stmt = $0.syntax.as(StmtSyntax.self) { - item = CodeBlockItemSyntax(item: .stmt(stmt)) + // swiftlint:disable:next closure_body_length + let elseBlock: IfExprSyntax.ElseBody? = { + guard let elseBlocks = elseBody else { + return nil + } + + // Build a chained else-if structure if the builder provided If blocks. + var current: SyntaxProtocol? + + for block in elseBlocks.reversed() { + switch block { + case let thenBlock as Then: + // Leaf `else` – produce a code-block. + let stmts = CodeBlockItemListSyntax( + thenBlock.body.compactMap { element in + if let enumCase = element as? EnumCase { + // Handle EnumCase specially - use expression syntax for enum cases in expressions + return CodeBlockItemSyntax(item: .expr(enumCase.exprSyntax)).with( + \.trailingTrivia, .newline) + } else if let decl = element.syntax.as(DeclSyntax.self) { + return CodeBlockItemSyntax(item: .decl(decl)).with(\.trailingTrivia, .newline) + } else if let expr = element.syntax.as(ExprSyntax.self) { + return CodeBlockItemSyntax(item: .expr(expr)).with(\.trailingTrivia, .newline) + } else if let stmt = element.syntax.as(StmtSyntax.self) { + return CodeBlockItemSyntax(item: .stmt(stmt)).with(\.trailingTrivia, .newline) } - return item?.with(\.trailingTrivia, .newline) - }), - rightBrace: .rightBraceToken(leadingTrivia: .newline) - )) - } + return nil + }) + let codeBlock = CodeBlockSyntax( + leftBrace: .leftBraceToken(leadingTrivia: .space, trailingTrivia: .newline), + statements: stmts, + rightBrace: .rightBraceToken(leadingTrivia: .newline) + ) + current = codeBlock as SyntaxProtocol + + case let ifBlock as If: + guard var ifExpr = ifBlock.syntax.as(IfExprSyntax.self) else { continue } + if let nested = current { + let elseChoice: IfExprSyntax.ElseBody + if let cb = nested.as(CodeBlockSyntax.self) { + elseChoice = IfExprSyntax.ElseBody(cb) + } else if let nestedIf = nested.as(IfExprSyntax.self) { + elseChoice = IfExprSyntax.ElseBody(nestedIf) + } else { + continue + } + + ifExpr = + ifExpr + .with(\.elseKeyword, .keyword(.else, leadingTrivia: .space, trailingTrivia: .space)) + .with(\.elseBody, elseChoice) + } + current = ifExpr as SyntaxProtocol + + default: + // Treat any other CodeBlock as part of a final code-block + let item: CodeBlockItemSyntax? + if let enumCase = block as? EnumCase { + // Handle EnumCase specially - use expression syntax for enum cases in expressions + item = CodeBlockItemSyntax(item: .expr(enumCase.exprSyntax)) + } else if let decl = block.syntax.as(DeclSyntax.self) { + item = CodeBlockItemSyntax(item: .decl(decl)) + } else if let expr = block.syntax.as(ExprSyntax.self) { + item = CodeBlockItemSyntax(item: .expr(expr)) + } else if let stmt = block.syntax.as(StmtSyntax.self) { + item = CodeBlockItemSyntax(item: .stmt(stmt)) + } else { + item = nil + } + if let itm = item { + let codeBlock = CodeBlockSyntax( + leftBrace: .leftBraceToken(leadingTrivia: .space, trailingTrivia: .newline), + statements: CodeBlockItemListSyntax([itm.with(\.trailingTrivia, .newline)]), + rightBrace: .rightBraceToken(leadingTrivia: .newline) + ) + current = codeBlock as SyntaxProtocol + } + } + } + + if let final = current { + if let cb = final.as(CodeBlockSyntax.self) { + return IfExprSyntax.ElseBody(cb) + } else if let ifExpr = final.as(IfExprSyntax.self) { + return IfExprSyntax.ElseBody(ifExpr) + } + } + return nil + }() return ExprSyntax( IfExprSyntax( ifKeyword: .keyword(.if, trailingTrivia: .space), - conditions: ConditionElementListSyntax([cond]), + conditions: condList, body: bodyBlock, - elseKeyword: elseBlock != nil ? .keyword(.else, trailingTrivia: .space) : nil, + elseKeyword: elseBlock != nil + ? .keyword(.else, leadingTrivia: .space, trailingTrivia: .space) : nil, elseBody: elseBlock ) ) diff --git a/Sources/SyntaxKit/Infix.swift b/Sources/SyntaxKit/Infix.swift new file mode 100644 index 0000000..82ce259 --- /dev/null +++ b/Sources/SyntaxKit/Infix.swift @@ -0,0 +1,120 @@ +// +// Infix.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +/// A generic binary (infix) operator expression, e.g. `a + b`. +public struct Infix: CodeBlock { + private let op: String + private let operands: [CodeBlock] + + /// Creates an infix operator expression. + /// - Parameters: + /// - op: The operator symbol as it should appear in source (e.g. "+", "-", "&&"). + /// - content: A ``CodeBlockBuilder`` that supplies the two operand expressions. + /// + /// Exactly two operands must be supplied – a left-hand side and a right-hand side. + public init(_ op: String, @CodeBlockBuilderResult _ content: () -> [CodeBlock]) { + self.op = op + self.operands = content() + } + + public var syntax: SyntaxProtocol { + guard operands.count == 2 else { + fatalError("Infix expects exactly two operands, got \(operands.count).") + } + + let left = operands[0].expr + let right = operands[1].expr + + let operatorExpr = ExprSyntax( + BinaryOperatorExprSyntax( + operator: .binaryOperator(op, leadingTrivia: .space, trailingTrivia: .space) + ) + ) + + return SequenceExprSyntax( + elements: ExprListSyntax([ + left, + operatorExpr, + right, + ]) + ) + } +} + +// MARK: - Operator Overloads for Infix Expressions + +/// Creates a greater-than comparison expression. +/// - Parameters: +/// - lhs: The left-hand side expression. +/// - rhs: The right-hand side expression. +/// - Returns: An infix expression representing `lhs > rhs`. +public func > (lhs: CodeBlock, rhs: CodeBlock) -> Infix { + Infix(">") { + lhs + rhs + } +} + +/// Creates a less-than comparison expression. +/// - Parameters: +/// - lhs: The left-hand side expression. +/// - rhs: The right-hand side expression. +/// - Returns: An infix expression representing `lhs < rhs`. +public func < (lhs: CodeBlock, rhs: CodeBlock) -> Infix { + Infix("<") { + lhs + rhs + } +} + +/// Creates an equality comparison expression. +/// - Parameters: +/// - lhs: The left-hand side expression. +/// - rhs: The right-hand side expression. +/// - Returns: An infix expression representing `lhs == rhs`. +public func == (lhs: CodeBlock, rhs: CodeBlock) -> Infix { + Infix("==") { + lhs + rhs + } +} + +/// Creates an inequality comparison expression. +/// - Parameters: +/// - lhs: The left-hand side expression. +/// - rhs: The right-hand side expression. +/// - Returns: An infix expression representing `lhs != rhs`. +public func != (lhs: CodeBlock, rhs: CodeBlock) -> Infix { + Infix("!=") { + lhs + rhs + } +} diff --git a/Sources/SyntaxKit/Init.swift b/Sources/SyntaxKit/Init.swift index c94a9e8..acf8122 100644 --- a/Sources/SyntaxKit/Init.swift +++ b/Sources/SyntaxKit/Init.swift @@ -30,22 +30,30 @@ import SwiftSyntax /// An initializer expression. -public struct Init: CodeBlock { +public struct Init: CodeBlock, ExprCodeBlock, LiteralValue { private let type: String - private let parameters: [Parameter] + private let parameters: [ParameterExp] + + /// Creates an initializer expression with no parameters. + /// - Parameter type: The type to initialize. + public init(_ type: String) { + self.type = type + self.parameters = [] + } /// Creates an initializer expression. /// - Parameters: /// - type: The type to initialize. - /// - params: A ``ParameterBuilder`` that provides the parameters for the initializer. - public init(_ type: String, @ParameterBuilderResult _ params: () -> [Parameter]) { + /// - params: A ``ParameterExpBuilder`` that provides the parameters for the initializer. + public init(_ type: String, @ParameterExpBuilderResult _ params: () -> [ParameterExp]) { self.type = type self.parameters = params() } - public var syntax: SyntaxProtocol { - let args = TupleExprElementListSyntax( + + public var exprSyntax: ExprSyntax { + let args = LabeledExprListSyntax( parameters.enumerated().compactMap { index, param in - guard let element = param.syntax as? TupleExprElementSyntax else { + guard let element = param.syntax as? LabeledExprSyntax else { return nil } if index < parameters.count - 1 { @@ -57,8 +65,22 @@ public struct Init: CodeBlock { FunctionCallExprSyntax( calledExpression: ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(type))), leftParen: .leftParenToken(), - argumentList: args, + arguments: args, rightParen: .rightParenToken() )) } + + public var syntax: SyntaxProtocol { + exprSyntax + } + + // MARK: - LiteralValue Conformance + + public var typeName: String { + type + } + + public var literalString: String { + "\(type)()" + } } diff --git a/Sources/SyntaxKit/Let.swift b/Sources/SyntaxKit/Let.swift index cd2d46d..f6ff30d 100644 --- a/Sources/SyntaxKit/Let.swift +++ b/Sources/SyntaxKit/Let.swift @@ -31,17 +31,27 @@ import SwiftSyntax /// A Swift `let` declaration for use in an `if` statement. public struct Let: CodeBlock { - let name: String - let value: String + internal let name: String + internal let value: CodeBlock /// Creates a `let` declaration for an `if` statement. /// - Parameters: /// - name: The name of the constant. /// - value: The value to assign to the constant. - public init(_ name: String, _ value: String) { + public init(_ name: String, _ value: CodeBlock) { self.name = name self.value = value } + + /// Creates a `let` declaration for an `if` statement with a string value. + /// - Parameters: + /// - name: The name of the constant. + /// - value: The string value to assign to the constant. + public init(_ name: String, _ value: String) { + self.name = name + self.value = VariableExp(value) + } + public var syntax: SyntaxProtocol { CodeBlockItemSyntax( item: .decl( @@ -53,7 +63,8 @@ public struct Let: CodeBlock { pattern: IdentifierPatternSyntax(identifier: .identifier(name)), initializer: InitializerClauseSyntax( equal: .equalToken(leadingTrivia: .space, trailingTrivia: .space), - value: ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(value))) + value: value.syntax.as(ExprSyntax.self) + ?? ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(""))) ) ) ]) diff --git a/Sources/SyntaxKit/Line.swift b/Sources/SyntaxKit/Line.swift index 3017ae6..5127453 100644 --- a/Sources/SyntaxKit/Line.swift +++ b/Sources/SyntaxKit/Line.swift @@ -27,6 +27,27 @@ // OTHER DEALINGS IN THE SOFTWARE. // +/// obtaining a copy of this software and associated documentation +/// files (the "Software"), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + import SwiftSyntax /// Represents a single comment line that can be attached to a syntax node. diff --git a/Sources/SyntaxKit/Literal+Convenience.swift b/Sources/SyntaxKit/Literal+Convenience.swift new file mode 100644 index 0000000..b7c024f --- /dev/null +++ b/Sources/SyntaxKit/Literal+Convenience.swift @@ -0,0 +1,54 @@ +// +// Literal+Convenience.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation + +// MARK: - Convenience Methods + +extension Literal { + /// Creates a tuple literal from an array of optional literals (for patterns with wildcards). + public static func tuplePattern(_ elements: [Literal?]) -> Literal { + .tuple(elements) + } + + /// Creates an integer literal. + public static func int(_ value: Int) -> Literal { + .integer(value) + } + + /// Converts a Literal.tuple to a TupleLiteral for use in Variable declarations. + public var asTupleLiteral: TupleLiteral? { + switch self { + case .tuple(let elements): + return TupleLiteral(elements) + default: + return nil + } + } +} diff --git a/Sources/SyntaxKit/Literal+ExprCodeBlock.swift b/Sources/SyntaxKit/Literal+ExprCodeBlock.swift new file mode 100644 index 0000000..8b74e74 --- /dev/null +++ b/Sources/SyntaxKit/Literal+ExprCodeBlock.swift @@ -0,0 +1,118 @@ +// +// Literal+ExprCodeBlock.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +// MARK: - ExprCodeBlock conformance + +extension Literal: ExprCodeBlock { + /// The expression syntax representation of this literal. + public var exprSyntax: ExprSyntax { + switch self { + case .string(let value): + return ExprSyntax( + StringLiteralExprSyntax( + openingQuote: .stringQuoteToken(), + segments: .init([ + .stringSegment(.init(content: .stringSegment(value))) + ]), + closingQuote: .stringQuoteToken() + )) + case .float(let value): + return ExprSyntax(FloatLiteralExprSyntax(literal: .floatLiteral(String(value)))) + case .integer(let value): + return ExprSyntax(IntegerLiteralExprSyntax(digits: .integerLiteral(String(value)))) + case .nil: + return ExprSyntax(NilLiteralExprSyntax(nilKeyword: .keyword(.nil))) + case .boolean(let value): + return ExprSyntax( + BooleanLiteralExprSyntax(literal: value ? .keyword(.true) : .keyword(.false))) + case .ref(let value): + return ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(value))) + case .tuple(let elements): + let tupleElements = TupleExprElementListSyntax( + elements.enumerated().map { index, element in + let elementExpr: ExprSyntax + if let element = element { + elementExpr = element.exprSyntax + } else { + // Wildcard pattern - use underscore + elementExpr = ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier("_"))) + } + return TupleExprElementSyntax( + label: nil, + colon: nil, + expression: elementExpr, + trailingComma: index < elements.count - 1 ? .commaToken(trailingTrivia: .space) : nil + ) + } + ) + return ExprSyntax( + TupleExprSyntax( + leftParen: .leftParenToken(), + elements: tupleElements, + rightParen: .rightParenToken() + )) + case .array(let elements): + let arrayElements = ArrayElementListSyntax( + elements.enumerated().map { index, element in + ArrayElementSyntax( + expression: element.syntax.as(ExprSyntax.self) + ?? ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(""))), + trailingComma: index < elements.count - 1 ? .commaToken(trailingTrivia: .space) : nil + ) + } + ) + return ExprSyntax(ArrayExprSyntax(elements: arrayElements)) + case .dictionary(let elements): + if elements.isEmpty { + // Empty dictionary should generate [:] + return ExprSyntax( + DictionaryExprSyntax( + leftSquare: .leftSquareToken(), + content: .colon(.colonToken(leadingTrivia: .init(), trailingTrivia: .init())), + rightSquare: .rightSquareToken() + )) + } else { + let dictionaryElements = DictionaryElementListSyntax( + elements.enumerated().map { index, keyValue in + let (key, value) = keyValue + return DictionaryElementSyntax( + keyExpression: key.exprSyntax, + colon: .colonToken(), + valueExpression: value.exprSyntax, + trailingComma: index < elements.count - 1 ? .commaToken(trailingTrivia: .space) : nil + ) + } + ) + return ExprSyntax(DictionaryExprSyntax(content: .elements(dictionaryElements))) + } + } + } +} diff --git a/Sources/SyntaxKit/Literal.swift b/Sources/SyntaxKit/Literal.swift index 7e0e1dd..0a2dbee 100644 --- a/Sources/SyntaxKit/Literal.swift +++ b/Sources/SyntaxKit/Literal.swift @@ -41,7 +41,60 @@ public enum Literal: CodeBlock { case `nil` /// A boolean literal. case boolean(Bool) + /// A reference to a variable or identifier (outputs without quotes). + case ref(String) + /// A tuple literal. + case tuple([Literal?]) + /// An array literal. + case array([Literal]) + /// A dictionary literal. + case dictionary([(Literal, Literal)]) + /// The Swift type name for this literal. + public var typeName: String { + switch self { + case .string: return "String" + case .float: return "Double" + case .integer: return "Int" + case .nil: return "Any?" + case .boolean: return "Bool" + case .ref: return "Any" + case .tuple(let elements): + let elementTypes = elements.map { element in + if let element = element { + switch element { + case .integer: return "Int" + case .float: return "Double" + case .string: return "String" + case .boolean: return "Bool" + case .nil: return "Any?" + case .ref: return "Any" + case .tuple: return "Any" + case .array: return "Any" + case .dictionary: return "Any" + } + } else { + return "Any" + } + } + return "(\(elementTypes.joined(separator: ", ")))" + case .array(let elements): + if elements.isEmpty { + return "[Any]" + } + let elementType = elements.first?.typeName ?? "Any" + return "[\(elementType)]" + case .dictionary(let elements): + if elements.isEmpty { + return "[Any: Any]" + } + let keyType = elements.first?.0.typeName ?? "Any" + let valueType = elements.first?.1.typeName ?? "Any" + return "[\(keyType): \(valueType)]" + } + } + + /// The SwiftSyntax representation of this literal. public var syntax: SyntaxProtocol { switch self { case .string(let value): @@ -61,6 +114,68 @@ public enum Literal: CodeBlock { return NilLiteralExprSyntax(nilKeyword: .keyword(.nil)) case .boolean(let value): return BooleanLiteralExprSyntax(literal: value ? .keyword(.true) : .keyword(.false)) + case .ref(let value): + return DeclReferenceExprSyntax(baseName: .identifier(value)) + case .tuple(let elements): + let tupleElements = TupleExprElementListSyntax( + elements.enumerated().map { index, element in + let elementExpr: ExprSyntax + if let element = element { + elementExpr = + element.syntax.as(ExprSyntax.self) + ?? ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(""))) + } else { + // Wildcard pattern - use underscore + elementExpr = ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier("_"))) + } + return TupleExprElementSyntax( + label: nil, + colon: nil, + expression: elementExpr, + trailingComma: index < elements.count - 1 ? .commaToken(trailingTrivia: .space) : nil + ) + } + ) + return TupleExprSyntax( + leftParen: .leftParenToken(), + elements: tupleElements, + rightParen: .rightParenToken() + ) + case .array(let elements): + let arrayElements = ArrayElementListSyntax( + elements.enumerated().map { index, element in + ArrayElementSyntax( + expression: element.syntax.as(ExprSyntax.self) + ?? ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(""))), + trailingComma: index < elements.count - 1 ? .commaToken(trailingTrivia: .space) : nil + ) + } + ) + return ArrayExprSyntax(elements: arrayElements) + case .dictionary(let elements): + if elements.isEmpty { + // Empty dictionary should generate [:] + return DictionaryExprSyntax( + leftSquare: .leftSquareToken(), + content: .colon(.colonToken(leadingTrivia: .init(), trailingTrivia: .init())), + rightSquare: .rightSquareToken() + ) + } else { + let dictionaryElements = DictionaryElementListSyntax( + elements.enumerated().map { index, keyValue in + let (key, value) = keyValue + return DictionaryElementSyntax( + keyExpression: key.syntax.as(ExprSyntax.self) + ?? ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(""))), + colon: .colonToken(), + valueExpression: value.syntax.as(ExprSyntax.self) + ?? ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(""))), + trailingComma: index < elements.count - 1 ? .commaToken(trailingTrivia: .space) : nil + ) + } + ) + return DictionaryExprSyntax(content: .elements(dictionaryElements)) + } } } } diff --git a/Sources/SyntaxKit/LiteralValue.swift b/Sources/SyntaxKit/LiteralValue.swift new file mode 100644 index 0000000..afb8cfe --- /dev/null +++ b/Sources/SyntaxKit/LiteralValue.swift @@ -0,0 +1,39 @@ +// +// LiteralValue.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation + +/// A protocol for types that can be represented as literal values in Swift code. +public protocol LiteralValue { + /// The Swift type name for this literal value. + var typeName: String { get } + + /// Renders this value as a Swift literal string. + var literalString: String { get } +} diff --git a/Sources/SyntaxKit/Parameter.swift b/Sources/SyntaxKit/Parameter.swift index 08c76d9..a5fa4a7 100644 --- a/Sources/SyntaxKit/Parameter.swift +++ b/Sources/SyntaxKit/Parameter.swift @@ -33,10 +33,21 @@ import SwiftSyntax /// A parameter for a function or initializer. public struct Parameter: CodeBlock { - let name: String - let type: String - let defaultValue: String? - let isUnnamed: Bool + /// The internal parameter name that is visible inside the function body. + internal let name: String + + /// The external argument label (first name) shown at call-sites. + /// If `nil`, the label is identical to the internal name (single-name parameter). + /// If the label is the underscore character "_", the parameter is treated as unnamed. + internal let label: String? + + internal let type: String + internal let defaultValue: String? + + /// Convenience flag – true when the parameter uses the underscore label. + internal var isUnnamed: Bool { label == "_" } + + internal var attributes: [AttributeInfo] = [] /// Creates a parameter for a function or initializer. /// - Parameters: @@ -44,27 +55,87 @@ public struct Parameter: CodeBlock { /// - type: The type of the parameter. /// - defaultValue: The default value of the parameter, if any. /// - isUnnamed: A Boolean value that indicates whether the parameter is unnamed. - public init(name: String, type: String, defaultValue: String? = nil, isUnnamed: Bool = false) { - self.name = name - self.type = type - self.defaultValue = defaultValue - self.isUnnamed = isUnnamed + // NOTE: The previous initializer that accepted an `isUnnamed` flag has been replaced. + + /// Creates an unlabeled parameter for function calls or initializers. + /// - Parameter value: The value of the parameter. + public init(unlabeled value: String) { + self.name = "" + self.label = "_" + self.type = "" + self.defaultValue = value + } + + /// Adds an attribute to the parameter declaration. + /// - Parameters: + /// - attribute: The attribute name (without the @ symbol). + /// - arguments: The arguments for the attribute, if any. + /// - Returns: A copy of the parameter with the attribute added. + public func attribute(_ attribute: String, arguments: [String] = []) -> Self { + var copy = self + copy.attributes.append(AttributeInfo(name: attribute, arguments: arguments)) + return copy } public var syntax: SyntaxProtocol { - // Not used for function signature, but for call sites (Init, etc.) + let callLabel = label ?? name + if let defaultValue = defaultValue { return LabeledExprSyntax( - label: .identifier(name), + label: .identifier(callLabel), colon: .colonToken(), expression: ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(defaultValue))) ) } else { return LabeledExprSyntax( - label: .identifier(name), + label: .identifier(callLabel), colon: .colonToken(), expression: ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(name))) ) } + // Note: If you want to support attributes in parameter syntax, you would need to + // update the function signature generation in Function.swift to use these attributes. + } + + /// Creates a single-name parameter (same label and internal name). + public init(name: String, type: String, defaultValue: String? = nil) { + self.name = name + self.label = nil + self.type = type + self.defaultValue = defaultValue + } + + /// Creates a two-name parameter where the external label differs from the internal name. + /// Example: `Parameter("value", labeled: "forKey", type: "String")` maps to + /// `forKey value: String` in the generated Swift. + public init( + _ internalName: String, + labeled externalLabel: String, + type: String, + defaultValue: String? = nil + ) { + self.name = internalName + self.label = externalLabel + self.type = type + self.defaultValue = defaultValue + } + + /// Creates an unlabeled (anonymous) parameter using the underscore label. + public init(unlabeled internalName: String, type: String, defaultValue: String? = nil) { + self.name = internalName + self.label = "_" + self.type = type + self.defaultValue = defaultValue + } + + /// Deprecated: retains source compatibility with earlier API that used an `isUnnamed` flag. + /// Prefer `Parameter(unlabeled:type:)` or the new labelled initialisers. + @available(*, deprecated, message: "Use Parameter(unlabeled:type:) or Parameter(_:labeled:type:)") + public init(name: String, type: String, defaultValue: String? = nil, isUnnamed: Bool) { + if isUnnamed { + self.init(unlabeled: name, type: type, defaultValue: defaultValue) + } else { + self.init(name: name, type: type, defaultValue: defaultValue) + } } } diff --git a/Sources/SyntaxKit/ParameterExp.swift b/Sources/SyntaxKit/ParameterExp.swift index 02274e8..90539a8 100644 --- a/Sources/SyntaxKit/ParameterExp.swift +++ b/Sources/SyntaxKit/ParameterExp.swift @@ -31,26 +31,49 @@ import SwiftSyntax /// A parameter for a function call. public struct ParameterExp: CodeBlock { - let name: String - let value: String + internal let name: String + internal let value: CodeBlock /// Creates a parameter for a function call. /// - Parameters: /// - name: The name of the parameter. /// - value: The value of the parameter. + public init(name: String, value: CodeBlock) { + self.name = name + self.value = value + } + + /// Creates a parameter for a function call with a string value. + /// - Parameters: + /// - name: The name of the parameter. + /// - value: The string value of the parameter. public init(name: String, value: String) { self.name = name + self.value = VariableExp(value) + } + + /// Convenience initializer for unlabeled parameter with a CodeBlock value. + public init(unlabeled value: CodeBlock) { + self.name = "" self.value = value } + /// Convenience initializer for unlabeled parameter with a String value. + public init(unlabeled value: String) { + self.name = "" + self.value = VariableExp(value) + } + public var syntax: SyntaxProtocol { if name.isEmpty { - return ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(value))) + return value.syntax.as(ExprSyntax.self) + ?? ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(""))) } else { return LabeledExprSyntax( label: .identifier(name), colon: .colonToken(), - expression: ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(value))) + expression: value.syntax.as(ExprSyntax.self) + ?? ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(""))) ) } } diff --git a/Sources/SyntaxKit/Parenthesized.swift b/Sources/SyntaxKit/Parenthesized.swift new file mode 100644 index 0000000..be8959b --- /dev/null +++ b/Sources/SyntaxKit/Parenthesized.swift @@ -0,0 +1,55 @@ +// +// Parenthesized.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +/// A code block that wraps its content in parentheses. +public struct Parenthesized: CodeBlock { + private let content: CodeBlock + + /// Creates a parenthesized code block. + /// - Parameter content: The code block to wrap in parentheses. + public init(@CodeBlockBuilderResult _ content: () -> [CodeBlock]) { + let blocks = content() + precondition(blocks.count == 1, "Parenthesized expects exactly one code block.") + self.content = blocks[0] + } + + public var syntax: SyntaxProtocol { + ExprSyntax( + TupleExprSyntax( + leftParen: .leftParenToken(), + elements: LabeledExprListSyntax([ + LabeledExprSyntax(expression: content.expr) + ]), + rightParen: .rightParenToken() + ) + ) + } +} diff --git a/Sources/SyntaxKit/PatternConvertible.swift b/Sources/SyntaxKit/PatternConvertible.swift new file mode 100644 index 0000000..7e502e4 --- /dev/null +++ b/Sources/SyntaxKit/PatternConvertible.swift @@ -0,0 +1,127 @@ +// +// PatternConvertible.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation +import SwiftSyntax + +/// Types that can be turned into a `PatternSyntax` suitable for a `switch` case pattern. +public protocol PatternConvertible { + /// SwiftSyntax representation of the pattern. + var patternSyntax: PatternSyntax { get } +} + +// MARK: - Literal conformance + +extension Literal: PatternConvertible { + /// SwiftSyntax representation of the literal as a pattern. + public var patternSyntax: PatternSyntax { + guard let expr = self.syntax.as(ExprSyntax.self) else { + fatalError("Literal.syntax did not return ExprSyntax") + } + return PatternSyntax(ExpressionPatternSyntax(expression: expr)) + } +} + +// MARK: - Int conformance + +extension Int: PatternConvertible { + /// SwiftSyntax representation of the integer as a pattern. + public var patternSyntax: PatternSyntax { + let expr = ExprSyntax(IntegerLiteralExprSyntax(literal: .integerLiteral(String(self)))) + return PatternSyntax(ExpressionPatternSyntax(expression: expr)) + } +} + +// MARK: - Ranges + +extension Swift.Range: PatternConvertible where Bound == Int { + /// SwiftSyntax representation of the range as a pattern. + public var patternSyntax: PatternSyntax { + let lhs = ExprSyntax( + IntegerLiteralExprSyntax(literal: .integerLiteral(String(self.lowerBound)))) + let op = ExprSyntax(BinaryOperatorExprSyntax(operator: .binaryOperator("..<"))) + let rhs = ExprSyntax( + IntegerLiteralExprSyntax(literal: .integerLiteral(String(self.upperBound)))) + let seq = SequenceExprSyntax(elements: ExprListSyntax([lhs, op, rhs])) + return PatternSyntax(ExpressionPatternSyntax(expression: ExprSyntax(seq))) + } +} + +extension Swift.ClosedRange: PatternConvertible where Bound == Int { + /// SwiftSyntax representation of the closed range as a pattern. + public var patternSyntax: PatternSyntax { + let lhs = ExprSyntax( + IntegerLiteralExprSyntax(literal: .integerLiteral(String(self.lowerBound)))) + let op = ExprSyntax(BinaryOperatorExprSyntax(operator: .binaryOperator("..."))) + let rhs = ExprSyntax( + IntegerLiteralExprSyntax(literal: .integerLiteral(String(self.upperBound)))) + let seq = SequenceExprSyntax(elements: ExprListSyntax([lhs, op, rhs])) + return PatternSyntax(ExpressionPatternSyntax(expression: ExprSyntax(seq))) + } +} + +// MARK: - String identifiers + +extension String: PatternConvertible { + /// SwiftSyntax representation of the string as an identifier pattern. + public var patternSyntax: PatternSyntax { + PatternSyntax(IdentifierPatternSyntax(identifier: .identifier(self))) + } +} + +// MARK: - Let binding pattern + +/// A `let` binding pattern for switch cases. +public struct LetBindingPattern: PatternConvertible { + private let identifier: String + + internal init(identifier: String) { + self.identifier = identifier + } + + /// SwiftSyntax representation of the let binding pattern. + public var patternSyntax: PatternSyntax { + PatternSyntax( + ValueBindingPatternSyntax( + bindingSpecifier: .keyword(.let, trailingTrivia: .space), + pattern: PatternSyntax(IdentifierPatternSyntax(identifier: .identifier(identifier))) + ) + ) + } +} + +/// Namespace for pattern creation utilities. +public enum Pattern { + /// Creates a `let` binding pattern for switch cases. + /// - Parameter identifier: The name of the variable to bind. + /// - Returns: A pattern that binds the value to the given identifier. + public static func `let`(_ identifier: String) -> LetBindingPattern { + LetBindingPattern(identifier: identifier) + } +} diff --git a/Sources/SyntaxKit/PlusAssign.swift b/Sources/SyntaxKit/PlusAssign.swift index 8b79cc8..2ad0bab 100644 --- a/Sources/SyntaxKit/PlusAssign.swift +++ b/Sources/SyntaxKit/PlusAssign.swift @@ -32,33 +32,39 @@ import SwiftSyntax /// A `+=` expression. public struct PlusAssign: CodeBlock { private let target: String - private let value: String + private let valueExpr: ExprSyntax - /// Creates a `+=` expression. - /// - Parameters: - /// - target: The variable to assign to. - /// - value: The value to add and assign. - public init(_ target: String, _ value: String) { + /// Creates a `+=` expression with a literal value. + public init(_ target: String, _ literal: Literal) { self.target = target - self.value = value + guard let expr = literal.syntax.as(ExprSyntax.self) else { + fatalError("Literal.syntax did not produce ExprSyntax") + } + self.valueExpr = expr + } + + /// Creates a `+=` expression with an integer literal value. + public init(_ target: String, _ value: Int) { + self.init(target, .integer(value)) + } + + /// Creates a `+=` expression with a string literal value. + public init(_ target: String, _ value: String) { + self.init(target, .string(value)) + } + + /// Creates a `+=` expression with a boolean literal value. + public init(_ target: String, _ value: Bool) { + self.init(target, .boolean(value)) + } + + /// Creates a `+=` expression with a double literal value. + public init(_ target: String, _ value: Double) { + self.init(target, .float(value)) } public var syntax: SyntaxProtocol { let left = ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(target))) - let right: ExprSyntax - if value.hasPrefix("\"") && value.hasSuffix("\"") || value.contains("\\(") { - right = ExprSyntax( - StringLiteralExprSyntax( - openingQuote: .stringQuoteToken(), - segments: StringLiteralSegmentListSyntax([ - .stringSegment( - StringSegmentSyntax(content: .stringSegment(String(value.dropFirst().dropLast())))) - ]), - closingQuote: .stringQuoteToken() - )) - } else { - right = ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(value))) - } let assign = ExprSyntax( BinaryOperatorExprSyntax( operator: .binaryOperator("+=", leadingTrivia: .space, trailingTrivia: .space))) @@ -66,7 +72,7 @@ public struct PlusAssign: CodeBlock { elements: ExprListSyntax([ left, assign, - right, + valueExpr, ]) ) } diff --git a/Sources/SyntaxKit/PropertyRequirement.swift b/Sources/SyntaxKit/PropertyRequirement.swift new file mode 100644 index 0000000..0a41fb1 --- /dev/null +++ b/Sources/SyntaxKit/PropertyRequirement.swift @@ -0,0 +1,102 @@ +// +// PropertyRequirement.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +/// A property requirement inside a protocol declaration. +public struct PropertyRequirement: CodeBlock { + /// The accessor options for the property. + public enum Access { + case get + case getSet + } + + private let name: String + private let type: String + private let access: Access + + /// Creates a property requirement. + /// - Parameters: + /// - name: The property name. + /// - type: The property type. + /// - access: Whether the property is get-only or get/set. + public init(_ name: String, type: String, access: Access = .get) { + self.name = name + self.type = type + self.access = access + } + + public var syntax: SyntaxProtocol { + let varKeyword = TokenSyntax.keyword(.var, trailingTrivia: .space) + let identifier = TokenSyntax.identifier(name, trailingTrivia: .space) + + let typeAnnotation = TypeAnnotationSyntax( + colon: .colonToken(leadingTrivia: .space, trailingTrivia: .space), + type: IdentifierTypeSyntax(name: .identifier(type)) + ) + + // Build accessor list + let accessorList: AccessorDeclListSyntax = { + switch access { + case .get: + return AccessorDeclListSyntax([ + AccessorDeclSyntax( + accessorSpecifier: .keyword(.get, trailingTrivia: .space) + ) + ]) + case .getSet: + return AccessorDeclListSyntax([ + AccessorDeclSyntax( + accessorSpecifier: .keyword(.get, trailingTrivia: .space) + ), + AccessorDeclSyntax( + accessorSpecifier: .keyword(.set, trailingTrivia: .space) + ), + ]) + } + }() + + let accessorBlock = AccessorBlockSyntax( + leftBrace: .leftBraceToken(leadingTrivia: .space, trailingTrivia: .space), + accessors: .accessors(accessorList), + rightBrace: .rightBraceToken(leadingTrivia: .space, trailingTrivia: .newline) + ) + + return VariableDeclSyntax( + bindingSpecifier: varKeyword, + bindings: PatternBindingListSyntax([ + PatternBindingSyntax( + pattern: IdentifierPatternSyntax(identifier: identifier), + typeAnnotation: typeAnnotation, + accessorBlock: accessorBlock + ) + ]) + ) + } +} diff --git a/Sources/SyntaxKit/Protocol.swift b/Sources/SyntaxKit/Protocol.swift new file mode 100644 index 0000000..bc11002 --- /dev/null +++ b/Sources/SyntaxKit/Protocol.swift @@ -0,0 +1,162 @@ +// +// Protocol.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +/// A Swift `protocol` declaration. +public struct Protocol: CodeBlock { + private let name: String + private let members: [CodeBlock] + private var inheritance: [String] = [] + private var attributes: [AttributeInfo] = [] + + /// Creates a `protocol` declaration. + /// - Parameters: + /// - name: The name of the protocol. + /// - content: A ``CodeBlockBuilder`` that provides the members of the protocol. + public init(_ name: String, @CodeBlockBuilderResult _ content: () -> [CodeBlock]) { + self.name = name + self.members = content() + } + + /// Sets one or more inherited protocols. + /// - Parameter types: The list of protocols this protocol inherits from. + /// - Returns: A copy of the protocol with the inheritance set. + public func inherits(_ types: String...) -> Self { + var copy = self + copy.inheritance = types + return copy + } + + /// Adds an attribute to the protocol declaration. + /// - Parameters: + /// - attribute: The attribute name (without the @ symbol). + /// - arguments: The arguments for the attribute, if any. + /// - Returns: A copy of the protocol with the attribute added. + public func attribute(_ attribute: String, arguments: [String] = []) -> Self { + var copy = self + copy.attributes.append(AttributeInfo(name: attribute, arguments: arguments)) + return copy + } + + public var syntax: SyntaxProtocol { + let protocolKeyword = TokenSyntax.keyword(.protocol, trailingTrivia: .space) + let identifier = TokenSyntax.identifier(name) + + // Inheritance clause + var inheritanceClause: InheritanceClauseSyntax? + if !inheritance.isEmpty { + let inheritedTypes = inheritance.map { type in + InheritedTypeSyntax(type: IdentifierTypeSyntax(name: .identifier(type))) + } + inheritanceClause = InheritanceClauseSyntax( + colon: .colonToken(), + inheritedTypes: InheritedTypeListSyntax( + inheritedTypes.enumerated().map { idx, inherited in + var inheritedType = inherited + if idx < inheritedTypes.count - 1 { + inheritedType = inheritedType.with( + \.trailingComma, + TokenSyntax.commaToken(trailingTrivia: .space) + ) + } + return inheritedType + } + ) + ) + } + + // Member block + let memberBlock = MemberBlockSyntax( + leftBrace: .leftBraceToken(leadingTrivia: .space, trailingTrivia: .newline), + members: MemberBlockItemListSyntax( + members.compactMap { member in + guard let decl = member.syntax.as(DeclSyntax.self) else { return nil } + return MemberBlockItemSyntax(decl: decl, trailingTrivia: .newline) + } + ), + rightBrace: .rightBraceToken(leadingTrivia: .newline) + ) + + return ProtocolDeclSyntax( + attributes: buildAttributeList(from: attributes), + protocolKeyword: protocolKeyword, + name: identifier, + primaryAssociatedTypeClause: nil, + inheritanceClause: inheritanceClause, + genericWhereClause: nil, + memberBlock: memberBlock + ) + } + + private func buildAttributeList(from attributes: [AttributeInfo]) -> AttributeListSyntax { + if attributes.isEmpty { + return AttributeListSyntax([]) + } + let attributeElements = attributes.map { attributeInfo in + let arguments = attributeInfo.arguments + + var leftParen: TokenSyntax? + var rightParen: TokenSyntax? + var argumentsSyntax: AttributeSyntax.Arguments? + + if !arguments.isEmpty { + leftParen = .leftParenToken() + rightParen = .rightParenToken() + + let argumentList = arguments.map { argument in + DeclReferenceExprSyntax(baseName: .identifier(argument)) + } + + argumentsSyntax = .argumentList( + LabeledExprListSyntax( + argumentList.enumerated().map { index, expr in + var element = LabeledExprSyntax(expression: ExprSyntax(expr)) + if index < argumentList.count - 1 { + element = element.with(\.trailingComma, .commaToken(trailingTrivia: .space)) + } + return element + } + ) + ) + } + + return AttributeListSyntax.Element( + AttributeSyntax( + atSign: .atSignToken(), + attributeName: IdentifierTypeSyntax(name: .identifier(attributeInfo.name)), + leftParen: leftParen, + arguments: argumentsSyntax, + rightParen: rightParen + ) + ) + } + return AttributeListSyntax(attributeElements) + } +} diff --git a/Sources/SyntaxKit/Struct.swift b/Sources/SyntaxKit/Struct.swift index 50d6dc6..cbf7b76 100644 --- a/Sources/SyntaxKit/Struct.swift +++ b/Sources/SyntaxKit/Struct.swift @@ -33,28 +33,45 @@ import SwiftSyntax public struct Struct: CodeBlock { private let name: String private let members: [CodeBlock] - private var inheritance: String? private var genericParameter: String? + private var inheritance: [String] = [] + private var attributes: [AttributeInfo] = [] /// Creates a `struct` declaration. /// - Parameters: /// - name: The name of the struct. - /// - generic: A generic parameter for the struct, if any. /// - content: A ``CodeBlockBuilder`` that provides the members of the struct. - public init( - _ name: String, generic: String? = nil, @CodeBlockBuilderResult _ content: () -> [CodeBlock] - ) { + public init(_ name: String, @CodeBlockBuilderResult _ content: () -> [CodeBlock]) { self.name = name self.members = content() - self.genericParameter = generic + } + + /// Sets the generic parameter for the struct. + /// - Parameter generic: The generic parameter name. + /// - Returns: A copy of the struct with the generic parameter set. + public func generic(_ generic: String) -> Self { + var copy = self + copy.genericParameter = generic + return copy } /// Sets the inheritance for the struct. - /// - Parameter type: The type to inherit from. + /// - Parameter inheritance: The types to inherit from. /// - Returns: A copy of the struct with the inheritance set. - public func inherits(_ type: String) -> Self { + public func inherits(_ inheritance: String...) -> Self { + var copy = self + copy.inheritance = inheritance + return copy + } + + /// Adds an attribute to the struct declaration. + /// - Parameters: + /// - attribute: The attribute name (without the @ symbol). + /// - arguments: The arguments for the attribute, if any. + /// - Returns: A copy of the struct with the attribute added. + public func attribute(_ attribute: String, arguments: [String] = []) -> Self { var copy = self - copy.inheritance = type + copy.attributes.append(AttributeInfo(name: attribute, arguments: arguments)) return copy } @@ -76,11 +93,26 @@ public struct Struct: CodeBlock { } var inheritanceClause: InheritanceClauseSyntax? - if let inheritance = inheritance { - let inheritedType = InheritedTypeSyntax( - type: IdentifierTypeSyntax(name: .identifier(inheritance))) + if !inheritance.isEmpty { + let inheritedTypes = inheritance.map { type in + InheritedTypeSyntax( + type: IdentifierTypeSyntax(name: .identifier(type))) + } inheritanceClause = InheritanceClauseSyntax( - colon: .colonToken(), inheritedTypes: InheritedTypeListSyntax([inheritedType])) + colon: .colonToken(), + inheritedTypes: InheritedTypeListSyntax( + inheritedTypes.enumerated().map { idx, inherited in + var inheritedType = inherited + if idx < inheritedTypes.count - 1 { + inheritedType = inheritedType.with( + \.trailingComma, + TokenSyntax.commaToken(trailingTrivia: .space) + ) + } + return inheritedType + } + ) + ) } let memberBlock = MemberBlockSyntax( @@ -94,6 +126,7 @@ public struct Struct: CodeBlock { ) return StructDeclSyntax( + attributes: buildAttributeList(from: attributes), structKeyword: structKeyword, name: identifier, genericParameterClause: genericParameterClause, @@ -101,4 +134,49 @@ public struct Struct: CodeBlock { memberBlock: memberBlock ) } + + private func buildAttributeList(from attributes: [AttributeInfo]) -> AttributeListSyntax { + if attributes.isEmpty { + return AttributeListSyntax([]) + } + let attributeElements = attributes.map { attributeInfo in + let arguments = attributeInfo.arguments + + var leftParen: TokenSyntax? + var rightParen: TokenSyntax? + var argumentsSyntax: AttributeSyntax.Arguments? + + if !arguments.isEmpty { + leftParen = .leftParenToken() + rightParen = .rightParenToken() + + let argumentList = arguments.map { argument in + DeclReferenceExprSyntax(baseName: .identifier(argument)) + } + + argumentsSyntax = .argumentList( + LabeledExprListSyntax( + argumentList.enumerated().map { index, expr in + var element = LabeledExprSyntax(expression: ExprSyntax(expr)) + if index < argumentList.count - 1 { + element = element.with(\.trailingComma, .commaToken(trailingTrivia: .space)) + } + return element + } + ) + ) + } + + return AttributeListSyntax.Element( + AttributeSyntax( + atSign: .atSignToken(), + attributeName: IdentifierTypeSyntax(name: .identifier(attributeInfo.name)), + leftParen: leftParen, + arguments: argumentsSyntax, + rightParen: rightParen + ) + ) + } + return AttributeListSyntax(attributeElements) + } } diff --git a/Sources/SyntaxKit/Switch.swift b/Sources/SyntaxKit/Switch.swift index b03f7fb..bd44369 100644 --- a/Sources/SyntaxKit/Switch.swift +++ b/Sources/SyntaxKit/Switch.swift @@ -31,21 +31,34 @@ import SwiftSyntax /// A `switch` statement. public struct Switch: CodeBlock { - private let expression: String + private let expression: CodeBlock private let cases: [CodeBlock] /// Creates a `switch` statement. /// - Parameters: /// - expression: The expression to switch on. /// - content: A ``CodeBlockBuilder`` that provides the cases for the switch. - public init(_ expression: String, @CodeBlockBuilderResult _ content: () -> [CodeBlock]) { + public init(_ expression: CodeBlock, @CodeBlockBuilderResult _ content: () -> [CodeBlock]) { self.expression = expression self.cases = content() } + /// Convenience initializer that accepts a string expression. + /// - Parameters: + /// - expression: The string expression to switch on. + /// - content: A ``CodeBlockBuilder`` that provides the cases for the switch. + public init(_ expression: String, @CodeBlockBuilderResult _ content: () -> [CodeBlock]) { + self.expression = VariableExp(expression) + self.cases = content() + } + public var syntax: SyntaxProtocol { - let expr = ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(expression))) + let expr = ExprSyntax( + fromProtocol: expression.syntax.as(ExprSyntax.self) + ?? DeclReferenceExprSyntax(baseName: .identifier("")) + ) let casesArr: [SwitchCaseSyntax] = self.cases.compactMap { + if let tupleCase = $0 as? Case { return tupleCase.switchCaseSyntax } if let switchCase = $0 as? SwitchCase { return switchCase.switchCaseSyntax } if let switchDefault = $0 as? Default { return switchDefault.switchCaseSyntax } return nil diff --git a/Sources/SyntaxKit/SwitchCase.swift b/Sources/SyntaxKit/SwitchCase.swift index 1d219b4..0b579cc 100644 --- a/Sources/SyntaxKit/SwitchCase.swift +++ b/Sources/SyntaxKit/SwitchCase.swift @@ -31,44 +31,111 @@ import SwiftSyntax /// A `case` in a `switch` statement. public struct SwitchCase: CodeBlock { - private let patterns: [String] + private let patterns: [Any] private let body: [CodeBlock] /// Creates a `case` for a `switch` statement. /// - Parameters: - /// - patterns: The patterns to match for the case. + /// - patterns: The patterns to match for the case. Can be `PatternConvertible`, + /// `CodeBlock`, or `SwitchLet` for value binding. /// - content: A ``CodeBlockBuilder`` that provides the body of the case. - public init(_ patterns: String..., @CodeBlockBuilderResult content: () -> [CodeBlock]) { + public init(_ patterns: Any..., @CodeBlockBuilderResult content: () -> [CodeBlock]) { self.patterns = patterns self.body = content() } + /// Creates a `case` for a `switch` statement with a builder closure for the conditional. + /// - Parameters: + /// - conditional: A ``CodeBlockBuilder`` that provides the conditional patterns for the case. + /// - content: A ``CodeBlockBuilder`` that provides the body of the case. + public init( + @CodeBlockBuilderResult conditional: () -> [Any], + @CodeBlockBuilderResult content: () -> [CodeBlock] + ) { + self.patterns = conditional() + self.body = content() + } + public var switchCaseSyntax: SwitchCaseSyntax { let caseItems = SwitchCaseItemListSyntax( - patterns.enumerated().map { index, pattern in - var item = SwitchCaseItemSyntax( - pattern: PatternSyntax(IdentifierPatternSyntax(identifier: .identifier(pattern))) - ) + patterns.enumerated().compactMap { index, pattern -> SwitchCaseItemSyntax? in + let patternSyntax: PatternSyntax + + if let patternConvertible = pattern as? PatternConvertible { + patternSyntax = patternConvertible.patternSyntax + } else if let variableExp = pattern as? VariableExp { + // Handle VariableExp specially - convert to identifier pattern + patternSyntax = PatternSyntax( + IdentifierPatternSyntax(identifier: .identifier(variableExp.name))) + } else if let codeBlock = pattern as? CodeBlock { + // Convert CodeBlock to expression pattern + let expr = ExprSyntax( + fromProtocol: codeBlock.syntax.as(ExprSyntax.self) + ?? DeclReferenceExprSyntax(baseName: .identifier("")) + ) + patternSyntax = PatternSyntax(ExpressionPatternSyntax(expression: expr)) + } else { + return nil + } + + var item = SwitchCaseItemSyntax(pattern: patternSyntax) if index < patterns.count - 1 { item = item.with(\.trailingComma, .commaToken(trailingTrivia: .space)) } return item }) - let statements = CodeBlockItemListSyntax( - body.compactMap { - var item: CodeBlockItemSyntax? - if let decl = $0.syntax.as(DeclSyntax.self) { - item = CodeBlockItemSyntax(item: .decl(decl)) - } else if let expr = $0.syntax.as(ExprSyntax.self) { - item = CodeBlockItemSyntax(item: .expr(expr)) - } else if let stmt = $0.syntax.as(StmtSyntax.self) { - item = CodeBlockItemSyntax(item: .stmt(stmt)) - } - return item?.with(\.trailingTrivia, .newline) - }) + + // Handle special case for multiple conditionals with let binding and where clause + var finalCaseItems = caseItems + if patterns.count >= 2 { + // Check if we have a let binding followed by an expression (where clause) + if let firstPattern = patterns.first as? SwitchLet, + let secondPattern = patterns[1] as? CodeBlock + { + let letIdentifier = IdentifierPatternSyntax(identifier: .identifier(firstPattern.name)) + let whereExpr = ExprSyntax( + fromProtocol: secondPattern.syntax.as(ExprSyntax.self) + ?? DeclReferenceExprSyntax(baseName: .identifier("")) + ) + + let valueBindingPattern = ValueBindingPatternSyntax( + bindingSpecifier: .keyword(.let, trailingTrivia: .space), + pattern: letIdentifier + ) + + let whereClause = WhereClauseSyntax( + whereKeyword: .keyword(.where, leadingTrivia: .space, trailingTrivia: .space), + condition: whereExpr + ) + + // Create a case item with the value binding pattern and where clause + let caseItem = SwitchCaseItemSyntax( + pattern: PatternSyntax(valueBindingPattern), + whereClause: whereClause + ) + finalCaseItems = SwitchCaseItemListSyntax([caseItem]) + } + } + + var statementItems = body.compactMap { block -> CodeBlockItemSyntax? in + if let decl = block.syntax.as(DeclSyntax.self) { + return CodeBlockItemSyntax(item: .decl(decl)).with(\.trailingTrivia, .newline) + } else if let expr = block.syntax.as(ExprSyntax.self) { + return CodeBlockItemSyntax(item: .expr(expr)).with(\.trailingTrivia, .newline) + } else if let stmt = block.syntax.as(StmtSyntax.self) { + return CodeBlockItemSyntax(item: .stmt(stmt)).with(\.trailingTrivia, .newline) + } + return nil + } + if statementItems.isEmpty { + // Add a break statement if the case body is empty + let breakStmt = BreakStmtSyntax(breakKeyword: .keyword(.break, trailingTrivia: .newline)) + statementItems = [CodeBlockItemSyntax(item: .stmt(StmtSyntax(breakStmt)))] + } + let statements = CodeBlockItemListSyntax(statementItems) let label = SwitchCaseLabelSyntax( caseKeyword: .keyword(.case, trailingTrivia: .space), - caseItems: caseItems, + caseItems: finalCaseItems, colon: .colonToken(trailingTrivia: .newline) ) return SwitchCaseSyntax( diff --git a/Sources/SyntaxKit/SwitchLet.swift b/Sources/SyntaxKit/SwitchLet.swift new file mode 100644 index 0000000..617fa22 --- /dev/null +++ b/Sources/SyntaxKit/SwitchLet.swift @@ -0,0 +1,55 @@ +// +// SwitchLet.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +/// A value binding pattern for use in switch cases. +public struct SwitchLet: PatternConvertible, CodeBlock { + internal let name: String + + /// Creates a value binding pattern for a switch case. + /// - Parameter name: The name of the variable to bind. + public init(_ name: String) { + self.name = name + } + + public var patternSyntax: PatternSyntax { + let identifier = IdentifierPatternSyntax(identifier: .identifier(name)) + return PatternSyntax( + ValueBindingPatternSyntax( + bindingSpecifier: .keyword(.let, trailingTrivia: .space), + pattern: identifier + )) + } + + public var syntax: SyntaxProtocol { + // For CodeBlock conformance, return the pattern syntax + patternSyntax + } +} diff --git a/Sources/SyntaxKit/Then.swift b/Sources/SyntaxKit/Then.swift new file mode 100644 index 0000000..dd2fc2e --- /dev/null +++ b/Sources/SyntaxKit/Then.swift @@ -0,0 +1,73 @@ +// +// Then.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +/// A helper that represents the *final* `else` body in an `if` / `else-if` chain. +/// +/// In the DSL this lets users write: +/// ```swift +/// If { condition } then: { ... } else: { +/// If { otherCond } then: { ... } +/// Then { // <- final else +/// Call("print", "fallback") +/// } +/// } +/// ``` +/// so that the builder can distinguish a nested `If` (for `else if`) from the +/// *terminal* `else` body. +public struct Then: CodeBlock { + /// The statements that make up the `else` body. + public let body: [CodeBlock] + + public init(@CodeBlockBuilderResult _ content: () -> [CodeBlock]) { + self.body = content() + } + + public var syntax: SyntaxProtocol { + let statements = CodeBlockItemListSyntax( + body.compactMap { element in + if let decl = element.syntax.as(DeclSyntax.self) { + return CodeBlockItemSyntax(item: .decl(decl)).with(\.trailingTrivia, .newline) + } else if let expr = element.syntax.as(ExprSyntax.self) { + return CodeBlockItemSyntax(item: .expr(expr)).with(\.trailingTrivia, .newline) + } else if let stmt = element.syntax.as(StmtSyntax.self) { + return CodeBlockItemSyntax(item: .stmt(stmt)).with(\.trailingTrivia, .newline) + } + return nil + } + ) + + return CodeBlockSyntax( + leftBrace: .leftBraceToken(leadingTrivia: .space, trailingTrivia: .newline), + statements: statements, + rightBrace: .rightBraceToken(leadingTrivia: .newline) + ) + } +} diff --git a/Sources/SyntaxKit/Throw.swift b/Sources/SyntaxKit/Throw.swift new file mode 100644 index 0000000..e85abbb --- /dev/null +++ b/Sources/SyntaxKit/Throw.swift @@ -0,0 +1,57 @@ +// +// Throw.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation +import SwiftSyntax + +/// A Swift `throw` statement. +public struct Throw: CodeBlock { + private let expr: CodeBlock + + public init(_ expr: CodeBlock) { + self.expr = expr + } + + public var syntax: SyntaxProtocol { + let expression: ExprSyntax + if let enumCase = expr as? EnumCase { + expression = enumCase.asExpressionSyntax + } else { + expression = + expr.syntax.as(ExprSyntax.self) + ?? ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(""))) + } + return StmtSyntax( + ThrowStmtSyntax( + throwKeyword: .keyword(.throw, trailingTrivia: .space), + expression: expression + ) + ) + } +} diff --git a/Sources/SyntaxKit/Tuple.swift b/Sources/SyntaxKit/Tuple.swift new file mode 100644 index 0000000..622673e --- /dev/null +++ b/Sources/SyntaxKit/Tuple.swift @@ -0,0 +1,131 @@ +// +// Tuple.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +/// A tuple expression, e.g. `(a, b, c)`. +public struct Tuple: CodeBlock { + internal let elements: [CodeBlock] + private var isAsync: Bool = false + private var isThrowing: Bool = false + + /// Creates a tuple expression comprising the supplied elements. + /// - Parameter content: A ``CodeBlockBuilder`` producing the tuple elements **in order**. + /// Elements may be any `CodeBlock` that can be represented as an expression (see + /// `CodeBlock.expr`). + public init(@CodeBlockBuilderResult _ content: () -> [CodeBlock]) { + self.elements = content() + } + + /// Creates a tuple pattern for switch cases. + /// - Parameter elements: Array of pattern elements, where `nil` represents a wildcard pattern. + public static func pattern(_ elements: [PatternConvertible?]) -> TuplePattern { + TuplePattern(elements: elements) + } + + /// Creates a tuple pattern that can be used as a CodeBlock. + /// - Parameter elements: Array of pattern elements, where `nil` represents a wildcard pattern. + public static func patternCodeBlock(_ elements: [PatternConvertible?]) -> TuplePatternCodeBlock { + TuplePatternCodeBlock(elements: elements) + } + + /// Marks this tuple as async. + /// - Returns: A copy of the tuple marked as async. + public func async() -> Self { + var copy = self + copy.isAsync = true + return copy + } + + /// Marks this tuple as await. + /// - Returns: A copy of the tuple marked as await. + public func await() -> Self { + var copy = self + copy.isAsync = true + return copy + } + + /// Marks this tuple as throwing. + /// - Returns: A copy of the tuple marked as throwing. + public func throwing() -> Self { + var copy = self + copy.isThrowing = true + return copy + } + + public var syntax: SyntaxProtocol { + guard !elements.isEmpty else { + fatalError("Tuple must contain at least one element.") + } + + let list = TupleExprElementListSyntax( + elements.enumerated().map { index, block in + let elementExpr: ExprSyntax + if isAsync { + // For async tuples, generate async let syntax for each element + // This assumes the block is a function call or expression that can be awaited + elementExpr = ExprSyntax( + AwaitExprSyntax( + awaitKeyword: .keyword(.await, trailingTrivia: .space), + expression: block.expr + ) + ) + } else { + elementExpr = block.expr + } + + return TupleExprElementSyntax( + label: nil, + colon: nil, + expression: elementExpr, + trailingComma: index < elements.count - 1 ? .commaToken(trailingTrivia: .space) : nil + ) + } + ) + + let tupleExpr = ExprSyntax( + TupleExprSyntax( + leftParen: .leftParenToken(), + elements: list, + rightParen: .rightParenToken() + ) + ) + + if isThrowing { + return ExprSyntax( + TryExprSyntax( + tryKeyword: .keyword(.try, trailingTrivia: .space), + expression: tupleExpr + ) + ) + } else { + return tupleExpr + } + } +} diff --git a/Sources/SyntaxKit/TupleAssignment+AsyncSet.swift b/Sources/SyntaxKit/TupleAssignment+AsyncSet.swift new file mode 100644 index 0000000..f28bd41 --- /dev/null +++ b/Sources/SyntaxKit/TupleAssignment+AsyncSet.swift @@ -0,0 +1,95 @@ +// +// TupleAssignment+AsyncSet.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +extension TupleAssignment { + internal enum AsyncSet { + static func tuplePattern(elements: [String]) -> PatternSyntax { + let patternElements = TuplePatternElementListSyntax( + elements.enumerated().map { index, element in + TuplePatternElementSyntax( + label: nil, + colon: nil, + pattern: PatternSyntax(IdentifierPatternSyntax(identifier: .identifier(element))), + trailingComma: index < elements.count - 1 ? .commaToken(trailingTrivia: .space) : nil + ) + } + ) + return PatternSyntax( + TuplePatternSyntax( + leftParen: .leftParenToken(), + elements: patternElements, + rightParen: .rightParenToken() + ) + ) + } + + static func tupleExpr(tuple: Tuple) -> ExprSyntax { + ExprSyntax( + TupleExprSyntax( + leftParen: .leftParenToken(), + elements: LabeledExprListSyntax( + tuple.elements.enumerated().map { index, block in + LabeledExprSyntax( + label: nil, + colon: nil, + expression: block.expr, + trailingComma: index < tuple.elements.count - 1 + ? .commaToken(trailingTrivia: .space) : nil + ) + } + ), + rightParen: .rightParenToken() + ) + ) + } + + static func valueExpr(tupleExpr: ExprSyntax, isThrowing: Bool) -> ExprSyntax { + isThrowing + ? ExprSyntax( + TryExprSyntax( + tryKeyword: .keyword(.try, trailingTrivia: .space), + expression: ExprSyntax( + AwaitExprSyntax( + awaitKeyword: .keyword(.await, trailingTrivia: .space), + expression: tupleExpr + ) + ) + ) + ) + : ExprSyntax( + AwaitExprSyntax( + awaitKeyword: .keyword(.await, trailingTrivia: .space), + expression: tupleExpr + ) + ) + } + } +} diff --git a/Sources/SyntaxKit/TupleAssignment.swift b/Sources/SyntaxKit/TupleAssignment.swift new file mode 100644 index 0000000..10da5e6 --- /dev/null +++ b/Sources/SyntaxKit/TupleAssignment.swift @@ -0,0 +1,207 @@ +// +// TupleAssignment.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation +import SwiftSyntax + +/// A tuple assignment statement for destructuring multiple values. +public struct TupleAssignment: CodeBlock { + private let elements: [String] + private let value: CodeBlock + private var isAsync: Bool = false + private var isThrowing: Bool = false + private var isAsyncSet: Bool = false + + /// Creates a tuple destructuring declaration. + /// - Parameters: + /// - elements: The names of the variables to destructure into. + /// - value: The expression to destructure. + public init(_ elements: [String], equals value: CodeBlock) { + self.elements = elements + self.value = value + } + + /// Marks this destructuring as async. + /// - Returns: A copy of the destructuring marked as async. + public func async() -> Self { + var copy = self + copy.isAsync = true + return copy + } + + /// Marks this destructuring as throwing. + /// - Returns: A copy of the destructuring marked as throwing. + public func throwing() -> Self { + var copy = self + copy.isThrowing = true + return copy + } + + /// Marks this destructuring as concurrent async (async let set). + /// - Returns: A copy of the destructuring marked as async set. + public func asyncSet() -> Self { + var copy = self + copy.isAsyncSet = true + return copy + } + + /// The syntax representation of this tuple assignment. + public var syntax: SyntaxProtocol { + if isAsyncSet { + return generateAsyncSetSyntax() + } + return generateRegularSyntax() + } + + /// Generates the asyncSet tuple assignment syntax. + private func generateAsyncSetSyntax() -> SyntaxProtocol { + // Generate a single async let tuple destructuring assignment + guard let tuple = value as? Tuple, elements.count == tuple.elements.count else { + fatalError( + "asyncSet requires a Tuple value with the same number of elements as the assignment.") + } + + // Use helpers from AsyncSet + let tuplePattern = AsyncSet.tuplePattern(elements: elements) + let tupleExpr = AsyncSet.tupleExpr(tuple: tuple) + let valueExpr = AsyncSet.valueExpr(tupleExpr: tupleExpr, isThrowing: isThrowing) + + // Build the async let declaration + let asyncLet = CodeBlockItemSyntax( + item: CodeBlockItemSyntax.Item.decl( + DeclSyntax( + VariableDeclSyntax( + modifiers: DeclModifierListSyntax([ + DeclModifierSyntax( + name: .keyword(.async, trailingTrivia: .space) + ) + ]), + bindingSpecifier: .keyword(.let, trailingTrivia: .space), + bindings: PatternBindingListSyntax([ + PatternBindingSyntax( + pattern: tuplePattern, + initializer: InitializerClauseSyntax( + equal: .equalToken(leadingTrivia: .space, trailingTrivia: .space), + value: valueExpr + ) + ) + ]) + ) + ) + ) + ) + + return CodeBlockSyntax( + leftBrace: .leftBraceToken(), + statements: CodeBlockItemListSyntax([asyncLet]), + rightBrace: .rightBraceToken() + ) + } + + /// Generates the regular tuple assignment syntax. + private func generateRegularSyntax() -> SyntaxProtocol { + // Build the tuple pattern + let patternElements = TuplePatternElementListSyntax( + elements.enumerated().map { index, element in + TuplePatternElementSyntax( + label: nil, + colon: nil, + pattern: PatternSyntax(IdentifierPatternSyntax(identifier: .identifier(element))), + trailingComma: index < elements.count - 1 ? .commaToken(trailingTrivia: .space) : nil + ) + } + ) + + let tuplePattern = PatternSyntax( + TuplePatternSyntax( + leftParen: .leftParenToken(), + elements: patternElements, + rightParen: .rightParenToken() + ) + ) + + // Build the value expression + let valueExpr = buildValueExpression() + + // Build the variable declaration + return VariableDeclSyntax( + bindingSpecifier: .keyword(.let, trailingTrivia: .space), + bindings: PatternBindingListSyntax([ + PatternBindingSyntax( + pattern: tuplePattern, + initializer: InitializerClauseSyntax( + equal: .equalToken(leadingTrivia: .space, trailingTrivia: .space), + value: valueExpr + ) + ) + ]) + ) + } + + /// Builds the value expression based on async and throwing flags. + private func buildValueExpression() -> ExprSyntax { + let baseExpr = + value.syntax.as(ExprSyntax.self) + ?? ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(""))) + + if isThrowing { + if isAsync { + return ExprSyntax( + TryExprSyntax( + tryKeyword: .keyword(.try, trailingTrivia: .space), + expression: ExprSyntax( + AwaitExprSyntax( + awaitKeyword: .keyword(.await, trailingTrivia: .space), + expression: baseExpr + ) + ) + ) + ) + } else { + return ExprSyntax( + TryExprSyntax( + tryKeyword: .keyword(.try, trailingTrivia: .space), + expression: baseExpr + ) + ) + } + } else { + if isAsync { + return ExprSyntax( + AwaitExprSyntax( + awaitKeyword: .keyword(.await, trailingTrivia: .space), + expression: baseExpr + ) + ) + } else { + return baseExpr + } + } + } +} diff --git a/Sources/SyntaxKit/TupleLiteral.swift b/Sources/SyntaxKit/TupleLiteral.swift new file mode 100644 index 0000000..ecf3444 --- /dev/null +++ b/Sources/SyntaxKit/TupleLiteral.swift @@ -0,0 +1,91 @@ +// +// TupleLiteral.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation + +/// A tuple literal value that can be used as a literal. +public struct TupleLiteral: LiteralValue { + let elements: [Literal?] + + /// Creates a tuple with the given elements. + /// - Parameter elements: The tuple elements, where `nil` represents a wildcard. + public init(_ elements: [Literal?]) { + self.elements = elements + } + + /// The Swift type name for this tuple. + public var typeName: String { + let elementTypes = elements.map { element in + if let element = element { + switch element { + case .integer: return "Int" + case .float: return "Double" + case .string: return "String" + case .boolean: return "Bool" + case .nil: return "Any?" + case .ref: return "Any" + case .tuple: return "Any" + case .array: return "Any" + case .dictionary: return "Any" + } + } else { + return "Any" + } + } + return "(\(elementTypes.joined(separator: ", ")))" + } + + /// Renders this tuple as a Swift literal string. + public var literalString: String { + let elementStrings = elements.map { element in + if let element = element { + switch element { + case .integer(let value): return String(value) + case .float(let value): return String(value) + case .string(let value): return "\"\(value)\"" + case .boolean(let value): return value ? "true" : "false" + case .nil: return "nil" + case .ref(let value): return value + case .tuple(let tupleElements): + let tuple = TupleLiteral(tupleElements) + return tuple.literalString + case .array(let arrayElements): + let array = ArrayLiteral(arrayElements) + return array.literalString + case .dictionary(let dictionaryElements): + let dictionary = DictionaryLiteral(dictionaryElements) + return dictionary.literalString + } + } else { + return "_" + } + } + return "(\(elementStrings.joined(separator: ", ")))" + } +} diff --git a/Sources/SyntaxKit/TuplePattern.swift b/Sources/SyntaxKit/TuplePattern.swift new file mode 100644 index 0000000..f739aea --- /dev/null +++ b/Sources/SyntaxKit/TuplePattern.swift @@ -0,0 +1,72 @@ +// +// TuplePattern.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +/// A tuple pattern for switch cases. +public struct TuplePattern: PatternConvertible { + private let elements: [PatternConvertible?] + + internal init(elements: [PatternConvertible?]) { + self.elements = elements + } + + public var patternSyntax: PatternSyntax { + let patternElements = TuplePatternElementListSyntax( + elements.enumerated().map { index, element in + let patternElement: TuplePatternElementSyntax + if let element = element { + patternElement = TuplePatternElementSyntax( + label: nil, + colon: nil, + pattern: element.patternSyntax, + trailingComma: index < elements.count - 1 ? .commaToken(trailingTrivia: .space) : nil + ) + } else { + // Wildcard pattern + patternElement = TuplePatternElementSyntax( + label: nil, + colon: nil, + pattern: PatternSyntax(WildcardPatternSyntax(wildcard: .wildcardToken())), + trailingComma: index < elements.count - 1 ? .commaToken(trailingTrivia: .space) : nil + ) + } + return patternElement + } + ) + + return PatternSyntax( + TuplePatternSyntax( + leftParen: .leftParenToken(), + elements: patternElements, + rightParen: .rightParenToken() + ) + ) + } +} diff --git a/Sources/SyntaxKit/TuplePatternCodeBlock.swift b/Sources/SyntaxKit/TuplePatternCodeBlock.swift new file mode 100644 index 0000000..f5436d2 --- /dev/null +++ b/Sources/SyntaxKit/TuplePatternCodeBlock.swift @@ -0,0 +1,78 @@ +// +// TuplePatternCodeBlock.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +/// A tuple pattern that can be used as a CodeBlock for for-in loops. +public struct TuplePatternCodeBlock: CodeBlock, PatternConvertible { + private let elements: [PatternConvertible?] + + internal init(elements: [PatternConvertible?]) { + self.elements = elements + } + + public var patternSyntax: PatternSyntax { + let patternElements = TuplePatternElementListSyntax( + elements.enumerated().map { index, element in + let patternElement: TuplePatternElementSyntax + if let element = element { + patternElement = TuplePatternElementSyntax( + label: nil, + colon: nil, + pattern: element.patternSyntax, + trailingComma: index < elements.count - 1 ? .commaToken(trailingTrivia: .space) : nil + ) + } else { + // Wildcard pattern + patternElement = TuplePatternElementSyntax( + label: nil, + colon: nil, + pattern: PatternSyntax(WildcardPatternSyntax(wildcard: .wildcardToken())), + trailingComma: index < elements.count - 1 ? .commaToken(trailingTrivia: .space) : nil + ) + } + return patternElement + } + ) + + return PatternSyntax( + TuplePatternSyntax( + leftParen: .leftParenToken(), + elements: patternElements, + rightParen: .rightParenToken() + ) + ) + } + + public var syntax: SyntaxProtocol { + // For CodeBlock conformance, we return the pattern syntax as an expression + // This is a bit of a hack, but it allows us to use TuplePatternCodeBlock in For loops + patternSyntax + } +} diff --git a/Sources/SyntaxKit/TypeAlias.swift b/Sources/SyntaxKit/TypeAlias.swift new file mode 100644 index 0000000..90b17e0 --- /dev/null +++ b/Sources/SyntaxKit/TypeAlias.swift @@ -0,0 +1,123 @@ +// +// TypeAlias.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +/// A Swift `typealias` declaration. +public struct TypeAlias: CodeBlock { + private let name: String + private let existingType: String + private var attributes: [AttributeInfo] = [] + + /// Creates a `typealias` declaration. + /// - Parameters: + /// - name: The new name that will alias the existing type. + /// - type: The existing type that is being aliased. + public init(_ name: String, equals type: String) { + self.name = name + self.existingType = type + } + + /// Adds an attribute to the typealias declaration. + /// - Parameters: + /// - attribute: The attribute name (without the @ symbol). + /// - arguments: The arguments for the attribute, if any. + /// - Returns: A copy of the typealias with the attribute added. + public func attribute(_ attribute: String, arguments: [String] = []) -> Self { + var copy = self + copy.attributes.append(AttributeInfo(name: attribute, arguments: arguments)) + return copy + } + + public var syntax: SyntaxProtocol { + // `typealias` keyword token + let keyword = TokenSyntax.keyword(.typealias, trailingTrivia: .space) + + // Alias identifier + let identifier = TokenSyntax.identifier(name, trailingTrivia: .space) + + // Initializer clause – `= ExistingType` + let initializer = TypeInitializerClauseSyntax( + equal: .equalToken(leadingTrivia: .space, trailingTrivia: .space), + value: IdentifierTypeSyntax(name: .identifier(existingType)) + ) + + return TypeAliasDeclSyntax( + attributes: buildAttributeList(from: attributes), + typealiasKeyword: keyword, + name: identifier, + initializer: initializer + ) + } + + private func buildAttributeList(from attributes: [AttributeInfo]) -> AttributeListSyntax { + if attributes.isEmpty { + return AttributeListSyntax([]) + } + let attributeElements = attributes.map { attributeInfo in + let arguments = attributeInfo.arguments + + var leftParen: TokenSyntax? + var rightParen: TokenSyntax? + var argumentsSyntax: AttributeSyntax.Arguments? + + if !arguments.isEmpty { + leftParen = .leftParenToken() + rightParen = .rightParenToken() + + let argumentList = arguments.map { argument in + DeclReferenceExprSyntax(baseName: .identifier(argument)) + } + + argumentsSyntax = .argumentList( + LabeledExprListSyntax( + argumentList.enumerated().map { index, expr in + var element = LabeledExprSyntax(expression: ExprSyntax(expr)) + if index < argumentList.count - 1 { + element = element.with(\.trailingComma, .commaToken(trailingTrivia: .space)) + } + return element + } + ) + ) + } + + return AttributeListSyntax.Element( + AttributeSyntax( + atSign: .atSignToken(), + attributeName: IdentifierTypeSyntax(name: .identifier(attributeInfo.name)), + leftParen: leftParen, + arguments: argumentsSyntax, + rightParen: rightParen + ) + ) + } + return AttributeListSyntax(attributeElements) + } +} diff --git a/Sources/SyntaxKit/Variable+LiteralInitializers.swift b/Sources/SyntaxKit/Variable+LiteralInitializers.swift new file mode 100644 index 0000000..a23ed4e --- /dev/null +++ b/Sources/SyntaxKit/Variable+LiteralInitializers.swift @@ -0,0 +1,183 @@ +// +// Variable+LiteralInitializers.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation + +// MARK: - Variable Literal Initializers + +extension Variable { + /// Creates a `let` or `var` declaration with a literal value. + /// - Parameters: + /// - kind: The kind of variable, either ``VariableKind/let`` or ``VariableKind/var``. + /// - name: The name of the variable. + /// - equals: A literal value that conforms to ``LiteralValue``. + public init( + _ kind: VariableKind, name: String, equals value: T + ) { + let defaultValue: CodeBlock + if let literal = value as? Literal { + defaultValue = literal + } else if let tuple = value as? TupleLiteral { + defaultValue = Literal.tuple(tuple.elements) + } else if let array = value as? ArrayLiteral { + defaultValue = Literal.array(array.elements) + } else if let dict = value as? DictionaryLiteral { + defaultValue = Literal.dictionary(dict.elements) + } else if let array = value as? [String] { + defaultValue = Literal.array(array.map { .string($0) }) + } else if let dict = value as? [Int: String] { + defaultValue = Literal.dictionary(dict.map { (.integer($0.key), .string($0.value)) }) + } else if let dictExpr = value as? DictionaryExpr { + defaultValue = dictExpr + } else if let initExpr = value as? Init { + defaultValue = initExpr + } else if let codeBlock = value as? CodeBlock { + defaultValue = codeBlock + } else { + // For any other LiteralValue type that doesn't conform to CodeBlock, + // create a fallback or throw an error + fatalError( + "Variable: Unsupported LiteralValue type that doesn't conform to CodeBlock: \(T.self)") + } + + self.init( + kind: kind, + name: name, + type: value.typeName, + defaultValue: defaultValue, + explicitType: false + ) + } + + /// Creates a `let` or `var` declaration with a string literal value. + /// - Parameters: + /// - kind: The kind of variable, either ``VariableKind/let`` or ``VariableKind/var``. + /// - name: The name of the variable. + /// - equals: A string literal value. + public init( + _ kind: VariableKind, name: String, equals value: String + ) { + self.init( + kind: kind, + name: name, + type: "String", + defaultValue: Literal.string(value), + explicitType: false + ) + } + + /// Creates a `let` or `var` declaration with an integer literal value. + /// - Parameters: + /// - kind: The kind of variable, either ``VariableKind/let`` or ``VariableKind/var``. + /// - name: The name of the variable. + /// - equals: An integer literal value. + public init( + _ kind: VariableKind, name: String, equals value: Int + ) { + self.init( + kind: kind, + name: name, + type: "Int", + defaultValue: Literal.integer(value), + explicitType: false + ) + } + + /// Creates a `let` or `var` declaration with a boolean literal value. + /// - Parameters: + /// - kind: The kind of variable, either ``VariableKind/let`` or ``VariableKind/var``. + /// - name: The name of the variable. + /// - equals: A boolean literal value. + public init( + _ kind: VariableKind, name: String, equals value: Bool + ) { + self.init( + kind: kind, + name: name, + type: "Bool", + defaultValue: Literal.boolean(value), + explicitType: false + ) + } + + /// Creates a `let` or `var` declaration with a double literal value. + /// - Parameters: + /// - kind: The kind of variable, either ``VariableKind/let`` or ``VariableKind/var``. + /// - name: The name of the variable. + /// - equals: A double literal value. + public init( + _ kind: VariableKind, name: String, equals value: Double + ) { + self.init( + kind: kind, + name: name, + type: "Double", + defaultValue: Literal.float(value), + explicitType: false + ) + } + + /// Creates a `let` or `var` declaration with a Literal value. + /// - Parameters: + /// - kind: The kind of variable, either ``VariableKind/let`` or ``VariableKind/var``. + /// - name: The name of the variable. + /// - equals: A Literal value. + public init( + _ kind: VariableKind, name: String, equals value: Literal + ) { + self.init( + kind: kind, + name: name, + type: value.typeName, + defaultValue: value, + explicitType: false + ) + } + + /// Creates a `let` or `var` declaration with a value built from a CodeBlock builder closure. + /// - Parameters: + /// - kind: The kind of variable, either ``VariableKind/let`` or ``VariableKind/var``. + /// - name: The name of the variable. + /// - value: A builder closure that returns a CodeBlock for the initial value. + /// - explicitType: Whether the variable has an explicit type. + public init( + _ kind: VariableKind, + name: String, + @CodeBlockBuilderResult value: () -> [CodeBlock], + explicitType: Bool? = nil + ) { + self.init( + kind: kind, + name: name, + type: "", + defaultValue: value().first ?? EmptyCodeBlock(), + explicitType: explicitType ?? false + ) + } +} diff --git a/Sources/SyntaxKit/Variable+TypedInitializers.swift b/Sources/SyntaxKit/Variable+TypedInitializers.swift new file mode 100644 index 0000000..f5f805b --- /dev/null +++ b/Sources/SyntaxKit/Variable+TypedInitializers.swift @@ -0,0 +1,154 @@ +// +// Variable+TypedInitializers.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation + +// MARK: - Variable Typed Initializers + +extension Variable { + /// Creates a `let` or `var` declaration with an Init value, inferring the type from the Init. + /// - Parameters: + /// - kind: The kind of variable, either ``VariableKind/let`` or ``VariableKind/var``. + /// - name: The name of the variable. + /// - equals: An Init expression. + /// - explicitType: Whether the variable has an explicit type. + public init( + _ kind: VariableKind, name: String, equals defaultValue: Init, + explicitType: Bool? = nil + ) { + self.init( + kind: kind, + name: name, + type: nil, // Will be inferred from Init + defaultValue: defaultValue, + explicitType: explicitType ?? false + ) + } + + /// Creates a `let` or `var` declaration with an explicit type. + /// - Parameters: + /// - kind: The kind of variable, either ``VariableKind/let`` or ``VariableKind/var``. + /// - name: The name of the variable. + /// - type: The type of the variable. + /// - equals: The initial value expression of the variable, if any. + /// - explicitType: Whether the variable has an explicit type. + public init( + _ kind: VariableKind, name: String, type: String, equals defaultValue: CodeBlock? = nil, + explicitType: Bool? = nil + ) { + let finalExplicitType = explicitType ?? (defaultValue == nil) + self.init( + kind: kind, + name: name, + type: type, + defaultValue: defaultValue, + explicitType: finalExplicitType + ) + } + + /// Creates a `let` or `var` declaration with an explicit type and string literal value. + /// - Parameters: + /// - kind: The kind of variable, either ``VariableKind/let`` or ``VariableKind/var``. + /// - name: The name of the variable. + /// - type: The type of the variable. + /// - equals: A string literal value. + /// - explicitType: Whether the variable has an explicit type. + public init( + _ kind: VariableKind, name: String, type: String, equals value: String, + explicitType: Bool? = nil + ) { + self.init( + kind: kind, + name: name, + type: type, + defaultValue: Literal.string(value), + explicitType: explicitType ?? true + ) + } + + /// Creates a `let` or `var` declaration with an explicit type and integer literal value. + /// - Parameters: + /// - kind: The kind of variable, either ``VariableKind/let`` or ``VariableKind/var``. + /// - name: The name of the variable. + /// - type: The type of the variable. + /// - equals: An integer literal value. + /// - explicitType: Whether the variable has an explicit type. + public init( + _ kind: VariableKind, name: String, type: String, equals value: Int, + explicitType: Bool? = nil + ) { + self.init( + kind: kind, + name: name, + type: type, + defaultValue: Literal.integer(value), + explicitType: explicitType ?? true + ) + } + + /// Creates a `let` or `var` declaration with an explicit type and boolean literal value. + /// - Parameters: + /// - kind: The kind of variable, either ``VariableKind/let`` or ``VariableKind/var``. + /// - name: The name of the variable. + /// - type: The type of the variable. + /// - equals: A boolean literal value. + /// - explicitType: Whether the variable has an explicit type. + public init( + _ kind: VariableKind, name: String, type: String, equals value: Bool, + explicitType: Bool? = nil + ) { + self.init( + kind: kind, + name: name, + type: type, + defaultValue: Literal.boolean(value), + explicitType: explicitType ?? true + ) + } + + /// Creates a `let` or `var` declaration with an explicit type and double literal value. + /// - Parameters: + /// - kind: The kind of variable, either ``VariableKind/let`` or ``VariableKind/var``. + /// - name: The name of the variable. + /// - type: The type of the variable. + /// - equals: A double literal value. + /// - explicitType: Whether the variable has an explicit type. + public init( + _ kind: VariableKind, name: String, type: String, equals value: Double, + explicitType: Bool? = nil + ) { + self.init( + kind: kind, + name: name, + type: type, + defaultValue: Literal.float(value), + explicitType: explicitType ?? true + ) + } +} diff --git a/Sources/SyntaxKit/Variable.swift b/Sources/SyntaxKit/Variable.swift index b37ec0d..7b89b5f 100644 --- a/Sources/SyntaxKit/Variable.swift +++ b/Sources/SyntaxKit/Variable.swift @@ -27,6 +27,7 @@ // OTHER DEALINGS IN THE SOFTWARE. // +import Foundation import SwiftSyntax /// A Swift `let` or `var` declaration with an explicit type. @@ -34,38 +35,114 @@ public struct Variable: CodeBlock { private let kind: VariableKind private let name: String private let type: String - private let defaultValue: String? + private let defaultValue: CodeBlock? + private var isStatic: Bool = false + private var isAsync: Bool = false + private var attributes: [AttributeInfo] = [] + private var explicitType: Bool = false - /// Creates a `let` or `var` declaration with an explicit type. + /// Internal initializer used by extension initializers to reduce code duplication. /// - Parameters: /// - kind: The kind of variable, either ``VariableKind/let`` or ``VariableKind/var``. /// - name: The name of the variable. - /// - type: The type of the variable. - /// - defaultValue: The initial value of the variable, if any. - public init(_ kind: VariableKind, name: String, type: String, equals defaultValue: String? = nil) - { + /// - type: The type of the variable. If nil, will be inferred from defaultValue if it's an Init. + /// - defaultValue: The initial value expression of the variable, if any. + /// - explicitType: Whether the variable has an explicit type. + internal init( + kind: VariableKind, + name: String, + type: String? = nil, + defaultValue: CodeBlock? = nil, + explicitType: Bool = false + ) { self.kind = kind self.name = name - self.type = type + + // If type is provided, use it; otherwise try to infer from defaultValue + if let providedType = type { + self.type = providedType + } else if let initValue = defaultValue as? Init { + self.type = initValue.typeName + } else { + self.type = "" + } + self.defaultValue = defaultValue + self.explicitType = explicitType + } + + /// Marks the variable as `static`. + /// - Returns: A copy of the variable marked as `static`. + public func `static`() -> Self { + var copy = self + copy.isStatic = true + return copy + } + + /// Marks the variable as `async`. + /// - Returns: A copy of the variable marked as `async`. + public func async() -> Self { + var copy = self + copy.isAsync = true + return copy + } + + /// Adds an attribute to the variable declaration. + /// - Parameters: + /// - attribute: The attribute name (without the @ symbol). + /// - arguments: The arguments for the attribute, if any. + /// - Returns: A copy of the variable with the attribute added. + public func attribute(_ attribute: String, arguments: [String] = []) -> Self { + var copy = self + copy.attributes.append(AttributeInfo(name: attribute, arguments: arguments)) + return copy + } + + public func withExplicitType() -> Self { + var copy = self + copy.explicitType = true + return copy } public var syntax: SyntaxProtocol { let bindingKeyword = TokenSyntax.keyword(kind == .let ? .let : .var, trailingTrivia: .space) let identifier = TokenSyntax.identifier(name, trailingTrivia: .space) - let typeAnnotation = TypeAnnotationSyntax( - colon: .colonToken(leadingTrivia: .space, trailingTrivia: .space), - type: IdentifierTypeSyntax(name: .identifier(type)) - ) - + let typeAnnotation: TypeAnnotationSyntax? = + (explicitType && !type.isEmpty) + ? TypeAnnotationSyntax( + colon: .colonToken(leadingTrivia: .space, trailingTrivia: .space), + type: IdentifierTypeSyntax(name: .identifier(type)) + ) : nil let initializer = defaultValue.map { value in - InitializerClauseSyntax( + let expr: ExprSyntax + if let exprBlock = value as? ExprCodeBlock { + expr = exprBlock.exprSyntax + } else if let exprSyntax = value.syntax.as(ExprSyntax.self) { + expr = exprSyntax + } else { + expr = ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(""))) + } + return InitializerClauseSyntax( equal: .equalToken(leadingTrivia: .space, trailingTrivia: .space), - value: ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(value))) + value: expr + ) + } + var modifiers: DeclModifierListSyntax = [] + if isStatic { + modifiers = DeclModifierListSyntax([ + DeclModifierSyntax(name: .keyword(.static, trailingTrivia: .space)) + ]) + } + if isAsync { + modifiers = DeclModifierListSyntax( + modifiers + [ + DeclModifierSyntax(name: .keyword(.async, trailingTrivia: .space)) + ] ) } - return VariableDeclSyntax( + attributes: buildAttributeList(from: attributes), + modifiers: modifiers, bindingSpecifier: bindingKeyword, bindings: PatternBindingListSyntax([ PatternBindingSyntax( @@ -76,4 +153,63 @@ public struct Variable: CodeBlock { ]) ) } + + private func buildAttributeList(from attributes: [AttributeInfo]) -> AttributeListSyntax { + if attributes.isEmpty { + return AttributeListSyntax([]) + } + + let attributeElements = attributes.map { attributeInfo in + let arguments = attributeInfo.arguments + + var leftParen: TokenSyntax? + var rightParen: TokenSyntax? + var argumentsSyntax: AttributeSyntax.Arguments? + + if !arguments.isEmpty { + leftParen = .leftParenToken() + rightParen = .rightParenToken() + + let argumentList = arguments.map { argument in + DeclReferenceExprSyntax(baseName: .identifier(argument)) + } + + argumentsSyntax = .argumentList( + LabeledExprListSyntax( + argumentList.enumerated().map { index, expr in + var element = LabeledExprSyntax(expression: ExprSyntax(expr)) + if index < argumentList.count - 1 { + element = element.with(\.trailingComma, .commaToken(trailingTrivia: .space)) + } + return element + } + ) + ) + } + + return AttributeListSyntax.Element( + AttributeSyntax( + atSign: .atSignToken(), + attributeName: IdentifierTypeSyntax(name: .identifier(attributeInfo.name)), + leftParen: leftParen, + arguments: argumentsSyntax, + rightParen: rightParen + ) + ) + } + + return AttributeListSyntax(attributeElements) + } + + public enum VariableKind { + case `var` + case `let` + case `static` + case `lazy` + case `weak` + case `unowned` + case `final` + case `override` + case `mutating` + } } diff --git a/Sources/SyntaxKit/VariableDecl.swift b/Sources/SyntaxKit/VariableDecl.swift index 64da71b..3460622 100644 --- a/Sources/SyntaxKit/VariableDecl.swift +++ b/Sources/SyntaxKit/VariableDecl.swift @@ -50,14 +50,28 @@ public struct VariableDecl: CodeBlock { let bindingKeyword = TokenSyntax.keyword(kind == .let ? .let : .var, trailingTrivia: .space) let identifier = TokenSyntax.identifier(name, trailingTrivia: .space) let initializer = value.map { value in - if value.hasPrefix("\"") && value.hasSuffix("\"") || value.contains("\\(") { + if value.hasPrefix("\"") && value.hasSuffix("\"") { return InitializerClauseSyntax( equal: .equalToken(leadingTrivia: .space, trailingTrivia: .space), value: StringLiteralExprSyntax( openingQuote: .stringQuoteToken(), segments: StringLiteralSegmentListSyntax([ .stringSegment( - StringSegmentSyntax(content: .stringSegment(String(value.dropFirst().dropLast())))) + StringSegmentSyntax(content: .stringSegment(String(value.dropFirst().dropLast()))) + ) + ]), + closingQuote: .stringQuoteToken() + ) + ) + } else if value.contains("\\(") { + return InitializerClauseSyntax( + equal: .equalToken(leadingTrivia: .space, trailingTrivia: .space), + value: StringLiteralExprSyntax( + openingQuote: .stringQuoteToken(), + segments: StringLiteralSegmentListSyntax([ + .stringSegment( + StringSegmentSyntax(content: .stringSegment(value)) + ) ]), closingQuote: .stringQuoteToken() ) diff --git a/Sources/SyntaxKit/VariableExp.swift b/Sources/SyntaxKit/VariableExp.swift index 5616290..6870691 100644 --- a/Sources/SyntaxKit/VariableExp.swift +++ b/Sources/SyntaxKit/VariableExp.swift @@ -30,8 +30,8 @@ import SwiftSyntax /// An expression that refers to a variable. -public struct VariableExp: CodeBlock { - let name: String +public struct VariableExp: CodeBlock, PatternConvertible { + internal let name: String /// Creates a variable expression. /// - Parameter name: The name of the variable. @@ -42,8 +42,8 @@ public struct VariableExp: CodeBlock { /// Accesses a property on the variable. /// - Parameter propertyName: The name of the property to access. /// - Returns: A ``PropertyAccessExp`` that represents the property access. - public func property(_ propertyName: String) -> CodeBlock { - PropertyAccessExp(baseName: name, propertyName: propertyName) + public func property(_ propertyName: String) -> PropertyAccessExp { + PropertyAccessExp(base: self, propertyName: propertyName) } /// Calls a method on the variable. @@ -65,41 +65,94 @@ public struct VariableExp: CodeBlock { } public var syntax: SyntaxProtocol { - TokenSyntax.identifier(name) + ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(name))) + } + + public var patternSyntax: PatternSyntax { + PatternSyntax(IdentifierPatternSyntax(identifier: .identifier(name))) } } /// An expression that accesses a property on a base expression. public struct PropertyAccessExp: CodeBlock { - let baseName: String - let propertyName: String + internal let base: CodeBlock + internal let propertyName: String /// Creates a property access expression. /// - Parameters: - /// - baseName: The name of the base variable. + /// - base: The base expression. /// - propertyName: The name of the property to access. + public init(base: CodeBlock, propertyName: String) { + self.base = base + self.propertyName = propertyName + } + + /// Convenience initializer for backward compatibility (baseName as String). public init(baseName: String, propertyName: String) { - self.baseName = baseName + self.base = VariableExp(baseName) self.propertyName = propertyName } + /// Accesses a property on the current property access expression (chaining). + /// - Parameter propertyName: The name of the next property to access. + /// - Returns: A new ``PropertyAccessExp`` representing the chained property access. + public func property(_ propertyName: String) -> PropertyAccessExp { + PropertyAccessExp(base: self, propertyName: propertyName) + } + + /// Negates the property access expression. + /// - Returns: A negated property access expression. + public func not() -> CodeBlock { + NegatedPropertyAccessExp(base: self) + } + public var syntax: SyntaxProtocol { - let base = ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(baseName))) + let baseSyntax = + base.syntax.as(ExprSyntax.self) + ?? ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(""))) let property = TokenSyntax.identifier(propertyName) return ExprSyntax( MemberAccessExprSyntax( - base: base, + base: baseSyntax, dot: .periodToken(), name: property )) } } +/// An expression that negates a property access. +public struct NegatedPropertyAccessExp: CodeBlock { + internal let base: CodeBlock + + /// Creates a negated property access expression. + /// - Parameter base: The base property access expression. + public init(base: CodeBlock) { + self.base = base + } + + /// Backward compatibility initializer for (baseName, propertyName). + public init(baseName: String, propertyName: String) { + self.base = PropertyAccessExp(baseName: baseName, propertyName: propertyName) + } + + public var syntax: SyntaxProtocol { + let memberAccess = + base.syntax.as(ExprSyntax.self) + ?? ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(""))) + return ExprSyntax( + PrefixOperatorExprSyntax( + operator: .prefixOperator("!", leadingTrivia: [], trailingTrivia: []), + expression: memberAccess + ) + ) + } +} + /// An expression that calls a function. public struct FunctionCallExp: CodeBlock { - let baseName: String - let methodName: String - let parameters: [ParameterExp] + internal let baseName: String + internal let methodName: String + internal let parameters: [ParameterExp] /// Creates a function call expression. /// - Parameters: diff --git a/Sources/SyntaxKit/While.swift b/Sources/SyntaxKit/While.swift new file mode 100644 index 0000000..1d2aafc --- /dev/null +++ b/Sources/SyntaxKit/While.swift @@ -0,0 +1,99 @@ +// +// While.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax + +/// A `while` loop statement. +public struct While: CodeBlock { + private let condition: CodeBlock + private let body: [CodeBlock] + + /// Creates a `while` loop statement. + /// - Parameters: + /// - condition: A `CodeBlockBuilder` that produces the condition expression. + /// - then: A ``CodeBlockBuilder`` that provides the body of the loop. + public init( + @CodeBlockBuilderResult _ condition: () -> [CodeBlock], + @CodeBlockBuilderResult then: () -> [CodeBlock] + ) { + let conditions = condition() + guard conditions.count == 1 else { + fatalError("While requires exactly one condition CodeBlock") + } + self.condition = conditions[0] + self.body = then() + } + + /// Convenience initializer that accepts a single condition directly. + /// - Parameters: + /// - condition: The condition expression. + /// - then: A ``CodeBlockBuilder`` that provides the body of the loop. + public init( + _ condition: CodeBlock, + @CodeBlockBuilderResult then: () -> [CodeBlock] + ) { + self.init({ condition }, then: then) + } + + public var syntax: SyntaxProtocol { + let conditionExpr = ExprSyntax( + fromProtocol: condition.syntax.as(ExprSyntax.self) + ?? DeclReferenceExprSyntax(baseName: .identifier("")) + ) + + let bodyBlock = CodeBlockSyntax( + leftBrace: .leftBraceToken(leadingTrivia: .space, trailingTrivia: .newline), + statements: CodeBlockItemListSyntax( + body.compactMap { + var item: CodeBlockItemSyntax? + if let decl = $0.syntax.as(DeclSyntax.self) { + item = CodeBlockItemSyntax(item: .decl(decl)) + } else if let expr = $0.syntax.as(ExprSyntax.self) { + item = CodeBlockItemSyntax(item: .expr(expr)) + } else if let stmt = $0.syntax.as(StmtSyntax.self) { + item = CodeBlockItemSyntax(item: .stmt(stmt)) + } + return item?.with(\.trailingTrivia, .newline) + }), + rightBrace: .rightBraceToken(leadingTrivia: .newline) + ) + + return StmtSyntax( + WhileStmtSyntax( + whileKeyword: .keyword(.while, trailingTrivia: .space), + conditions: ConditionElementListSyntax([ + ConditionElementSyntax( + condition: .expression(conditionExpr) + ) + ]), + body: bodyBlock + ) + ) + } +} diff --git a/Sources/SyntaxKit/parser/SourceRange.swift b/Sources/SyntaxKit/parser/SourceRange.swift new file mode 100644 index 0000000..c29b2ce --- /dev/null +++ b/Sources/SyntaxKit/parser/SourceRange.swift @@ -0,0 +1,50 @@ +// +// SourceRange.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation + +internal struct SourceRange: Codable, Equatable { + internal let startRow: Int + internal let startColumn: Int + internal let endRow: Int + internal let endColumn: Int +} + +extension SourceRange: CustomStringConvertible { + var description: String { + """ + { + startRow: \(startRow) + startColumn: \(startColumn) + endRow: \(endRow) + endColumn: \(endColumn) + } + """ + } +} diff --git a/Sources/SyntaxKit/parser/String+Extensions.swift b/Sources/SyntaxKit/parser/String+Extensions.swift new file mode 100644 index 0000000..861317a --- /dev/null +++ b/Sources/SyntaxKit/parser/String+Extensions.swift @@ -0,0 +1,38 @@ +// +// String+Extensions.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation + +extension String { + internal func replaceHTMLWhitespacesToSymbols() -> String { + self + .replacingOccurrences(of: " ", with: "") + .replacingOccurrences(of: "
", with: "") + } +} diff --git a/Sources/SyntaxKit/parser/StructureProperty.swift b/Sources/SyntaxKit/parser/StructureProperty.swift new file mode 100644 index 0000000..5c5f72e --- /dev/null +++ b/Sources/SyntaxKit/parser/StructureProperty.swift @@ -0,0 +1,54 @@ +// +// StructureProperty.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation + +internal struct StructureProperty: Codable, Equatable { + internal let name: String + internal let value: StructureValue? + internal let ref: String? + + init(name: String, value: StructureValue? = nil, ref: String? = nil) { + self.name = name.escapeHTML() + self.value = value + self.ref = ref?.escapeHTML() + } +} + +extension StructureProperty: CustomStringConvertible { + var description: String { + """ + { + name: \(name) + value: \(String(describing: value)) + ref: \(String(describing: ref)) + } + """ + } +} diff --git a/Sources/SyntaxKit/parser/StructureValue.swift b/Sources/SyntaxKit/parser/StructureValue.swift new file mode 100644 index 0000000..63aa525 --- /dev/null +++ b/Sources/SyntaxKit/parser/StructureValue.swift @@ -0,0 +1,51 @@ +// +// StructureValue.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation + +internal struct StructureValue: Codable, Equatable { + internal let text: String + internal let kind: String? + + init(text: String, kind: String? = nil) { + self.text = text.escapeHTML().replaceHTMLWhitespacesToSymbols() + self.kind = kind?.escapeHTML() + } +} + +extension StructureValue: CustomStringConvertible { + var description: String { + """ + { + text: \(text) + kind: \(String(describing: kind)) + } + """ + } +} diff --git a/Sources/SyntaxKit/parser/SyntaxParser.swift b/Sources/SyntaxKit/parser/SyntaxParser.swift index f4f38e5..65b0ef7 100644 --- a/Sources/SyntaxKit/parser/SyntaxParser.swift +++ b/Sources/SyntaxKit/parser/SyntaxParser.swift @@ -51,7 +51,8 @@ package enum SyntaxParser { let tree = visitor.tree let encoder = JSONEncoder() - let json = String(decoding: try encoder.encode(tree), as: UTF8.self) + let data = try encoder.encode(tree) + let json = String(decoding: data, as: UTF8.self) return SyntaxResponse(syntaxJSON: json) } diff --git a/Sources/SyntaxKit/parser/SyntaxType.swift b/Sources/SyntaxKit/parser/SyntaxType.swift new file mode 100644 index 0000000..716b27d --- /dev/null +++ b/Sources/SyntaxKit/parser/SyntaxType.swift @@ -0,0 +1,39 @@ +// +// SyntaxType.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation + +internal enum SyntaxType: String, Codable { + case decl + case expr + case pattern + case type + case collection + case other +} diff --git a/Sources/SyntaxKit/parser/Token.swift b/Sources/SyntaxKit/parser/Token.swift new file mode 100644 index 0000000..48c0729 --- /dev/null +++ b/Sources/SyntaxKit/parser/Token.swift @@ -0,0 +1,54 @@ +// +// Token.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation + +internal struct Token: Codable, Equatable { + internal let kind: String + internal var leadingTrivia: String + internal var trailingTrivia: String + + init(kind: String, leadingTrivia: String, trailingTrivia: String) { + self.kind = kind.escapeHTML() + self.leadingTrivia = leadingTrivia + self.trailingTrivia = trailingTrivia + } +} + +extension Token: CustomStringConvertible { + var description: String { + """ + { + kind: \(kind) + leadingTrivia: \(leadingTrivia) + trailingTrivia: \(trailingTrivia) + } + """ + } +} diff --git a/Sources/SyntaxKit/parser/TokenVisitor+Helpers.swift b/Sources/SyntaxKit/parser/TokenVisitor+Helpers.swift new file mode 100644 index 0000000..4c20266 --- /dev/null +++ b/Sources/SyntaxKit/parser/TokenVisitor+Helpers.swift @@ -0,0 +1,84 @@ +// +// TokenVisitor+Helpers.swift +// SyntaxKit +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation +import SwiftSyntax + +extension TokenVisitor { + func processToken(_ token: TokenSyntax) { + var kind = "\(token.tokenKind)" + if let index = kind.firstIndex(of: "(") { + kind = String(kind.prefix(upTo: index)) + } + if kind.hasSuffix("Keyword") { + kind = "keyword" + } + + let sourceRange = token.sourceRange(converter: locationConverter) + let start = sourceRange.start + let end = sourceRange.end + let text = token.presence == .present || showMissingTokens ? token.text : "" + } + + func processTriviaPiece(_ piece: TriviaPiece) -> String { + func wrapWithSpanTag(class className: String, text: String) -> String { + "\(text.escapeHTML().replaceInvisiblesWithHTML())" + } + + var trivia = "" + switch piece { + case .spaces(let count): + trivia += String(repeating: " ", count: count) + case .tabs(let count): + trivia += String(repeating: " ", count: count * 2) + case .verticalTabs, .formfeeds: + break + case .newlines(let count), .carriageReturns(let count), .carriageReturnLineFeeds(let count): + trivia += String(repeating: "
", count: count) + case .lineComment(let text): + trivia += wrapWithSpanTag(class: "lineComment", text: text) + case .blockComment(let text): + trivia += wrapWithSpanTag(class: "blockComment", text: text) + case .docLineComment(let text): + trivia += wrapWithSpanTag(class: "docLineComment", text: text) + case .docBlockComment(let text): + trivia += wrapWithSpanTag(class: "docBlockComment", text: text) + case .unexpectedText(let text): + trivia += wrapWithSpanTag(class: "unexpectedText", text: text) + case .backslashes(let count): + trivia += String(repeating: #"\"#, count: count) + case .pounds(let count): + trivia += String(repeating: "#", count: count) + } + return trivia + } +} diff --git a/Sources/SyntaxKit/parser/TokenVisitor.swift b/Sources/SyntaxKit/parser/TokenVisitor.swift index aad7ca5..09a8e3d 100644 --- a/Sources/SyntaxKit/parser/TokenVisitor.swift +++ b/Sources/SyntaxKit/parser/TokenVisitor.swift @@ -30,24 +30,24 @@ import Foundation @_spi(RawSyntax) import SwiftSyntax -final class TokenVisitor: SyntaxRewriter { +internal final class TokenVisitor: SyntaxRewriter { // var list = [String]() - var tree = [TreeNode]() + internal var tree = [TreeNode]() private var current: TreeNode! private var index = 0 - private let locationConverter: SourceLocationConverter - private let showMissingTokens: Bool + internal let locationConverter: SourceLocationConverter + internal let showMissingTokens: Bool - init(locationConverter: SourceLocationConverter, showMissingTokens: Bool) { + internal init(locationConverter: SourceLocationConverter, showMissingTokens: Bool) { self.locationConverter = locationConverter self.showMissingTokens = showMissingTokens super.init(viewMode: showMissingTokens ? .all : .sourceAccurate) } // swiftlint:disable:next cyclomatic_complexity function_body_length - override func visitPre(_ node: Syntax) { + override internal func visitPre(_ node: Syntax) { let syntaxNodeType = node.syntaxNodeType let className: String @@ -94,7 +94,7 @@ final class TokenVisitor: SyntaxRewriter { let treeNode = TreeNode( id: index, text: className, - range: Range( + range: SourceRange( startRow: start.line, startColumn: start.column, endRow: end.line, @@ -177,7 +177,7 @@ final class TokenVisitor: SyntaxRewriter { current = treeNode } - override func visit(_ token: TokenSyntax) -> TokenSyntax { + override internal func visit(_ token: TokenSyntax) -> TokenSyntax { current.text = token .text .escapeHTML() @@ -186,12 +186,12 @@ final class TokenVisitor: SyntaxRewriter { current.token = Token(kind: "\(token.tokenKind)", leadingTrivia: "", trailingTrivia: "") - token.leadingTrivia.forEach { piece in + for piece in token.leadingTrivia { let trivia = processTriviaPiece(piece) current.token?.leadingTrivia += trivia.replaceHTMLWhitespacesWithSymbols() } processToken(token) - token.trailingTrivia.forEach { piece in + for piece in token.trailingTrivia { let trivia = processTriviaPiece(piece) current.token?.trailingTrivia += trivia.replaceHTMLWhitespacesWithSymbols() } @@ -199,62 +199,11 @@ final class TokenVisitor: SyntaxRewriter { return token } - override func visitPost(_ node: Syntax) { + override internal func visitPost(_ node: Syntax) { if let parent = current.parent { current = tree[parent] } else { current = nil } } - - private func processToken(_ token: TokenSyntax) { - var kind = "\(token.tokenKind)" - if let index = kind.firstIndex(of: "(") { - kind = String(kind.prefix(upTo: index)) - } - if kind.hasSuffix("Keyword") { - kind = "keyword" - } - - let sourceRange = token.sourceRange(converter: locationConverter) - let start = sourceRange.start - let end = sourceRange.end - let text = token.presence == .present || showMissingTokens ? token.text : "" - } - - private func processTriviaPiece(_ piece: TriviaPiece) -> String { - func wrapWithSpanTag(class className: String, text: String) -> String { - "\(text.escapeHTML().replaceInvisiblesWithHTML())" - } - - var trivia = "" - switch piece { - case .spaces(let count): - trivia += String(repeating: " ", count: count) - case .tabs(let count): - trivia += String(repeating: " ", count: count * 2) - case .verticalTabs, .formfeeds: - break - case .newlines(let count), .carriageReturns(let count), .carriageReturnLineFeeds(let count): - trivia += String(repeating: "
", count: count) - case .lineComment(let text): - trivia += wrapWithSpanTag(class: "lineComment", text: text) - case .blockComment(let text): - trivia += wrapWithSpanTag(class: "blockComment", text: text) - case .docLineComment(let text): - trivia += wrapWithSpanTag(class: "docLineComment", text: text) - case .docBlockComment(let text): - trivia += wrapWithSpanTag(class: "docBlockComment", text: text) - case .unexpectedText(let text): - trivia += wrapWithSpanTag(class: "unexpectedText", text: text) - case .backslashes(let count): - trivia += String(repeating: #"\"#, count: count) - case .pounds(let count): - trivia += String(repeating: "#", count: count) - } - return trivia - } } diff --git a/Sources/SyntaxKit/parser/TreeNode.swift b/Sources/SyntaxKit/parser/TreeNode.swift index 4c35089..a649c78 100644 --- a/Sources/SyntaxKit/parser/TreeNode.swift +++ b/Sources/SyntaxKit/parser/TreeNode.swift @@ -29,18 +29,18 @@ import Foundation -final class TreeNode: Codable { - let id: Int - var parent: Int? +internal final class TreeNode: Codable { + internal let id: Int + internal var parent: Int? - var text: String - var range = Range( + internal var text: String + internal var range = SourceRange( startRow: 0, startColumn: 0, endRow: 0, endColumn: 0) - var structure = [StructureProperty]() - var type: SyntaxType - var token: Token? + internal var structure = [StructureProperty]() + internal var type: SyntaxType + internal var token: Token? - init(id: Int, text: String, range: Range, type: SyntaxType) { + init(id: Int, text: String, range: SourceRange, type: SyntaxType) { self.id = id self.text = text.escapeHTML() self.range = range @@ -70,109 +70,3 @@ extension TreeNode: CustomStringConvertible { """ } } - -struct Range: Codable, Equatable { - let startRow: Int - let startColumn: Int - let endRow: Int - let endColumn: Int -} - -extension Range: CustomStringConvertible { - var description: String { - """ - { - startRow: \(startRow) - startColumn: \(startColumn) - endRow: \(endRow) - endColumn: \(endColumn) - } - """ - } -} - -struct StructureProperty: Codable, Equatable { - let name: String - let value: StructureValue? - let ref: String? - - init(name: String, value: StructureValue? = nil, ref: String? = nil) { - self.name = name.escapeHTML() - self.value = value - self.ref = ref?.escapeHTML() - } -} - -extension StructureProperty: CustomStringConvertible { - var description: String { - """ - { - name: \(name) - value: \(String(describing: value)) - ref: \(String(describing: ref)) - } - """ - } -} - -struct StructureValue: Codable, Equatable { - let text: String - let kind: String? - - init(text: String, kind: String? = nil) { - self.text = text.escapeHTML().replaceHTMLWhitespacesToSymbols() - self.kind = kind?.escapeHTML() - } -} - -extension StructureValue: CustomStringConvertible { - var description: String { - """ - { - text: \(text) - kind: \(String(describing: kind)) - } - """ - } -} - -enum SyntaxType: String, Codable { - case decl - case expr - case pattern - case type - case collection - case other -} - -struct Token: Codable, Equatable { - let kind: String - var leadingTrivia: String - var trailingTrivia: String - - init(kind: String, leadingTrivia: String, trailingTrivia: String) { - self.kind = kind.escapeHTML() - self.leadingTrivia = leadingTrivia - self.trailingTrivia = trailingTrivia - } -} - -extension Token: CustomStringConvertible { - var description: String { - """ - { - kind: \(kind) - leadingTrivia: \(leadingTrivia) - trailingTrivia: \(trailingTrivia) - } - """ - } -} - -extension String { - fileprivate func replaceHTMLWhitespacesToSymbols() -> String { - self - .replacingOccurrences(of: " ", with: "") - .replacingOccurrences(of: "
", with: "") - } -} diff --git a/Sources/skit/main.swift b/Sources/skit/main.swift index d7952fe..b500a63 100644 --- a/Sources/skit/main.swift +++ b/Sources/skit/main.swift @@ -31,7 +31,8 @@ import Foundation import SyntaxKit // Read Swift code from stdin -let code = String(data: FileHandle.standardInput.readDataToEndOfFile(), encoding: .utf8) ?? "" +internal let code = + String(data: FileHandle.standardInput.readDataToEndOfFile(), encoding: .utf8) ?? "" do { // Parse the code using SyntaxKit diff --git a/Tests/SyntaxKitTests/Integration/.swiftlint.yml b/Tests/SyntaxKitTests/Integration/.swiftlint.yml new file mode 100644 index 0000000..a3bbf04 --- /dev/null +++ b/Tests/SyntaxKitTests/Integration/.swiftlint.yml @@ -0,0 +1,5 @@ +disabled_rules: + - file_length + - closure_body_length + - function_body_length + - type_body_length \ No newline at end of file diff --git a/Tests/SyntaxKitTests/BasicTests.swift b/Tests/SyntaxKitTests/Integration/BlackjackCardTests.swift similarity index 71% rename from Tests/SyntaxKitTests/BasicTests.swift rename to Tests/SyntaxKitTests/Integration/BlackjackCardTests.swift index bfc9433..b44ed10 100644 --- a/Tests/SyntaxKitTests/BasicTests.swift +++ b/Tests/SyntaxKitTests/Integration/BlackjackCardTests.swift @@ -2,8 +2,9 @@ import Testing @testable import SyntaxKit -struct BasicTests { - @Test func testBlackjackCardExample() throws { +@Suite +internal struct BlackjackCardTests { + @Test internal func testBlackjackCardExample() throws { let blackjackCard = Struct("BlackjackCard") { Enum("Suit") { EnumCase("spades").equals("♠") @@ -15,12 +16,12 @@ struct BasicTests { let expected = """ struct BlackjackCard { - enum Suit: Character { - case spades = "♠" - case hearts = "♡" - case diamonds = "♢" - case clubs = "♣" - } + enum Suit: Character { + case spades = "♠" + case hearts = "♡" + case diamonds = "♢" + case clubs = "♣" + } } """ diff --git a/Tests/SyntaxKitTests/BlackjackTests.swift b/Tests/SyntaxKitTests/Integration/BlackjackTests.swift similarity index 69% rename from Tests/SyntaxKitTests/BlackjackTests.swift rename to Tests/SyntaxKitTests/Integration/BlackjackTests.swift index 16ab0d0..ee51ff2 100644 --- a/Tests/SyntaxKitTests/BlackjackTests.swift +++ b/Tests/SyntaxKitTests/Integration/BlackjackTests.swift @@ -2,8 +2,8 @@ import Testing @testable import SyntaxKit -struct BlackjackTests { - @Test func testBlackjackCardExample() throws { +internal struct BlackjackTests { + @Test internal func testBlackjackCardExample() throws { let syntax = Struct("BlackjackCard") { Enum("Suit") { EnumCase("spades").equals("♠") @@ -36,29 +36,29 @@ struct BlackjackTests { let expected = """ struct BlackjackCard { - enum Suit: Character { - case spades = "♠" - case hearts = "♡" - case diamonds = "♢" - case clubs = "♣" - } - enum Rank: Int { - case two = 2 - case three - case four - case five - case six - case seven - case eight - case nine - case ten - case jack - case queen - case king - case ace - } - let rank: Rank - let suit: Suit + enum Suit: Character { + case spades = "♠" + case hearts = "♡" + case diamonds = "♢" + case clubs = "♣" + } + enum Rank: Int { + case two = 2 + case three + case four + case five + case six + case seven + case eight + case nine + case ten + case jack + case queen + case king + case ace + } + let rank: Rank + let suit: Suit } """ @@ -70,9 +70,7 @@ struct BlackjackTests { #expect(normalizedGenerated == normalizedExpected) } - // swiftlint:disable:next function_body_length - @Test func testFullBlackjackCardExample() throws { - // swiftlint:disable:next closure_body_length + @Test internal func testFullBlackjackCardExample() throws { let syntax = Struct("BlackjackCard") { Enum("Suit") { EnumCase("spades").equals("♠") @@ -105,24 +103,24 @@ struct BlackjackTests { SwitchCase(".ace") { Return { Init("Values") { - Parameter(name: "first", type: "", defaultValue: "1") - Parameter(name: "second", type: "", defaultValue: "11") + ParameterExp(name: "first", value: Literal.integer(1)) + ParameterExp(name: "second", value: Literal.integer(11)) } } } SwitchCase(".jack", ".queen", ".king") { Return { Init("Values") { - Parameter(name: "first", type: "", defaultValue: "10") - Parameter(name: "second", type: "", defaultValue: "nil") + ParameterExp(name: "first", value: Literal.integer(10)) + ParameterExp(name: "second", value: Literal.nil) } } } Default { Return { Init("Values") { - Parameter(name: "first", type: "", defaultValue: "self.rawValue") - Parameter(name: "second", type: "", defaultValue: "nil") + ParameterExp(name: "first", value: Literal.ref("self.rawValue")) + ParameterExp(name: "second", value: Literal.nil) } } } @@ -134,12 +132,12 @@ struct BlackjackTests { Variable(.let, name: "rank", type: "Rank") Variable(.let, name: "suit", type: "Suit") ComputedProperty("description", type: "String") { - VariableDecl(.var, name: "output", equals: "\"suit is \\(suit.rawValue),\"") - PlusAssign("output", "\" value is \\(rank.values.first)\"") + VariableDecl(.var, name: "output", equals: "suit is \\(suit.rawValue),") + PlusAssign("output", " value is \\(rank.values.first)") If( Let("second", "rank.values.second"), then: { - PlusAssign("output", "\" or \\(second)\"") + PlusAssign("output", " or \\(second)") } ) Return { @@ -151,10 +149,10 @@ struct BlackjackTests { let expected = """ struct BlackjackCard { enum Suit: Character { - case spades = \"♠\" - case hearts = \"♡\" - case diamonds = \"♢\" - case clubs = \"♣\" + case spades = "♠" + case hearts = "♡" + case diamonds = "♢" + case clubs = "♣" } enum Rank: Int { @@ -192,10 +190,10 @@ struct BlackjackTests { let rank: Rank let suit: Suit var description: String { - var output = \"suit is \\(suit.rawValue),\" - output += \" value is \\(rank.values.first)\" + var output = "suit is \\(suit.rawValue)," + output += " value is \\(rank.values.first)" if let second = rank.values.second { - output += \" or \\(second)\" + output += " or \\(second)" } return output } diff --git a/Tests/SyntaxKitTests/CommentTests.swift b/Tests/SyntaxKitTests/Integration/CommentTests.swift similarity index 88% rename from Tests/SyntaxKitTests/CommentTests.swift rename to Tests/SyntaxKitTests/Integration/CommentTests.swift index 331852e..6397f11 100644 --- a/Tests/SyntaxKitTests/CommentTests.swift +++ b/Tests/SyntaxKitTests/Integration/CommentTests.swift @@ -2,10 +2,8 @@ import Testing @testable import SyntaxKit -struct CommentTests { - // swiftlint:disable:next function_body_length - @Test func testCommentInjection() { - // swiftlint:disable:next closure_body_length +internal struct CommentTests { + @Test internal func testCommentInjection() { let syntax = Group { Struct("Card") { Variable(.let, name: "rank", type: "Rank") @@ -23,7 +21,9 @@ struct CommentTests { Line(.doc, "Represents a playing card in a standard 52-card deck") Line(.doc) Line( - .doc, "A card has a rank (2-10, J, Q, K, A) and a suit (hearts, diamonds, clubs, spades)." + .doc, + "A card has a rank (2-10, J, Q, K, A) and a suit " + + "(hearts, diamonds, clubs, spades)." ) Line(.doc, "Each card can be compared to other cards based on its rank.") } @@ -104,7 +104,8 @@ struct CommentTests { #expect(!generated.isEmpty) // // #expect(generated.contains("MARK: - Models"), "MARK line should be present in generated code") - // #expect(generated.contains("Foo struct docs"), "Doc comment line should be present in generated code") + // #expect(generated.contains("Foo struct docs"), + // "Doc comment line should be present in generated code") // // Ensure the struct declaration itself is still correct // #expect(generated.contains("struct Foo")) // #expect(generated.contains("bar"), "Variable declaration should be present") diff --git a/Tests/SyntaxKitTests/Integration/CompleteProtocolsExampleTests.swift b/Tests/SyntaxKitTests/Integration/CompleteProtocolsExampleTests.swift new file mode 100644 index 0000000..a28ff50 --- /dev/null +++ b/Tests/SyntaxKitTests/Integration/CompleteProtocolsExampleTests.swift @@ -0,0 +1,297 @@ +// +// CompleteProtocolsExampleTests.swift +// SyntaxKitTests +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the "Software"), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation +import SyntaxKit +import Testing + +@Suite internal struct CompleteProtocolsExampleTests { + // MARK: - Helper Functions + + private func createProtocolsDSL() -> Group { + Group { + // MARK: - Protocol Definition + Protocol("Vehicle") { + PropertyRequirement("numberOfWheels", type: "Int", access: .get) + PropertyRequirement("brand", type: "String", access: .get) + FunctionRequirement("start") + FunctionRequirement("stop") + } + .comment { + Line("MARK: - Protocol Definition") + } + + // MARK: - Protocol Extension + Extension("Vehicle") { + Function("start") { + Call("print") { + ParameterExp(name: "", value: "\"Starting \\(brand) vehicle...\"") + } + } + + Function("stop") { + Call("print") { + ParameterExp(name: "", value: "\"Stopping \\(brand) vehicle...\"") + } + } + } + .comment { + Line("MARK: - Protocol Extension") + } + + // MARK: - Protocol Composition + Protocol("Electric") { + PropertyRequirement("batteryLevel", type: "Double", access: .getSet) + FunctionRequirement("charge") + } + .comment { + Line("MARK: - Protocol Composition") + } + + // MARK: - Concrete Types + Struct("Car") { + Variable(.let, name: "numberOfWheels", type: "Int", equals: 4).withExplicitType() + Variable(.let, name: "brand", type: "String").withExplicitType() + + Function("start") { + Call("print") { + ParameterExp(name: "", value: "\"Starting \\(brand) car engine...\"") + } + } + } + .inherits("Vehicle") + .comment { + Line("MARK: - Concrete Types") + } + + Struct("ElectricCar") { + Variable(.let, name: "numberOfWheels", type: "Int", equals: 4).withExplicitType() + Variable(.let, name: "brand", type: "String").withExplicitType() + Variable(.var, name: "batteryLevel", type: "Double").withExplicitType() + + Function("charge") { + Call("print") { + ParameterExp(name: "", value: "\"Charging \\(brand) electric car...\"") + } + Assignment("batteryLevel", Literal.float(100.0)) + } + } + .inherits("Vehicle", "Electric") + + // MARK: - Usage Example + VariableDecl(.let, name: "tesla", equals: "ElectricCar(brand: \"Tesla\", batteryLevel: 75.0)") + .comment { + Line("MARK: - Usage Example") + } + VariableDecl(.let, name: "toyota", equals: "Car(brand: \"Toyota\")") + + // Demonstrate protocol usage + Function("demonstrateVehicle") { + Parameter(name: "vehicle", type: "Vehicle", isUnnamed: true) + } _: { + Call("print") { + ParameterExp(name: "", value: "\"Vehicle brand: \\(vehicle.brand)\"") + } + Call("print") { + ParameterExp(name: "", value: "\"Number of wheels: \\(vehicle.numberOfWheels)\"") + } + VariableExp("vehicle").call("start") + VariableExp("vehicle").call("stop") + } + .comment { + Line("Demonstrate protocol usage") + } + + // Demonstrate protocol composition + Function("demonstrateElectricVehicle") { + Parameter(name: "vehicle", type: "Vehicle & Electric", isUnnamed: true) + } _: { + Call("demonstrateVehicle") { + ParameterExp(name: "", value: "vehicle") + } + Call("print") { + ParameterExp(name: "", value: "\"Battery level: \\(vehicle.batteryLevel)%\"") + } + VariableExp("vehicle").call("charge") + } + .comment { + Line("Demonstrate protocol composition") + } + + // Test the implementations + Call("print") { + ParameterExp(name: "", value: "\"Testing regular car:\"") + } + .comment { + Line("Test the implementations") + } + Call("demonstrateVehicle") { + ParameterExp(name: "", value: "toyota") + } + + Call("print") { + ParameterExp(name: "", value: "\"Testing electric car:\"") + } + Call("demonstrateElectricVehicle") { + ParameterExp(name: "", value: "tesla") + } + } + } + + // MARK: - Tests + + @Test("Complete protocols example with Call generates correct syntax") + internal func testCompleteProtocolsExample() throws { + let generatedCode = createProtocolsDSL().generateCode() + + // Verify protocol definitions + #expect(generatedCode.contains("protocol Vehicle")) + #expect(generatedCode.contains("var numberOfWheels")) + #expect(generatedCode.contains("var brand")) + #expect(generatedCode.contains("func start()")) + #expect(generatedCode.contains("func stop()")) + + // Verify protocol extension + #expect(generatedCode.contains("extension Vehicle")) + #expect(generatedCode.contains("print(\"Starting \\(brand) vehicle...\")")) + #expect(generatedCode.contains("print(\"Stopping \\(brand) vehicle...\")")) + + // Verify protocol composition + #expect(generatedCode.contains("protocol Electric")) + #expect(generatedCode.contains("var batteryLevel")) + #expect(generatedCode.contains("func charge()")) + + // Verify concrete types + #expect(generatedCode.contains("struct Car:Vehicle")) + #expect(generatedCode.contains("struct ElectricCar:Vehicle")) + #expect(generatedCode.contains("print(\"Starting \\(brand) car engine...\")")) + #expect(generatedCode.contains("print(\"Charging \\(brand) electric car...\")")) + + // Verify usage examples + #expect(generatedCode.contains("let tesla")) + #expect(generatedCode.contains("let toyota")) + + // Verify demonstration functions + #expect(generatedCode.contains("func demonstrateVehicle")) + #expect(generatedCode.contains("func demonstrateElectricVehicle")) + #expect(generatedCode.contains("print(\"Vehicle brand: \\(vehicle.brand)\")")) + #expect(generatedCode.contains("print(\"Number of wheels: \\(vehicle.numberOfWheels)\")")) + #expect(generatedCode.contains("print(\"Battery level: \\(vehicle.batteryLevel)%\")")) + + // Verify test calls + #expect(generatedCode.contains("print(\"Testing regular car:\")")) + #expect(generatedCode.contains("print(\"Testing electric car:\")")) + } + + @Test("Protocols DSL and code.swift generate equivalent code") + internal func testProtocolsDSLAndCodeSwiftEquivalence() throws { + // Hardcoded code.swift content + let codeSwift = """ + // MARK: - Protocol Definition + protocol Vehicle { + var numberOfWheels: Int { get } + var brand: String { get } + func start() + func stop() + } + + // MARK: - Protocol Extension + extension Vehicle { + func start() { + print("Starting \\(brand) vehicle...") + } + + func stop() { + print("Stopping \\(brand) vehicle...") + } + } + + // MARK: - Protocol Composition + protocol Electric { + var batteryLevel: Double { get set } + func charge() + } + + // MARK: - Concrete Types + struct Car: Vehicle { + let numberOfWheels: Int = 4 + let brand: String + + func start() { + print("Starting \\(brand) car engine...") + } + } + + struct ElectricCar: Vehicle, Electric { + let numberOfWheels: Int = 4 + let brand: String + var batteryLevel: Double + + func charge() { + print("Charging \\(brand) electric car...") + batteryLevel = 100.0 + } + } + + // MARK: - Usage Example + let tesla = ElectricCar(brand: "Tesla", batteryLevel: 75.0) + let toyota = Car(brand: "Toyota") + + // Demonstrate protocol usage + func demonstrateVehicle(_ vehicle: Vehicle) { + print("Vehicle brand: \\(vehicle.brand)") + print("Number of wheels: \\(vehicle.numberOfWheels)") + vehicle.start() + vehicle.stop() + } + + // Demonstrate protocol composition + func demonstrateElectricVehicle(_ vehicle: Vehicle & Electric) { + demonstrateVehicle(vehicle) + print("Battery level: \\(vehicle.batteryLevel)%") + vehicle.charge() + } + + // Test the implementations + print("Testing regular car:") + demonstrateVehicle(toyota) + + print("Testing electric car:") + demonstrateElectricVehicle(tesla) + """ + + // Evaluate the DSL directly + let generatedCode = createProtocolsDSL().generateCode() + + // Normalize both + let normalizedCode = codeSwift.normalize() + let normalizedGenerated = generatedCode.normalize() + #expect(normalizedCode == normalizedGenerated) + } +} diff --git a/Tests/SyntaxKitTests/Integration/ConcurrencyExampleTests.swift b/Tests/SyntaxKitTests/Integration/ConcurrencyExampleTests.swift new file mode 100644 index 0000000..9aac57b --- /dev/null +++ b/Tests/SyntaxKitTests/Integration/ConcurrencyExampleTests.swift @@ -0,0 +1,157 @@ +import Foundation +import Testing + +@testable import SyntaxKit + +@Suite internal struct ConcurrencyExampleTests { + @Test("Concurrency vending machine DSL generates expected Swift code") + internal func testConcurrencyVendingMachineExample() throws { + // Build DSL equivalent of Examples/Remaining/concurrency/dsl.swift + // Note: This test includes the Item struct that's referenced but not defined in the original DSL + + let program = Group { + // Item struct (needed for the vending machine) + Struct("Item") { + Variable(.let, name: "price", type: "Int").withExplicitType() + Variable(.var, name: "count", type: "Int").withExplicitType() + } + + // VendingMachineError enum + Enum("VendingMachineError") { + Case("invalidSelection") + Case("insufficientFunds").associatedValue("coinsNeeded", type: "Int") + Case("outOfStock") + } + .inherits("Error") + + // VendingMachine class + Class("VendingMachine") { + Variable( + .var, name: "inventory", + equals: DictionaryExpr([ + ( + Literal.string("Candy Bar"), + Init("Item") { + ParameterExp(name: "price", value: Literal.integer(12)) + ParameterExp(name: "count", value: Literal.integer(7)) + } + ), + ( + Literal.string("Chips"), + Init("Item") { + ParameterExp(name: "price", value: Literal.integer(10)) + ParameterExp(name: "count", value: Literal.integer(4)) + } + ), + ( + Literal.string("Pretzels"), + Init("Item") { + ParameterExp(name: "price", value: Literal.integer(7)) + ParameterExp(name: "count", value: Literal.integer(11)) + } + ), + ]) + ) + Variable(.var, name: "coinsDeposited", equals: 0) + + Function("vend") { + Parameter("name", labeled: "itemNamed", type: "String") + } _: { + Guard { + Let("item", "inventory[name]") + } else: { + Throw(VariableExp("VendingMachineError.invalidSelection")) + } + Guard { + Infix(">") { + VariableExp("item").property("count") + Literal.integer(0) + } + } else: { + Throw(VariableExp("VendingMachineError.outOfStock")) + } + Guard { + Infix("<=") { + VariableExp("item").property("price") + VariableExp("coinsDeposited") + } + } else: { + Throw( + Call("VendingMachineError.insufficientFunds") { + ParameterExp( + name: "coinsNeeded", + value: Infix("-") { + VariableExp("item").property("price") + VariableExp("coinsDeposited") + } + ) + } + ) + } + Infix("-=") { + VariableExp("coinsDeposited") + VariableExp("item").property("price") + } + Variable(.var, name: "newItem", equals: Literal.ref("item")) + Infix("-=") { + VariableExp("newItem").property("count") + Literal.integer(1) + } + Assignment("inventory[name]", .ref("newItem")) + Call("print") { + ParameterExp(unlabeled: "\"Dispensing \\(name)\"") + } + } + .throws() + } + } + + // Expected Swift code from Examples/Remaining/concurrency/code.swift + let expectedCode = """ + struct Item { + let price: Int + var count: Int + } + + enum VendingMachineError: Error { + case invalidSelection + case insufficientFunds(coinsNeeded: Int) + case outOfStock + } + + class VendingMachine { + var inventory = ["Candy Bar": Item(price: 12, count: 7), + "Chips": Item(price: 10, count: 4), + "Pretzels": Item(price: 7, count: 11)] + var coinsDeposited = 0 + + func vend(itemNamed name: String) throws { + guard let item = inventory[name] else { + throw VendingMachineError.invalidSelection + } + + guard item.count > 0 else { + throw VendingMachineError.outOfStock + } + + guard item.price <= coinsDeposited else { + throw VendingMachineError.insufficientFunds(coinsNeeded: item.price - coinsDeposited) + } + + coinsDeposited -= item.price + + var newItem = item + newItem.count -= 1 + inventory[name] = newItem + + print("Dispensing \\(name)") + } + } + """ + + // Generate code from DSL + let generated = program.generateCode().normalize() + let expected = expectedCode.normalize() + #expect(generated == expected) + } +} diff --git a/Tests/SyntaxKitTests/Integration/ConditionalsExampleTests.swift b/Tests/SyntaxKitTests/Integration/ConditionalsExampleTests.swift new file mode 100644 index 0000000..821c215 --- /dev/null +++ b/Tests/SyntaxKitTests/Integration/ConditionalsExampleTests.swift @@ -0,0 +1,495 @@ +import Foundation +import Testing + +@testable import SyntaxKit + +@Suite internal struct ConditionalsExampleTests { + @Test("Completed conditionals DSL generates expected Swift code") + internal func testCompletedConditionalsExample() throws { + // Build DSL equivalent of Examples/Completed/conditionals/dsl.swift + + let program = Group { + // MARK: Basic If Statements + Variable(.let, name: "temperature", equals: 25) + .comment { + Line("Simple if statement") + } + + If { + Infix(">") { + VariableExp("temperature") + Literal.integer(30) + } + } then: { + Call("print") { + ParameterExp(name: "", value: "\"It's hot outside!\"") + } + } + + // If-else chain with else-if + Variable(.let, name: "score", equals: 85) + .comment { + Line("If-else statement") + } + + If { + Infix(">=") { + VariableExp("score") + Literal.integer(90) + } + } then: { + Call("print") { + ParameterExp(name: "", value: "\"Excellent!\"") + } + } else: { + If { + Infix(">=") { + VariableExp("score") + Literal.integer(80) + } + } then: { + Call("print") { + ParameterExp(name: "", value: "\"Good job!\"") + } + } + + If { + Infix(">=") { + VariableExp("score") + Literal.integer(70) + } + } then: { + Call("print") { + ParameterExp(name: "", value: "\"Passing\"") + } + } + + Then { + Call("print") { + ParameterExp(name: "", value: "\"Needs improvement\"") + } + } + } + + // MARK: Optional Binding with If + Variable(.let, name: "possibleNumber", equals: Literal.string("123")) + .comment { + Line("MARK: - Optional Binding with If") + Line("Using if let for optional binding") + } + + If( + Let("actualNumber", "Int(possibleNumber)"), + then: { + Call("print") { + ParameterExp( + name: "", + value: + "\"The string \"\\(possibleNumber)\" has an integer value of \\(actualNumber)\"" + ) + } + }, + else: { + Call("print") { + ParameterExp( + name: "", + value: + "\"The string \"\\(possibleNumber)\" could not be converted to an integer\"" + ) + } + }) + + // Multiple optional bindings + Variable(.let, name: "possibleName", type: "String?", equals: Literal.string("John")) + .withExplicitType() + .comment { + Line("Multiple optional bindings") + } + Variable(.let, name: "possibleAge", type: "Int?", equals: Literal.integer(30)) + .withExplicitType() + + If { + Let("name", "possibleName") + Let("age", "possibleAge") + } then: { + Call("print") { + ParameterExp(name: "", value: "\"\\(name) is \\(age) years old\"") + } + } + + // MARK: - Guard Statements + Function("greet", { Parameter(name: "person", type: "[String: String]") }) { + Guard { + Let("name", "person[\"name\"]") + } else: { + Call("print") { + ParameterExp(name: "", value: "\"No name provided\"") + } + } + + Guard { + Let("age", "person[\"age\"]") + Let("ageInt", "Int(age)") + } else: { + Call("print") { + ParameterExp(name: "", value: "\"Invalid age provided\"") + } + } + + Call("print") { + ParameterExp(name: "", value: "\"Hello \\(name), you are \\(ageInt) years old\"") + } + } + .comment { + Line("MARK: - Guard Statements") + } + + // MARK: - Switch Statements + Variable(.let, name: "approximateCount", equals: Literal.integer(62)) + .comment { + Line("MARK: - Switch Statements") + Line("Switch with range matching") + } + Variable(.let, name: "countedThings", equals: Literal.string("moons orbiting Saturn")) + Variable(.let, name: "naturalCount", type: "String").withExplicitType() + Switch("approximateCount") { + SwitchCase(0) { + Assignment("naturalCount", Literal.string("no")) + } + SwitchCase(1..<5) { + Assignment("naturalCount", Literal.string("a few")) + } + SwitchCase(5..<12) { + Assignment("naturalCount", Literal.string("several")) + } + SwitchCase(12..<100) { + Assignment("naturalCount", Literal.string("dozens of")) + } + SwitchCase(100..<1_000) { + Assignment("naturalCount", Literal.string("hundreds of")) + } + Default { + Assignment("naturalCount", Literal.string("many")) + } + } + Call("print") { + ParameterExp(name: "", value: "\"There are \\(naturalCount) \\(countedThings).\"") + } + + // MARK: - Tuple literal and tuple pattern switch + Variable(.let, name: "somePoint", equals: Literal.tuple([.integer(1), .integer(1)])) + .comment { + Line("Switch with tuple matching") + } + Switch("somePoint") { + SwitchCase(Tuple.pattern([0, 0])) { + Call("print") { + ParameterExp(name: "", value: "\"(0, 0) is at the origin\"") + } + } + SwitchCase(Tuple.pattern([nil, 0])) { + Call("print") { + ParameterExp(name: "", value: "\"(\\(somePoint.0), 0) is on the x-axis\"") + } + } + SwitchCase(Tuple.pattern([0, nil])) { + Call("print") { + ParameterExp(name: "", value: "\"(0, \\(somePoint.1)) is on the y-axis\"") + } + } + SwitchCase(Tuple.pattern([(-2...2), (-2...2)])) { + Call("print") { + ParameterExp( + name: "", value: "\"(\\(somePoint.0), \\(somePoint.1)) is inside the box\"" + ) + } + } + Default { + Call("print") { + ParameterExp( + name: "", value: "\"(\\(somePoint.0), \\(somePoint.1)) is outside of the box\"" + ) + } + } + } + + // MARK: - Switch with value binding + Variable(.let, name: "anotherPoint", equals: Literal.tuple([.integer(2), .integer(0)])) + .withExplicitType() + .comment { + Line("Switch with value binding") + } + Switch("anotherPoint") { + SwitchCase(Tuple.pattern([Pattern.let("x"), 0])) { + Call("print") { + ParameterExp( + name: "", value: "\"on the x-axis with an x value of \\(x)\"" + ) + } + } + SwitchCase(Tuple.pattern([0, Pattern.let("y")])) { + Call("print") { + ParameterExp( + name: "", value: "\"on the y-axis with a y value of \\(y)\"" + ) + } + } + SwitchCase(Tuple.pattern([Pattern.let("x"), Pattern.let("y")])) { + Call("print") { + ParameterExp( + name: "", value: "\"somewhere else at (\\(x), \\(y))\"" + ) + } + } + } + + // MARK: - Fallthrough + Variable(.let, name: "integerToDescribe", equals: Literal.integer(5)) + .comment { + Line("MARK: - Fallthrough") + Line("Using fallthrough in switch") + } + Variable(.var, name: "description", equals: "The number \\(integerToDescribe) is") + Switch("integerToDescribe") { + SwitchCase(2, 3, 5, 7, 11, 13, 17, 19) { + PlusAssign("description", " a prime number, and also") + Fallthrough() + } + Default { + PlusAssign("description", " an integer.") + } + } + Call("print") { + ParameterExp(name: "", value: "description") + } + + // MARK: - Labeled Statements + Variable(.let, name: "finalSquare", equals: Literal.integer(25)) + .comment { + Line("MARK: - Labeled Statements") + Line("Using labeled statements with break") + } + Variable(.var, name: "board") { + Init("[Int]") { + ParameterExp(name: "repeating", value: Literal.integer(0)) + ParameterExp( + name: "count", + value: Infix("+") { + VariableExp("finalSquare") + Literal.integer(1) + } + ) + } + } + + // Board setup + Assignment("board[3]", 8) + Assignment("board[6]", 11) + Assignment("board[9]", 9) + Assignment("board[10]", 2) + Assignment("board[14]", -10) + Assignment("board[19]", -11) + Assignment("board[22]", -2) + Assignment("board[24]", -8) + + Variable(.var, name: "square", equals: Literal.integer(0)) + Variable(.var, name: "diceRoll", equals: Literal.integer(0)) + While { + Infix("!=") { + VariableExp("square") + VariableExp("finalSquare") + } + } then: { + PlusAssign("diceRoll", 1) + If { + Infix("==") { + VariableExp("diceRoll") + Literal.integer(7) + } + } then: { + Assignment("diceRoll", 1) + } + Switch( + Infix("+") { + VariableExp("square") + VariableExp("diceRoll") + } + ) { + SwitchCase(VariableExp("finalSquare")) { + Break() + } + SwitchCase { + SwitchLet("newSquare") + Infix(">") { + VariableExp("newSquare") + VariableExp("finalSquare") + } + } content: { + Continue() + } + Default { + Infix("+=") { + VariableExp("square") + VariableExp("diceRoll") + } + Infix("+=") { + VariableExp("square") + VariableExp("board[square]") + } + } + } + } + } + + // Generate Swift from DSL + var generated = program.generateCode() + + // Remove type annotations like ": Int =" for comparison to example code + generated = generated.normalize() + + // Use the expected Swift code as a string literal + let expected = """ + // Simple if statement + let temperature = 25 + if temperature > 30 { + print("It's hot outside!") + } + + // If-else statement + let score = 85 + if score >= 90 { + print("Excellent!") + } else if score >= 80 { + print("Good job!") + } else if score >= 70 { + print("Passing") + } else { + print("Needs improvement") + } + + // MARK: - Optional Binding with If + + // Using if let for optional binding + let possibleNumber = "123" + if let actualNumber = Int(possibleNumber) { + print("The string \"\\(possibleNumber)\" has an integer value of \\(actualNumber)") + } else { + print("The string \"\\(possibleNumber)\" could not be converted to an integer") + } + + // Multiple optional bindings + let possibleName: String? = "John" + let possibleAge: Int? = 30 + if let name = possibleName, let age = possibleAge { + print("\\(name) is \\(age) years old") + } + + // MARK: - Guard Statements + func greet(person: [String: String]) { + guard let name = person["name"] else { + print("No name provided") + return + } + + guard let age = person["age"], let ageInt = Int(age) else { + print("Invalid age provided") + return + } + + print("Hello \\(name), you are \\(ageInt) years old") + } + + // MARK: - Switch Statements + // Switch with range matching + let approximateCount = 62 + let countedThings = "moons orbiting Saturn" + let naturalCount: String + switch approximateCount { + case 0: + naturalCount = "no" + case 1..<5: + naturalCount = "a few" + case 5..<12: + naturalCount = "several" + case 12..<100: + naturalCount = "dozens of" + case 100..<1000: + naturalCount = "hundreds of" + default: + naturalCount = "many" + } + print("There are \\(naturalCount) \\(countedThings).") + + // Switch with tuple matching + let somePoint = (1, 1) + switch somePoint { + case (0, 0): + print("(0, 0) is at the origin") + case (_, 0): + print("(\\(somePoint.0), 0) is on the x-axis") + case (0, _): + print("(0, \\(somePoint.1)) is on the y-axis") + case (-2...2, -2...2): + print("(\\(somePoint.0), \\(somePoint.1)) is inside the box") + default: + print("(\\(somePoint.0), \\(somePoint.1)) is outside of the box") + } + + // Switch with value binding + let anotherPoint: (Int, Int) = (2, 0) + switch anotherPoint { + case (let x, 0): + print("on the x-axis with an x value of \\(x)") + case (0, let y): + print("on the y-axis with a y value of \\(y)") + case (let x, let y): + print("somewhere else at (\\(x), \\(y))") + } + + // MARK: - Fallthrough + // Using fallthrough in switch + let integerToDescribe = 5 + var description = "The number \\(integerToDescribe) is" + switch integerToDescribe { + case 2, 3, 5, 7, 11, 13, 17, 19: + description += " a prime number, and also" + fallthrough + default: + description += " an integer." + } + print(description) + + // MARK: - Labeled Statements + // Using labeled statements with break + let finalSquare = 25 + var board = [Int](repeating: 0, count: finalSquare + 1) + board[3] = 8 + board[6] = 11 + board[9] = 9 + board[10] = 2 + board[14] = -10 + board[19] = -11 + board[22] = -2 + board[24] = -8 + + var square = 0 + var diceRoll = 0 + while square != finalSquare { + diceRoll += 1 + if diceRoll == 7 { diceRoll = 1 } + switch square + diceRoll { + case finalSquare: + break + case let newSquare where newSquare > finalSquare: + continue + default: + square += diceRoll + square += board[square] + } + } + """ + .normalize() + + #expect(generated == expected) + } +} diff --git a/Tests/SyntaxKitTests/Integration/ForLoopsExampleTests.swift b/Tests/SyntaxKitTests/Integration/ForLoopsExampleTests.swift new file mode 100644 index 0000000..3c8aabb --- /dev/null +++ b/Tests/SyntaxKitTests/Integration/ForLoopsExampleTests.swift @@ -0,0 +1,176 @@ +import Foundation +import Testing + +@testable import SyntaxKit + +@Suite internal struct ForLoopsExampleTests { + @Test("Completed for loops DSL generates expected Swift code") + internal func testCompletedForLoopsExample() throws { + // Build DSL equivalent of Examples/Completed/for_loops/dsl.swift + + let program = Group { + // MARK: - Basic For-in Loop + Variable( + .let, + name: "names", + equals: Literal.array([ + Literal.string("Alice"), + Literal.string("Bob"), + Literal.string("Charlie"), + ]) + ) + .comment { + Line("MARK: - Basic For-in Loop") + Line("Simple for-in loop over an array") + } + + For( + VariableExp("name"), + in: VariableExp("names"), + then: { + Call("print") { + ParameterExp(unlabeled: "\"Hello, \\(name)!\"") + } + } + ) + + // MARK: - For-in with Enumerated + Call("print") { + ParameterExp(unlabeled: "\"\\n=== For-in with Enumerated ===\"") + } + .comment { + Line("MARK: - For-in with Enumerated") + Line("For-in loop with enumerated() to get index and value") + } + For( + Tuple.patternCodeBlock([ + VariableExp("index"), + VariableExp("name"), + ]), + in: VariableExp("names").call("enumerated"), + then: { + Call("print") { + ParameterExp(unlabeled: "\"Index: \\(index), Name: \\(name)\"") + } + } + ) + + // MARK: - For-in with Where Clause + Call("print") { + ParameterExp(unlabeled: "\"\\n=== For-in with Where Clause ===\"") + } + .comment { + Line("MARK: - For-in with Where Clause") + Line("For-in loop with where clause") + } + Variable( + .let, + name: "numbers", + equals: Literal.array([ + Literal.integer(1), + Literal.integer(2), + Literal.integer(3), + Literal.integer(4), + Literal.integer(5), + Literal.integer(6), + Literal.integer(7), + Literal.integer(8), + Literal.integer(9), + Literal.integer(10), + ]) + ) + + For( + VariableExp("number"), + in: VariableExp("numbers"), + where: { + Infix("==") { + Infix("%") { + VariableExp("number") + Literal.integer(2) + } + Literal.integer(0) + } + }, + then: { + Call("print") { + ParameterExp(unlabeled: "\"Even number: \\(number)\"") + } + } + ) + + // MARK: - For-in with Dictionary + Call("print") { + ParameterExp(unlabeled: "\"\\n=== For-in with Dictionary ===\"") + } + .comment { + Line("MARK: - For-in with Dictionary") + Line("For-in loop over dictionary") + } + Variable( + .let, + name: "scores", + equals: Literal.dictionary([ + (Literal.string("Alice"), Literal.integer(95)), + (Literal.string("Bob"), Literal.integer(87)), + (Literal.string("Charlie"), Literal.integer(92)), + ]) + ) + + For( + Tuple.patternCodeBlock([ + VariableExp("name"), + VariableExp("score"), + ]), + in: VariableExp("scores"), + then: { + Call("print") { + ParameterExp(unlabeled: "\"\\(name): \\(score)\"") + } + } + ) + } + + // Generate Swift from DSL + var generated = program.generateCode() + + // Remove type annotations like ": Int =" for comparison to example code + generated = generated.normalize() + + // Use the expected Swift code as a string literal + let expected = """ + // MARK: - Basic For-in Loop + // Simple for-in loop over an array + let names = ["Alice", "Bob", "Charlie"] + for name in names { + print("Hello, \\(name)!") + } + + // MARK: - For-in with Enumerated + // For-in loop with enumerated() to get index and value + print("\\n=== For-in with Enumerated ===") + for (index, name) in names.enumerated() { + print("Index: \\(index), Name: \\(name)") + } + + // MARK: - For-in with Where Clause + // For-in loop with where clause + print("\\n=== For-in with Where Clause ===") + let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + for number in numbers where number % 2 == 0 { + print("Even number: \\(number)") + } + + // MARK: - For-in with Dictionary + // For-in loop over dictionary + print("\\n=== For-in with Dictionary ===") + let scores = ["Alice": 95, "Bob": 87, "Charlie": 92] + for (name, score) in scores { + print("\\(name): \\(score)") + } + """ + .normalize() + + #expect(generated == expected) + } +} diff --git a/Tests/SyntaxKitTests/AssertionMigrationTests.swift b/Tests/SyntaxKitTests/Unit/AssertionMigrationTests.swift similarity index 84% rename from Tests/SyntaxKitTests/AssertionMigrationTests.swift rename to Tests/SyntaxKitTests/Unit/AssertionMigrationTests.swift index a6d03f2..d6188b0 100644 --- a/Tests/SyntaxKitTests/AssertionMigrationTests.swift +++ b/Tests/SyntaxKitTests/Unit/AssertionMigrationTests.swift @@ -4,10 +4,10 @@ import Testing /// Tests specifically focused on assertion migration from XCTest to Swift Testing /// Ensures all assertion patterns from the original tests work correctly with #expect() -struct AssertionMigrationTests { +internal struct AssertionMigrationTests { // MARK: - XCTAssertEqual Migration Tests - @Test func testEqualityAssertionMigration() throws { + @Test internal func testEqualityAssertionMigration() throws { // Test the most common migration: XCTAssertEqual -> #expect(a == b) let function = Function("test", returns: "String") { Return { @@ -29,7 +29,7 @@ struct AssertionMigrationTests { // MARK: - XCTAssertFalse Migration Tests - @Test func testFalseAssertionMigration() { + @Test internal func testFalseAssertionMigration() { let syntax = Group { Variable(.let, name: "test", type: "String", equals: "\"value\"") } @@ -42,7 +42,7 @@ struct AssertionMigrationTests { // MARK: - Complex Assertion Migration Tests - @Test func testNormalizedStringComparisonMigration() throws { + @Test internal func testNormalizedStringComparisonMigration() throws { let blackjackCard = Struct("Card") { Enum("Suit") { EnumCase("hearts").equals("♡") @@ -52,10 +52,10 @@ struct AssertionMigrationTests { let expected = """ struct Card { - enum Suit: Character { - case hearts = "♡" - case spades = "♠" - } + enum Suit: Character { + case hearts = "♡" + case spades = "♠" + } } """ @@ -68,7 +68,7 @@ struct AssertionMigrationTests { #expect(normalizedGenerated == normalizedExpected) } - @Test func testMultipleAssertionsInSingleTest() { + @Test internal func testMultipleAssertionsInSingleTest() { let generated = "struct Test { var value: Int }" // Test multiple assertions in one test method diff --git a/Tests/SyntaxKitTests/Unit/AttributeTests.swift b/Tests/SyntaxKitTests/Unit/AttributeTests.swift new file mode 100644 index 0000000..e71f4ee --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/AttributeTests.swift @@ -0,0 +1,199 @@ +// +// AttributeTests.swift +// SyntaxKitTests +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the "Software"), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SyntaxKit +import Testing + +@Suite internal struct AttributeTests { + @Test("Class with attribute generates correct syntax") + internal func testClassWithAttribute() throws { + let classDecl = Class("Foo") { + Variable(.var, name: "bar", type: "String", equals: "bar") + }.attribute("objc") + + let generated = classDecl.syntax.description + #expect(generated.contains("@objc")) + #expect(generated.contains("class Foo")) + } + + @Test("Function with attribute generates correct syntax") + internal func testFunctionWithAttribute() throws { + let function = Function("bar") { + Variable(.let, name: "message", type: "String", equals: "bar") + }.attribute("available") + + let generated = function.syntax.description + #expect(generated.contains("@available")) + #expect(generated.contains("func bar")) + } + + @Test("Variable with attribute generates correct syntax") + internal func testVariableWithAttribute() throws { + let variable = Variable(.var, name: "bar", type: "String", equals: "bar") + .attribute("Published") + + let generated = variable.syntax.description + #expect(generated.contains("@Published")) + #expect(generated.contains("var bar")) + } + + @Test("Multiple attributes on class generates correct syntax") + internal func testMultipleAttributesOnClass() throws { + let classDecl = Class("Foo") { + Variable(.var, name: "bar", type: "String", equals: "bar") + } + .attribute("objc") + .attribute("MainActor") + + let generated = classDecl.syntax.description + #expect(generated.contains("@objc")) + #expect(generated.contains("@MainActor")) + #expect(generated.contains("class Foo")) + } + + @Test("Attribute with arguments generates correct syntax") + internal func testAttributeWithArguments() throws { + let attribute = Attribute("available", arguments: ["iOS", "17.0", "*"]) + + let generated = attribute.syntax.description + #expect(generated.contains("@available")) + #expect(generated.contains("iOS")) + #expect(generated.contains("17.0")) + #expect(generated.contains("*")) + } + + @Test("Attribute with single argument generates correct syntax") + internal func testAttributeWithSingleArgument() throws { + let attribute = Attribute("available", argument: "iOS 17.0") + + let generated = attribute.syntax.description + #expect(generated.contains("@available")) + #expect(generated.contains("iOS 17.0")) + } + + @Test("Comprehensive attribute example generates correct syntax") + internal func testComprehensiveAttributeExample() throws { + let classDecl = Class("Foo") { + Variable(.var, name: "bar", type: "String", equals: "bar") + .attribute("Published") + + Function("bar") { + Variable(.let, name: "message", type: "String", equals: "bar") + } + .attribute("available") + .attribute("MainActor") + + Function("baz") { + Variable(.let, name: "message", type: "String", equals: "baz") + } + .attribute("MainActor") + }.attribute("objc") + + let generated = classDecl.syntax.description + #expect(generated.contains("@objc")) + #expect(generated.contains("@Published")) + #expect(generated.contains("@available")) + #expect(generated.contains("@MainActor")) + #expect(generated.contains("class Foo")) + #expect(generated.contains("var bar")) + #expect(generated.contains("func bar")) + #expect(generated.contains("func baz")) + } + + @Test("Function with attribute arguments generates correct syntax") + internal func testFunctionWithAttributeArguments() throws { + let function = Function("bar") { + Variable(.let, name: "message", type: "String", equals: "bar") + }.attribute("available", arguments: ["iOS", "17.0", "*"]) + + let generated = function.syntax.description + #expect(generated.contains("@available")) + #expect(generated.contains("iOS")) + #expect(generated.contains("17.0")) + #expect(generated.contains("*")) + #expect(generated.contains("func bar")) + } + + @Test("Class with attribute arguments generates correct syntax") + internal func testClassWithAttributeArguments() throws { + let classDecl = Class("Foo") { + Variable(.var, name: "bar", type: "String", equals: "bar") + }.attribute("available", arguments: ["iOS", "17.0"]) + + let generated = classDecl.syntax.description + #expect(generated.contains("@available")) + #expect(generated.contains("iOS")) + #expect(generated.contains("17.0")) + #expect(generated.contains("class Foo")) + } + + @Test("Variable with attribute arguments generates correct syntax") + internal func testVariableWithAttributeArguments() throws { + let variable = Variable(.var, name: "bar", type: "String", equals: "bar") + .attribute("available", arguments: ["iOS", "17.0"]) + + let generated = variable.syntax.description + #expect(generated.contains("@available")) + #expect(generated.contains("iOS")) + #expect(generated.contains("17.0")) + #expect(generated.contains("var bar")) + } + + @Test("Parameter with attribute generates correct syntax") + internal func testParameterWithAttribute() throws { + let function = Function("process") { + Parameter(name: "data", type: "Data") + .attribute("escaping") + } _: { + Variable(.let, name: "result", type: "String", equals: "processed") + } + + let generated = function.syntax.description + #expect(generated.contains("@escaping")) + #expect(generated.contains("data : Data")) + #expect(generated.contains("func process")) + } + + @Test("Parameter with attribute arguments generates correct syntax") + internal func testParameterWithAttributeArguments() throws { + let function = Function("validate") { + Parameter(name: "input", type: "String") + .attribute("available", arguments: ["iOS", "17.0"]) + } _: { + Variable(.let, name: "result", type: "Bool", equals: "true") + } + + let generated = function.syntax.description + #expect(generated.contains("@available")) + #expect(generated.contains("iOS")) + #expect(generated.contains("17.0")) + #expect(generated.contains("input : String")) + #expect(generated.contains("func validate")) + } +} diff --git a/Tests/SyntaxKitTests/Unit/CallTests.swift b/Tests/SyntaxKitTests/Unit/CallTests.swift new file mode 100644 index 0000000..415df15 --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/CallTests.swift @@ -0,0 +1,120 @@ +// +// CallTests.swift +// SyntaxKitTests +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the "Software"), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Foundation +import SyntaxKit +import Testing + +@Suite internal struct CallTests { + @Test("Call without parameters generates correct syntax") + internal func testCallWithoutParameters() throws { + let call = Call("print") + let generated = call.generateCode() + #expect(generated.contains("print()")) + } + + @Test("Call with string parameter generates correct syntax") + internal func testCallWithStringParameter() throws { + let call = Call("print") { + ParameterExp(name: "", value: "\"Hello, World!\"") + } + let generated = call.generateCode() + #expect(generated.contains("print(\"Hello, World!\")")) + } + + @Test("Call with named parameter generates correct syntax") + internal func testCallWithNamedParameter() throws { + let call = Call("function") { + ParameterExp(name: "value", value: "42") + } + let generated = call.generateCode() + #expect(generated.contains("function(value:42)")) + } + + @Test("Call with multiple parameters generates correct syntax") + internal func testCallWithMultipleParameters() throws { + let call = Call("print") { + ParameterExp(name: "", value: "\"Count:\"") + ParameterExp(name: "count", value: "5") + } + let generated = call.generateCode() + #expect(generated.contains("print(\"Count:\", count:5)")) + } + + @Test("Call with string interpolation generates correct syntax") + internal func testCallWithStringInterpolation() throws { + let call = Call("print") { + ParameterExp(name: "", value: "\"Starting \\(brand) vehicle...\"") + } + let generated = call.generateCode() + #expect(generated.contains("print(\"Starting \\(brand) vehicle...\")")) + } + + @Test("Call in function body generates correct syntax") + internal func testCallInFunctionBody() throws { + let function = Function("test") { + Call("print") { + ParameterExp(name: "", value: "\"Hello\"") + } + } + let generated = function.generateCode() + #expect(generated.contains("func test")) + #expect(generated.contains("print(\"Hello\")")) + } + + @Test("Protocol extension with Call generates correct syntax") + internal func testProtocolExtensionWithCall() throws { + let extSyntax = Extension("Vehicle") { + Function("start") { + Call("print") { + ParameterExp(name: "", value: "\"Starting \\(brand) vehicle...\"") + } + } + } + let generated = extSyntax.generateCode() + #expect(generated.contains("extension Vehicle")) + #expect(generated.contains("func start")) + #expect(generated.contains("print(\"Starting \\(brand) vehicle...\")")) + } + + @Test("Struct with Call in method generates correct syntax") + internal func testStructWithCallInMethod() throws { + let structExp = Struct("Car") { + Function("start") { + Call("print") { + ParameterExp(name: "", value: "\"Starting \\(brand) car engine...\"") + } + } + } + let generated = structExp.generateCode() + #expect(generated.contains("struct Car")) + #expect(generated.contains("func start")) + #expect(generated.contains("print(\"Starting \\(brand) car engine...\")")) + } +} diff --git a/Tests/SyntaxKitTests/Unit/CatchBasicTests.swift b/Tests/SyntaxKitTests/Unit/CatchBasicTests.swift new file mode 100644 index 0000000..dcaad97 --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/CatchBasicTests.swift @@ -0,0 +1,157 @@ +import Testing + +@testable import SyntaxKit + +@Suite internal struct CatchBasicTests { + // MARK: - Basic Catch Tests + + @Test("Basic catch without pattern generates correct syntax") + internal func testBasicCatchWithoutPattern() throws { + let doCatch = Do { + Call("someFunction") { + ParameterExp(name: "param", value: Literal.string("test")) + }.throwing() + } catch: { + Catch { + Call("print") { + ParameterExp(unlabeled: Literal.string("An error occurred")) + } + } + } + + let generated = doCatch.generateCode() + let expected = """ + do { + try someFunction(param: "test") + } catch { print(\"An error occurred\") } + """ + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Catch with enum case pattern generates correct syntax") + internal func testCatchWithEnumCasePattern() throws { + let doCatch = Do { + Call("someFunction") { + ParameterExp(name: "param", value: Literal.string("test")) + }.throwing() + } catch: { + Catch(EnumCase("connectionFailed")) { + Call("print") { + ParameterExp(unlabeled: Literal.string("Connection failed")) + } + } + } + + let generated = doCatch.generateCode() + let expected = """ + do { + try someFunction(param: "test") + } catch .connectionFailed { print(\"Connection failed\") } + """ + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Catch with enum case and associated value generates correct syntax") + internal func testCatchWithEnumCaseAndAssociatedValue() throws { + let doCatch = Do { + Call("someFunction") { + ParameterExp(name: "param", value: Literal.string("test")) + }.throwing() + } catch: { + Catch(EnumCase("invalidInput").associatedValue("fieldName", type: "String")) { + Call("print") { + ParameterExp( + unlabeled: Literal.string("Invalid input for field: \\(fieldName)") + ) + } + } + } + + let generated = doCatch.generateCode() + let expected = """ + do { + try someFunction(param: "test") + } catch .invalidInput(let fieldName) { print(\"Invalid input for field: \\(fieldName)\") } + """ + + #expect(generated.normalize() == expected.normalize()) + } + + // MARK: - Catch with Different Pattern Types + + @Test("Catch with multiple enum cases generates correct syntax") + internal func testCatchWithMultipleEnumCases() throws { + let doCatch = Do { + Call("someFunction") { + ParameterExp(name: "param", value: Literal.string("test")) + }.throwing() + } catch: { + Catch(EnumCase("timeout")) { + Call("print") { + ParameterExp(unlabeled: Literal.string("Request timed out")) + } + } + } + + let generated = doCatch.generateCode() + let expected = """ + do { + try someFunction(param: "test") + } catch .timeout { print(\"Request timed out\") } + """ + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Catch with error binding generates correct syntax") + internal func testCatchWithErrorBinding() throws { + let doCatch = Do { + Call("someFunction") { + ParameterExp(name: "param", value: Literal.string("test")) + }.throwing() + } catch: { + Catch { + Call("logError") { + ParameterExp(name: "error", value: VariableExp("error")) + } + Call("print") { + ParameterExp( + unlabeled: Literal.string("Error: \\(error)") + ) + } + } + } + + let generated = doCatch.generateCode() + let expected = + "do { try someFunction(param: \"test\") } catch { logError(error: error) print(\"Error: \\(error)\") }" + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Catch with specific error type generates correct syntax") + internal func testCatchWithSpecificErrorType() throws { + let doCatch = Do { + Call("someFunction") { + ParameterExp(name: "param", value: Literal.string("test")) + }.throwing() + } catch: { + Catch(EnumCase("CustomError")) { + Call("handleCustomError") { + ParameterExp(name: "error", value: VariableExp("error")) + } + } + } + + let generated = doCatch.generateCode() + let expected = """ + do { + try someFunction(param: "test") + } catch .CustomError { handleCustomError(error: error) } + """ + + #expect(generated.normalize() == expected.normalize()) + } +} diff --git a/Tests/SyntaxKitTests/Unit/CatchComplexTests.swift b/Tests/SyntaxKitTests/Unit/CatchComplexTests.swift new file mode 100644 index 0000000..5fbb362 --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/CatchComplexTests.swift @@ -0,0 +1,110 @@ +import Testing + +@testable import SyntaxKit + +@Suite internal struct CatchComplexTests { + // MARK: - Complex Catch Patterns + + @Test("Catch with multiple associated values generates correct syntax") + internal func testCatchWithMultipleAssociatedValues() throws { + let doCatch = Do { + Call("someFunction") { + ParameterExp(name: "param", value: Literal.string("test")) + }.throwing() + } catch: { + Catch( + EnumCase("requestFailed") + .associatedValue("statusCode", type: "Int") + .associatedValue("message", type: "String") + ) { + Call("logAPIError") { + ParameterExp(name: "statusCode", value: VariableExp("statusCode")) + ParameterExp(name: "message", value: VariableExp("message")) + } + } + } + + let generated = doCatch.generateCode() + let expected = + "do { try someFunction(param: \"test\") } catch .requestFailed(let statusCode, let message) { " + + "logAPIError(statusCode: statusCode, message: message) }" + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Catch with where clause generates correct syntax") + internal func testCatchWithWhereClause() throws { + // Note: This would require additional DSL support for where clauses + let doCatch = Do { + Call("someFunction") { + ParameterExp(name: "param", value: Literal.string("test")) + }.throwing() + } catch: { + Catch(EnumCase("connectionFailed")) { + Call("retryConnection") { + ParameterExp(name: "maxAttempts", value: Literal.integer(3)) + } + } + } + + let generated = doCatch.generateCode() + let expected = + "do { try someFunction(param: \"test\") } catch .connectionFailed { retryConnection(maxAttempts: 3) }" + + #expect(generated.normalize() == expected.normalize()) + } + + // MARK: - Catch with Complex Body + + @Test("Catch with multiple statements generates correct syntax") + internal func testCatchWithMultipleStatements() throws { + let doCatch = Do { + Call("someFunction") { + ParameterExp(name: "param", value: Literal.string("test")) + }.throwing() + } catch: { + Catch(EnumCase("invalidEmail")) { + Call("logValidationError") { + ParameterExp(name: "field", value: Literal.string("email")) + } + Variable(.let, name: "errorMessage", equals: Literal.string("Invalid email format")) + Call("showError") { + ParameterExp(name: "message", value: VariableExp("errorMessage")) + } + } + } + + let generated = doCatch.generateCode() + let expected = """ + do { try someFunction(param: "test") } catch .invalidEmail { logValidationError(field: "email") let errorMessage = "Invalid email format" showError(message: errorMessage) } + """ + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Catch with nested control flow generates correct syntax") + internal func testCatchWithNestedControlFlow() throws { + let doCatch = Do { + Call("someFunction") { + ParameterExp(name: "param", value: Literal.string("test")) + }.throwing() + } catch: { + Catch(EnumCase("connectionFailed")) { + Variable(.let, name: "retryCount", equals: Literal.integer(0)) + Call("attemptConnection") { + ParameterExp(name: "attempt", value: VariableExp("retryCount")) + } + Call("incrementRetryCount") { + ParameterExp(name: "current", value: VariableExp("retryCount")) + } + } + } + + let generated = doCatch.generateCode() + let expected = """ + do { try someFunction(param: "test") } catch .connectionFailed { let retryCount = 0 attemptConnection(attempt: retryCount) incrementRetryCount(current: retryCount) } + """ + + #expect(generated.normalize() == expected.normalize()) + } +} diff --git a/Tests/SyntaxKitTests/Unit/CatchEdgeCaseTests.swift b/Tests/SyntaxKitTests/Unit/CatchEdgeCaseTests.swift new file mode 100644 index 0000000..861f339 --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/CatchEdgeCaseTests.swift @@ -0,0 +1,113 @@ +import Testing + +@testable import SyntaxKit + +@Suite internal struct CatchEdgeCaseTests { + // MARK: - Edge Cases + + @Test("Catch with empty body generates correct syntax") + internal func testCatchWithEmptyBody() throws { + let doCatch = Do { + Call("someFunction") { + ParameterExp(name: "param", value: Literal.string("test")) + }.throwing() + } catch: { + Catch(EnumCase("ignored")) { + // Empty body + } + } + + let generated = doCatch.generateCode() + let expected = """ + do { + try someFunction(param: "test") + } catch .ignored { } + """ + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Catch with single statement generates correct syntax") + internal func testCatchWithSingleStatement() throws { + let doCatch = Do { + Call("someFunction") { + ParameterExp(name: "param", value: Literal.string("test")) + }.throwing() + } catch: { + Catch(EnumCase("connectionFailed")) { + Call("retry") { + ParameterExp(name: "maxAttempts", value: Literal.integer(1)) + } + } + } + + let generated = doCatch.generateCode() + let expected = """ + do { + try someFunction(param: "test") + } catch .connectionFailed { retry(maxAttempts: 1) } + """ + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Catch with function call and variable assignment generates correct syntax") + internal func testCatchWithFunctionCallAndVariableAssignment() throws { + let doCatch = Do { + Call("someFunction") { + ParameterExp(name: "param", value: Literal.string("test")) + }.throwing() + } catch: { + Catch(EnumCase("invalidInput")) { + Variable(.let, name: "errorMessage", equals: Literal.string("Invalid input")) + Call("logError") { + ParameterExp(name: "message", value: VariableExp("errorMessage")) + } + } + } + + let generated = doCatch.generateCode() + let expected = """ + do { + try someFunction(param: "test") + } catch .invalidInput { + let errorMessage = "Invalid input" + logError(message: errorMessage) + } + """ + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Catch with conditional logic generates correct syntax") + internal func testCatchWithConditionalLogic() throws { + let doCatch = Do { + Call("someFunction") { + ParameterExp(name: "param", value: Literal.string("test")) + }.throwing() + } catch: { + Catch(EnumCase("connectionFailed")) { + Variable(.let, name: "retryCount", equals: Literal.integer(0)) + Call("checkRetryCount") { + ParameterExp(name: "count", value: VariableExp("retryCount")) + } + Call("showError") { + ParameterExp(name: "message", value: Literal.string("Max retries exceeded")) + } + } + } + + let generated = doCatch.generateCode() + let expected = """ + do { + try someFunction(param: "test") + } catch .connectionFailed { + let retryCount = 0 + checkRetryCount(count: retryCount) + showError(message: "Max retries exceeded") + } + """ + + #expect(generated.normalize() == expected.normalize()) + } +} diff --git a/Tests/SyntaxKitTests/Unit/CatchIntegrationTests.swift b/Tests/SyntaxKitTests/Unit/CatchIntegrationTests.swift new file mode 100644 index 0000000..0fd1c4e --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/CatchIntegrationTests.swift @@ -0,0 +1,124 @@ +import Testing + +@testable import SyntaxKit + +@Suite internal struct CatchIntegrationTests { + // MARK: - Integration Tests + + @Test("Catch in do-catch statement generates correct syntax") + internal func testCatchInDoCatchStatement() throws { + let doCatch = Do { + Call("fetchData") { + ParameterExp(name: "id", value: Literal.integer(123)) + }.throwing() + } catch: { + Catch(EnumCase("connectionFailed")) { + Call("print") { + ParameterExp(unlabeled: Literal.string("Connection failed")) + } + } + Catch(EnumCase("invalidId")) { + Call("print") { + ParameterExp(unlabeled: Literal.string("Invalid ID")) + } + } + Catch { + Call("print") { + ParameterExp(unlabeled: Literal.string("Unexpected error: \\(error)")) + } + } + } + + let generated = doCatch.generateCode() + let expected = """ + do { + try fetchData(id: 123) + } catch .connectionFailed { + print("Connection failed") + } catch .invalidId { + print("Invalid ID") + } catch { + print("Unexpected error: \\(error)") + } + """ + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Catch with async operations generates correct syntax") + internal func testCatchWithAsyncOperations() throws { + let doCatch = Do { + Variable(.let, name: "data") { + Call("fetchData") { + ParameterExp(name: "id", value: Literal.integer(123)) + } + }.async() + } catch: { + Catch(EnumCase("timeout")) { + Variable(.let, name: "fallbackData") { + Call("fetchFallbackData") { + ParameterExp(name: "id", value: Literal.integer(123)) + } + }.async() + } + Catch { + Call("logError") { + ParameterExp(name: "error", value: VariableExp("error")) + } + } + } + + let generated = doCatch.generateCode() + let expected = """ + do { + async let data = fetchData(id: 123) + } catch .timeout { + async let fallbackData = fetchFallbackData(id: 123) + } catch { + logError(error: error) + } + """ + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Catch with error recovery generates correct syntax") + internal func testCatchWithErrorRecovery() throws { + let doCatch = Do { + Call("processUserData") { + ParameterExp(name: "user", value: VariableExp("user")) + }.throwing() + } catch: { + Catch( + EnumCase("missingField") + .associatedValue("fieldName", type: "String") + ) { + Call("setDefaultValue") { + ParameterExp(name: "field", value: VariableExp("fieldName")) + } + Call("processUserData") { + ParameterExp(name: "user", value: VariableExp("user")) + }.throwing() + } + Catch { + Call("handleUnexpectedError") { + ParameterExp(name: "error", value: VariableExp("error")) + } + } + } + + let generated = doCatch.generateCode() + let expected = """ + do { + try processUserData(user: user) + } catch .missingField(let fieldName) { + setDefaultValue(field: fieldName) + try processUserData(user: user) + } catch { + handleUnexpectedError(error: error) + } + """ + + #expect(generated.normalize() == expected.normalize()) + } +} diff --git a/Tests/SyntaxKitTests/Unit/ClassTests.swift b/Tests/SyntaxKitTests/Unit/ClassTests.swift new file mode 100644 index 0000000..f24de2e --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/ClassTests.swift @@ -0,0 +1,159 @@ +import Testing + +@testable import SyntaxKit + +internal struct ClassTests { + @Test internal func testClassWithInheritance() { + let carClass = Class("Car") { + Variable(.var, name: "brand", type: "String").withExplicitType() + Variable(.var, name: "numberOfWheels", type: "Int").withExplicitType() + }.inherits("Vehicle") + + let expected = """ + class Car: Vehicle { + var brand: String + var numberOfWheels: Int + } + """ + + let normalizedGenerated = carClass.generateCode().normalize() + let normalizedExpected = expected.normalize() + #expect(normalizedGenerated == normalizedExpected) + } + + @Test internal func testEmptyClass() { + let emptyClass = Class("EmptyClass") {} + + let expected = """ + class EmptyClass { + } + """ + + let normalizedGenerated = emptyClass.generateCode().normalize() + let normalizedExpected = expected.normalize() + #expect(normalizedGenerated == normalizedExpected) + } + + @Test internal func testClassWithGenerics() { + let genericClass = Class("Container") { + Variable(.var, name: "value", type: "T").withExplicitType() + }.generic("T") + + let expected = """ + class Container { + var value: T + } + """ + + let normalizedGenerated = genericClass.generateCode().normalize() + let normalizedExpected = expected.normalize() + #expect(normalizedGenerated == normalizedExpected) + } + + @Test internal func testClassWithMultipleGenerics() { + let multiGenericClass = Class("Pair") { + Variable(.var, name: "first", type: "T").withExplicitType() + Variable(.var, name: "second", type: "U").withExplicitType() + }.generic("T", "U") + + let expected = """ + class Pair { + var first: T + var second: U + } + """ + + let normalizedGenerated = multiGenericClass.generateCode().normalize() + let normalizedExpected = expected.normalize() + #expect(normalizedGenerated == normalizedExpected) + } + + @Test internal func testFinalClass() { + let finalClass = Class("FinalClass") { + Variable(.var, name: "value", type: "String").withExplicitType() + }.final() + + let expected = """ + final class FinalClass { + var value: String + } + """ + + let normalizedGenerated = finalClass.generateCode().normalize() + let normalizedExpected = expected.normalize() + #expect(normalizedGenerated == normalizedExpected) + } + + @Test internal func testClassWithMultipleInheritance() { + let classWithMultipleInheritance = Class("AdvancedVehicle") { + Variable(.var, name: "speed", type: "Int").withExplicitType() + }.inherits("Vehicle") + + let expected = """ + class AdvancedVehicle: Vehicle { + var speed: Int + } + """ + + let normalizedGenerated = classWithMultipleInheritance.generateCode().normalize() + let normalizedExpected = expected.normalize() + #expect(normalizedGenerated == normalizedExpected) + } + + @Test internal func testClassWithGenericsAndInheritance() { + let genericClassWithInheritance = Class("GenericContainer") { + Variable(.var, name: "items", type: "[T]").withExplicitType() + }.generic("T").inherits("Collection") + + let expected = """ + class GenericContainer: Collection { + var items: [T] + } + """ + + let normalizedGenerated = genericClassWithInheritance.generateCode().normalize() + let normalizedExpected = expected.normalize() + #expect(normalizedGenerated == normalizedExpected) + } + + @Test internal func testFinalClassWithInheritanceAndGenerics() { + let finalGenericClass = Class("FinalGenericClass") { + Variable(.var, name: "value", type: "T").withExplicitType() + }.generic("T").inherits("BaseClass").final() + + let expected = """ + final class FinalGenericClass: BaseClass { + var value: T + } + """ + + let normalizedGenerated = finalGenericClass.generateCode().normalize() + let normalizedExpected = expected.normalize() + #expect(normalizedGenerated == normalizedExpected) + } + + @Test internal func testClassWithFunctions() { + let classWithFunctions = Class("Calculator") { + Function("add", returns: "Int") { + Parameter(name: "a", type: "Int") + Parameter(name: "b", type: "Int") + } _: { + Return { + VariableExp("a + b") + } + } + } + + let expected = """ + class Calculator { + func add(a: Int, b: Int) -> Int { + return a + b + } + } + """ + + let normalizedGenerated = classWithFunctions.generateCode().normalize() + let normalizedExpected = expected.normalize() + #expect(normalizedGenerated == normalizedExpected) + } +} diff --git a/Tests/SyntaxKitTests/CodeStyleMigrationTests.swift b/Tests/SyntaxKitTests/Unit/CodeStyleMigrationTests.swift similarity index 87% rename from Tests/SyntaxKitTests/CodeStyleMigrationTests.swift rename to Tests/SyntaxKitTests/Unit/CodeStyleMigrationTests.swift index 08aea89..9591a6e 100644 --- a/Tests/SyntaxKitTests/CodeStyleMigrationTests.swift +++ b/Tests/SyntaxKitTests/Unit/CodeStyleMigrationTests.swift @@ -4,10 +4,10 @@ import Testing /// Tests for code style and API simplification changes introduced during Swift Testing migration /// Validates the simplified Swift APIs and formatting changes -struct CodeStyleMigrationTests { +internal struct CodeStyleMigrationTests { // MARK: - CharacterSet Simplification Tests - @Test func testCharacterSetSimplification() { + @Test internal func testCharacterSetSimplification() { // Test that .whitespacesAndNewlines works instead of CharacterSet.whitespacesAndNewlines let testString = "\n test content \n\t" @@ -20,7 +20,7 @@ struct CodeStyleMigrationTests { // MARK: - Indentation and Formatting Tests - @Test func testConsistentIndentationInMigratedCode() throws { + @Test internal func testConsistentIndentationInMigratedCode() throws { // Test that the indentation changes in the migrated code work correctly let syntax = Struct("IndentationTest") { Variable(.let, name: "property1", type: "String") @@ -41,7 +41,8 @@ struct CodeStyleMigrationTests { // Verify proper indentation is maintained #expect( generated - == "struct IndentationTest { let property1: String let property2: Int func method(param: String) { let local = \"value\" return local } }" + == "struct IndentationTest { let property1: String let property2: Int " + + "func method(param: String) { let local = \"value\" return local } }" ) } @@ -50,8 +51,8 @@ struct CodeStyleMigrationTests { @Test func testMultilineStringFormatting() { let expected = """ struct TestStruct { - let value: String - var count: Int + let value: String + var count: Int } """ diff --git a/Tests/SyntaxKitTests/Unit/ConditionalsTests.swift b/Tests/SyntaxKitTests/Unit/ConditionalsTests.swift new file mode 100644 index 0000000..f2f87f6 --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/ConditionalsTests.swift @@ -0,0 +1,50 @@ +import Testing + +@testable import SyntaxKit + +@Suite internal struct ConditionalsTests { + @Test("If / else-if / else chain generates correct syntax") + internal func testIfElseChain() throws { + // Arrange: build the DSL example using the updated APIs + let conditional = Group { + Variable(.let, name: "score", type: "Int", equals: "85") + + If { + Infix(">=") { + VariableExp("score") + Literal.integer(90) + } + } then: { + Call("print") { + ParameterExp(name: "", value: "\"Excellent!\"") + } + } else: { + If { + Infix(">=") { + VariableExp("score") + Literal.integer(80) + } + } then: { + Call("print") { + ParameterExp(name: "", value: "\"Good job!\"") + } + } + + Then { + Call("print") { + ParameterExp(name: "", value: "\"Needs improvement\"") + } + } + } + } + + // Act + let generated = conditional.generateCode().normalize() + + // Assert key structure is present + #expect(generated.contains("let score".normalize())) + #expect(generated.contains("if score >= 90".normalize())) + #expect(generated.contains("else if score >= 80".normalize())) + #expect(generated.contains("else {".normalize())) + } +} diff --git a/Tests/SyntaxKitTests/Unit/DoBasicTests.swift b/Tests/SyntaxKitTests/Unit/DoBasicTests.swift new file mode 100644 index 0000000..7ca7cf7 --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/DoBasicTests.swift @@ -0,0 +1,91 @@ +import Testing + +@testable import SyntaxKit + +@Suite internal struct DoBasicTests { + // MARK: - Basic Do Tests + + @Test("Basic do statement generates correct syntax") + internal func testBasicDoStatement() throws { + let doStatement = Do { + Call("print") { + ParameterExp(unlabeled: Literal.string("Hello, World!")) + } + } catch: { + Catch { + Call("print") { + ParameterExp(unlabeled: Literal.string("Error occurred")) + } + } + } + + let generated = doStatement.generateCode() + let expected = """ + do { + print("Hello, World!") + } catch { + print("Error occurred") + } + """ + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Do statement with multiple statements generates correct syntax") + internal func testDoStatementWithMultipleStatements() throws { + let doStatement = Do { + Variable(.let, name: "message", equals: Literal.string("Hello")) + Call("print") { + ParameterExp(unlabeled: VariableExp("message")) + } + Call("logMessage") { + ParameterExp(name: "text", value: VariableExp("message")) + } + } catch: { + Catch { + Call("print") { + ParameterExp(unlabeled: Literal.string("Error occurred")) + } + } + } + + let generated = doStatement.generateCode() + let expected = """ + do { + let message = "Hello" + print(message) + logMessage(text: message) + } catch { + print("Error occurred") + } + """ + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Do statement with throwing function generates correct syntax") + internal func testDoStatementWithThrowingFunction() throws { + let doStatement = Do { + Call("fetchData") { + ParameterExp(name: "id", value: Literal.integer(123)) + }.throwing() + } catch: { + Catch { + Call("print") { + ParameterExp(unlabeled: Literal.string("Failed to fetch data")) + } + } + } + + let generated = doStatement.generateCode() + let expected = """ + do { + try fetchData(id: 123) + } catch { + print("Failed to fetch data") + } + """ + + #expect(generated.normalize() == expected.normalize()) + } +} diff --git a/Tests/SyntaxKitTests/Unit/DoComplexTests.swift b/Tests/SyntaxKitTests/Unit/DoComplexTests.swift new file mode 100644 index 0000000..955b7e4 --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/DoComplexTests.swift @@ -0,0 +1,112 @@ +import Testing + +@testable import SyntaxKit + +@Suite internal struct DoComplexTests { + // MARK: - Do with Complex Body + + @Test("Do statement with variable declarations generates correct syntax") + internal func testDoStatementWithVariableDeclarations() throws { + let doStatement = Do { + Variable(.let, name: "user", equals: Literal.string("John")) + Variable(.let, name: "age", equals: Literal.integer(30)) + Variable(.let, name: "isActive", equals: Literal.boolean(true)) + Call("processUser") { + ParameterExp(name: "name", value: VariableExp("user")) + ParameterExp(name: "age", value: VariableExp("age")) + ParameterExp(name: "active", value: VariableExp("isActive")) + } + } catch: { + Catch { + Call("print") { + ParameterExp(unlabeled: Literal.string("Error processing user")) + } + } + } + + let generated = doStatement.generateCode() + let expected = """ + do { + let user = "John" + let age = 30 + let isActive = true + processUser(name: user, age: age, active: isActive) + } catch { + print("Error processing user") + } + """ + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Do statement with async operations generates correct syntax") + internal func testDoStatementWithAsyncOperations() throws { + let doStatement = Do { + Variable(.let, name: "data") { + Call("fetchData") { + ParameterExp(name: "id", value: Literal.integer(123)) + } + }.async() + Variable(.let, name: "posts") { + Call("fetchPosts") { + ParameterExp(name: "userId", value: Literal.integer(123)) + } + }.async() + Call("processResults") { + ParameterExp(name: "data", value: VariableExp("data")) + ParameterExp(name: "posts", value: VariableExp("posts")) + } + } catch: { + Catch { + Call("print") { + ParameterExp(unlabeled: Literal.string("Error in async operations")) + } + } + } + + let generated = doStatement.generateCode() + let expected = """ + do { + async let data = fetchData(id: 123) + async let posts = fetchPosts(userId: 123) + processResults(data: data, posts: posts) + } catch { + print("Error in async operations") + } + """ + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Do statement with control flow generates correct syntax") + internal func testDoStatementWithControlFlow() throws { + let doStatement = Do { + Variable(.let, name: "count", equals: Literal.integer(5)) + Call("checkCount") { + ParameterExp(name: "value", value: VariableExp("count")) + } + Call("print") { + ParameterExp(unlabeled: Literal.string("Count processed")) + } + } catch: { + Catch { + Call("print") { + ParameterExp(unlabeled: Literal.string("Error in control flow")) + } + } + } + + let generated = doStatement.generateCode() + let expected = """ + do { + let count = 5 + checkCount(value: count) + print("Count processed") + } catch { + print("Error in control flow") + } + """ + + #expect(generated.normalize() == expected.normalize()) + } +} diff --git a/Tests/SyntaxKitTests/Unit/DoEdgeCaseTests.swift b/Tests/SyntaxKitTests/Unit/DoEdgeCaseTests.swift new file mode 100644 index 0000000..7bc1147 --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/DoEdgeCaseTests.swift @@ -0,0 +1,156 @@ +import Testing + +@testable import SyntaxKit + +@Suite internal struct DoEdgeCaseTests { + // MARK: - Edge Cases + + @Test("Do statement with empty body generates correct syntax") + internal func testDoStatementWithEmptyBody() throws { + let doStatement = Do { + // Empty body + } catch: { + Catch { + // Empty catch + } + } + + let generated = doStatement.generateCode() + let expected = """ + do { + } catch { + } + """ + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Do statement with single expression generates correct syntax") + internal func testDoStatementWithSingleExpression() throws { + let doStatement = Do { + VariableExp("someVariable") + } catch: { + Catch { + Call("print") { + ParameterExp(unlabeled: Literal.string("Error")) + } + } + } + + let generated = doStatement.generateCode() + let expected = """ + do { + someVariable + } catch { + print("Error") + } + """ + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Do statement with function call and variable assignment generates correct syntax") + internal func testDoStatementWithFunctionCallAndVariableAssignment() throws { + let doStatement = Do { + Variable(.let, name: "result", equals: Literal.integer(42)) + Call("processResult") { + ParameterExp(name: "value", value: VariableExp("result")) + } + } catch: { + Catch { + Call("print") { + ParameterExp(unlabeled: Literal.string("Error processing result")) + } + } + } + + let generated = doStatement.generateCode() + let expected = """ + do { + let result = 42 + processResult(value: result) + } catch { + print("Error processing result") + } + """ + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Do statement with nested do statement generates correct syntax") + internal func testDoStatementWithNestedDoStatement() throws { + let doStatement = Do { + Call("outerFunction") { + ParameterExp(name: "param", value: Literal.string("outer")) + } + Do { + Call("innerFunction") { + ParameterExp(name: "param", value: Literal.string("inner")) + } + } catch: { + Catch { + Call("print") { + ParameterExp(unlabeled: Literal.string("Inner error")) + } + } + } + } catch: { + Catch { + Call("print") { + ParameterExp(unlabeled: Literal.string("Outer error")) + } + } + } + + let generated = doStatement.generateCode() + let expected = """ + do { + outerFunction(param: "outer") + do { + innerFunction(param: "inner") + } catch { + print("Inner error") + } + } catch { + print("Outer error") + } + """ + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Do statement with tuple assignment generates correct syntax") + internal func testDoStatementWithTupleAssignment() throws { + let doStatement = Do { + TupleAssignment( + ["x", "y"], + equals: Tuple { + Literal.integer(10) + Literal.integer(20) + } + ) + Call("processCoordinates") { + ParameterExp(name: "x", value: VariableExp("x")) + ParameterExp(name: "y", value: VariableExp("y")) + } + } catch: { + Catch { + Call("print") { + ParameterExp(unlabeled: Literal.string("Error processing coordinates")) + } + } + } + + let generated = doStatement.generateCode() + let expected = """ + do { + let (x, y) = (10, 20) + processCoordinates(x: x, y: y) + } catch { + print("Error processing coordinates") + } + """ + + #expect(generated.normalize() == expected.normalize()) + } +} diff --git a/Tests/SyntaxKitTests/Unit/DoIntegrationTests.swift b/Tests/SyntaxKitTests/Unit/DoIntegrationTests.swift new file mode 100644 index 0000000..d5cb69d --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/DoIntegrationTests.swift @@ -0,0 +1,88 @@ +import Testing + +@testable import SyntaxKit + +@Suite internal struct DoIntegrationTests { + // MARK: - Integration Tests + + @Test("Do statement in function generates correct syntax") + internal func testDoStatementInFunction() throws { + let function = Function("processData") { + Parameter(name: "input", type: "[Int]") + } _: { + Do { + Call("validateInput") { + ParameterExp(name: "data", value: VariableExp("input")) + }.throwing() + Call("processValidData") { + ParameterExp(name: "data", value: VariableExp("input")) + } + } catch: { + Catch { + Call("print") { + ParameterExp(unlabeled: Literal.string("Validation failed")) + } + } + } + } + + let generated = function.generateCode() + let expected = """ + func processData(input: [Int]) { + do { + try validateInput(data: input) + processValidData(data: input) + } catch { + print("Validation failed") + } + } + """ + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Do statement with async function generates correct syntax") + internal func testDoStatementWithAsyncFunction() throws { + let function = Function("fetchUserData") { + Parameter(name: "userId", type: "Int") + } _: { + Do { + Variable(.let, name: "user") { + Call("fetchUser") { + ParameterExp(name: "id", value: VariableExp("userId")) + } + }.async() + Variable(.let, name: "profile") { + Call("fetchProfile") { + ParameterExp(name: "userId", value: VariableExp("userId")) + } + }.async() + Call("combineUserData") { + ParameterExp(name: "user", value: VariableExp("user")) + ParameterExp(name: "profile", value: VariableExp("profile")) + } + } catch: { + Catch { + Call("print") { + ParameterExp(unlabeled: Literal.string("Failed to fetch user data")) + } + } + } + }.async() + + let generated = function.generateCode() + let expected = """ + func fetchUserData(userId: Int) async { + do { + async let user = fetchUser(id: userId) + async let profile = fetchProfile(userId: userId) + combineUserData(user: user, profile: profile) + } catch { + print("Failed to fetch user data") + } + } + """ + + #expect(generated.normalize() == expected.normalize()) + } +} diff --git a/Tests/SyntaxKitTests/Unit/EdgeCaseTests.swift b/Tests/SyntaxKitTests/Unit/EdgeCaseTests.swift new file mode 100644 index 0000000..c4a5720 --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/EdgeCaseTests.swift @@ -0,0 +1,35 @@ +import Testing + +@testable import SyntaxKit + +internal struct EdgeCaseTests { + // MARK: - Error Handling Tests + + @Test("Infix with wrong number of operands throws fatal error") + internal func testInfixWrongOperandCount() { + // This test documents the expected behavior + // In a real scenario, this would cause a fatal error + // We can't easily test fatalError in unit tests, but we can document it + let infix = Infix("+") { + // Only one operand - should cause fatal error + VariableExp("x") + } + + // The fatal error would occur when accessing .syntax + // This test documents the expected behavior + #expect(true) // Placeholder - fatal errors can't be easily tested + } + + @Test("Return with no expressions throws fatal error") + internal func testReturnWithNoExpressions() { + // This test documents the expected behavior + // In a real scenario, this would cause a fatal error + let returnStmt = Return { + // Empty - should cause fatal error + } + + // The fatal error would occur when accessing .syntax + // This test documents the expected behavior + #expect(true) // Placeholder - fatal errors can't be easily tested + } +} diff --git a/Tests/SyntaxKitTests/Unit/EdgeCaseTestsExpressions.swift b/Tests/SyntaxKitTests/Unit/EdgeCaseTestsExpressions.swift new file mode 100644 index 0000000..8296755 --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/EdgeCaseTestsExpressions.swift @@ -0,0 +1,129 @@ +import Testing + +@testable import SyntaxKit + +internal struct EdgeCaseTestsExpressions { + // MARK: - Switch and Case Tests + + @Test("Switch with multiple patterns generates correct syntax") + internal func testSwitchWithMultiplePatterns() throws { + let switchStmt = Switch("value") { + SwitchCase("1") { + Return { VariableExp("one") } + } + SwitchCase("2") { + Return { VariableExp("two") } + } + } + + let generated = switchStmt.generateCode() + #expect(generated.contains("switch value")) + #expect(generated.contains("case 1:")) + #expect(generated.contains("case 2:")) + } + + @Test("SwitchCase with multiple patterns generates correct syntax") + internal func testSwitchCaseWithMultiplePatterns() throws { + let switchCase = SwitchCase("1", "2", "3") { + Return { VariableExp("number") } + } + + let generated = switchCase.generateCode() + #expect(generated.contains("case 1, 2, 3:")) + } + + // MARK: - Complex Expression Tests + + @Test("Infix with complex expressions generates correct syntax") + internal func testInfixWithComplexExpressions() throws { + let infix = Infix("*") { + Parenthesized { + Infix("+") { + VariableExp("a") + VariableExp("b") + } + } + Parenthesized { + Infix("-") { + VariableExp("c") + VariableExp("d") + } + } + } + + let generated = infix.generateCode() + #expect(generated.contains("(a + b) * (c - d)")) + } + + @Test("Return with VariableExp generates correct syntax") + internal func testReturnWithVariableExp() throws { + let returnStmt = Return { + VariableExp("result") + } + + let generated = returnStmt.generateCode() + #expect(generated.contains("return result")) + } + + @Test("Return with complex expression generates correct syntax") + internal func testReturnWithComplexExpression() throws { + let returnStmt = Return { + Infix("+") { + VariableExp("a") + VariableExp("b") + } + } + + let generated = returnStmt.generateCode() + #expect(generated.contains("return a + b")) + } + + // MARK: - CodeBlock Expression Tests + + @Test("CodeBlock expr with TokenSyntax wraps in DeclReferenceExpr") + internal func testCodeBlockExprWithTokenSyntax() throws { + let variableExp = VariableExp("x") + let expr = variableExp.expr + + let generated = expr.description + #expect(generated.contains("x")) + } + + // MARK: - Code Generation Edge Cases + + @Test("CodeBlock generateCode with CodeBlockItemListSyntax") + internal func testCodeBlockGenerateCodeWithItemList() throws { + let group = Group { + Variable(.let, name: "x", type: "Int", equals: 1).withExplicitType() + Variable(.let, name: "y", type: "Int", equals: 2).withExplicitType() + } + + let generated = group.generateCode() + #expect(generated.contains("let x : Int = 1")) + #expect(generated.contains("let y : Int = 2")) + } + + @Test("CodeBlock generateCode with single declaration") + internal func testCodeBlockGenerateCodeWithSingleDeclaration() throws { + let variable = Variable(.let, name: "x", type: "Int", equals: 1).withExplicitType() + + let generated = variable.generateCode() + #expect(generated.contains("let x : Int = 1")) + } + + @Test("CodeBlock generateCode with single statement") + internal func testCodeBlockGenerateCodeWithSingleStatement() throws { + let assignment = Assignment("x", Literal.integer(42)) + + let generated = assignment.generateCode() + #expect(generated.contains("x = 42")) + } + + @Test("CodeBlock generateCode with single expression") + internal func testCodeBlockGenerateCodeWithSingleExpression() throws { + let variableExp = VariableExp("x") + + let generated = variableExp.generateCode() + #expect(generated.contains("x")) + } +} diff --git a/Tests/SyntaxKitTests/Unit/EdgeCaseTestsTypes.swift b/Tests/SyntaxKitTests/Unit/EdgeCaseTestsTypes.swift new file mode 100644 index 0000000..237aa60 --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/EdgeCaseTestsTypes.swift @@ -0,0 +1,136 @@ +import Testing + +@testable import SyntaxKit + +internal struct EdgeCaseTestsTypes { + // MARK: - Complex Type Tests + + @Test("TypeAlias with complex nested types") + internal func testTypeAliasWithComplexNestedTypes() throws { + let typeAlias = TypeAlias("ComplexType", equals: "Array>>") + + let generated = typeAlias.generateCode() + #expect( + generated.normalize().contains( + "typealias ComplexType = Array>>".normalize() + ) + ) + } + + @Test("TypeAlias with multiple generic parameters") + internal func testTypeAliasWithMultipleGenericParameters() throws { + let typeAlias = TypeAlias("Result", equals: "Result") + + let generated = typeAlias.generateCode().normalize() + #expect(generated.contains("typealias Result = Result".normalize())) + } + + // MARK: - Function Parameter Tests + + @Test("Function with unnamed parameter generates correct syntax") + internal func testFunctionWithUnnamedParameter() throws { + let function = Function("process") { + Parameter(name: "data", type: "Data", isUnnamed: true) + } _: { + Variable(.let, name: "result", type: "String", equals: "processed") + } + + let generated = function.generateCode() + #expect(generated.contains("func process(_ data: Data)")) + } + + @Test("Function with parameter default value generates correct syntax") + internal func testFunctionWithParameterDefaultValue() throws { + let function = Function("greet") { + Parameter(name: "name", type: "String", defaultValue: "\"World\"") + } _: { + Variable(.let, name: "message", type: "String", equals: "greeting") + } + + let generated = function.generateCode() + #expect(generated.contains("func greet(name : String = \"World\")")) + } + + // MARK: - Enum Case Tests + + @Test("EnumCase with string raw value generates correct syntax") + internal func testEnumCaseWithStringRawValue() throws { + let enumDecl = Enum("Status") { + EnumCase("active").equals(Literal.string("active")) + EnumCase("inactive").equals(Literal.string("inactive")) + } + + let generated = enumDecl.generateCode().normalize() + #expect(generated.contains("case active = \"active\"")) + #expect(generated.contains("case inactive = \"inactive\"")) + } + + @Test("EnumCase with double raw value generates correct syntax") + internal func testEnumCaseWithDoubleRawValue() throws { + let enumDecl = Enum("Precision") { + EnumCase("low").equals(Literal.float(0.1)) + EnumCase("high").equals(Literal.float(0.001)) + } + + let generated = enumDecl.generateCode().normalize() + #expect(generated.contains("case low = 0.1")) + #expect(generated.contains("case high = 0.001")) + } + + // MARK: - Computed Property Tests + + @Test("ComputedProperty with complex return expression") + internal func testComputedPropertyWithComplexReturn() throws { + let computedProperty = ComputedProperty("description", type: "String") { + Return { + VariableExp("name").call("appending") { + ParameterExp(name: "", value: "\" - \" + String(count)") + } + } + } + + let generated = computedProperty.generateCode().normalize() + #expect(generated.contains("var description: String")) + #expect(generated.contains("return name.appending(\" - \" + String(count))")) + } + + // MARK: - Comment Integration Tests + + @Test("ComputedProperty with comments generates correct syntax") + internal func testComputedPropertyWithComments() throws { + let computedProperty = ComputedProperty("formattedName", type: "String") { + Return { + VariableExp("name").property("uppercased") + } + }.comment { + Line(.doc, "Returns the name in uppercase format") + } + + let generated = computedProperty.generateCode() + #expect(generated.contains("/// Returns the name in uppercase format")) + #expect(generated.contains("var formattedName : String")) + } + + // MARK: - Literal Tests + + @Test("Literal with nil generates correct syntax") + internal func testLiteralWithNil() throws { + let literal = Literal.nil + let generated = literal.generateCode() + #expect(generated.contains("nil")) + } + + @Test("Literal with boolean generates correct syntax") + internal func testLiteralWithBoolean() throws { + let literal = Literal.boolean(true) + let generated = literal.generateCode() + #expect(generated.contains("true")) + } + + @Test("Literal with float generates correct syntax") + internal func testLiteralWithFloat() throws { + let literal = Literal.float(3.14159) + let generated = literal.generateCode() + #expect(generated.contains("3.14159")) + } +} diff --git a/Tests/SyntaxKitTests/Unit/ErrorHandlingTests.swift b/Tests/SyntaxKitTests/Unit/ErrorHandlingTests.swift new file mode 100644 index 0000000..e68a119 --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/ErrorHandlingTests.swift @@ -0,0 +1,129 @@ +import Testing + +@testable import SyntaxKit + +@Suite internal struct ErrorHandlingTests { + @Test("Error handling DSL generates expected Swift code") + internal func testErrorHandlingExample() throws { + let errorHandlingExample = Group { + Variable(.var, name: "vendingMachine", equals: Init("VendingMachine")) + Assignment("vendingMachine.coinsDeposited", Literal.integer(8)) + Do { + Call("buyFavoriteSnack") { + ParameterExp(name: "person", value: Literal.string("Alice")) + ParameterExp(name: "vendingMachine", value: Literal.ref("vendingMachine")) + }.throwing() + Call("print") { + ParameterExp(unlabeled: Literal.string("Success! Yum.")) + } + } catch: { + Catch(EnumCase("invalidSelection")) { + Call("print") { + ParameterExp(unlabeled: Literal.string("Invalid Selection.")) + } + } + Catch(EnumCase("outOfStock")) { + Call("print") { + ParameterExp(unlabeled: Literal.string("Out of Stock.")) + } + } + Catch( + EnumCase("insufficientFunds") + .associatedValue("coinsNeeded", type: "Int") + ) { + Call("print") { + ParameterExp( + unlabeled: Literal.string( + "Insufficient funds. Please insert an additional \\(coinsNeeded) coins." + ) + ) + } + } + Catch { + Call("print") { + ParameterExp(unlabeled: Literal.string("Unexpected error: \\(error).")) + } + } + } + } + + let generated = errorHandlingExample.generateCode() + let expected = """ + var vendingMachine = VendingMachine() + vendingMachine.coinsDeposited = 8 + do { + try buyFavoriteSnack(person: "Alice", vendingMachine: vendingMachine) + print("Success! Yum.") + } catch .invalidSelection { + print("Invalid Selection.") + } catch .outOfStock { + print("Out of Stock.") + } catch .insufficientFunds(let coinsNeeded) { + print("Insufficient funds. Please insert an additional \\(coinsNeeded) coins.") + } catch { + print("Unexpected error: \\(error).") + } + """ + + #expect( + generated.normalize() == expected.normalize() + ) + + print("Generated code:") + print(generated) + } + + @Test("Function with throws clause and unlabeled parameter generates correct syntax") + internal func testFunctionWithThrowsClauseAndUnlabeledParameter() throws { + let function = Function("summarize") { + Parameter(unlabeled: "ratings", type: "[Int]") + } _: { + Guard { + VariableExp("ratings").property("isEmpty").not() + } else: { + Throw(EnumCase("noRatings")) + } + }.throws("StatisticsError") + + let generated = function.generateCode() + let expected = """ + func summarize(_ ratings: [Int]) throws(StatisticsError) { + guard !ratings.isEmpty else { throw .noRatings } + } + """ + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Async functionality generates correct syntax") + internal func testAsyncFunctionality() throws { + let asyncCode = Group { + Variable(.let, name: "data") { + Call("fetchUserData") { + ParameterExp(name: "id", value: Literal.integer(1)) + } + }.async() + Variable(.let, name: "posts") { + Call("fetchUserPosts") { + ParameterExp(name: "id", value: Literal.integer(1)) + } + }.async() + TupleAssignment( + ["fetchedData", "fetchedPosts"], + equals: Tuple { + VariableExp("data") + VariableExp("posts") + } + ).async().throwing() + } + + let generated = asyncCode.generateCode() + let expected = """ + async let data = fetchUserData(id: 1) + async let posts = fetchUserPosts(id: 1) + let (fetchedData, fetchedPosts) = try await (data, posts) + """ + + #expect(generated.normalize() == expected.normalize()) + } +} diff --git a/Tests/SyntaxKitTests/Unit/ExtensionTests.swift b/Tests/SyntaxKitTests/Unit/ExtensionTests.swift new file mode 100644 index 0000000..f2e0cb0 --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/ExtensionTests.swift @@ -0,0 +1,182 @@ +// +// ExtensionTests.swift +// SyntaxKitTests +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the "Software"), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Testing + +@testable import SyntaxKit + +internal struct ExtensionTests { + // MARK: - Basic Extension Tests + + @Test internal func testBasicExtension() { + let extensionDecl = Extension("String") { + Variable(.let, name: "test", type: "Int", equals: Literal.integer(42)).withExplicitType() + } + + let generated = extensionDecl.generateCode().normalize() + + #expect(generated.contains("extension String")) + #expect(generated.contains("let test: Int = 42")) + } + + @Test internal func testExtensionWithMultipleMembers() { + let extensionDecl = Extension("Array") { + Variable(.let, name: "isEmpty", type: "Bool", equals: Literal.boolean(true)) + .withExplicitType() + Variable(.let, name: "count", type: "Int", equals: Literal.integer(0)).withExplicitType() + } + + let generated = extensionDecl.generateCode().normalize() + + #expect(generated.contains("extension Array")) + #expect(generated.contains("let isEmpty: Bool = true")) + #expect(generated.contains("let count: Int = 0")) + } + + // MARK: - Extension with Inheritance Tests + + @Test internal func testExtensionWithSingleInheritance() { + let extensionDecl = Extension("MyEnum") { + TypeAlias("MappedType", equals: "String") + }.inherits("MappedValueRepresentable") + + let generated = extensionDecl.generateCode().normalize() + + #expect(generated.contains("extension MyEnum: MappedValueRepresentable")) + #expect(generated.contains("typealias MappedType = String")) + } + + @Test internal func testExtensionWithMultipleInheritance() { + let extensionDecl = Extension("MyEnum") { + TypeAlias("MappedType", equals: "String") + }.inherits("MappedValueRepresentable", "MappedValueRepresented") + + let generated = extensionDecl.generateCode().normalize() + + #expect( + generated.contains("extension MyEnum: MappedValueRepresentable, MappedValueRepresented")) + #expect(generated.contains("typealias MappedType = String")) + } + + @Test internal func testExtensionWithoutInheritance() { + let extensionDecl = Extension("MyType") { + Variable(.let, name: "constant", type: "String", equals: Literal.ref("value")) + .withExplicitType() + } + + let generated = extensionDecl.generateCode().normalize() + + #expect(generated.contains("extension MyType")) + #expect(!generated.contains("extension MyType:")) + #expect(generated.contains("let constant: String = value")) + } + + // MARK: - Extension with Complex Members Tests + + @Test internal func testExtensionWithStaticVariables() { + let array: [String] = ["a", "b", "c"] + let dict: [Int: String] = [1: "one", 2: "two"] + + let extensionDecl = Extension("TestEnum") { + TypeAlias("MappedType", equals: "String") + Variable(.let, name: "mappedValues", equals: array).withExplicitType().static() + Variable(.let, name: "lookup", equals: dict).withExplicitType().static() + }.inherits("MappedValueRepresentable", "MappedValueRepresented") + + let generated = extensionDecl.generateCode().normalize() + + #expect( + generated.contains("extension TestEnum: MappedValueRepresentable, MappedValueRepresented")) + #expect(generated.contains("typealias MappedType = String")) + #expect(generated.contains("static let mappedValues: [String] = [\"a\", \"b\", \"c\"]")) + #expect(generated.contains("static let lookup: [Int: String]")) + #expect(generated.contains("1: \"one\"")) + #expect(generated.contains("2: \"two\"")) + } + + @Test internal func testExtensionWithFunctions() { + let extensionDecl = Extension("String") { + Function("uppercasedFirst", returns: "String") { + Return { + VariableExp("self.prefix(1).uppercased() + self.dropFirst()") + } + } + } + + let generated = extensionDecl.generateCode().normalize() + + #expect(generated.contains("extension String")) + #expect(generated.contains("func uppercasedFirst() -> String")) + #expect(generated.contains("return self.prefix(1).uppercased() + self.dropFirst()")) + } + + // MARK: - Edge Cases + + @Test internal func testExtensionWithEmptyBody() { + let extensionDecl = Extension("EmptyType") { + // Empty body + } + + let generated = extensionDecl.generateCode().normalize() + + #expect(generated.contains("extension EmptyType")) + #expect(generated.contains("{")) + #expect(generated.contains("}")) + } + + @Test internal func testExtensionWithSpecialCharactersInName() { + let extensionDecl = Extension("MyType") { + Variable(.let, name: "generic", type: "T", equals: Literal.nil).withExplicitType() + } + + let generated = extensionDecl.generateCode().normalize() + + #expect(generated.contains("extension MyType")) + #expect(generated.contains("let generic: T = nil")) + } + + @Test internal func testInheritsMethodReturnsNewInstance() { + let original = Extension("Test") { + Variable(.let, name: "value", type: "Int", equals: Literal.integer(42)).withExplicitType() + } + + let withInheritance = original.inherits("Protocol1", "Protocol2") + + // Should be different instances + #expect(original.generateCode() != withInheritance.generateCode()) + + // Original should not have inheritance + let originalGenerated = original.generateCode().normalize() + #expect(!originalGenerated.contains("extension Test:")) + + // With inheritance should have inheritance + let inheritedGenerated = withInheritance.generateCode().normalize() + #expect(inheritedGenerated.contains(": Protocol1, Protocol2")) + } +} diff --git a/Tests/SyntaxKitTests/Unit/ForLoopTests.swift b/Tests/SyntaxKitTests/Unit/ForLoopTests.swift new file mode 100644 index 0000000..f5fd0b2 --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/ForLoopTests.swift @@ -0,0 +1,45 @@ +import Testing + +@testable import SyntaxKit + +@Suite +final class ForLoopTests { + @Test + func testSimpleForInLoop() { + let forLoop = For( + VariableExp("item"), + in: VariableExp("items"), + then: { + Call("print") { + ParameterExp(name: "", value: "item") + } + } + ) + let generated = forLoop.syntax.description + let expected = "for item in items {\n print(item)\n}" + #expect(generated.contains("for item in items")) + #expect(generated.contains("print(item)")) + } + + @Test + func testForInWithWhereClause() { + let forLoop = For( + VariableExp("number"), + in: VariableExp("numbers"), + where: { + Infix("%") { + VariableExp("number") + Literal.integer(2) + } + }, + then: { + Call("print") { + ParameterExp(name: "", value: "number") + } + } + ) + let generated = forLoop.syntax.description + #expect(generated.contains("for number in numbers where number % 2")) + #expect(generated.contains("print(number)")) + } +} diff --git a/Tests/SyntaxKitTests/FrameworkCompatibilityTests.swift b/Tests/SyntaxKitTests/Unit/FrameworkCompatibilityTests.swift similarity index 85% rename from Tests/SyntaxKitTests/FrameworkCompatibilityTests.swift rename to Tests/SyntaxKitTests/Unit/FrameworkCompatibilityTests.swift index d16bdc0..fe34cd5 100644 --- a/Tests/SyntaxKitTests/FrameworkCompatibilityTests.swift +++ b/Tests/SyntaxKitTests/Unit/FrameworkCompatibilityTests.swift @@ -4,17 +4,17 @@ import Testing /// Tests to ensure compatibility and feature parity between XCTest and Swift Testing /// Validates that the migration maintains all testing capabilities -struct FrameworkCompatibilityTests { +internal struct FrameworkCompatibilityTests { // MARK: - Test Organization Migration Tests - @Test func testStructBasedOrganization() { + @Test internal func testStructBasedOrganization() { // Test that struct-based test organization works // This replaces: final class TestClass: XCTestCase let testExecuted = true #expect(testExecuted) } - @Test func testMethodAnnotationMigration() throws { + @Test internal func testMethodAnnotationMigration() throws { // Test that @Test annotation works with throws // This replaces: func testMethod() throws let syntax = Enum("TestEnum") { @@ -29,7 +29,7 @@ struct FrameworkCompatibilityTests { // MARK: - Error Handling Compatibility Tests - @Test func testThrowingTestCompatibility() throws { + @Test internal func testThrowingTestCompatibility() throws { // Ensure throws declaration works properly with @Test let function = Function("throwingFunction", returns: "String") { Parameter(name: "input", type: "String") @@ -45,7 +45,7 @@ struct FrameworkCompatibilityTests { // MARK: - Complex DSL Compatibility Tests - @Test func testFullBlackjackCompatibility() throws { + @Test internal func testFullBlackjackCompatibility() throws { // Test complex DSL patterns work with new framework let syntax = Struct("BlackjackCard") { Enum("Suit") { @@ -80,7 +80,7 @@ struct FrameworkCompatibilityTests { // MARK: - Function Generation Compatibility Tests - @Test func testFunctionGenerationCompatibility() throws { + @Test internal func testFunctionGenerationCompatibility() throws { let function = Function("calculateValue", returns: "Int") { Parameter(name: "multiplier", type: "Int") Parameter(name: "base", type: "Int", defaultValue: "10") @@ -101,7 +101,7 @@ struct FrameworkCompatibilityTests { // MARK: - Comment Injection Compatibility Tests - @Test func testCommentInjectionCompatibility() { + @Test internal func testCommentInjectionCompatibility() { let syntax = Struct("DocumentedStruct") { Variable(.let, name: "value", type: "String") .comment { @@ -121,11 +121,11 @@ struct FrameworkCompatibilityTests { // MARK: - Migration Regression Tests - @Test func testNoRegressionInCodeGeneration() { + @Test internal func testNoRegressionInCodeGeneration() { // Ensure migration doesn't introduce regressions let simpleStruct = Struct("Point") { - Variable(.var, name: "x", type: "Double", equals: "0.0") - Variable(.var, name: "y", type: "Double", equals: "0.0") + Variable(.var, name: "x", type: "Double", equals: 0.0).withExplicitType() + Variable(.var, name: "y", type: "Double", equals: 0.0).withExplicitType() } let generated = simpleStruct.generateCode().normalize() @@ -135,7 +135,7 @@ struct FrameworkCompatibilityTests { #expect(generated.contains("var y: Double = 0.0".normalize())) } - @Test func testLiteralGeneration() { + @Test internal func testLiteralGeneration() { let group = Group { Return { Literal.integer(100) diff --git a/Tests/SyntaxKitTests/FunctionTests.swift b/Tests/SyntaxKitTests/Unit/FunctionTests.swift similarity index 81% rename from Tests/SyntaxKitTests/FunctionTests.swift rename to Tests/SyntaxKitTests/Unit/FunctionTests.swift index 797002e..5ae2c2f 100644 --- a/Tests/SyntaxKitTests/FunctionTests.swift +++ b/Tests/SyntaxKitTests/Unit/FunctionTests.swift @@ -2,8 +2,8 @@ import Testing @testable import SyntaxKit -struct FunctionTests { - @Test func testBasicFunction() throws { +internal struct FunctionTests { + @Test internal func testBasicFunction() throws { let function = Function("calculateSum", returns: "Int") { Parameter(name: "a", type: "Int") Parameter(name: "b", type: "Int") @@ -15,7 +15,7 @@ struct FunctionTests { let expected = """ func calculateSum(a: Int, b: Int) -> Int { - return a + b + return a + b } """ @@ -27,7 +27,7 @@ struct FunctionTests { #expect(normalizedGenerated == normalizedExpected) } - @Test func testStaticFunction() throws { + @Test internal func testStaticFunction() throws { let function = Function( "createInstance", returns: "MyType", { @@ -36,14 +36,14 @@ struct FunctionTests { ) { Return { Init("MyType") { - Parameter(name: "value", type: "String") + ParameterExp(name: "value", value: Literal.ref("value")) } } }.static() let expected = """ static func createInstance(value: String) -> MyType { - return MyType(value: value) + return MyType(value: value) } """ @@ -55,19 +55,19 @@ struct FunctionTests { #expect(normalizedGenerated == normalizedExpected) } - @Test func testMutatingFunction() throws { + @Test internal func testMutatingFunction() throws { let function = Function( "updateValue", { Parameter(name: "newValue", type: "String") } ) { - Assignment("value", "newValue") + Assignment("value", Literal.ref("newValue")) }.mutating() let expected = """ mutating func updateValue(newValue: String) { - value = newValue + value = newValue } """ diff --git a/Tests/SyntaxKitTests/LiteralTests.swift b/Tests/SyntaxKitTests/Unit/LiteralTests.swift similarity index 76% rename from Tests/SyntaxKitTests/LiteralTests.swift rename to Tests/SyntaxKitTests/Unit/LiteralTests.swift index 255675a..28fb10f 100644 --- a/Tests/SyntaxKitTests/LiteralTests.swift +++ b/Tests/SyntaxKitTests/Unit/LiteralTests.swift @@ -2,8 +2,8 @@ import Testing @testable import SyntaxKit -struct LiteralTests { - @Test func testGroupWithLiterals() { +internal struct LiteralTests { + @Test internal func testGroupWithLiterals() { let group = Group { Return { Literal.integer(1) diff --git a/Tests/SyntaxKitTests/Unit/LiteralValueTests.swift b/Tests/SyntaxKitTests/Unit/LiteralValueTests.swift new file mode 100644 index 0000000..f28ab60 --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/LiteralValueTests.swift @@ -0,0 +1,216 @@ +// +// LiteralValueTests.swift +// SyntaxKitTests +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the "Software"), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Testing + +@testable import SyntaxKit + +internal struct LiteralValueTests { + // MARK: - Array LiteralValue Tests + + @Test internal func testArrayStringTypeName() { + let array: [String] = ["a", "b", "c"] + #expect(array.typeName == "[String]") + } + + @Test internal func testArrayStringLiteralString() { + let array: [String] = ["a", "b", "c"] + #expect(array.literalString == "[\"a\", \"b\", \"c\"]") + } + + @Test internal func testEmptyArrayStringLiteralString() { + let array: [String] = [] + #expect(array.literalString == "[]") + } + + @Test internal func testArrayStringWithSpecialCharacters() { + let array: [String] = ["hello world", "test\"quote", "line\nbreak"] + #expect(array.literalString == "[\"hello world\", \"test\\\"quote\", \"line\\nbreak\"]") + } + + // MARK: - Dictionary LiteralValue Tests + + @Test internal func testDictionaryIntStringTypeName() { + let dict: [Int: String] = [1: "a", 2: "b"] + #expect(dict.typeName == "[Int: String]") + } + + @Test internal func testDictionaryIntStringLiteralString() { + let dict: [Int: String] = [1: "a", 2: "b", 3: "c"] + let literal = dict.literalString + + // Dictionary order is not guaranteed, so check that all elements are present + #expect(literal.contains("1: \"a\"")) + #expect(literal.contains("2: \"b\"")) + #expect(literal.contains("3: \"c\"")) + #expect(literal.hasPrefix("[")) + #expect(literal.hasSuffix("]")) + } + + @Test internal func testEmptyDictionaryLiteralString() { + let dict: [Int: String] = [:] + #expect(dict.literalString == "[]") + } + + @Test internal func testDictionaryWithSpecialCharacters() { + let dict: [Int: String] = [1: "hello world", 2: "test\"quote"] + let literal = dict.literalString + + // Dictionary order is not guaranteed, so check that all elements are present + #expect(literal.contains("1: \"hello world\"")) + #expect(literal.contains("2: \"test\\\"quote\"")) + #expect(literal.hasPrefix("[")) + #expect(literal.hasSuffix("]")) + } + + // MARK: - Dictionary Ordering Tests + + @Test internal func testDictionaryOrderingIsConsistent() { + let dict1: [Int: String] = [2: "b", 1: "a", 3: "c"] + let dict2: [Int: String] = [1: "a", 2: "b", 3: "c"] + + // Both should produce the same literal string regardless of insertion order + let literal1 = dict1.literalString + let literal2 = dict2.literalString + + // The exact order depends on the dictionary's internal ordering, + // but both should be valid Swift dictionary literals + #expect(literal1.contains("1: \"a\"")) + #expect(literal1.contains("2: \"b\"")) + #expect(literal1.contains("3: \"c\"")) + #expect(literal2.contains("1: \"a\"")) + #expect(literal2.contains("2: \"b\"")) + #expect(literal2.contains("3: \"c\"")) + } + + // MARK: - TupleLiteral Tests + + @Test internal func testTupleLiteralTypeName() { + let tuple1 = TupleLiteral([.int(1), .int(2)]) + #expect(tuple1.typeName == "(Int, Int)") + + let tuple2 = TupleLiteral([.string("hello"), .int(42), .boolean(true)]) + #expect(tuple2.typeName == "(String, Int, Bool)") + + let tuple3 = TupleLiteral([.int(1), nil, .string("test")]) + #expect(tuple3.typeName == "(Int, Any, String)") + + let tuple4 = TupleLiteral([nil, nil]) + #expect(tuple4.typeName == "(Any, Any)") + } + + @Test internal func testTupleLiteralString() { + let tuple1 = TupleLiteral([.int(1), .int(2)]) + #expect(tuple1.literalString == "(1, 2)") + + let tuple2 = TupleLiteral([.string("hello"), .int(42), .boolean(true)]) + #expect(tuple2.literalString == "(\"hello\", 42, true)") + + let tuple3 = TupleLiteral([.int(1), nil, .string("test")]) + #expect(tuple3.literalString == "(1, _, \"test\")") + + let tuple4 = TupleLiteral([nil, nil]) + #expect(tuple4.literalString == "(_, _)") + + let tuple5 = TupleLiteral([.float(3.14), .nil]) + #expect(tuple5.literalString == "(3.14, nil)") + } + + @Test internal func testTupleLiteralWithNestedTuples() { + let nestedTuple = TupleLiteral([.int(1), .tuple([.string("nested"), .int(2)])]) + #expect(nestedTuple.typeName == "(Int, Any)") + #expect(nestedTuple.literalString == "(1, (\"nested\", 2))") + } + + @Test internal func testTupleLiteralWithRef() { + let tuple = TupleLiteral([.ref("variable"), .int(42)]) + #expect(tuple.typeName == "(Any, Int)") + #expect(tuple.literalString == "(variable, 42)") + } + + @Test internal func testEmptyTupleLiteral() { + let tuple = TupleLiteral([]) + #expect(tuple.typeName == "()") + #expect(tuple.literalString == "()") + } + + // MARK: - TupleLiteral Code Generation Tests + + @Test internal func testVariableWithTupleLiteral() { + let tuple = TupleLiteral([.int(1), .int(2)]) + let variable = Variable(.let, name: "point", equals: tuple) + + let generated = variable.syntax.description + #expect(generated.contains("let point = (1, 2)")) + #expect(generated.contains("point")) + } + + @Test internal func testVariableWithTupleLiteralWithExplicitType() { + let tuple = TupleLiteral([.int(1), .int(2)]) + let variable = Variable(.let, name: "point", equals: tuple).withExplicitType() + + let generated = variable.syntax.description + #expect(generated.contains("let point : (Int, Int) = (1, 2)")) + #expect(generated.contains("point")) + } + + @Test internal func testVariableWithComplexTupleLiteral() { + let tuple = TupleLiteral([.string("hello"), .int(42), .boolean(true)]) + let variable = Variable(.let, name: "data", equals: tuple).withExplicitType() + + let generated = variable.syntax.description + #expect(generated.contains("let data : (String, Int, Bool) = (\"hello\", 42, true)")) + #expect(generated.contains("data")) + } + + @Test internal func testVariableWithTupleLiteralWithWildcards() { + let tuple = TupleLiteral([.int(1), nil, .string("test")]) + let variable = Variable(.let, name: "partial", equals: tuple).withExplicitType() + + let generated = variable.syntax.description + #expect(generated.contains("let partial : (Int, Any, String) = (1, _, \"test\")")) + #expect(generated.contains("partial")) + } + + @Test internal func testLiteralAsTupleLiteralConversion() { + let literal = Literal.tuple([.int(1), .int(2)]) + let tupleLiteral = literal.asTupleLiteral + + #expect(tupleLiteral != nil) + #expect(tupleLiteral?.typeName == "(Int, Int)") + #expect(tupleLiteral?.literalString == "(1, 2)") + } + + @Test internal func testNonTupleLiteralAsTupleLiteralConversion() { + let literal = Literal.int(42) + let tupleLiteral = literal.asTupleLiteral + + #expect(tupleLiteral == nil) + } +} diff --git a/Tests/SyntaxKitTests/Unit/MainApplicationTests.swift b/Tests/SyntaxKitTests/Unit/MainApplicationTests.swift new file mode 100644 index 0000000..133d548 --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/MainApplicationTests.swift @@ -0,0 +1,198 @@ +import Foundation +import Testing + +@testable import SyntaxKit + +internal struct MainApplicationTests { + // MARK: - Main Application Error Handling Tests + + @Test("Main application handles valid input") + internal func testMainApplicationValidInput() throws { + // This test simulates the main application behavior + // We can't easily test the main function directly, but we can test its components + + let code = "let x = 42" + let response = try SyntaxParser.parse(code: code, options: ["fold"]) + + // Test JSON serialization (part of main application logic) + let jsonData = try JSONSerialization.data(withJSONObject: ["syntax": response.syntaxJSON]) + let jsonString = String(data: jsonData, encoding: .utf8) + + #expect(jsonString != nil) + #expect(jsonString!.contains("syntax")) + #expect(jsonString!.contains("let")) + } + + @Test("Main application handles empty input") + internal func testMainApplicationEmptyInput() throws { + let code = "" + let response = try SyntaxParser.parse(code: code, options: []) + + // Test JSON serialization with empty result + let jsonData = try JSONSerialization.data(withJSONObject: ["syntax": response.syntaxJSON]) + let jsonString = String(data: jsonData, encoding: .utf8) + + #expect(jsonString != nil) + #expect(jsonString!.contains("syntax")) + } + + @Test("Main application handles parsing errors") + internal func testMainApplicationHandlesParsingErrors() throws { + let invalidCode = "struct {" + + // The parser doesn't throw errors for invalid syntax, it returns a result + let response = try SyntaxParser.parse(code: invalidCode, options: []) + + // Test error JSON serialization (part of main application logic) + let jsonData = try JSONSerialization.data(withJSONObject: ["error": "Invalid syntax"]) + let jsonString = String(data: jsonData, encoding: .utf8) + + #expect(jsonString != nil) + #expect(jsonString!.contains("error")) + #expect(jsonString!.contains("Invalid syntax")) + } + + @Test("Main application handles JSON serialization errors") + internal func testMainApplicationHandlesJSONSerializationErrors() throws { + // Test with a response that might cause JSON serialization issues + let code = "let x = 42" + let response = try SyntaxParser.parse(code: code, options: []) + + // This should work fine, but we're testing the JSON serialization path + let jsonData = try JSONSerialization.data(withJSONObject: ["syntax": response.syntaxJSON]) + let jsonString = String(data: jsonData, encoding: .utf8) + + #expect(jsonString != nil) + } + + // MARK: - File I/O Simulation Tests + + @Test("Main application handles large input") + internal func testMainApplicationHandlesLargeInput() throws { + // Generate a large Swift file to test performance + var largeCode = "" + for index in 1...50 { + largeCode += """ + struct Struct\(index) { + let property\(index): String + func method\(index)() -> String { + return "value\(index)" + } + } + + """ + } + + let response = try SyntaxParser.parse(code: largeCode, options: ["fold"]) + let jsonData = try JSONSerialization.data(withJSONObject: ["syntax": response.syntaxJSON]) + let jsonString = String(data: jsonData, encoding: .utf8) + + #expect(jsonString != nil) + #expect(jsonString!.contains("Struct1")) + #expect(jsonString!.contains("Struct50")) + } + + @Test("Main application handles unicode input") + internal func testMainApplicationHandlesUnicodeInput() throws { + let unicodeCode = """ + let emoji = "🚀" + let unicode = "café" + let chinese = "你好" + """ + + let response = try SyntaxParser.parse(code: unicodeCode, options: []) + let jsonData = try JSONSerialization.data(withJSONObject: ["syntax": response.syntaxJSON]) + let jsonString = String(data: jsonData, encoding: .utf8) + + #expect(jsonString != nil) + #expect(jsonString!.contains("emoji")) + #expect(jsonString!.contains("unicode")) + #expect(jsonString!.contains("chinese")) + } + + // MARK: - Error Response Format Tests + + @Test("Main application error response format") + internal func testMainApplicationErrorResponseFormat() throws { + // Test the error response format that the main application would generate + let testError = NSError( + domain: "TestDomain", + code: 1, + userInfo: [NSLocalizedDescriptionKey: "Test error message"] + ) + + let errorResponse = ["error": testError.localizedDescription] + let jsonData = try JSONSerialization.data(withJSONObject: errorResponse) + let jsonString = String(data: jsonData, encoding: .utf8) + + #expect(jsonString != nil) + #expect(jsonString!.contains("error")) + #expect(jsonString!.contains("Test error message")) + } + + @Test("Main application handles encoding errors") + internal func testMainApplicationHandlesEncodingErrors() throws { + let code = "let x = 42" + let response = try SyntaxParser.parse(code: code, options: []) + + // Test UTF-8 encoding (part of main application logic) + let jsonData = try JSONSerialization.data(withJSONObject: ["syntax": response.syntaxJSON]) + let jsonString = String(data: jsonData, encoding: .utf8) + + #expect(jsonString != nil) + #expect(jsonString!.contains("syntax")) + } + + // MARK: - Integration Tests + + @Test("Main application integration with complex Swift code") + internal func testMainApplicationIntegrationWithComplexSwiftCode() throws { + let code = """ + @objc class MyClass: NSObject { + @Published var property: String = "default" + + func method(@escaping completion: @escaping (String) -> Void) { + completion("result") + } + + enum NestedEnum: Int { + case first = 1 + case second = 2 + } + } + """ + + let response = try SyntaxParser.parse(code: code, options: ["fold"]) + + // Test JSON serialization (part of main application logic) + let jsonData = try JSONSerialization.data(withJSONObject: ["syntax": response.syntaxJSON]) + let jsonString = String(data: jsonData, encoding: .utf8) + + #expect(jsonString != nil) + #expect(jsonString!.contains("syntax")) + #expect(jsonString!.contains("class")) + #expect(jsonString!.contains("MyClass")) + } + + @Test("Main application handles different parser options") + internal func testMainApplicationHandlesDifferentParserOptions() throws { + let code = "let x = 42" + + let response1 = try SyntaxParser.parse(code: code, options: []) + let response2 = try SyntaxParser.parse(code: code, options: ["fold"]) + + // Test JSON serialization for both responses + let jsonData1 = try JSONSerialization.data(withJSONObject: ["syntax": response1.syntaxJSON]) + let jsonString1 = String(data: jsonData1, encoding: .utf8) + + let jsonData2 = try JSONSerialization.data(withJSONObject: ["syntax": response2.syntaxJSON]) + let jsonString2 = String(data: jsonData2, encoding: .utf8) + + #expect(jsonString1 != nil) + #expect(jsonString2 != nil) + #expect(jsonString1!.contains("syntax")) + #expect(jsonString2!.contains("syntax")) + #expect(jsonString1!.contains("let")) + #expect(jsonString2!.contains("let")) + } +} diff --git a/Tests/SyntaxKitTests/MigrationTests.swift b/Tests/SyntaxKitTests/Unit/MigrationTests.swift similarity index 80% rename from Tests/SyntaxKitTests/MigrationTests.swift rename to Tests/SyntaxKitTests/Unit/MigrationTests.swift index ddcc5a7..ed00bc1 100644 --- a/Tests/SyntaxKitTests/MigrationTests.swift +++ b/Tests/SyntaxKitTests/Unit/MigrationTests.swift @@ -4,16 +4,16 @@ import Testing /// Tests specifically for verifying the Swift Testing framework migration /// These tests ensure that the migration from XCTest to Swift Testing works correctly -struct MigrationTests { +internal struct MigrationTests { // MARK: - Basic Test Structure Migration Tests - @Test func testStructBasedTestExecution() { + @Test internal func testStructBasedTestExecution() { // Test that struct-based tests execute properly let result = true #expect(result == true) } - @Test func testThrowingTestMethod() throws { + @Test internal func testThrowingTestMethod() throws { // Test that @Test works with throws declaration let syntax = Struct("TestStruct") { Variable(.let, name: "value", type: "String") @@ -25,21 +25,21 @@ struct MigrationTests { // MARK: - Assertion Migration Tests - @Test func testExpectEqualityAssertion() { + @Test internal func testExpectEqualityAssertion() { // Test #expect() replacement for XCTAssertEqual let actual = "test" let expected = "test" #expect(actual == expected) } - @Test func testExpectBooleanAssertion() { + @Test internal func testExpectBooleanAssertion() { // Test #expect() replacement for XCTAssertTrue/XCTAssertFalse let condition = true #expect(condition) #expect(!false) } - @Test func testExpectEmptyStringAssertion() { + @Test internal func testExpectEmptyStringAssertion() { // Test #expect() replacement for XCTAssertFalse(string.isEmpty) let generated = "non-empty string" #expect(!generated.isEmpty) @@ -47,7 +47,7 @@ struct MigrationTests { // MARK: - Code Generation Testing with New Framework - @Test func testBasicCodeGenerationWithNewFramework() throws { + @Test internal func testBasicCodeGenerationWithNewFramework() throws { let blackjackCard = Struct("BlackjackCard") { Enum("Suit") { EnumCase("spades").equals("♠") @@ -59,12 +59,12 @@ struct MigrationTests { let expected = """ struct BlackjackCard { - enum Suit: Character { - case spades = "♠" - case hearts = "♡" - case diamonds = "♢" - case clubs = "♣" - } + enum Suit: Character { + case spades = "♠" + case hearts = "♡" + case diamonds = "♢" + case clubs = "♣" + } } """ @@ -78,7 +78,7 @@ struct MigrationTests { // MARK: - String Options Migration Tests - @Test func testStringCompareOptionsSimplification() { + @Test internal func testStringCompareOptionsSimplification() { // Test that .regularExpression works instead of String.CompareOptions.regularExpression let testString = "public func test() { }" let result = testString.replacingOccurrences( @@ -87,7 +87,7 @@ struct MigrationTests { #expect(result == expected) } - @Test func testCharacterSetSimplification() { + @Test internal func testCharacterSetSimplification() { // Test that .whitespacesAndNewlines works instead of CharacterSet.whitespacesAndNewlines let testString = " test \n" let result = testString.trimmingCharacters(in: .whitespacesAndNewlines) @@ -97,7 +97,7 @@ struct MigrationTests { // MARK: - Complex Code Generation Tests - @Test func testComplexStructGeneration() throws { + @Test internal func testComplexStructGeneration() throws { let syntax = Struct("TestCard") { Variable(.let, name: "rank", type: "String") Variable(.let, name: "suit", type: "String") @@ -118,7 +118,7 @@ struct MigrationTests { #expect(generated.contains("func description() -> String".normalize())) } - @Test func testMigrationBackwardCompatibility() { + @Test internal func testMigrationBackwardCompatibility() { // Ensure that the migrated tests maintain the same functionality let group = Group { Return { diff --git a/Tests/SyntaxKitTests/Unit/OptionsMacroIntegrationTests.swift b/Tests/SyntaxKitTests/Unit/OptionsMacroIntegrationTests.swift new file mode 100644 index 0000000..3319c29 --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/OptionsMacroIntegrationTests.swift @@ -0,0 +1,202 @@ +// +// OptionsMacroIntegrationTests.swift +// SyntaxKitTests +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the "Software"), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Testing + +@testable import SyntaxKit + +internal struct OptionsMacroIntegrationTests { + // MARK: - Enum with Raw Values (Dictionary) Tests + + @Test internal func testEnumWithRawValuesCreatesDictionary() { + // Simulate the Options macro expansion for an enum with raw values + let keyValues: [Int: String] = [2: "a", 5: "b", 6: "c", 12: "d"] + + let extensionDecl = Extension("MockDictionaryEnum") { + TypeAlias("MappedType", equals: "String") + Variable(.let, name: "mappedValues", equals: keyValues).withExplicitType().static() + }.inherits("MappedValueRepresentable", "MappedValueRepresented") + + let generated = extensionDecl.generateCode().normalize() + + #expect( + generated.contains( + "extension MockDictionaryEnum: MappedValueRepresentable, MappedValueRepresented" + ) + ) + #expect(generated.contains("typealias MappedType = String")) + #expect(generated.contains("static let mappedValues: [Int: String]")) + #expect(generated.contains("2: \"a\"")) + #expect(generated.contains("5: \"b\"")) + #expect(generated.contains("6: \"c\"")) + #expect(generated.contains("12: \"d\"")) + } + + @Test internal func testEnumWithoutRawValuesCreatesArray() { + // Simulate the Options macro expansion for an enum without raw values + let caseNames: [String] = ["red", "green", "blue"] + + let extensionDecl = Extension("Color") { + TypeAlias("MappedType", equals: "String") + Variable(.let, name: "mappedValues", equals: caseNames).withExplicitType().static() + }.inherits("MappedValueRepresentable", "MappedValueRepresented") + + let generated = extensionDecl.generateCode().normalize() + + #expect(generated.contains("extension Color: MappedValueRepresentable, MappedValueRepresented")) + #expect(generated.contains("typealias MappedType = String")) + #expect( + generated.contains("static let mappedValues: [String] = [\"red\", \"green\", \"blue\"]")) + } + + // MARK: - Complex Integration Tests + + @Test internal func testCompleteOptionsMacroWorkflow() { + // This test demonstrates the complete workflow that the Options macro would use + + // Step 1: Determine if enum has raw values (simulated) + let hasRawValues = true + let enumName = "TestEnum" + + // Step 2: Create the appropriate mappedValues variable + let mappedValuesVariable: Variable + if hasRawValues { + let keyValues: [Int: String] = [1: "first", 2: "second", 3: "third"] + mappedValuesVariable = Variable(.let, name: "mappedValues", equals: keyValues) + .withExplicitType().static() + } else { + let caseNames: [String] = ["first", "second", "third"] + mappedValuesVariable = Variable(.let, name: "mappedValues", equals: caseNames) + .withExplicitType().static() + } + + // Step 3: Create the extension + let extensionDecl = Extension(enumName) { + TypeAlias("MappedType", equals: "String") + mappedValuesVariable + }.inherits("MappedValueRepresentable", "MappedValueRepresented") + + let generated = extensionDecl.generateCode().normalize() + + // Verify the complete extension + #expect( + generated.contains("extension TestEnum: MappedValueRepresentable, MappedValueRepresented")) + #expect(generated.contains("typealias MappedType = String")) + #expect(generated.contains("static let mappedValues: [Int: String]")) + #expect(generated.contains("1: \"first\"")) + #expect(generated.contains("2: \"second\"")) + #expect(generated.contains("3: \"third\"")) + } + + @Test internal func testOptionsMacroWorkflowWithoutRawValues() { + // Test the workflow for enums without raw values + + let hasRawValues = false + let enumName = "SimpleEnum" + + let mappedValuesVariable: Variable + if hasRawValues { + let keyValues: [Int: String] = [1: "first", 2: "second"] + mappedValuesVariable = Variable(.let, name: "mappedValues", equals: keyValues) + .withExplicitType().static() + } else { + let caseNames: [String] = ["first", "second"] + mappedValuesVariable = Variable(.let, name: "mappedValues", equals: caseNames) + .withExplicitType().static() + } + + let extensionDecl = Extension(enumName) { + TypeAlias("MappedType", equals: "String") + mappedValuesVariable + }.inherits("MappedValueRepresentable", "MappedValueRepresented") + + let generated = extensionDecl.generateCode().normalize() + + #expect( + generated.contains("extension SimpleEnum: MappedValueRepresentable, MappedValueRepresented")) + #expect(generated.contains("typealias MappedType = String")) + #expect(generated.contains("static let mappedValues: [String] = [\"first\", \"second\"]")) + } + + // MARK: - Edge Cases + + @Test internal func testEmptyEnumCases() { + let caseNames: [String] = [] + + let extensionDecl = Extension("EmptyEnum") { + TypeAlias("MappedType", equals: "String") + Variable(.let, name: "mappedValues", equals: caseNames).withExplicitType().static() + }.inherits("MappedValueRepresentable", "MappedValueRepresented") + + let generated = extensionDecl.generateCode().normalize() + + #expect( + generated.contains("extension EmptyEnum: MappedValueRepresentable, MappedValueRepresented")) + #expect(generated.contains("typealias MappedType = String")) + #expect(generated.contains("static let mappedValues: [String] = []")) + } + + @Test internal func testEmptyDictionary() { + let keyValues: [Int: String] = [:] + + let extensionDecl = Extension("EmptyDictEnum") { + TypeAlias("MappedType", equals: "String") + Variable(.let, name: "mappedValues", equals: keyValues).withExplicitType().static() + }.inherits("MappedValueRepresentable", "MappedValueRepresented") + + let generated = extensionDecl.generateCode().normalize() + + #expect( + generated.contains( + "extension EmptyDictEnum: MappedValueRepresentable, MappedValueRepresented" + ) + ) + #expect(generated.contains("typealias MappedType = String")) + #expect(generated.contains("static let mappedValues: [Int: String] = [: ]")) + } + + @Test internal func testSpecialCharactersInCaseNames() { + let caseNames: [String] = ["case_with_underscore", "case-with-dash", "caseWithCamelCase"] + + let extensionDecl = Extension("SpecialEnum") { + TypeAlias("MappedType", equals: "String") + Variable(.let, name: "mappedValues", equals: caseNames).withExplicitType().static() + }.inherits("MappedValueRepresentable", "MappedValueRepresented") + + let generated = extensionDecl.generateCode().normalize() + + #expect( + generated.contains("extension SpecialEnum: MappedValueRepresentable, MappedValueRepresented")) + #expect(generated.contains("typealias MappedType = String")) + #expect(generated.contains("static let mappedValues: [String]")) + #expect(generated.contains("\"case_with_underscore\"")) + #expect(generated.contains("\"case-with-dash\"")) + #expect(generated.contains("\"caseWithCamelCase\"")) + } +} diff --git a/Tests/SyntaxKitTests/Unit/OptionsMacroIntegrationTestsAPI.swift b/Tests/SyntaxKitTests/Unit/OptionsMacroIntegrationTestsAPI.swift new file mode 100644 index 0000000..41a4701 --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/OptionsMacroIntegrationTestsAPI.swift @@ -0,0 +1,39 @@ +import Testing + +@testable import SyntaxKit + +internal struct OptionsMacroIntegrationTestsAPI { + // MARK: - API Validation Tests + + @Test internal func testNewSyntaxKitAPICompleteness() { + // Verify that all the new API components work together correctly + + // Test LiteralValue protocol + let array: [String] = ["a", "b", "c"] + #expect(array.typeName == "[String]") + #expect(array.literalString == "[\"a\", \"b\", \"c\"]") + + let dict: [Int: String] = [1: "a", 2: "b"] + #expect(dict.typeName == "[Int: String]") + #expect(dict.literalString.contains("1: \"a\"")) + #expect(dict.literalString.contains("2: \"b\"")) + + // Test Variable with static support + let staticVar = Variable(.let, name: "test", equals: array).withExplicitType().static() + let staticGenerated = staticVar.generateCode().normalize() + #expect(staticGenerated.contains("static let test: [String] = [\"a\", \"b\", \"c\"]")) + + // Test Extension with inheritance + let ext = Extension("Test") { + // Empty content + }.inherits("Protocol1", "Protocol2") + + let extGenerated = ext.generateCode().normalize() + #expect(extGenerated.contains("extension Test: Protocol1, Protocol2")) + + // Test TypeAlias + let alias = TypeAlias("MyType", equals: "String") + let aliasGenerated = alias.generateCode().normalize() + #expect(aliasGenerated.contains("typealias MyType = String")) + } +} diff --git a/Tests/SyntaxKitTests/Unit/PatternConvertibleTests.swift b/Tests/SyntaxKitTests/Unit/PatternConvertibleTests.swift new file mode 100644 index 0000000..1e5008f --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/PatternConvertibleTests.swift @@ -0,0 +1,89 @@ +// +// PatternConvertibleTests.swift +// SyntaxKitTests +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the "Software"), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import SwiftSyntax +import Testing + +@testable import SyntaxKit + +internal struct PatternConvertibleTests { + // MARK: - Let Binding Pattern Tests + + @Test internal func testLetBindingPattern() { + let pattern = Pattern.let("x") + let syntax = pattern.patternSyntax + + let generated = syntax.description + #expect(generated.contains("let x")) + } + + @Test internal func testLetBindingPatternInTuple() { + let tuplePattern = Tuple.pattern([Pattern.let("x"), 0]) + let syntax = tuplePattern.patternSyntax + + let generated = syntax.description + #expect(generated.contains("(let x, 0)")) + } + + @Test internal func testLetBindingPatternInSwitchCase() { + let switchCase = SwitchCase(Tuple.pattern([Pattern.let("x"), Pattern.let("y")])) { + Call("print") { + ParameterExp(name: "", value: "\"somewhere else at (\\(x), \\(y))\"") + } + } + + let generated = switchCase.generateCode() + #expect(generated.contains("case (let x, let y):")) + #expect(generated.contains("print(\"somewhere else at (\\(x), \\(y))\")")) + } + + @Test internal func testLetBindingPatternWithSingleElement() { + let pattern = Pattern.let("value") + let syntax = pattern.patternSyntax + + let generated = syntax.description + #expect(generated.contains("let value")) + } + + @Test internal func testLetBindingPatternInComplexTuple() { + let tuplePattern = Tuple.pattern([Pattern.let("x"), 0, Pattern.let("y")]) + let syntax = tuplePattern.patternSyntax + + let generated = syntax.description + #expect(generated.contains("(let x, 0, let y)")) + } + + @Test internal func testLetBindingPatternWithWildcard() { + let tuplePattern = Tuple.pattern([Pattern.let("x"), nil, Pattern.let("y")]) + let syntax = tuplePattern.patternSyntax + + let generated = syntax.description + #expect(generated.contains("(let x, _, let y)")) + } +} diff --git a/Tests/SyntaxKitTests/Unit/ProtocolTests.swift b/Tests/SyntaxKitTests/Unit/ProtocolTests.swift new file mode 100644 index 0000000..4d67358 --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/ProtocolTests.swift @@ -0,0 +1,189 @@ +import Testing + +@testable import SyntaxKit + +internal struct ProtocolTests { + @Test internal func testSimpleProtocol() { + let vehicleProtocol = Protocol("Vehicle") { + PropertyRequirement("numberOfWheels", type: "Int", access: .get) + PropertyRequirement("brand", type: "String", access: .getSet) + FunctionRequirement("start") + FunctionRequirement("stop") + FunctionRequirement("speed", returns: "Int") + } + + let expected = """ + protocol Vehicle { + var numberOfWheels: Int { get } + var brand: String { get set } + func start() + func stop() + func speed() -> Int + } + """ + + let normalizedGenerated = vehicleProtocol.generateCode().normalize() + let normalizedExpected = expected.normalize() + #expect(normalizedGenerated == normalizedExpected) + } + + @Test internal func testEmptyProtocol() { + let emptyProtocol = Protocol("EmptyProtocol") {} + + let expected = """ + protocol EmptyProtocol { + } + """ + + let normalizedGenerated = emptyProtocol.generateCode().normalize() + let normalizedExpected = expected.normalize() + #expect(normalizedGenerated == normalizedExpected) + } + + @Test internal func testProtocolWithInheritance() { + let protocolWithInheritance = Protocol("MyProtocol") { + PropertyRequirement("value", type: "String", access: .getSet) + }.inherits("Equatable", "Hashable") + + let expected = """ + protocol MyProtocol: Equatable, Hashable { + var value: String { get set } + } + """ + + let normalizedGenerated = protocolWithInheritance.generateCode().normalize() + let normalizedExpected = expected.normalize() + #expect(normalizedGenerated == normalizedExpected) + } + + @Test internal func testFunctionRequirementWithParameters() { + let protocolWithFunction = Protocol("Calculator") { + FunctionRequirement("add", returns: "Int") { + Parameter(name: "a", type: "Int") + Parameter(name: "b", type: "Int") + } + } + + let expected = """ + protocol Calculator { + func add(a: Int, b: Int) -> Int + } + """ + + let normalizedGenerated = protocolWithFunction.generateCode().normalize() + let normalizedExpected = expected.normalize() + #expect(normalizedGenerated == normalizedExpected) + } + + @Test internal func testStaticFunctionRequirement() { + let protocolWithStaticFunction = Protocol("Factory") { + FunctionRequirement("create", returns: "Self").static() + } + + let expected = """ + protocol Factory { + static func create() -> Self + } + """ + + let normalizedGenerated = protocolWithStaticFunction.generateCode().normalize() + let normalizedExpected = expected.normalize() + #expect(normalizedGenerated == normalizedExpected) + } + + @Test internal func testMutatingFunctionRequirement() { + let protocolWithMutatingFunction = Protocol("Resettable") { + FunctionRequirement("reset").mutating() + } + + let expected = """ + protocol Resettable { + mutating func reset() + } + """ + + let normalizedGenerated = protocolWithMutatingFunction.generateCode().normalize() + let normalizedExpected = expected.normalize() + #expect(normalizedGenerated == normalizedExpected) + } + + @Test internal func testPropertyRequirementGetOnly() { + let propertyReq = PropertyRequirement("readOnlyProperty", type: "String", access: .get) + let prtcl = Protocol("TestProtocol") { + propertyReq + } + + let expected = """ + protocol TestProtocol { + var readOnlyProperty: String { get } + } + """ + + let normalizedGenerated = prtcl.generateCode().normalize() + let normalizedExpected = expected.normalize() + #expect(normalizedGenerated == normalizedExpected) + } + + @Test internal func testPropertyRequirementGetSet() { + let propertyReq = PropertyRequirement("readWriteProperty", type: "Int", access: .getSet) + let prtcl = Protocol("TestProtocol") { + propertyReq + } + + let expected = """ + protocol TestProtocol { + var readWriteProperty: Int { get set } + } + """ + + let normalizedGenerated = prtcl.generateCode().normalize() + let normalizedExpected = expected.normalize() + #expect(normalizedGenerated == normalizedExpected) + } + + @Test internal func testFunctionRequirementWithDefaultParameters() { + let functionReq = FunctionRequirement("process", returns: "String") { + Parameter(name: "input", type: "String") + Parameter(name: "options", type: "ProcessingOptions", defaultValue: "ProcessingOptions()") + } + let prtcl = Protocol("TestProtocol") { + functionReq + } + + let expected = """ + protocol TestProtocol { + func process(input: String, options: ProcessingOptions = ProcessingOptions()) -> String + } + """ + + let normalizedGenerated = prtcl.generateCode().normalize() + let normalizedExpected = expected.normalize() + #expect(normalizedGenerated == normalizedExpected) + } + + @Test internal func testComplexProtocolWithMixedRequirements() { + let complexProtocol = Protocol("ComplexProtocol") { + PropertyRequirement("id", type: "UUID", access: .get) + PropertyRequirement("name", type: "String", access: .getSet) + FunctionRequirement("initialize").mutating() + FunctionRequirement("process", returns: "Result") { + Parameter(name: "input", type: "Data") + } + FunctionRequirement("factory", returns: "Self").static() + }.inherits("Identifiable") + + let expected = """ + protocol ComplexProtocol: Identifiable { + var id: UUID { get } + var name: String { get set } + mutating func initialize() + func process(input: Data) -> Result + static func factory() -> Self + } + """ + + let normalizedGenerated = complexProtocol.generateCode().normalize() + let normalizedExpected = expected.normalize() + #expect(normalizedGenerated == normalizedExpected) + } +} diff --git a/Tests/SyntaxKitTests/String+Normalize.swift b/Tests/SyntaxKitTests/Unit/String+Normalize.swift similarity index 71% rename from Tests/SyntaxKitTests/String+Normalize.swift rename to Tests/SyntaxKitTests/Unit/String+Normalize.swift index 5343b37..8b1251b 100644 --- a/Tests/SyntaxKitTests/String+Normalize.swift +++ b/Tests/SyntaxKitTests/Unit/String+Normalize.swift @@ -1,9 +1,8 @@ import Foundation extension String { - func normalize() -> String { + internal func normalize() -> String { self - .replacingOccurrences(of: "//.*$", with: "", options: .regularExpression) .replacingOccurrences(of: "\\s*:\\s*", with: ": ", options: .regularExpression) .replacingOccurrences(of: "\\s+", with: " ", options: .regularExpression) .trimmingCharacters(in: .whitespacesAndNewlines) diff --git a/Tests/SyntaxKitTests/StructTests.swift b/Tests/SyntaxKitTests/Unit/StructTests.swift similarity index 58% rename from Tests/SyntaxKitTests/StructTests.swift rename to Tests/SyntaxKitTests/Unit/StructTests.swift index e578664..7ea5bf8 100644 --- a/Tests/SyntaxKitTests/StructTests.swift +++ b/Tests/SyntaxKitTests/Unit/StructTests.swift @@ -2,10 +2,10 @@ import Testing @testable import SyntaxKit -struct StructTests { - @Test func testGenericStruct() { - let stackStruct = Struct("Stack", generic: "Element") { - Variable(.var, name: "items", type: "[Element]", equals: "[]") +internal struct StructTests { + @Test internal func testGenericStruct() { + let stackStruct = Struct("Stack") { + Variable(.var, name: "items", type: "[Element]", equals: Literal.array([])).withExplicitType() Function("push") { Parameter(name: "item", type: "Element", isUnnamed: true) @@ -30,31 +30,31 @@ struct StructTests { ComputedProperty("count", type: "Int") { Return { VariableExp("items").property("count") } } - } + }.generic("Element") let expectedCode = """ struct Stack { - var items: [Element] = [] + var items: [Element] = [] - mutating func push(_ item: Element) { - items.append(item) - } + mutating func push(_ item: Element) { + items.append(item) + } - mutating func pop() -> Element? { - return items.popLast() - } + mutating func pop() -> Element? { + return items.popLast() + } - func peek() -> Element? { - return items.last - } + func peek() -> Element? { + return items.last + } - var isEmpty: Bool { - return items.isEmpty - } + var isEmpty: Bool { + return items.isEmpty + } - var count: Int { - return items.count - } + var count: Int { + return items.count + } } """ @@ -63,14 +63,14 @@ struct StructTests { #expect(normalizedGenerated == normalizedExpected) } - @Test func testGenericStructWithInheritance() { - let containerStruct = Struct("Container", generic: "T") { - Variable(.var, name: "value", type: "T") - }.inherits("Equatable") + @Test internal func testGenericStructWithInheritance() { + let containerStruct = Struct("Container") { + Variable(.var, name: "value", type: "T").withExplicitType() + }.generic("T").inherits("Equatable") let expectedCode = """ struct Container: Equatable { - var value: T + var value: T } """ @@ -79,16 +79,16 @@ struct StructTests { #expect(normalizedGenerated == normalizedExpected) } - @Test func testNonGenericStruct() { + @Test internal func testNonGenericStruct() { let simpleStruct = Struct("Point") { - Variable(.var, name: "x", type: "Double") - Variable(.var, name: "y", type: "Double") + Variable(.var, name: "x", type: "Double").withExplicitType() + Variable(.var, name: "y", type: "Double").withExplicitType() } let expectedCode = """ struct Point { - var x: Double - var y: Double + var x: Double + var y: Double } """ diff --git a/Tests/SyntaxKitTests/Unit/ThrowBasicTests.swift b/Tests/SyntaxKitTests/Unit/ThrowBasicTests.swift new file mode 100644 index 0000000..e6db237 --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/ThrowBasicTests.swift @@ -0,0 +1,92 @@ +import Testing + +@testable import SyntaxKit + +@Suite internal struct ThrowBasicTests { + // MARK: - Basic Throw Tests + + @Test("Basic throw with enum case generates correct syntax") + internal func testBasicThrowWithEnumCase() throws { + let throwStatement = Throw(EnumCase("connectionFailed")) + + let generated = throwStatement.generateCode() + let expected = "throw .connectionFailed" + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Throw with enum case and type generates correct syntax") + internal func testThrowWithEnumCaseAndType() throws { + let throwStatement = Throw(EnumCase("connectionFailed")) + + let generated = throwStatement.generateCode() + let expected = "throw .connectionFailed" + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Throw with enum case with associated value generates correct syntax") + internal func testThrowWithEnumCaseWithAssociatedValue() throws { + let throwStatement = Throw( + EnumCase("invalidInput") + .associatedValue("fieldName", type: "String") + ) + + let generated = throwStatement.generateCode() + let expected = "throw .invalidInput(fieldName)" + + #expect(generated.normalize() == expected.normalize()) + } + + // MARK: - Throw with Different Expression Types + + @Test("Throw with string literal generates correct syntax") + internal func testThrowWithStringLiteral() throws { + let throwStatement = Throw(Literal.string("Custom error message")) + + let generated = throwStatement.generateCode() + let expected = "throw \"Custom error message\"" + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Throw with integer literal generates correct syntax") + internal func testThrowWithIntegerLiteral() throws { + let throwStatement = Throw(Literal.integer(404)) + + let generated = throwStatement.generateCode() + let expected = "throw 404" + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Throw with boolean literal generates correct syntax") + internal func testThrowWithBooleanLiteral() throws { + let throwStatement = Throw(Literal.boolean(true)) + + let generated = throwStatement.generateCode() + let expected = "throw true" + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Throw with variable expression generates correct syntax") + internal func testThrowWithVariableExpression() throws { + let throwStatement = Throw(VariableExp("customError")) + + let generated = throwStatement.generateCode() + let expected = "throw customError" + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Throw with property access generates correct syntax") + internal func testThrowWithPropertyAccess() throws { + let throwStatement = Throw(VariableExp("user").property("validationError")) + + let generated = throwStatement.generateCode() + let expected = "throw user.validationError" + + #expect(generated.normalize() == expected.normalize()) + } +} diff --git a/Tests/SyntaxKitTests/Unit/ThrowComplexTests.swift b/Tests/SyntaxKitTests/Unit/ThrowComplexTests.swift new file mode 100644 index 0000000..eb8700c --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/ThrowComplexTests.swift @@ -0,0 +1,131 @@ +import Testing + +@testable import SyntaxKit + +@Suite internal struct ThrowComplexTests { + // MARK: - Complex Throw Expressions + + @Test("Throw with conditional expression generates correct syntax") + internal func testThrowWithConditionalExpression() throws { + let throwStatement = Throw( + If(VariableExp("isNetworkError")) { + EnumCase("connectionFailed") + } else: { + EnumCase("invalidInput") + } + ) + + let generated = throwStatement.generateCode() + let expected = "throw if isNetworkError { .connectionFailed } else { .invalidInput }" + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Throw with tuple expression generates correct syntax") + internal func testThrowWithTupleExpression() throws { + let throwStatement = Throw( + Tuple { + Literal.string("Error occurred") + Literal.integer(500) + } + ) + + let generated = throwStatement.generateCode() + let expected = "throw (\"Error occurred\", 500)" + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Throw with array literal generates correct syntax") + internal func testThrowWithArrayLiteral() throws { + let throwStatement = Throw( + Literal.array([ + Literal.string("Error 1"), + Literal.string("Error 2"), + ]) + ) + + let generated = throwStatement.generateCode() + let expected = "throw [\"Error 1\", \"Error 2\"]" + + #expect(generated.normalize() == expected.normalize()) + } + + // MARK: - Integration Tests + + @Test("Throw in guard statement generates correct syntax") + internal func testThrowInGuardStatement() throws { + let guardStatement = Guard { + VariableExp("user").property("isValid").not() + } else: { + Throw(EnumCase("invalidUser")) + } + + let generated = guardStatement.generateCode() + let expected = "guard !user.isValid else { throw .invalidUser }" + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Throw in function generates correct syntax") + internal func testThrowInFunction() throws { + let function = Function("validateUser") { + Parameter(name: "user", type: "User") + } _: { + Guard { + VariableExp("user").property("name").property("isEmpty").not() + } else: { + Throw(EnumCase("emptyName")) + } + Guard { + VariableExp("user").property("email").property("isEmpty").not() + } else: { + Throw(EnumCase("emptyEmail")) + } + }.throws("ValidationError") + + let generated = function.generateCode() + let expected = """ + func validateUser(user: User) throws(ValidationError) { + guard !user.name.isEmpty else { throw .emptyName } + guard !user.email.isEmpty else { throw .emptyEmail } + } + """ + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Throw in async function generates correct syntax") + internal func testThrowInAsyncFunction() throws { + let function = Function("fetchUser") { + Parameter(name: "id", type: "Int") + } _: { + Guard { + VariableExp("id") > Literal.integer(0) + } else: { + Throw(EnumCase("invalidId")) + } + Variable(.let, name: "user") { + Call("fetchUserFromAPI") { + ParameterExp(name: "userId", value: VariableExp("id")) + } + }.async() + Guard { + VariableExp("user") != Literal.nil + } else: { + Throw(EnumCase("userNotFound")) + } + }.asyncThrows("NetworkError") + + let generated = function.generateCode() + let expected = """ + func fetchUser(id: Int) async throws(NetworkError) { + guard id > 0 else { throw .invalidId } + async let user = fetchUserFromAPI(userId: id) + guard user != nil else { throw .userNotFound } + } + """ + + #expect(generated.normalize() == expected.normalize()) + } +} diff --git a/Tests/SyntaxKitTests/Unit/ThrowEdgeCaseTests.swift b/Tests/SyntaxKitTests/Unit/ThrowEdgeCaseTests.swift new file mode 100644 index 0000000..c2a3b9b --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/ThrowEdgeCaseTests.swift @@ -0,0 +1,37 @@ +import Testing + +@testable import SyntaxKit + +@Suite internal struct ThrowEdgeCaseTests { + // MARK: - Edge Cases + + @Test("Throw with nil literal generates correct syntax") + internal func testThrowWithNilLiteral() throws { + let throwStatement = Throw(Literal.nil) + + let generated = throwStatement.generateCode() + let expected = "throw nil" + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Throw with float literal generates correct syntax") + internal func testThrowWithFloatLiteral() throws { + let throwStatement = Throw(Literal.float(3.14)) + + let generated = throwStatement.generateCode() + let expected = "throw 3.14" + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Throw with reference literal generates correct syntax") + internal func testThrowWithReferenceLiteral() throws { + let throwStatement = Throw(Literal.ref("globalError")) + + let generated = throwStatement.generateCode() + let expected = "throw globalError" + + #expect(generated.normalize() == expected.normalize()) + } +} diff --git a/Tests/SyntaxKitTests/Unit/ThrowFunctionTests.swift b/Tests/SyntaxKitTests/Unit/ThrowFunctionTests.swift new file mode 100644 index 0000000..7432ff7 --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/ThrowFunctionTests.swift @@ -0,0 +1,66 @@ +import Testing + +@testable import SyntaxKit + +@Suite internal struct ThrowFunctionTests { + // MARK: - Throw with Function Calls + + @Test("Throw with function call generates correct syntax") + internal func testThrowWithFunctionCall() throws { + let throwStatement = Throw( + Call("createError") { + ParameterExp(name: "code", value: Literal.integer(500)) + ParameterExp(name: "message", value: Literal.string("Internal server error")) + } + ) + + let generated = throwStatement.generateCode() + let expected = "throw createError(code: 500, message: \"Internal server error\")" + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Throw with async function call generates correct syntax") + internal func testThrowWithAsyncFunctionCall() throws { + let throwStatement = Throw( + Call("fetchError") { + ParameterExp(name: "id", value: Literal.integer(123)) + }.async() + ) + + let generated = throwStatement.generateCode() + let expected = "throw await fetchError(id: 123)" + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Throw with throwing function call generates correct syntax") + internal func testThrowWithThrowingFunctionCall() throws { + let throwStatement = Throw( + Call("parseError") { + ParameterExp(name: "data", value: VariableExp("jsonData")) + }.throwing() + ) + + let generated = throwStatement.generateCode() + let expected = "throw try parseError(data: jsonData)" + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Throw with custom error type generates correct syntax") + internal func testThrowWithCustomErrorType() throws { + let throwStatement = Throw( + Call("CustomError") { + ParameterExp(name: "code", value: Literal.integer(404)) + ParameterExp(name: "message", value: Literal.string("Not found")) + ParameterExp(name: "details", value: VariableExp("errorDetails")) + } + ) + + let generated = throwStatement.generateCode() + let expected = "throw CustomError(code: 404, message: \"Not found\", details: errorDetails)" + + #expect(generated.normalize() == expected.normalize()) + } +} diff --git a/Tests/SyntaxKitTests/Unit/TupleAssignmentAsyncTests.swift b/Tests/SyntaxKitTests/Unit/TupleAssignmentAsyncTests.swift new file mode 100644 index 0000000..9578aba --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/TupleAssignmentAsyncTests.swift @@ -0,0 +1,122 @@ +import Testing + +@testable import SyntaxKit + +@Suite internal struct TupleAssignmentAsyncTests { + // MARK: - Async Tuple Assignment Tests + + @Test("Async tuple assignment generates correct syntax") + internal func testAsyncTupleAssignment() throws { + let tupleAssignment = TupleAssignment( + ["data", "posts"], + equals: Tuple { + VariableExp("fetchData") + VariableExp("fetchPosts") + } + ).async() + + let generated = tupleAssignment.generateCode() + let expected = "let (data, posts) = await (fetchData, fetchPosts)" + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Async tuple assignment with mixed expressions generates correct syntax") + internal func testAsyncTupleAssignmentWithMixedExpressions() throws { + let tupleAssignment = TupleAssignment( + ["result", "count"], + equals: Tuple { + Call("processData") { + ParameterExp(name: "input", value: Literal.string("test")) + } + Literal.integer(42) + } + ).async() + + let generated = tupleAssignment.generateCode() + let expected = "let (result, count) = await (processData(input: \"test\"), 42)" + + #expect(generated.normalize() == expected.normalize()) + } + + // MARK: - Throwing Tuple Assignment Tests + + @Test("Throwing tuple assignment generates correct syntax") + internal func testThrowingTupleAssignment() throws { + let tupleAssignment = TupleAssignment( + ["data", "posts"], + equals: Tuple { + VariableExp("fetchData") + VariableExp("fetchPosts") + } + ).throwing() + + let generated = tupleAssignment.generateCode() + let expected = "let (data, posts) = try (fetchData, fetchPosts)" + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Throwing tuple assignment with async calls generates correct syntax") + internal func testThrowingTupleAssignmentWithAsyncCalls() throws { + let tupleAssignment = TupleAssignment( + ["data", "posts"], + equals: Tuple { + Call("fetchUserData") { + ParameterExp(name: "id", value: Literal.integer(1)) + }.async() + Call("fetchUserPosts") { + ParameterExp(name: "id", value: Literal.integer(1)) + }.async() + } + ).throwing() + + let generated = tupleAssignment.generateCode() + let expected = + "let (data, posts) = try (await fetchUserData(id: 1), await fetchUserPosts(id: 1))" + + #expect(generated.normalize() == expected.normalize()) + } + + // MARK: - Async and Throwing Tuple Assignment Tests + + @Test("Async and throwing tuple assignment generates correct syntax") + internal func testAsyncAndThrowingTupleAssignment() throws { + let tupleAssignment = TupleAssignment( + ["data", "posts"], + equals: Tuple { + VariableExp("fetchData") + VariableExp("fetchPosts") + } + ).async().throwing() + + let generated = tupleAssignment.generateCode() + let expected = "let (data, posts) = try await (fetchData, fetchPosts)" + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Async and throwing tuple assignment with complex expressions generates correct syntax") + internal func testAsyncAndThrowingTupleAssignmentWithComplexExpressions() throws { + let tupleAssignment = TupleAssignment( + ["user", "profile", "settings"], + equals: Tuple { + Call("fetchUser") { + ParameterExp(name: "id", value: Literal.integer(123)) + }.async() + Call("fetchProfile") { + ParameterExp(name: "userId", value: Literal.integer(123)) + }.async() + Call("fetchSettings") { + ParameterExp(name: "userId", value: Literal.integer(123)) + }.async() + } + ).async().throwing() + + let generated = tupleAssignment.generateCode() + let expected = + "let (user, profile, settings) = try await (await fetchUser(id: 123), await fetchProfile(userId: 123), await fetchSettings(userId: 123))" + + #expect(generated.normalize() == expected.normalize()) + } +} diff --git a/Tests/SyntaxKitTests/Unit/TupleAssignmentBasicTests.swift b/Tests/SyntaxKitTests/Unit/TupleAssignmentBasicTests.swift new file mode 100644 index 0000000..47889a5 --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/TupleAssignmentBasicTests.swift @@ -0,0 +1,72 @@ +import Testing + +@testable import SyntaxKit + +@Suite internal struct TupleAssignmentBasicTests { + // MARK: - Basic Tuple Assignment Tests + + @Test("Basic tuple assignment generates correct syntax") + internal func testBasicTupleAssignment() throws { + let tupleAssignment = TupleAssignment( + ["x", "y"], + equals: Tuple { + Literal.integer(1) + Literal.integer(2) + } + ) + + let generated = tupleAssignment.generateCode() + let expected = "let (x, y) = (1, 2)" + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Single element tuple assignment generates correct syntax") + internal func testSingleElementTupleAssignment() throws { + let tupleAssignment = TupleAssignment( + ["value"], + equals: Tuple { + Literal.string("test") + } + ) + + let generated = tupleAssignment.generateCode() + let expected = "let (value) = (\"test\")" + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Three element tuple assignment generates correct syntax") + internal func testThreeElementTupleAssignment() throws { + let tupleAssignment = TupleAssignment( + ["x", "y", "z"], + equals: Tuple { + Literal.integer(1) + Literal.integer(2) + Literal.integer(3) + } + ) + + let generated = tupleAssignment.generateCode() + let expected = "let (x, y, z) = (1, 2, 3)" + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Tuple assignment with mixed literal types generates correct syntax") + internal func testTupleAssignmentWithMixedTypes() throws { + let tupleAssignment = TupleAssignment( + ["name", "age", "isActive"], + equals: Tuple { + Literal.string("John") + Literal.integer(30) + Literal.boolean(true) + } + ) + + let generated = tupleAssignment.generateCode() + let expected = "let (name, age, isActive) = (\"John\", 30, true)" + + #expect(generated.normalize() == expected.normalize()) + } +} diff --git a/Tests/SyntaxKitTests/Unit/TupleAssignmentEdgeCaseTests.swift b/Tests/SyntaxKitTests/Unit/TupleAssignmentEdgeCaseTests.swift new file mode 100644 index 0000000..ced5f47 --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/TupleAssignmentEdgeCaseTests.swift @@ -0,0 +1,82 @@ +import Testing + +@testable import SyntaxKit + +@Suite internal struct TupleAssignmentEdgeCaseTests { + // MARK: - Edge Cases and Error Handling Tests + + @Test("Tuple assignment with empty elements array throws error") + internal func testTupleAssignmentWithEmptyElements() throws { + // This should be handled gracefully by the DSL + let tupleAssignment = TupleAssignment( + [], + equals: Tuple { + Literal.integer(1) + } + ) + + let generated = tupleAssignment.generateCode() + let expected = "let () = (1)" + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Tuple assignment with variable expressions generates correct syntax") + internal func testTupleAssignmentWithVariableExpressions() throws { + let tupleAssignment = TupleAssignment( + ["firstName", "lastName"], + equals: Tuple { + VariableExp("user.firstName") + VariableExp("user.lastName") + } + ) + + let generated = tupleAssignment.generateCode() + let expected = "let (firstName, lastName) = (user.firstName, user.lastName)" + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Tuple assignment with function calls generates correct syntax") + internal func testTupleAssignmentWithFunctionCalls() throws { + let tupleAssignment = TupleAssignment( + ["min", "max"], + equals: Tuple { + Call("findMinimum") { + ParameterExp(name: "array", value: VariableExp("numbers")) + } + Call("findMaximum") { + ParameterExp(name: "array", value: VariableExp("numbers")) + } + } + ) + + let generated = tupleAssignment.generateCode() + let expected = "let (min, max) = (findMinimum(array: numbers), findMaximum(array: numbers))" + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Tuple assignment with nested tuples generates correct syntax") + internal func testTupleAssignmentWithNestedTuples() throws { + let tupleAssignment = TupleAssignment( + ["point", "color"], + equals: Tuple { + Tuple { + Literal.integer(10) + Literal.integer(20) + } + Tuple { + Literal.integer(255) + Literal.integer(0) + Literal.integer(0) + } + } + ) + + let generated = tupleAssignment.generateCode() + let expected = "let (point, color) = ((10, 20), (255, 0, 0))" + + #expect(generated.normalize() == expected.normalize()) + } +} diff --git a/Tests/SyntaxKitTests/Unit/TupleAssignmentIntegrationTests.swift b/Tests/SyntaxKitTests/Unit/TupleAssignmentIntegrationTests.swift new file mode 100644 index 0000000..9e1ee18 --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/TupleAssignmentIntegrationTests.swift @@ -0,0 +1,96 @@ +import Testing + +@testable import SyntaxKit + +@Suite internal struct TupleAssignmentIntegrationTests { + // MARK: - Integration Tests + + @Test("Tuple assignment in a function generates correct syntax") + internal func testTupleAssignmentInFunction() throws { + let function = Function("processData") { + Parameter(name: "input", type: "[Int]") + } _: { + TupleAssignment( + ["sum", "count"], + equals: Tuple { + Call("calculateSum") { + ParameterExp(name: "numbers", value: VariableExp("input")) + } + Call("calculateCount") { + ParameterExp(name: "numbers", value: VariableExp("input")) + } + } + ) + Call("print") { + ParameterExp( + unlabeled: Literal.string("Sum: \\(sum), Count: \\(count)") + ) + } + } + + let generated = function.generateCode() + let expected = """ + func processData(input: [Int]) { + let (sum, count) = (calculateSum(numbers: input), calculateCount(numbers: input)) + print("Sum: \\(sum), Count: \\(count)") + } + """ + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("Async tuple assignment in async function generates correct syntax") + internal func testAsyncTupleAssignmentInAsyncFunction() throws { + let function = Function("fetchUserData") { + Parameter(name: "userId", type: "Int") + } _: { + TupleAssignment( + ["user", "posts"], + equals: Tuple { + Call("fetchUser") { + ParameterExp(name: "id", value: VariableExp("userId")) + }.async() + Call("fetchPosts") { + ParameterExp(name: "userId", value: VariableExp("userId")) + }.async() + } + ).async().throwing() + Call("print") { + ParameterExp( + unlabeled: Literal.string("User: \\(user.name), Posts: \\(posts.count)") + ) + } + }.async().throws("NetworkError") + + let generated = function.generateCode() + let expected = """ + func fetchUserData(userId: Int) async throws(NetworkError) { + let (user, posts) = try await (await fetchUser(id: userId), await fetchPosts(userId: userId)) + print("User: \\(user.name), Posts: \\(posts.count)") + } + """ + + #expect(generated.normalize() == expected.normalize()) + } + + @Test("AsyncSet tuple assignment generates concurrent async let pattern") + internal func testAsyncSetTupleAssignment() throws { + let tupleAssignment = TupleAssignment( + ["data", "posts"], + equals: Tuple { + Call("fetchUserData") { + ParameterExp(name: "id", value: Literal.integer(1)) + } + Call("fetchUserPosts") { + ParameterExp(name: "id", value: Literal.integer(1)) + } + } + ).asyncSet().throwing() + + let generated = tupleAssignment.generateCode() + let expected = """ + async let (data, posts) = try await (fetchUserData(id: 1), fetchUserPosts(id: 1)) + """ + #expect(generated.normalize() == expected.normalize()) + } +} diff --git a/Tests/SyntaxKitTests/Unit/TypeAliasTests.swift b/Tests/SyntaxKitTests/Unit/TypeAliasTests.swift new file mode 100644 index 0000000..cd0eb1c --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/TypeAliasTests.swift @@ -0,0 +1,177 @@ +// +// TypeAliasTests.swift +// SyntaxKitTests +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the "Software"), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Testing + +@testable import SyntaxKit + +internal struct TypeAliasTests { + // MARK: - Basic TypeAlias Tests + + @Test internal func testBasicTypeAlias() { + let typeAlias = TypeAlias("MappedType", equals: "String") + let generated = typeAlias.generateCode().normalize() + + #expect(generated.contains("typealias MappedType = String")) + } + + @Test internal func testTypeAliasWithComplexType() { + let typeAlias = TypeAlias("ResultType", equals: "Result") + let generated = typeAlias.generateCode().normalize() + + #expect(generated.contains("typealias ResultType = Result")) + } + + @Test internal func testTypeAliasWithGenericType() { + let typeAlias = TypeAlias("ArrayType", equals: "Array") + let generated = typeAlias.generateCode().normalize() + + #expect(generated.contains("typealias ArrayType = Array")) + } + + @Test internal func testTypeAliasWithOptionalType() { + let typeAlias = TypeAlias("OptionalString", equals: "String?") + let generated = typeAlias.generateCode().normalize() + + #expect(generated.contains("typealias OptionalString = String?")) + } + + // MARK: - TypeAlias in Context Tests + + @Test internal func testTypeAliasInExtension() { + let extensionDecl = Extension("MyEnum") { + TypeAlias("MappedType", equals: "String") + Variable(.let, name: "test", type: "MappedType", equals: Literal.ref("value")) + .withExplicitType() + } + + let generated = extensionDecl.generateCode().normalize() + + #expect(generated.contains("extension MyEnum")) + #expect(generated.contains("typealias MappedType = String")) + #expect(generated.contains("let test: MappedType = value")) + } + + @Test internal func testTypeAliasInStruct() { + let structDecl = Struct("Container") { + TypeAlias("ElementType", equals: "String") + Variable(.let, name: "element", type: "ElementType").withExplicitType() + } + + let generated = structDecl.generateCode().normalize() + + #expect(generated.contains("struct Container")) + #expect(generated.contains("typealias ElementType = String")) + #expect(generated.contains("let element: ElementType")) + } + + @Test internal func testTypeAliasInEnum() { + let enumDecl = Enum("Result") { + TypeAlias("SuccessType", equals: "String") + TypeAlias("FailureType", equals: "Error") + EnumCase("success") + EnumCase("failure") + } + + let generated = enumDecl.generateCode().normalize() + + #expect(generated.contains("enum Result")) + #expect(generated.contains("typealias SuccessType = String")) + #expect(generated.contains("typealias FailureType = Error")) + #expect(generated.contains("case success")) + #expect(generated.contains("case failure")) + } + + // MARK: - Edge Cases + + @Test internal func testTypeAliasWithSpecialCharacters() { + let typeAlias = TypeAlias("GenericType", equals: "Array") + let generated = typeAlias.generateCode().normalize() + + #expect(generated.contains("typealias GenericType = Array")) + } + + @Test internal func testTypeAliasWithProtocolComposition() { + let typeAlias = TypeAlias("ProtocolType", equals: "Protocol1 & Protocol2") + let generated = typeAlias.generateCode().normalize() + + #expect(generated.contains("typealias ProtocolType = Protocol1 & Protocol2")) + } + + @Test internal func testTypeAliasWithFunctionType() { + let typeAlias = TypeAlias("Handler", equals: "(String) -> Void") + let generated = typeAlias.generateCode().normalize() + + #expect(generated.contains("typealias Handler = (String) -> Void")) + } + + @Test internal func testTypeAliasWithTupleType() { + let typeAlias = TypeAlias("Coordinate", equals: "(x: Double, y: Double)") + let generated = typeAlias.generateCode().normalize() + + #expect(generated.contains("typealias Coordinate = (x: Double, y: Double)")) + } + + @Test internal func testTypeAliasWithClosureType() { + let typeAlias = TypeAlias("Callback", equals: "@escaping (Result) -> Void") + let generated = typeAlias.generateCode().normalize() + + #expect(generated.contains("typealias Callback = @escaping (Result) -> Void")) + } + + // MARK: - Integration Tests + + @Test internal func testTypeAliasWithStaticVariable() { + let extensionDecl = Extension("MyEnum") { + TypeAlias("MappedType", equals: "String") + Variable(.let, name: "mappedValues", equals: ["a", "b", "c"]).withExplicitType().static() + }.inherits("MappedValueRepresentable") + + let generated = extensionDecl.generateCode().normalize() + + #expect(generated.contains("extension MyEnum: MappedValueRepresentable")) + #expect(generated.contains("typealias MappedType = String")) + #expect(generated.contains("static let mappedValues: [String] = [\"a\", \"b\", \"c\"]")) + } + + @Test internal func testTypeAliasWithDictionaryVariable() { + let extensionDecl = Extension("MyEnum") { + TypeAlias("MappedType", equals: "String") + Variable(.let, name: "mappedValues", equals: [1: "a", 2: "b"]).withExplicitType().static() + }.inherits("MappedValueRepresentable") + + let generated = extensionDecl.generateCode().normalize() + + #expect(generated.contains("extension MyEnum: MappedValueRepresentable")) + #expect(generated.contains("typealias MappedType = String")) + #expect(generated.contains("static let mappedValues: [Int: String]")) + #expect(generated.contains("1: \"a\"")) + #expect(generated.contains("2: \"b\"")) + } +} diff --git a/Tests/SyntaxKitTests/Unit/VariableStaticTests.swift b/Tests/SyntaxKitTests/Unit/VariableStaticTests.swift new file mode 100644 index 0000000..3ee8dc0 --- /dev/null +++ b/Tests/SyntaxKitTests/Unit/VariableStaticTests.swift @@ -0,0 +1,166 @@ +// +// VariableStaticTests.swift +// SyntaxKitTests +// +// Created by Leo Dion. +// Copyright © 2025 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the "Software"), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +import Testing + +@testable import SyntaxKit + +internal struct VariableStaticTests { + // MARK: - Static Variable Tests + + @Test internal func testStaticVariableWithStringLiteral() { + let variable = Variable(.let, name: "test", type: "String", equals: Literal.ref("hello")) + .withExplicitType() + .static() + let generated = variable.generateCode().normalize() + + #expect(generated.contains("static let test: String = hello")) + } + + @Test internal func testStaticVariableWithArrayLiteral() { + let array: [String] = ["a", "b", "c"] + let variable = Variable(.let, name: "mappedValues", equals: array).withExplicitType().static() + let generated = variable.generateCode().normalize() + + #expect(generated.contains("static let mappedValues: [String] = [\"a\", \"b\", \"c\"]")) + } + + @Test internal func testStaticVariableWithDictionaryLiteral() { + let dict: [Int: String] = [1: "a", 2: "b", 3: "c"] + let variable = Variable(.let, name: "mappedValues", equals: dict).withExplicitType().static() + let generated = variable.generateCode().normalize() + + #expect(generated.contains("static let mappedValues: [Int: String]")) + #expect(generated.contains("1: \"a\"")) + #expect(generated.contains("2: \"b\"")) + #expect(generated.contains("3: \"c\"")) + } + + @Test internal func testStaticVariableWithVar() { + let variable = Variable(.var, name: "counter", type: "Int", equals: Literal.integer(0)) + .withExplicitType() + .static() + let generated = variable.generateCode().normalize() + + #expect(generated.contains("static var counter: Int = 0")) + } + + // MARK: - Non-Static Variable Tests + + @Test internal func testNonStaticVariableWithLiteral() { + let array: [String] = ["x", "y", "z"] + let variable = Variable(.let, name: "values", equals: array).withExplicitType() + let generated = variable.generateCode().normalize() + + #expect(generated.contains("let values: [String] = [\"x\", \"y\", \"z\"]")) + #expect(!generated.contains("static")) + } + + @Test internal func testNonStaticVariableWithDictionary() { + let dict: [Int: String] = [10: "ten", 20: "twenty"] + let variable = Variable(.let, name: "lookup", equals: dict).withExplicitType() + let generated = variable.generateCode().normalize() + + #expect(generated.contains("let lookup: [Int: String]")) + #expect(generated.contains("10: \"ten\"")) + #expect(generated.contains("20: \"twenty\"")) + #expect(!generated.contains("static")) + } + + // MARK: - Static Method Tests + + @Test internal func testStaticMethodReturnsNewInstance() { + let original = Variable(.let, name: "test", type: "String", equals: Literal.ref("value")) + .withExplicitType() + let staticVersion = original.static() + + // Should be different instances + #expect(original.generateCode() != staticVersion.generateCode()) + + // Original should not be static + let originalGenerated = original.generateCode().normalize() + #expect(!originalGenerated.contains("static")) + + // Static version should be static + let staticGenerated = staticVersion.generateCode().normalize() + #expect(staticGenerated.contains("static")) + } + + @Test internal func testStaticMethodPreservesOtherProperties() { + let original = Variable(.var, name: "test", type: "String", equals: Literal.ref("value")) + .withExplicitType() + let staticVersion = original.static() + + let originalGenerated = original.generateCode().normalize() + let staticGenerated = staticVersion.generateCode().normalize() + + // Both should have the same name and value + #expect(originalGenerated.contains("test")) + #expect(staticGenerated.contains("test")) + #expect(originalGenerated.contains("value")) + #expect(staticGenerated.contains("value")) + + // Both should be var + #expect(originalGenerated.contains("var")) + #expect(staticGenerated.contains("var")) + } + + // MARK: - Edge Cases + + @Test internal func testEmptyArrayLiteral() { + let array: [String] = [] + let variable = Variable(.let, name: "empty", equals: array).withExplicitType().static() + let generated = variable.generateCode().normalize() + + #expect(generated.contains("static let empty: [String] = []")) + } + + @Test internal func testEmptyDictionaryLiteral() { + let dict: [Int: String] = [:] + let variable = Variable(.let, name: "empty", equals: dict).withExplicitType().static() + let generated = variable.generateCode().normalize() + + let validOutputs = [ + "static let empty: [Int: String] = [:]", + "static let empty: [Int: String] = [: ]", + ] + #expect(validOutputs.contains { generated.contains($0) }) + } + + @Test internal func testMultipleStaticCalls() { + let variable = Variable(.let, name: "test", type: "String", equals: Literal.ref("value")) + .withExplicitType() + .static().static() + let generated = variable.generateCode().normalize() + + // Should still only have one "static" keyword + let staticCount = generated.components(separatedBy: "static").count - 1 + #expect(staticCount == 1) + } +} diff --git a/codecov.yml b/codecov.yml index 951b97b..621ea02 100644 --- a/codecov.yml +++ b/codecov.yml @@ -1,2 +1,3 @@ ignore: - "Tests" + - "Sources/SyntaxKit/parser" diff --git a/project.yml b/project.yml index d39d844..959c793 100644 --- a/project.yml +++ b/project.yml @@ -4,6 +4,10 @@ settings: packages: SyntaxKit: path: . + SKSampleMacro: + path: Macros/SKSampleMacro + Options: + path: Macros/Options aggregateTargets: Lint: buildScripts: