diff --git a/include/swift/AST/SourceFile.h b/include/swift/AST/SourceFile.h index a05c54b47edbe..f122b92e3e920 100644 --- a/include/swift/AST/SourceFile.h +++ b/include/swift/AST/SourceFile.h @@ -97,6 +97,9 @@ class SourceFile final : public FileUnit { /// Validate the new SwiftSyntax parser diagnostics. ValidateNewParserDiagnostics = 1 << 6, + + /// Consider every #if ... #endif region active. + PoundIfAllActive = 1 << 7, }; using ParsingOptions = OptionSet; diff --git a/lib/Parse/ParseIfConfig.cpp b/lib/Parse/ParseIfConfig.cpp index 1a1076d968b9a..25be5c7cbee16 100644 --- a/lib/Parse/ParseIfConfig.cpp +++ b/lib/Parse/ParseIfConfig.cpp @@ -834,6 +834,11 @@ Result Parser::parseIfConfigRaw( // determined solely by which block has the completion token. !ideInspectionClauseLoc.isValid(); + // For constructing syntactic structures, we need AST nodes even for + // non-active regions. + bool allActive = SF.getParsingOptions().contains( + SourceFile::ParsingFlags::PoundIfAllActive); + bool foundActive = false; bool isVersionCondition = false; CharSourceRange activeBodyRange; @@ -893,6 +898,9 @@ Result Parser::parseIfConfigRaw( if (ideInspectionClauseLoc.isValid() && !foundActive) isActive = (ClauseLoc == ideInspectionClauseLoc); + if (allActive) + isActive = true; + foundActive |= isActive; if (!Tok.isAtStartOfLine() && Tok.isNot(tok::eof)) { diff --git a/lib/Parse/ParseStmt.cpp b/lib/Parse/ParseStmt.cpp index 52b8fa7b7deb0..e5c12d1b6d713 100644 --- a/lib/Parse/ParseStmt.cpp +++ b/lib/Parse/ParseStmt.cpp @@ -381,7 +381,7 @@ ParserStatus Parser::parseBraceItems(SmallVectorImpl &Entries, IsFollowingGuard); if (IsActive) - activeElements = std::move(elements); + activeElements.append(elements); }); if (IfConfigResult.hasCodeCompletion() && isIDEInspectionFirstPass()) { consumeDecl(BeginParserPosition, IsTopLevel); diff --git a/lib/Parse/Parser.cpp b/lib/Parse/Parser.cpp index 5a86c0963275c..a82e73be164b3 100644 --- a/lib/Parse/Parser.cpp +++ b/lib/Parse/Parser.cpp @@ -1145,6 +1145,7 @@ struct ParserUnit::Implementation { auto parsingOpts = SourceFile::getDefaultParsingOptions(LangOpts); parsingOpts |= ParsingFlags::DisableDelayedBodies; parsingOpts |= ParsingFlags::DisablePoundIfEvaluation; + parsingOpts |= ParsingFlags::PoundIfAllActive; auto *M = ModuleDecl::create(Ctx.getIdentifier(ModuleName), Ctx); SF = new (Ctx) SourceFile(*M, SFKind, BufferID, parsingOpts); diff --git a/test/IDE/coloring_configs.swift b/test/IDE/coloring_configs.swift index 58977387bcb89..275ed722b6e9f 100644 --- a/test/IDE/coloring_configs.swift +++ b/test/IDE/coloring_configs.swift @@ -1,5 +1,326 @@ // RUN: %target-swift-ide-test -syntax-coloring -source-filename %s -D CONF | %FileCheck %s +// CHECK: var f : Int +var f : Int + +// CHECK: <#kw>#if os(macOS) +#if os(macOS) +#endif + +// CHECK: <#kw>#if CONF +#if CONF + // CHECK: var x : Int + var x : Int +// CHECK: <#kw>#else +#else + // CHECK: var x : Float + var x : Float +// CHECK: <#kw>#endif +#endif + +// CHECK: <#kw>#if CONF +#if CONF + // CHECK: var x2 : Int + var x2 : Int +// CHECK: <#kw>#endif +#endif + +// CHECK: <#kw>#if !CONF +#if !CONF + // CHECK: var x3 : Int + var x3 : Int +// CHECK: <#kw>#else +#else + // CHECK: var x3 : Float + var x3 : Float +// CHECK: <#kw>#endif +#endif + +// CHECK: <#kw>#if !CONF +#if !CONF + // CHECK: var x4 : Int + var x4 : Int +// CHECK: <#kw>#endif +#endif + +// CHECK: <#kw>#if CONF +#if CONF + // CHECK: var y1 : Int + var y1 : Int +// CHECK: <#kw>#elseif BAZ +#elseif BAZ + // CHECK: var y1 : String + var y1 : String +// CHECK: <#kw>#else +#else + // CHECK: var y1 : Float + var y1 : Float +// CHECK: <#kw>#endif +#endif + +// CHECK: <#kw>#if !CONF +#if !CONF + // CHECK: var y2 : Int + var y2 : Int +// CHECK: <#kw>#elseif BAZ +#elseif BAZ + // CHECK: var y2 : String + var y2 : String +// CHECK: <#kw>#else +#else + // CHECK: var y2 : Float + var y2 : Float +// CHECK: <#kw>#endif +#endif + +// CHECK: <#kw>#if !CONF +#if !CONF + // CHECK: var y3 : Int + var y3 : Int +// CHECK: <#kw>#elseif CONF +#elseif CONF + // CHECK: var y3 : String + var y3 : String +// CHECK: <#kw>#else +#else + // CHECK: var y3 : Float + var y3 : Float +// CHECK: <#kw>#endif +#endif + +// CHECK: var l : Int +var l : Int + +// CHECK: class C1 { +class C1 { + // CHECK: var f : Int + var f : Int + +// CHECK: <#kw>#if CONF +#if CONF + // CHECK: var x : Int + var x : Int +// CHECK: <#kw>#else +#else + // CHECK: var x : Float + var x : Float +// CHECK: <#kw>#endif +#endif + +// CHECK: <#kw>#if CONF +#if CONF + // CHECK: var x2 : Int + var x2 : Int +// CHECK: <#kw>#endif +#endif + +// CHECK: <#kw>#if !CONF +#if !CONF + // CHECK: var x3 : Int + var x3 : Int +// CHECK: <#kw>#else +#else + // CHECK: var x3 : Float + var x3 : Float +// CHECK: <#kw>#endif +#endif + +// CHECK: <#kw>#if !CONF +#if !CONF + // CHECK: var x4 : Int + var x4 : Int +// CHECK: <#kw>#endif +#endif + +// CHECK: <#kw>#if CONF +#if CONF + // CHECK: var y1 : Int + var y1 : Int +// CHECK: <#kw>#elseif BAZ +#elseif BAZ + // CHECK: var y1 : String + var y1 : String +// CHECK: <#kw>#else +#else + // CHECK: var y1 : Float + var y1 : Float +// CHECK: <#kw>#endif +#endif + +// CHECK: <#kw>#if !CONF +#if !CONF + // CHECK: var y2 : Int + var y2 : Int +// CHECK: <#kw>#elseif BAZ +#elseif BAZ + // CHECK: var y2 : String + var y2 : String +// CHECK: <#kw>#else +#else + // CHECK: var y2 : Float + var y2 : Float +// CHECK: <#kw>#endif +#endif + +// CHECK: <#kw>#if !CONF +#if !CONF + // CHECK: var y3 : Int + var y3 : Int +// CHECK: <#kw>#elseif CONF +#elseif CONF + // CHECK: var y3 : String + var y3 : String +// CHECK: <#kw>#else +#else + // CHECK: var y3 : Float + var y3 : Float +// CHECK: <#kw>#endif +#endif + + // CHECK: var l : Int + var l : Int +} + +// CHECK: func test1() { +func test1() { + // CHECK: var f : Int + var f : Int + +// CHECK: <#kw>#if CONF +#if CONF + // CHECK: var x : Int + var x : Int +// CHECK: <#kw>#else +#else + // CHECK: var x : Float + var x : Float +// CHECK: <#kw>#endif +#endif + +// CHECK: <#kw>#if CONF +#if CONF + // CHECK: var x2 : Int + var x2 : Int +// CHECK: <#kw>#endif +#endif + +// CHECK: <#kw>#if !CONF +#if !CONF + // CHECK: var x3 : Int + var x3 : Int +// CHECK: <#kw>#else +#else + // CHECK: var x3 : Float + var x3 : Float +// CHECK: <#kw>#endif +#endif + +// CHECK: <#kw>#if !CONF +#if !CONF + // CHECK: var x4 : Int + var x4 : Int +// CHECK: <#kw>#endif +#endif + +// CHECK: <#kw>#if CONF +#if CONF + // CHECK: var y1 : Int + var y1 : Int +// CHECK: <#kw>#elseif BAZ +#elseif BAZ + // CHECK: var y1 : String + var y1 : String +// CHECK: <#kw>#else +#else + // CHECK: var y1 : Float + var y1 : Float +// CHECK: <#kw>#endif +#endif + +// CHECK: <#kw>#if !CONF +#if !CONF + // CHECK: var y2 : Int + var y2 : Int +// CHECK: <#kw>#elseif BAZ +#elseif BAZ + // CHECK: var y2 : String + var y2 : String +// CHECK: <#kw>#else +#else + // CHECK: var y2 : Float + var y2 : Float +// CHECK: <#kw>#endif +#endif + +// CHECK: <#kw>#if !CONF +#if !CONF + // CHECK: var y3 : Int + var y3 : Int +// CHECK: <#kw>#elseif CONF +#elseif CONF + // CHECK: var y3 : String + var y3 : String +// CHECK: <#kw>#else +#else + // CHECK: var y3 : Float + var y3 : Float +// CHECK: <#kw>#endif +#endif + + // CHECK: var l : Int + var l : Int +} + +// CHECK: class C2 { +class C2 { + // CHECK: <#kw>#if os(iOS) + #if os(iOS) + // CHECK: func foo() {} + func foo() {} + #endif +} + +class NestedPoundIf { +// CHECK: class NestedPoundIf { + func foo1() { +// CHECK: func foo1() { + #if os(macOS) +// CHECK: <#kw>#if os(macOS) + var a = 1 +// CHECK: var a = 1 + #if USE_METAL +// CHECK: <#kw>#if USE_METAL + var b = 2 +// CHECK: var b = 2 + #if os(iOS) +// CHECK: <#kw>#if os(iOS) + var c = 3 +// CHECK: var c = 3 + #else +// CHECK: <#kw>#else + var c = 3 +// CHECK: var c = 3 + #endif +// CHECK: <#kw>#endif + #else +// CHECK: <#kw>#else + var b = 2 +// CHECK: var b = 2 + #endif +// CHECK: <#kw>#endif + #else +// CHECK: <#kw>#else + var a = 1 +// CHECK: var a = 1 + #endif +// CHECK: <#kw>#endif + } + func foo2() {} +// CHECK: func foo2() {} + func foo3() {} +// CHECK: func foo3() {} +} + // CHECK: <#kw>#error("Error") #error("Error") // CHECK: <#kw>#warning("Warning") diff --git a/test/IDE/coloring_unclosed_hash_if.swift b/test/IDE/coloring_unclosed_hash_if.swift new file mode 100644 index 0000000000000..95b6fe4666ee8 --- /dev/null +++ b/test/IDE/coloring_unclosed_hash_if.swift @@ -0,0 +1,14 @@ +// RUN: %target-swift-ide-test -syntax-coloring -source-filename %s | %FileCheck %s +// RUN: %target-swift-ide-test -syntax-coloring -typecheck -source-filename %s | %FileCheck %s + +// CHECK: <#kw>#if d +// CHECK-NEXT: func bar() { +// CHECK-NEXT: <#kw>#if d +// CHECK-NEXT: } +// CHECK-NEXT: func foo() {} + +#if d +func bar() { + #if d +} +func foo() {} diff --git a/test/SourceKit/CodeExpand/code-expand.swift b/test/SourceKit/CodeExpand/code-expand.swift index 8144e40fbe902..61a40870d8f73 100644 --- a/test/SourceKit/CodeExpand/code-expand.swift +++ b/test/SourceKit/CodeExpand/code-expand.swift @@ -147,11 +147,13 @@ braced2(x: {<#T##() -> Void#>}, y: Int) // CHECK-NEXT: }, y: Int) braced3({ + #if true <#T##() -> Int#> + #endif }) // CHECK: braced3 { -// CHECK-NEXT: <#code#> -// CHECK-NEXT: } +// CHECK-NEXT: <#code#> +// CHECK-NEXT: } func returnTrailing() -> Int { return withtrail(<#T##() -> ()#>) @@ -254,6 +256,17 @@ func activeWithTrailing() { // CHECK: forEach { // CHECK-NEXT: <#code#> } +#if false +func inactive() { + foo(<#T##value: Foo##Foo#>) + // CHECK: foo(Foo) +} +func inactiveWithTrailing() { + forEach(<#T##() -> ()#>) + // CHECK: forEach { + // CHECK-NEXT: <#code#> +} +#endif expandClosureWithInternalParameterNames { withtrail(<#T##callback: (Int, Int) -> Bool##(_ a: Int, _ b: Int) -> Bool#>) diff --git a/test/SourceKit/CodeFormat/indent-pound-if.swift b/test/SourceKit/CodeFormat/indent-pound-if.swift index 50024b11dbc5a..8416f7b7a8507 100644 --- a/test/SourceKit/CodeFormat/indent-pound-if.swift +++ b/test/SourceKit/CodeFormat/indent-pound-if.swift @@ -35,7 +35,7 @@ print(false) // RUN: %FileCheck --strict-whitespace %s <%t.response // CHECK: key.sourcetext: "#else" -// CHECK: key.sourcetext: "let i = 3" -// CHECK: key.sourcetext: "func b () {" +// CHECK: key.sourcetext: " let i = 3" +// CHECK: key.sourcetext: " func b () {" // CHECK: key.sourcetext: "#elseif os(OSX)" -// CHECK: key.sourcetext: "func b () {" +// CHECK: key.sourcetext: " func b () {" diff --git a/test/SourceKit/DocumentStructure/structure.swift.empty.response b/test/SourceKit/DocumentStructure/structure.swift.empty.response index f3df09e5a056f..aa146ae8ce7df 100644 --- a/test/SourceKit/DocumentStructure/structure.swift.empty.response +++ b/test/SourceKit/DocumentStructure/structure.swift.empty.response @@ -1428,6 +1428,106 @@ } ] }, + { + key.kind: source.lang.swift.decl.extension, + key.name: "Result", + key.offset: 2496, + key.length: 36, + key.nameoffset: 2506, + key.namelength: 6, + key.bodyoffset: 2514, + key.bodylength: 17, + key.substructure: [ + { + key.kind: source.lang.swift.decl.function.method.instance, + key.name: "foo()", + key.offset: 2517, + key.length: 13, + key.nameoffset: 2522, + key.namelength: 5, + key.bodyoffset: 2529, + key.bodylength: 0 + } + ] + }, + { + key.kind: source.lang.swift.decl.extension, + key.name: "Outer", + key.offset: 2534, + key.length: 53, + key.nameoffset: 2544, + key.namelength: 5, + key.bodyoffset: 2551, + key.bodylength: 35, + key.substructure: [ + { + key.kind: source.lang.swift.decl.class, + key.name: "Inner", + key.offset: 2554, + key.length: 31, + key.nameoffset: 2560, + key.namelength: 5, + key.bodyoffset: 2567, + key.bodylength: 17, + key.substructure: [ + { + key.kind: source.lang.swift.decl.function.method.instance, + key.name: "deinit", + key.offset: 2572, + key.length: 9, + key.nameoffset: 2572, + key.namelength: 6, + key.bodyoffset: 2580, + key.bodylength: 0 + } + ] + } + ] + }, + { + key.kind: source.lang.swift.decl.extension, + key.accessibility: source.lang.swift.accessibility.public, + key.name: "Outer2", + key.offset: 2596, + key.length: 55, + key.nameoffset: 2606, + key.namelength: 6, + key.bodyoffset: 2614, + key.bodylength: 36, + key.attributes: [ + { + key.offset: 2589, + key.length: 6, + key.attribute: source.decl.attribute.public + } + ], + key.substructure: [ + { + key.kind: source.lang.swift.decl.class, + key.accessibility: source.lang.swift.accessibility.public, + key.name: "Inner2", + key.offset: 2617, + key.length: 32, + key.nameoffset: 2623, + key.namelength: 6, + key.bodyoffset: 2631, + key.bodylength: 17, + key.substructure: [ + { + key.kind: source.lang.swift.decl.function.method.instance, + key.accessibility: source.lang.swift.accessibility.public, + key.name: "deinit", + key.offset: 2636, + key.length: 9, + key.nameoffset: 2636, + key.namelength: 6, + key.bodyoffset: 2644, + key.bodylength: 0 + } + ] + } + ] + }, { key.kind: source.lang.swift.decl.protocol, key.accessibility: source.lang.swift.accessibility.internal, @@ -1478,6 +1578,50 @@ } ] }, + { + key.kind: source.lang.swift.decl.protocol, + key.accessibility: source.lang.swift.accessibility.internal, + key.name: "MyProtocol", + key.offset: 2780, + key.length: 71, + key.nameoffset: 2789, + key.namelength: 10, + key.bodyoffset: 2819, + key.bodylength: 31, + key.inheritedtypes: [ + { + key.name: "NSObjectProtocol" + } + ], + key.attributes: [ + { + key.offset: 2774, + key.length: 5, + key.attribute: source.decl.attribute.objc + } + ], + key.elements: [ + { + key.kind: source.lang.swift.structure.elem.typeref, + key.offset: 2801, + key.length: 16 + } + ], + key.substructure: [ + { + key.kind: source.lang.swift.decl.var.instance, + key.accessibility: source.lang.swift.accessibility.internal, + key.name: "thing", + key.offset: 2824, + key.length: 25, + key.typename: "NSObject", + key.nameoffset: 2828, + key.namelength: 5, + key.bodyoffset: 2845, + key.bodylength: 3 + } + ] + }, { key.kind: source.lang.swift.decl.class, key.accessibility: source.lang.swift.accessibility.internal, @@ -1487,7 +1631,44 @@ key.nameoffset: 2866, key.namelength: 1, key.bodyoffset: 2869, - key.bodylength: 59 + key.bodylength: 59, + key.substructure: [ + { + key.kind: source.lang.swift.decl.function.method.instance, + key.accessibility: source.lang.swift.accessibility.internal, + key.name: "foo(a:)", + key.offset: 2899, + key.length: 19, + key.selector_name: "fooWithA:", + key.nameoffset: 2904, + key.namelength: 11, + key.bodyoffset: 2917, + key.bodylength: 0, + key.attributes: [ + { + key.offset: 2893, + key.length: 5, + key.attribute: source.decl.attribute.objc.name + }, + { + key.offset: 2883, + key.length: 9, + key.attribute: source.decl.attribute.ibaction + } + ], + key.substructure: [ + { + key.kind: source.lang.swift.decl.var.parameter, + key.name: "a", + key.offset: 2908, + key.length: 6, + key.typename: "Int", + key.nameoffset: 2908, + key.namelength: 1 + } + ] + } + ] } ], key.diagnostics: [ diff --git a/test/SourceKit/DocumentStructure/structure.swift.foobar.response b/test/SourceKit/DocumentStructure/structure.swift.foobar.response index 9c3daaa5bf0ab..a49feac856040 100644 --- a/test/SourceKit/DocumentStructure/structure.swift.foobar.response +++ b/test/SourceKit/DocumentStructure/structure.swift.foobar.response @@ -1428,6 +1428,106 @@ } ] }, + { + key.kind: source.lang.swift.decl.extension, + key.name: "Result", + key.offset: 2496, + key.length: 36, + key.nameoffset: 2506, + key.namelength: 6, + key.bodyoffset: 2514, + key.bodylength: 17, + key.substructure: [ + { + key.kind: source.lang.swift.decl.function.method.instance, + key.name: "foo()", + key.offset: 2517, + key.length: 13, + key.nameoffset: 2522, + key.namelength: 5, + key.bodyoffset: 2529, + key.bodylength: 0 + } + ] + }, + { + key.kind: source.lang.swift.decl.extension, + key.name: "Outer", + key.offset: 2534, + key.length: 53, + key.nameoffset: 2544, + key.namelength: 5, + key.bodyoffset: 2551, + key.bodylength: 35, + key.substructure: [ + { + key.kind: source.lang.swift.decl.class, + key.name: "Inner", + key.offset: 2554, + key.length: 31, + key.nameoffset: 2560, + key.namelength: 5, + key.bodyoffset: 2567, + key.bodylength: 17, + key.substructure: [ + { + key.kind: source.lang.swift.decl.function.method.instance, + key.name: "deinit", + key.offset: 2572, + key.length: 9, + key.nameoffset: 2572, + key.namelength: 6, + key.bodyoffset: 2580, + key.bodylength: 0 + } + ] + } + ] + }, + { + key.kind: source.lang.swift.decl.extension, + key.accessibility: source.lang.swift.accessibility.public, + key.name: "Outer2", + key.offset: 2596, + key.length: 55, + key.nameoffset: 2606, + key.namelength: 6, + key.bodyoffset: 2614, + key.bodylength: 36, + key.attributes: [ + { + key.offset: 2589, + key.length: 6, + key.attribute: source.decl.attribute.public + } + ], + key.substructure: [ + { + key.kind: source.lang.swift.decl.class, + key.accessibility: source.lang.swift.accessibility.public, + key.name: "Inner2", + key.offset: 2617, + key.length: 32, + key.nameoffset: 2623, + key.namelength: 6, + key.bodyoffset: 2631, + key.bodylength: 17, + key.substructure: [ + { + key.kind: source.lang.swift.decl.function.method.instance, + key.accessibility: source.lang.swift.accessibility.public, + key.name: "deinit", + key.offset: 2636, + key.length: 9, + key.nameoffset: 2636, + key.namelength: 6, + key.bodyoffset: 2644, + key.bodylength: 0 + } + ] + } + ] + }, { key.kind: source.lang.swift.decl.protocol, key.accessibility: source.lang.swift.accessibility.internal, @@ -1478,6 +1578,50 @@ } ] }, + { + key.kind: source.lang.swift.decl.protocol, + key.accessibility: source.lang.swift.accessibility.internal, + key.name: "MyProtocol", + key.offset: 2780, + key.length: 71, + key.nameoffset: 2789, + key.namelength: 10, + key.bodyoffset: 2819, + key.bodylength: 31, + key.inheritedtypes: [ + { + key.name: "NSObjectProtocol" + } + ], + key.attributes: [ + { + key.offset: 2774, + key.length: 5, + key.attribute: source.decl.attribute.objc + } + ], + key.elements: [ + { + key.kind: source.lang.swift.structure.elem.typeref, + key.offset: 2801, + key.length: 16 + } + ], + key.substructure: [ + { + key.kind: source.lang.swift.decl.var.instance, + key.accessibility: source.lang.swift.accessibility.internal, + key.name: "thing", + key.offset: 2824, + key.length: 25, + key.typename: "NSObject", + key.nameoffset: 2828, + key.namelength: 5, + key.bodyoffset: 2845, + key.bodylength: 3 + } + ] + }, { key.kind: source.lang.swift.decl.class, key.accessibility: source.lang.swift.accessibility.internal, @@ -1487,7 +1631,44 @@ key.nameoffset: 2866, key.namelength: 1, key.bodyoffset: 2869, - key.bodylength: 59 + key.bodylength: 59, + key.substructure: [ + { + key.kind: source.lang.swift.decl.function.method.instance, + key.accessibility: source.lang.swift.accessibility.internal, + key.name: "foo(a:)", + key.offset: 2899, + key.length: 19, + key.selector_name: "fooWithA:", + key.nameoffset: 2904, + key.namelength: 11, + key.bodyoffset: 2917, + key.bodylength: 0, + key.attributes: [ + { + key.offset: 2893, + key.length: 5, + key.attribute: source.decl.attribute.objc.name + }, + { + key.offset: 2883, + key.length: 9, + key.attribute: source.decl.attribute.ibaction + } + ], + key.substructure: [ + { + key.kind: source.lang.swift.decl.var.parameter, + key.name: "a", + key.offset: 2908, + key.length: 6, + key.typename: "Int", + key.nameoffset: 2908, + key.namelength: 1 + } + ] + } + ] } ], key.diagnostics: [ diff --git a/test/SourceKit/DocumentStructure/structure.swift.response b/test/SourceKit/DocumentStructure/structure.swift.response index 8f7b82ff0b1c9..28ec4000fa6cb 100644 --- a/test/SourceKit/DocumentStructure/structure.swift.response +++ b/test/SourceKit/DocumentStructure/structure.swift.response @@ -1428,6 +1428,106 @@ } ] }, + { + key.kind: source.lang.swift.decl.extension, + key.name: "Result", + key.offset: 2496, + key.length: 36, + key.nameoffset: 2506, + key.namelength: 6, + key.bodyoffset: 2514, + key.bodylength: 17, + key.substructure: [ + { + key.kind: source.lang.swift.decl.function.method.instance, + key.name: "foo()", + key.offset: 2517, + key.length: 13, + key.nameoffset: 2522, + key.namelength: 5, + key.bodyoffset: 2529, + key.bodylength: 0 + } + ] + }, + { + key.kind: source.lang.swift.decl.extension, + key.name: "Outer", + key.offset: 2534, + key.length: 53, + key.nameoffset: 2544, + key.namelength: 5, + key.bodyoffset: 2551, + key.bodylength: 35, + key.substructure: [ + { + key.kind: source.lang.swift.decl.class, + key.name: "Inner", + key.offset: 2554, + key.length: 31, + key.nameoffset: 2560, + key.namelength: 5, + key.bodyoffset: 2567, + key.bodylength: 17, + key.substructure: [ + { + key.kind: source.lang.swift.decl.function.method.instance, + key.name: "deinit", + key.offset: 2572, + key.length: 9, + key.nameoffset: 2572, + key.namelength: 6, + key.bodyoffset: 2580, + key.bodylength: 0 + } + ] + } + ] + }, + { + key.kind: source.lang.swift.decl.extension, + key.accessibility: source.lang.swift.accessibility.public, + key.name: "Outer2", + key.offset: 2596, + key.length: 55, + key.nameoffset: 2606, + key.namelength: 6, + key.bodyoffset: 2614, + key.bodylength: 36, + key.attributes: [ + { + key.offset: 2589, + key.length: 6, + key.attribute: source.decl.attribute.public + } + ], + key.substructure: [ + { + key.kind: source.lang.swift.decl.class, + key.accessibility: source.lang.swift.accessibility.public, + key.name: "Inner2", + key.offset: 2617, + key.length: 32, + key.nameoffset: 2623, + key.namelength: 6, + key.bodyoffset: 2631, + key.bodylength: 17, + key.substructure: [ + { + key.kind: source.lang.swift.decl.function.method.instance, + key.accessibility: source.lang.swift.accessibility.public, + key.name: "deinit", + key.offset: 2636, + key.length: 9, + key.nameoffset: 2636, + key.namelength: 6, + key.bodyoffset: 2644, + key.bodylength: 0 + } + ] + } + ] + }, { key.kind: source.lang.swift.decl.protocol, key.accessibility: source.lang.swift.accessibility.internal, @@ -1478,6 +1578,50 @@ } ] }, + { + key.kind: source.lang.swift.decl.protocol, + key.accessibility: source.lang.swift.accessibility.internal, + key.name: "MyProtocol", + key.offset: 2780, + key.length: 71, + key.nameoffset: 2789, + key.namelength: 10, + key.bodyoffset: 2819, + key.bodylength: 31, + key.inheritedtypes: [ + { + key.name: "NSObjectProtocol" + } + ], + key.attributes: [ + { + key.offset: 2774, + key.length: 5, + key.attribute: source.decl.attribute.objc + } + ], + key.elements: [ + { + key.kind: source.lang.swift.structure.elem.typeref, + key.offset: 2801, + key.length: 16 + } + ], + key.substructure: [ + { + key.kind: source.lang.swift.decl.var.instance, + key.accessibility: source.lang.swift.accessibility.internal, + key.name: "thing", + key.offset: 2824, + key.length: 25, + key.typename: "NSObject", + key.nameoffset: 2828, + key.namelength: 5, + key.bodyoffset: 2845, + key.bodylength: 3 + } + ] + }, { key.kind: source.lang.swift.decl.class, key.accessibility: source.lang.swift.accessibility.internal, @@ -1487,7 +1631,44 @@ key.nameoffset: 2866, key.namelength: 1, key.bodyoffset: 2869, - key.bodylength: 59 + key.bodylength: 59, + key.substructure: [ + { + key.kind: source.lang.swift.decl.function.method.instance, + key.accessibility: source.lang.swift.accessibility.internal, + key.name: "foo(a:)", + key.offset: 2899, + key.length: 19, + key.selector_name: "fooWithA:", + key.nameoffset: 2904, + key.namelength: 11, + key.bodyoffset: 2917, + key.bodylength: 0, + key.attributes: [ + { + key.offset: 2893, + key.length: 5, + key.attribute: source.decl.attribute.objc.name + }, + { + key.offset: 2883, + key.length: 9, + key.attribute: source.decl.attribute.ibaction + } + ], + key.substructure: [ + { + key.kind: source.lang.swift.decl.var.parameter, + key.name: "a", + key.offset: 2908, + key.length: 6, + key.typename: "Int", + key.nameoffset: 2908, + key.namelength: 1 + } + ] + } + ] } ], key.diagnostics: [ diff --git a/test/SourceKit/SyntaxMapData/syntaxmap.swift.response b/test/SourceKit/SyntaxMapData/syntaxmap.swift.response index 34ed36e100af9..667e39e080281 100644 --- a/test/SourceKit/SyntaxMapData/syntaxmap.swift.response +++ b/test/SourceKit/SyntaxMapData/syntaxmap.swift.response @@ -79,7 +79,7 @@ key.length: 1 }, { - key.kind: source.lang.swift.syntaxtype.identifier, + key.kind: source.lang.swift.syntaxtype.typeidentifier, key.offset: 153, key.length: 3 }, @@ -99,7 +99,7 @@ key.length: 1 }, { - key.kind: source.lang.swift.syntaxtype.identifier, + key.kind: source.lang.swift.syntaxtype.typeidentifier, key.offset: 171, key.length: 5 },