Files
swift-mirror/test/SourceKit/DocSupport/doc_swift_module.swift.response
Slava Pestov cfe9e6a3de IDE: Use GenericSignatures and interface types (mostly)
There was a ton of complicated logic here to work around
two problems:

- Same-type constraints were not represented properly in
  RequirementReprs, requiring us to store them in strong form
  and parse them out when printing type interfaces.

- The TypeBase::getAllGenericArgs() method did not do the
  right thing for members of protocols and protocol extensions,
  and so instead of simple calls to Type::subst(), we had
  an elaborate 'ArchetypeTransformer' abstraction repeated
  in two places.

Rewrite this code to use GenericSignatures and
GenericFunctionType instead of old-school GenericParamLists
and PolymorphicFunctionType.

This changes the code completion and AST printer output
slightly. A few of the changes are actually fixes for cases
where the old code didn't handle substitutions properly.
A few others are subjective, for example a generic parameter
list of the form <T : Proto> now prints as <T where T : Proto>.

We can add heuristics to make the output whatever we want
here; the important thing is that now we're using modern
abstractions.
2016-10-02 23:49:15 -04:00

1136 lines
30 KiB
Plaintext

class C1 : Prot {
typealias Element = Int
var p: Int
func foo()
subscript(_ index: Int) -> Int { get }
subscript(index i: Float) -> Int { get }
func extfoo()
func foo1()
}
enum MyEnum : Int {
case Blah
}
@objc protocol P2 {
@objc optional func foo1()
}
protocol P3 {
associatedtype T
}
protocol Prot {
associatedtype Element
var p: Int { get }
func foo()
func foo1()
}
extension Prot {
func foo1()
}
extension Prot where Self.Element == Int {
func extfoo()
}
struct S1 {
enum SE {
case a
case b
case c
}
func foo1()
struct S2 {
let b: Int
}
}
struct S2 : P3 {
typealias T = cake.S2
}
func genfoo<T1, T2>(x ix: T1, y iy: T2) where T1 : Prot, T2 : cake.C1, T1.Element == Int
[
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 1,
key.length: 5
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 7,
key.length: 2
},
{
key.kind: source.lang.swift.ref.protocol,
key.name: "Prot",
key.usr: "s:P4cake4Prot",
key.offset: 12,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 24,
key.length: 9
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 34,
key.length: 7
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
key.offset: 44,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 53,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 57,
key.length: 1
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
key.offset: 60,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 69,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 74,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 85,
key.length: 9
},
{
key.kind: source.lang.swift.syntaxtype.argument,
key.offset: 95,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
key.offset: 97,
key.length: 5
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 97,
key.length: 5
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
key.offset: 104,
key.length: 3
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
key.offset: 112,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 118,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 129,
key.length: 9
},
{
key.kind: source.lang.swift.syntaxtype.argument,
key.offset: 139,
key.length: 5
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
key.offset: 145,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 139,
key.length: 5
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 145,
key.length: 1
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Float",
key.usr: "s:Sf",
key.offset: 148,
key.length: 5
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
key.offset: 158,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 164,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 175,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 180,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 194,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 199,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 209,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 214,
key.length: 6
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
key.offset: 223,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 234,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 239,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.attribute.builtin,
key.offset: 247,
key.length: 5
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 253,
key.length: 8
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 262,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.attribute.builtin,
key.offset: 272,
key.length: 5
},
{
key.kind: source.lang.swift.syntaxtype.attribute.builtin,
key.offset: 278,
key.length: 8
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 287,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 292,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 302,
key.length: 8
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 311,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 321,
key.length: 14
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 336,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 341,
key.length: 8
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 350,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 362,
key.length: 14
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 377,
key.length: 7
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 390,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 394,
key.length: 1
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
key.offset: 397,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 403,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 414,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 419,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 430,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 435,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 445,
key.length: 9
},
{
key.kind: source.lang.swift.ref.protocol,
key.name: "Prot",
key.usr: "s:P4cake4Prot",
key.offset: 455,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 467,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 472,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 482,
key.length: 9
},
{
key.kind: source.lang.swift.ref.protocol,
key.name: "Prot",
key.usr: "s:P4cake4Prot",
key.offset: 492,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 497,
key.length: 5
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 503,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 508,
key.length: 7
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
key.offset: 519,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 530,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 535,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 547,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 554,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 564,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 569,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 583,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 588,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 599,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 604,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 615,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 620,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 633,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 638,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 650,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 657,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 671,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 675,
key.length: 1
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
key.offset: 678,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 691,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 698,
key.length: 2
},
{
key.kind: source.lang.swift.ref.protocol,
key.name: "P3",
key.usr: "s:P4cake2P3",
key.offset: 703,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 713,
key.length: 9
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 723,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
key.offset: 727,
key.length: 4
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "S2",
key.usr: "s:V4cake2S2",
key.offset: 732,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 738,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 743,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 750,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 754,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 758,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 760,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 764,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 768,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 770,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 774,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 778,
key.length: 5
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
key.offset: 784,
key.length: 2
},
{
key.kind: source.lang.swift.ref.protocol,
key.name: "Prot",
key.usr: "s:P4cake4Prot",
key.offset: 789,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
key.offset: 795,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
key.offset: 800,
key.length: 4
},
{
key.kind: source.lang.swift.ref.class,
key.name: "C1",
key.usr: "s:C4cake2C1",
key.offset: 805,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
key.offset: 809,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
key.offset: 812,
key.length: 7
},
{
key.kind: source.lang.swift.syntaxtype.argument,
key.offset: 758,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
key.offset: 760,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.argument,
key.offset: 768,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
key.offset: 770,
key.length: 2
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
key.offset: 823,
key.length: 3
}
]
[
{
key.kind: source.lang.swift.decl.class,
key.name: "C1",
key.usr: "s:C4cake2C1",
key.offset: 1,
key.length: 206,
key.fully_annotated_decl: "<decl.class><syntaxtype.keyword>class</syntaxtype.keyword> <decl.name>C1</decl.name> : <ref.protocol usr=\"s:P4cake4Prot\">Prot</ref.protocol></decl.class>",
key.conforms: [
{
key.kind: source.lang.swift.ref.protocol,
key.name: "Prot",
key.usr: "s:P4cake4Prot"
}
],
key.entities: [
{
key.kind: source.lang.swift.decl.typealias,
key.name: "Element",
key.usr: "s:C4cake2C17Element",
key.offset: 24,
key.length: 23,
key.fully_annotated_decl: "<decl.typealias><syntaxtype.keyword>typealias</syntaxtype.keyword> <decl.name>Element</decl.name> = <ref.struct usr=\"s:Si\">Int</ref.struct></decl.typealias>",
key.conforms: [
{
key.kind: source.lang.swift.ref.protocol,
key.name: "SignedInteger",
key.usr: "s:Ps13SignedInteger"
},
{
key.kind: source.lang.swift.ref.protocol,
key.name: "Comparable",
key.usr: "s:Ps10Comparable"
},
{
key.kind: source.lang.swift.ref.protocol,
key.name: "Equatable",
key.usr: "s:Ps9Equatable"
}
]
},
{
key.kind: source.lang.swift.decl.var.instance,
key.name: "p",
key.usr: "s:vC4cake2C11pSi",
key.offset: 53,
key.length: 10,
key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>p</decl.name>: <decl.var.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.type></decl.var.instance>",
key.conforms: [
{
key.kind: source.lang.swift.ref.var.instance,
key.name: "p",
key.usr: "s:vP4cake4Prot1pSi"
},
{
key.kind: source.lang.swift.ref.var.instance,
key.name: "p",
key.usr: "s:vP4cake4Prot1pSi"
}
]
},
{
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "foo()",
key.usr: "s:FC4cake2C13fooFT_T_",
key.offset: 69,
key.length: 10,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>foo</decl.name>()</decl.function.method.instance>",
key.conforms: [
{
key.kind: source.lang.swift.ref.function.method.instance,
key.name: "foo()",
key.usr: "s:FP4cake4Prot3fooFT_T_"
},
{
key.kind: source.lang.swift.ref.function.method.instance,
key.name: "foo()",
key.usr: "s:FP4cake4Prot3fooFT_T_"
}
]
},
{
key.kind: source.lang.swift.decl.function.subscript,
key.name: "subscript(_:)",
key.usr: "s:iC4cake2C19subscriptFSiSi",
key.offset: 85,
key.length: 38,
key.fully_annotated_decl: "<decl.function.subscript><syntaxtype.keyword>subscript</syntaxtype.keyword>(<decl.var.parameter><decl.var.parameter.name>index</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.struct usr=\"s:Si\">Int</ref.struct></decl.function.returntype> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.function.subscript>",
key.entities: [
{
key.kind: source.lang.swift.decl.var.local,
key.keyword: "_",
key.name: "index",
key.offset: 104,
key.length: 3
}
]
},
{
key.kind: source.lang.swift.decl.function.subscript,
key.name: "subscript(index:)",
key.usr: "s:iC4cake2C19subscriptFT5indexSf_Si",
key.offset: 129,
key.length: 40,
key.fully_annotated_decl: "<decl.function.subscript><syntaxtype.keyword>subscript</syntaxtype.keyword>(<decl.var.parameter><decl.var.parameter.argument_label>index</decl.var.parameter.argument_label> <decl.var.parameter.name>i</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"s:Sf\">Float</ref.struct></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.struct usr=\"s:Si\">Int</ref.struct></decl.function.returntype> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.function.subscript>",
key.entities: [
{
key.kind: source.lang.swift.decl.var.local,
key.keyword: "index",
key.name: "i",
key.offset: 148,
key.length: 5
}
]
},
{
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "extfoo()",
key.usr: "s:Fe4cakeRxS_4Protwx7ElementzSirS0_6extfooFT_T_::SYNTHESIZED::s:C4cake2C1",
key.original_usr: "s:Fe4cakeRxS_4Protwx7ElementzSirS0_6extfooFT_T_",
key.offset: 175,
key.length: 13,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>extfoo</decl.name>()</decl.function.method.instance>"
},
{
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "foo1()",
key.usr: "s:FE4cakePS_4Prot4foo1FT_T_::SYNTHESIZED::s:C4cake2C1",
key.original_usr: "s:FE4cakePS_4Prot4foo1FT_T_",
key.offset: 194,
key.length: 11,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>foo1</decl.name>()</decl.function.method.instance>"
}
]
},
{
key.kind: source.lang.swift.decl.enum,
key.name: "MyEnum",
key.usr: "s:O4cake6MyEnum",
key.offset: 209,
key.length: 36,
key.fully_annotated_decl: "<decl.enum><syntaxtype.keyword>enum</syntaxtype.keyword> <decl.name>MyEnum</decl.name> : <ref.struct usr=\"s:Si\">Int</ref.struct></decl.enum>",
key.inherits: [
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si"
}
],
key.entities: [
{
key.kind: source.lang.swift.decl.enumelement,
key.name: "Blah",
key.usr: "s:FO4cake6MyEnum4BlahFMS0_S0_",
key.offset: 234,
key.length: 9,
key.fully_annotated_decl: "<decl.enumelement><syntaxtype.keyword>case</syntaxtype.keyword> <decl.name>Blah</decl.name></decl.enumelement>"
}
]
},
{
key.kind: source.lang.swift.decl.protocol,
key.name: "P2",
key.usr: "s:P4cake2P2",
key.offset: 247,
key.length: 53,
key.fully_annotated_decl: "<decl.protocol><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@objc</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>protocol</syntaxtype.keyword> <decl.name>P2</decl.name></decl.protocol>",
key.entities: [
{
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "foo1()",
key.usr: "s:FP4cake2P24foo1FT_T_",
key.offset: 272,
key.length: 26,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@objc</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>optional</syntaxtype.keyword> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>foo1</decl.name>()</decl.function.method.instance>",
key.is_optional: 1
}
]
},
{
key.kind: source.lang.swift.decl.protocol,
key.name: "P3",
key.usr: "s:P4cake2P3",
key.offset: 302,
key.length: 37,
key.fully_annotated_decl: "<decl.protocol><syntaxtype.keyword>protocol</syntaxtype.keyword> <decl.name>P3</decl.name></decl.protocol>",
key.entities: [
{
key.kind: source.lang.swift.decl.associatedtype,
key.name: "T",
key.usr: "s:P4cake2P31T",
key.offset: 321,
key.length: 16,
key.fully_annotated_decl: "<decl.associatedtype><syntaxtype.keyword>associatedtype</syntaxtype.keyword> <decl.name>T</decl.name></decl.associatedtype>"
}
]
},
{
key.kind: source.lang.swift.decl.protocol,
key.name: "Prot",
key.usr: "s:P4cake4Prot",
key.offset: 341,
key.length: 102,
key.fully_annotated_decl: "<decl.protocol><syntaxtype.keyword>protocol</syntaxtype.keyword> <decl.name>Prot</decl.name></decl.protocol>",
key.entities: [
{
key.kind: source.lang.swift.decl.associatedtype,
key.name: "Element",
key.usr: "s:P4cake4Prot7Element",
key.offset: 362,
key.length: 22,
key.fully_annotated_decl: "<decl.associatedtype><syntaxtype.keyword>associatedtype</syntaxtype.keyword> <decl.name>Element</decl.name></decl.associatedtype>"
},
{
key.kind: source.lang.swift.decl.var.instance,
key.name: "p",
key.usr: "s:vP4cake4Prot1pSi",
key.offset: 390,
key.length: 18,
key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>p</decl.name>: <decl.var.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.instance>"
},
{
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "foo()",
key.usr: "s:FP4cake4Prot3fooFT_T_",
key.offset: 414,
key.length: 10,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>foo</decl.name>()</decl.function.method.instance>"
},
{
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "foo1()",
key.usr: "s:FP4cake4Prot4foo1FT_T_",
key.offset: 430,
key.length: 11,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>foo1</decl.name>()</decl.function.method.instance>"
}
]
},
{
key.kind: source.lang.swift.decl.extension.protocol,
key.offset: 445,
key.length: 35,
key.extends: {
key.kind: source.lang.swift.ref.protocol,
key.name: "Prot",
key.usr: "s:P4cake4Prot"
},
key.entities: [
{
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "foo1()",
key.usr: "s:FE4cakePS_4Prot4foo1FT_T_",
key.default_implementation_of: "s:FP4cake4Prot4foo1FT_T_",
key.offset: 467,
key.length: 11,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>foo1</decl.name>()</decl.function.method.instance>"
}
]
},
{
key.kind: source.lang.swift.decl.extension.protocol,
key.generic_requirements: [
{
key.description: "Self.Element == Int"
}
],
key.offset: 482,
key.length: 63,
key.extends: {
key.kind: source.lang.swift.ref.protocol,
key.name: "Prot",
key.usr: "s:P4cake4Prot"
},
key.entities: [
{
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "extfoo()",
key.usr: "s:Fe4cakeRxS_4Protwx7ElementzSirS0_6extfooFT_T_",
key.offset: 530,
key.length: 13,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>extfoo</decl.name>()</decl.function.method.instance>"
}
]
},
{
key.kind: source.lang.swift.decl.struct,
key.name: "S1",
key.usr: "s:V4cake2S1",
key.offset: 547,
key.length: 142,
key.fully_annotated_decl: "<decl.struct><syntaxtype.keyword>struct</syntaxtype.keyword> <decl.name>S1</decl.name></decl.struct>",
key.entities: [
{
key.kind: source.lang.swift.decl.enum,
key.name: "SE",
key.usr: "s:OV4cake2S12SE",
key.offset: 564,
key.length: 63,
key.fully_annotated_decl: "<decl.enum><syntaxtype.keyword>enum</syntaxtype.keyword> <decl.name>SE</decl.name></decl.enum>",
key.entities: [
{
key.kind: source.lang.swift.decl.enumelement,
key.name: "a",
key.usr: "s:FOV4cake2S12SE1aFMS1_S1_",
key.offset: 583,
key.length: 6,
key.fully_annotated_decl: "<decl.enumelement><syntaxtype.keyword>case</syntaxtype.keyword> <decl.name>a</decl.name></decl.enumelement>"
},
{
key.kind: source.lang.swift.decl.enumelement,
key.name: "b",
key.usr: "s:FOV4cake2S12SE1bFMS1_S1_",
key.offset: 599,
key.length: 6,
key.fully_annotated_decl: "<decl.enumelement><syntaxtype.keyword>case</syntaxtype.keyword> <decl.name>b</decl.name></decl.enumelement>"
},
{
key.kind: source.lang.swift.decl.enumelement,
key.name: "c",
key.usr: "s:FOV4cake2S12SE1cFMS1_S1_",
key.offset: 615,
key.length: 6,
key.fully_annotated_decl: "<decl.enumelement><syntaxtype.keyword>case</syntaxtype.keyword> <decl.name>c</decl.name></decl.enumelement>"
}
]
},
{
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "foo1()",
key.usr: "s:FV4cake2S14foo1FT_T_",
key.offset: 633,
key.length: 11,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>foo1</decl.name>()</decl.function.method.instance>"
},
{
key.kind: source.lang.swift.decl.struct,
key.name: "S2",
key.usr: "s:VV4cake2S12S2",
key.offset: 650,
key.length: 37,
key.fully_annotated_decl: "<decl.struct><syntaxtype.keyword>struct</syntaxtype.keyword> <decl.name>S2</decl.name></decl.struct>",
key.entities: [
{
key.kind: source.lang.swift.decl.var.instance,
key.name: "b",
key.usr: "s:vVV4cake2S12S21bSi",
key.offset: 671,
key.length: 10,
key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>let</syntaxtype.keyword> <decl.name>b</decl.name>: <decl.var.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.type></decl.var.instance>"
}
]
}
]
},
{
key.kind: source.lang.swift.decl.struct,
key.name: "S2",
key.usr: "s:V4cake2S2",
key.offset: 691,
key.length: 45,
key.fully_annotated_decl: "<decl.struct><syntaxtype.keyword>struct</syntaxtype.keyword> <decl.name>S2</decl.name> : <ref.protocol usr=\"s:P4cake2P3\">P3</ref.protocol></decl.struct>",
key.conforms: [
{
key.kind: source.lang.swift.ref.protocol,
key.name: "P3",
key.usr: "s:P4cake2P3"
}
],
key.entities: [
{
key.kind: source.lang.swift.decl.typealias,
key.name: "T",
key.usr: "s:V4cake2S21T",
key.offset: 713,
key.length: 21,
key.fully_annotated_decl: "<decl.typealias><syntaxtype.keyword>typealias</syntaxtype.keyword> <decl.name>T</decl.name> = <ref.struct usr=\"s:V4cake2S2\">S2</ref.struct></decl.typealias>",
key.conforms: [
{
key.kind: source.lang.swift.ref.protocol,
key.name: "P3",
key.usr: "s:P4cake2P3"
}
]
}
]
},
{
key.kind: source.lang.swift.decl.function.free,
key.name: "genfoo(x:y:)",
key.usr: "s:F4cake6genfoou0_RxS_4Prot_CS_2C1wx7ElementzSirFT1xx1yq__T_",
key.generic_params: [
{
key.name: "T1"
},
{
key.name: "T2"
}
],
key.generic_requirements: [
{
key.description: "T1 : Prot"
},
{
key.description: "T2 : C1"
},
{
key.description: "T1.Element == Int"
}
],
key.offset: 738,
key.length: 88,
key.fully_annotated_decl: "<decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>genfoo</decl.name>&lt;<decl.generic_type_param usr=\"s:tF4cake6genfoou0_RxS_4Prot_CS_2C1wx7ElementzSirFT1xx1yq__T_L_2T1Mx\"><decl.generic_type_param.name>T1</decl.generic_type_param.name></decl.generic_type_param>, <decl.generic_type_param usr=\"s:tF4cake6genfoou0_RxS_4Prot_CS_2C1wx7ElementzSirFT1xx1yq__T_L_2T2Mq_\"><decl.generic_type_param.name>T2</decl.generic_type_param.name></decl.generic_type_param>&gt;(<decl.var.parameter><decl.var.parameter.argument_label>x</decl.var.parameter.argument_label> <decl.var.parameter.name>ix</decl.var.parameter.name>: <decl.var.parameter.type>T1</decl.var.parameter.type></decl.var.parameter>, <decl.var.parameter><decl.var.parameter.argument_label>y</decl.var.parameter.argument_label> <decl.var.parameter.name>iy</decl.var.parameter.name>: <decl.var.parameter.type>T2</decl.var.parameter.type></decl.var.parameter>) <syntaxtype.keyword>where</syntaxtype.keyword> T1 : <ref.protocol usr=\"s:P4cake4Prot\">Prot</ref.protocol>, T2 : <ref.class usr=\"s:C4cake2C1\">C1</ref.class>, T1.Element == <ref.struct usr=\"s:Si\">Int</ref.struct></decl.function.free>",
key.entities: [
{
key.kind: source.lang.swift.decl.var.local,
key.keyword: "x",
key.name: "ix",
key.offset: 764,
key.length: 2
},
{
key.kind: source.lang.swift.decl.var.local,
key.keyword: "y",
key.name: "iy",
key.offset: 774,
key.length: 2
}
]
}
]