|
| 1 | +// RUN: %swift-ide-test -code-completion -code-completion-annotate-results -source-filename %s -code-completion-token=GLOBAL_EXPR | %FileCheck %s --check-prefix=GLOBAL_EXPR |
| 2 | +// RUN: %swift-ide-test -code-completion -code-completion-annotate-results -source-filename %s -code-completion-token=GLOBAL_TYPE | %FileCheck %s --check-prefix=GLOBAL_TYPE |
| 3 | +// RUN: %swift-ide-test -code-completion -code-completion-annotate-results -source-filename %s -code-completion-token=EXPR_MEMBER | %FileCheck %s --check-prefix=EXPR_MEMBER |
| 4 | +// RUN: %swift-ide-test -code-completion -code-completion-annotate-results -source-filename %s -code-completion-token=EXPR_POSTFIX | %FileCheck %s --check-prefix=EXPR_POSTFIX |
| 5 | +// RUN: %swift-ide-test -code-completion -code-completion-annotate-results -source-filename %s -code-completion-token=EXPR_IMPLICITMEMBER | %FileCheck %s --check-prefix=EXPR_IMPLICITMEMBER |
| 6 | +// RUN: %swift-ide-test -code-completion -code-completion-annotate-results -source-filename %s -code-completion-token=CALLARG | %FileCheck %s --check-prefix=CALLARG |
| 7 | + |
| 8 | +struct MyStruct { |
| 9 | + init(x: Int) {} |
| 10 | + var propNormal: Int { fatalError() } |
| 11 | + var propFunction: () -> MyStruct { fatalError() } |
| 12 | + func labelNameParamName(label param: (inout Int) throws -> MyStruct) rethrows {} |
| 13 | + func labelName(label: (@autoclosure () -> Int) -> Int) {} |
| 14 | + func sameName(label label: inout Int) {} |
| 15 | + func paramName(_ param: Int) {} |
| 16 | + subscript(param: Int) -> Int { 1 } |
| 17 | + subscript(label param: Int) -> Int { 1 } |
| 18 | + |
| 19 | + static func +(lhs: MyStruct, rhs: MyStruct) -> MyStruct { fatalError() } |
| 20 | + |
| 21 | + static var instance: MyStruct { fatalError() } |
| 22 | + static func create(x: Int) -> MyStruct { fatalError() } |
| 23 | +} |
| 24 | + |
| 25 | +func testGlobal() { |
| 26 | + #^GLOBAL_EXPR^# |
| 27 | +} |
| 28 | +// GLOBAL_EXPR: Begin completions |
| 29 | +// GLOBAL_EXPR-DAG: Decl[Struct]/CurrModule: <name>MyStruct</name>; name=MyStruct |
| 30 | +// GLOBAL_EXPR-DAG: Keyword[class]/None: <keyword>class</keyword>; name=class |
| 31 | +// GLOBAL_EXPR-DAG: Keyword[enum]/None: <keyword>enum</keyword>; name=enum |
| 32 | +// GLOBAL_EXPR-DAG: Keyword[if]/None: <keyword>if</keyword>; name=if |
| 33 | +// GLOBAL_EXPR-DAG: Keyword[guard]/None: <keyword>guard</keyword>; name=guard |
| 34 | +// GLOBAL_EXPR-DAG: Keyword[try]/None: <keyword>try</keyword>; name=try |
| 35 | +// GLOBAL_EXPR-DAG: Keyword[try]/None: <keyword>try!</keyword>; name=try! |
| 36 | +// GLOBAL_EXPR-DAG: Keyword/None: <keyword>Any</keyword>; name=Any |
| 37 | +// GLOBAL_EXPR-DAG: Literal[Integer]/None: 0; name=0 |
| 38 | +// GLOBAL_EXPR-DAG: Literal[Boolean]/None: <name>true</name>; name=true |
| 39 | +// GLOBAL_EXPR-DAG: Literal[Boolean]/None: <name>false</name>; name=false |
| 40 | +// GLOBAL_EXPR-DAG: Literal[Nil]/None: <name>nil</name>; name=nil |
| 41 | +// GLOBAL_EXPR-DAG: Literal[String]/None: "<callarg><callarg.param>abc</callarg.param></callarg>"; name="abc" |
| 42 | +// GLOBAL_EXPR-DAG: Literal[Array]/None: [<callarg><callarg.param>values</callarg.param></callarg>]; name=[values] |
| 43 | +// GLOBAL_EXPR-DAG: Literal[Dictionary]/None: [<callarg><callarg.param>key</callarg.param></callarg>: <callarg><callarg.param>value</callarg.param></callarg>]; name=[key: value] |
| 44 | +// GLOBAL_EXPR-DAG: Literal[_Color]/None: <name>#colorLiteral</name>(<callarg><callarg.label>red</callarg.label>: <callarg.type><typeid.sys>Float</typeid.sys></callarg.type></callarg>, <callarg><callarg.label>green</callarg.label>: <callarg.type><typeid.sys>Float</typeid.sys></callarg.type></callarg>, <callarg><callarg.label>blue</callarg.label>: <callarg.type><typeid.sys>Float</typeid.sys></callarg.type></callarg>, <callarg><callarg.label>alpha</callarg.label>: <callarg.type><typeid.sys>Float</typeid.sys></callarg.type></callarg>); name=#colorLiteral(red: Float, green: Float, blue: Float, alpha: Float) |
| 45 | +// GLOBAL_EXPR-DAG: Literal[_Image]/None: <name>#imageLiteral</name>(<callarg><callarg.label>resourceName</callarg.label>: <callarg.type><typeid.sys>String</typeid.sys></callarg.type></callarg>); name=#imageLiteral(resourceName: String) |
| 46 | +// GLOBAL_EXPR-DAG: Literal[Tuple]/None: (<callarg><callarg.param>values</callarg.param></callarg>); name=(values) |
| 47 | +// GLOBAL_EXPR-DAG: Keyword[#function]/None: <name>#function</name>; name=#function |
| 48 | +// GLOBAL_EXPR-DAG: Decl[Module]/None: <name>Swift</name>; name=Swift |
| 49 | +// GLOBAL_EXPR-DAG: Decl[Struct]/OtherModule[Swift]: <name>Int</name>; name=Int |
| 50 | +// GLOBAL_EXPR-DAG: Decl[FreeFunction]/OtherModule[Swift]: <name>print</name>(<callarg><callarg.label>_</callarg.label> <callarg.param>items</callarg.param>: <callarg.type>Any</callarg.type>...</callarg>, <callarg><callarg.label>to</callarg.label> <callarg.param>output</callarg.param>: &<callarg.type><typeid.sys>TextOutputStream</typeid.sys></callarg.type></callarg>); name=print(items: Any..., to: &TextOutputStream) |
| 51 | +// GLOBAL_EXPR: End completions |
| 52 | + |
| 53 | + |
| 54 | +func testType(value: #^GLOBAL_TYPE^#) {} |
| 55 | +// GLOBAL_TYPE: Begin completions |
| 56 | +// GLOBAL_TYPE-DAG: Keyword/None: <keyword>Any</keyword>; name=Any |
| 57 | +// GLOBAL_TYPE-DAG: Decl[Struct]/CurrModule: <name>MyStruct</name>; name=MyStruct |
| 58 | +// GLOBAL_TYPE-DAG: Decl[Module]/None: <name>swift_ide_test</name>; name=swift_ide_test |
| 59 | +// GLOBAL_TYPE-DAG: Decl[Module]/None: <name>Swift</name>; name=Swift |
| 60 | +// GLOBAL_TYPE-DAG: Decl[Struct]/OtherModule[Swift]: <name>Int</name>; name=Int |
| 61 | +// GLOBAL_TYPE: End completions |
| 62 | + |
| 63 | + |
| 64 | +func testMember(value: MyStruct) { |
| 65 | + value.#^EXPR_MEMBER^# |
| 66 | +} |
| 67 | +// EXPR_MEMBER: Begin completions, 7 items |
| 68 | +// EXPR_MEMBER-DAG: Keyword[self]/CurrNominal: <keyword>self</keyword>; name=self |
| 69 | +// EXPR_MEMBER-DAG: Decl[InstanceVar]/CurrNominal: <name>propNormal</name>; name=propNormal |
| 70 | +// EXPR_MEMBER-DAG: Decl[InstanceVar]/CurrNominal: <name>propFunction</name>; name=propFunction |
| 71 | +// EXPR_MEMBER-DAG: Decl[InstanceMethod]/CurrNominal: <name>labelNameParamName</name>(<callarg><callarg.label>label</callarg.label> <callarg.param>param</callarg.param>: <callarg.type>(<keyword>inout</keyword> <typeid.sys>Int</typeid.sys>) <keyword>throws</keyword> -> <typeid.user>MyStruct</typeid.user></callarg.type></callarg>)<keyword> rethrows</keyword>; name=labelNameParamName(label: (inout Int) throws -> MyStruct) rethrows |
| 72 | +// EXPR_MEMBER-DAG: Decl[InstanceMethod]/CurrNominal: <name>labelName</name>(<callarg><callarg.label>label</callarg.label>: <callarg.type>(<attribute>@autoclosure </attribute>() -> <typeid.sys>Int</typeid.sys>) -> <typeid.sys>Int</typeid.sys></callarg.type></callarg>); name=labelName(label: (@autoclosure () -> Int) -> Int) |
| 73 | +// EXPR_MEMBER-DAG: Decl[InstanceMethod]/CurrNominal: <name>sameName</name>(<callarg><callarg.label>label</callarg.label>: &<callarg.type><typeid.sys>Int</typeid.sys></callarg.type></callarg>); name=sameName(label: &Int) |
| 74 | +// EXPR_MEMBER-DAG: Decl[InstanceMethod]/CurrNominal: <name>paramName</name>(<callarg><callarg.label>_</callarg.label> <callarg.param>param</callarg.param>: <callarg.type><typeid.sys>Int</typeid.sys></callarg.type></callarg>); name=paramName(param: Int) |
| 75 | +// EXPR_MEMBER: End completions |
| 76 | + |
| 77 | +func testPostfix(value: MyStruct) { |
| 78 | + value #^EXPR_POSTFIX^# |
| 79 | +} |
| 80 | +// EXPR_POSTFIX: Begin completions, 10 items |
| 81 | +// EXPR_POSTFIX-DAG: Decl[InstanceVar]/CurrNominal: <name>propNormal</name>; name=propNormal |
| 82 | +// EXPR_POSTFIX-DAG: Decl[InstanceVar]/CurrNominal: <name>propFunction</name>; name=propFunction |
| 83 | +// EXPR_POSTFIX-DAG: Decl[InstanceMethod]/CurrNominal: <name>labelNameParamName</name>(<callarg><callarg.label>label</callarg.label> <callarg.param>param</callarg.param>: <callarg.type>(<keyword>inout</keyword> <typeid.sys>Int</typeid.sys>) <keyword>throws</keyword> -> <typeid.user>MyStruct</typeid.user></callarg.type></callarg>)<keyword> rethrows</keyword>; name=labelNameParamName(label: (inout Int) throws -> MyStruct) rethrows |
| 84 | +// EXPR_POSTFIX-DAG: Decl[InstanceMethod]/CurrNominal: <name>labelName</name>(<callarg><callarg.label>label</callarg.label>: <callarg.type>(<attribute>@autoclosure </attribute>() -> <typeid.sys>Int</typeid.sys>) -> <typeid.sys>Int</typeid.sys></callarg.type></callarg>); name=labelName(label: (@autoclosure () -> Int) -> Int) |
| 85 | +// EXPR_POSTFIX-DAG: Decl[InstanceMethod]/CurrNominal: <name>sameName</name>(<callarg><callarg.label>label</callarg.label>: &<callarg.type><typeid.sys>Int</typeid.sys></callarg.type></callarg>); name=sameName(label: &Int) |
| 86 | +// EXPR_POSTFIX-DAG: Decl[InstanceMethod]/CurrNominal: <name>paramName</name>(<callarg><callarg.label>_</callarg.label> <callarg.param>param</callarg.param>: <callarg.type><typeid.sys>Int</typeid.sys></callarg.type></callarg>); name=paramName(param: Int) |
| 87 | +// EXPR_POSTFIX-DAG: Decl[Subscript]/CurrNominal: [<callarg><callarg.label>_</callarg.label> <callarg.param>param</callarg.param>: <callarg.type><typeid.sys>Int</typeid.sys></callarg.type></callarg>]; name=[param: Int] |
| 88 | +// EXPR_POSTFIX-DAG: Decl[Subscript]/CurrNominal: [<callarg><callarg.label>label</callarg.label> <callarg.param>param</callarg.param>: <callarg.type><typeid.sys>Int</typeid.sys></callarg.type></callarg>]; name=[label: Int] |
| 89 | +// EXPR_POSTFIX-DAG: Keyword[self]/CurrNominal: <keyword>self</keyword>; name=self |
| 90 | +// EXPR_POSTFIX-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: <name>+</name>; name=+ MyStruct |
| 91 | +// EXPR_POSTFIX: End completions |
| 92 | + |
| 93 | +func testImplicitMember() -> MyStruct { |
| 94 | + return .#^EXPR_IMPLICITMEMBER^# |
| 95 | +} |
| 96 | +// EXPR_IMPLICITMEMBER: Begin completions, 3 items |
| 97 | +// EXPR_IMPLICITMEMBER-DAG: Decl[Constructor]/CurrNominal/TypeRelation[Identical]: <name>init</name>(<callarg><callarg.label>x</callarg.label>: <callarg.type><typeid.sys>Int</typeid.sys></callarg.type></callarg>); name=init(x: Int) |
| 98 | +// EXPR_IMPLICITMEMBER-DAG: Decl[StaticVar]/CurrNominal/TypeRelation[Identical]: <name>instance</name>; name=instance |
| 99 | +// EXPR_IMPLICITMEMBER-DAG: Decl[StaticMethod]/CurrNominal/TypeRelation[Identical]: <name>create</name>(<callarg><callarg.label>x</callarg.label>: <callarg.type><typeid.sys>Int</typeid.sys></callarg.type></callarg>); name=create(x: Int) |
| 100 | +// EXPR_IMPLICITMEMBER: End completions |
| 101 | + |
| 102 | +func testArgument() -> MyStruct { |
| 103 | + func foo(x: Int, y: Int) {} |
| 104 | + foo(x: 1, #^CALLARG^# |
| 105 | +} |
| 106 | +// CALLARG: Begin completions, 1 items |
| 107 | +// CALLARG-DAG: Pattern/ExprSpecific: <callarg><callarg.label>y</callarg.label>: <callarg.type><typeid.sys>Int</typeid.sys></callarg.type></callarg>; name=y: Int |
| 108 | +// CALLARG: End completions |
| 109 | + |
0 commit comments