-
Notifications
You must be signed in to change notification settings - Fork 10.4k
/
Copy pathcomplete_at_top_level_library.swift
144 lines (139 loc) · 10.5 KB
/
complete_at_top_level_library.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
// RUN: %empty-directory(%t.ccp)
// Repeat twice to ensure completion caches works correctly. i.e. no sticky flairs
// RUN: %target-swift-ide-test -code-completion -source-filename %s -completion-cache-path=%t.ccp -code-completion-token=TOPLEVEL -parse-as-library | %FileCheck %s -check-prefix=LIBRARY
// RUN: %target-swift-ide-test -code-completion -source-filename %s -completion-cache-path=%t.ccp -code-completion-token=TOPLEVEL | %FileCheck %s -check-prefix=SCRIPT
// RUN: %target-swift-ide-test -code-completion -source-filename %s -completion-cache-path=%t.ccp -code-completion-token=TOPLEVEL -parse-as-library | %FileCheck %s -check-prefix=LIBRARY
// RUN: %target-swift-ide-test -code-completion -source-filename %s -completion-cache-path=%t.ccp -code-completion-token=TOPLEVEL | %FileCheck %s -check-prefix=SCRIPT
struct MyStruct {}
protocol MyProtocol {}
#^TOPLEVEL^#
// LIBRARY-DAG: Keyword[associatedtype]/None: associatedtype; name=associatedtype
// LIBRARY-DAG: Keyword[class]/None/Flair[CommonKeyword]: class; name=class
// LIBRARY-DAG: Keyword[deinit]/None: deinit; name=deinit
// LIBRARY-DAG: Keyword[enum]/None/Flair[CommonKeyword]: enum; name=enum
// LIBRARY-DAG: Keyword[extension]/None/Flair[CommonKeyword]: extension; name=extension
// LIBRARY-DAG: Keyword[func]/None: func; name=func
// LIBRARY-DAG: Keyword[import]/None: import; name=import
// LIBRARY-DAG: Keyword[init]/None: init; name=init
// LIBRARY-DAG: Keyword[operator]/None: operator; name=operator
// LIBRARY-DAG: Keyword[precedencegroup]/None: precedencegroup; name=precedencegroup
// LIBRARY-DAG: Keyword[protocol]/None/Flair[CommonKeyword]: protocol; name=protocol
// LIBRARY-DAG: Keyword[struct]/None/Flair[CommonKeyword]: struct; name=struct
// LIBRARY-DAG: Keyword[subscript]/None: subscript; name=subscript
// LIBRARY-DAG: Keyword[typealias]/None: typealias; name=typealias
// LIBRARY-DAG: Keyword[fileprivate]/None: fileprivate; name=fileprivate
// LIBRARY-DAG: Keyword[internal]/None: internal; name=internal
// LIBRARY-DAG: Keyword[private]/None: private; name=private
// LIBRARY-DAG: Keyword[public]/None: public; name=public
// LIBRARY-DAG: Keyword[static]/None: static; name=static
// LIBRARY-DAG: Keyword/None: final; name=final
// LIBRARY-DAG: Keyword/None: required; name=required
// LIBRARY-DAG: Keyword/None: optional; name=optional
// LIBRARY-DAG: Keyword/None: lazy; name=lazy
// LIBRARY-DAG: Keyword/None: dynamic; name=dynamic
// LIBRARY-DAG: Keyword/None: infix; name=infix
// LIBRARY-DAG: Keyword/None: prefix; name=prefix
// LIBRARY-DAG: Keyword/None: postfix; name=postfix
// LIBRARY-DAG: Keyword/None: mutating; name=mutating
// LIBRARY-DAG: Keyword/None: nonmutating; name=nonmutating
// LIBRARY-DAG: Keyword/None: convenience; name=convenience
// LIBRARY-DAG: Keyword/None: override; name=override
// LIBRARY-DAG: Keyword/None: open; name=open
// LIBRARY-DAG: Keyword/None: weak; name=weak
// LIBRARY-DAG: Keyword/None: unowned; name=unowned
// LIBRARY-DAG: Keyword/None: indirect; name=indirect
// LIBRARY-DAG: Keyword/None: nonisolated; name=nonisolated
// LIBRARY-DAG: Keyword[defer]/None/Flair[ExprAtFileScope]: defer; name=defer
// LIBRARY-DAG: Keyword[if]/None/Flair[ExprAtFileScope]: if; name=if
// LIBRARY-DAG: Keyword[guard]/None/Flair[ExprAtFileScope]: guard; name=guard
// LIBRARY-DAG: Keyword[do]/None/Flair[ExprAtFileScope]: do; name=do
// LIBRARY-DAG: Keyword[repeat]/None/Flair[ExprAtFileScope]: repeat; name=repeat
// LIBRARY-DAG: Keyword[else]/None/Flair[ExprAtFileScope]: else; name=else
// LIBRARY-DAG: Keyword[for]/None/Flair[ExprAtFileScope]: for; name=for
// LIBRARY-DAG: Keyword[while]/None/Flair[ExprAtFileScope]: while; name=while
// LIBRARY-DAG: Keyword[break]/None/Flair[ExprAtFileScope]: break; name=break
// LIBRARY-DAG: Keyword[continue]/None/Flair[ExprAtFileScope]: continue; name=continue
// LIBRARY-DAG: Keyword[fallthrough]/None/Flair[ExprAtFileScope]: fallthrough; name=fallthrough
// LIBRARY-DAG: Keyword[switch]/None/Flair[ExprAtFileScope]: switch; name=switch
// LIBRARY-DAG: Keyword[let]/None: let; name=let
// LIBRARY-DAG: Keyword[var]/None: var; name=var
// LIBRARY-DAG: Keyword[try]/None/Flair[ExprAtFileScope]: try; name=try
// LIBRARY-DAG: Keyword[try]/None/Flair[ExprAtFileScope]: try!; name=try!
// LIBRARY-DAG: Keyword[try]/None/Flair[ExprAtFileScope]: try?; name=try?
// LIBRARY-DAG: Keyword/None/Flair[ExprAtFileScope]: await; name=await
// LIBRARY-DAG: Literal[Integer]/None/Flair[ExprAtFileScope]: 0[#Int#]; name=0
// LIBRARY-DAG: Literal[Boolean]/None/Flair[ExprAtFileScope]: true[#Bool#]; name=true
// LIBRARY-DAG: Literal[Boolean]/None/Flair[ExprAtFileScope]: false[#Bool#]; name=false
// LIBRARY-DAG: Literal[Nil]/None/Flair[ExprAtFileScope]: nil; name=nil
// LIBRARY-DAG: Literal[String]/None/Flair[ExprAtFileScope]: "{#(abc)#}"[#String#]; name=""
// LIBRARY-DAG: Literal[Array]/None/Flair[ExprAtFileScope]: [{#(values)#}][#Array<Element>#]; name=[]
// LIBRARY-DAG: Literal[Dictionary]/None/Flair[ExprAtFileScope]: [{#(key)#}: {#(value)#}][#Dictionary<Key, Value>#]; name=[: ]
// LIBRARY-DAG: Literal[Tuple]/None/Flair[ExprAtFileScope]: ({#(values)#}); name=()
// LIBRARY-DAG: Decl[Struct]/CurrModule/Flair[ExprAtFileScope]: MyStruct[#MyStruct#]; name=MyStruct
// LIBRARY-DAG: Decl[Protocol]/CurrModule/Flair[RareType,ExprAtFileScope]: MyProtocol[#MyProtocol#]; name=MyProtocol
// LIBRARY-DAG: Decl[Struct]/OtherModule[Swift]/Flair[ExprAtFileScope]/IsSystem: Int[#Int#]; name=Int
// SCRIPT-DAG: Keyword[associatedtype]/None: associatedtype; name=associatedtype
// SCRIPT-DAG: Keyword[class]/None: class; name=class
// SCRIPT-DAG: Keyword[deinit]/None: deinit; name=deinit
// SCRIPT-DAG: Keyword[enum]/None: enum; name=enum
// SCRIPT-DAG: Keyword[extension]/None: extension; name=extension
// SCRIPT-DAG: Keyword[func]/None: func; name=func
// SCRIPT-DAG: Keyword[import]/None: import; name=import
// SCRIPT-DAG: Keyword[init]/None: init; name=init
// SCRIPT-DAG: Keyword[operator]/None: operator; name=operator
// SCRIPT-DAG: Keyword[precedencegroup]/None: precedencegroup; name=precedencegroup
// SCRIPT-DAG: Keyword[protocol]/None: protocol; name=protocol
// SCRIPT-DAG: Keyword[struct]/None: struct; name=struct
// SCRIPT-DAG: Keyword[subscript]/None: subscript; name=subscript
// SCRIPT-DAG: Keyword[typealias]/None: typealias; name=typealias
// SCRIPT-DAG: Keyword[fileprivate]/None: fileprivate; name=fileprivate
// SCRIPT-DAG: Keyword[internal]/None: internal; name=internal
// SCRIPT-DAG: Keyword[private]/None: private; name=private
// SCRIPT-DAG: Keyword[public]/None: public; name=public
// SCRIPT-DAG: Keyword[static]/None: static; name=static
// SCRIPT-DAG: Keyword/None: final; name=final
// SCRIPT-DAG: Keyword/None: required; name=required
// SCRIPT-DAG: Keyword/None: optional; name=optional
// SCRIPT-DAG: Keyword/None: lazy; name=lazy
// SCRIPT-DAG: Keyword/None: dynamic; name=dynamic
// SCRIPT-DAG: Keyword/None: infix; name=infix
// SCRIPT-DAG: Keyword/None: prefix; name=prefix
// SCRIPT-DAG: Keyword/None: postfix; name=postfix
// SCRIPT-DAG: Keyword/None: mutating; name=mutating
// SCRIPT-DAG: Keyword/None: nonmutating; name=nonmutating
// SCRIPT-DAG: Keyword/None: convenience; name=convenience
// SCRIPT-DAG: Keyword/None: override; name=override
// SCRIPT-DAG: Keyword/None: open; name=open
// SCRIPT-DAG: Keyword/None: weak; name=weak
// SCRIPT-DAG: Keyword/None: unowned; name=unowned
// SCRIPT-DAG: Keyword/None: indirect; name=indirect
// SCRIPT-DAG: Keyword/None: nonisolated; name=nonisolated
// SCRIPT-DAG: Keyword[defer]/None: defer; name=defer
// SCRIPT-DAG: Keyword[if]/None: if; name=if
// SCRIPT-DAG: Keyword[guard]/None: guard; name=guard
// SCRIPT-DAG: Keyword[do]/None: do; name=do
// SCRIPT-DAG: Keyword[repeat]/None: repeat; name=repeat
// SCRIPT-DAG: Keyword[else]/None: else; name=else
// SCRIPT-DAG: Keyword[for]/None: for; name=for
// SCRIPT-DAG: Keyword[while]/None: while; name=while
// SCRIPT-DAG: Keyword[break]/None: break; name=break
// SCRIPT-DAG: Keyword[continue]/None: continue; name=continue
// SCRIPT-DAG: Keyword[fallthrough]/None: fallthrough; name=fallthrough
// SCRIPT-DAG: Keyword[switch]/None: switch; name=switch
// SCRIPT-DAG: Keyword[let]/None: let; name=let
// SCRIPT-DAG: Keyword[var]/None: var; name=var
// SCRIPT-DAG: Keyword[try]/None: try; name=try
// SCRIPT-DAG: Keyword[try]/None: try!; name=try!
// SCRIPT-DAG: Keyword[try]/None: try?; name=try?
// SCRIPT-DAG: Keyword/None: await; name=await
// SCRIPT-DAG: Literal[Integer]/None: 0[#Int#]; name=0
// SCRIPT-DAG: Literal[Boolean]/None: true[#Bool#]; name=true
// SCRIPT-DAG: Literal[Boolean]/None: false[#Bool#]; name=false
// SCRIPT-DAG: Literal[Nil]/None: nil; name=nil
// SCRIPT-DAG: Literal[String]/None: "{#(abc)#}"[#String#]; name=""
// SCRIPT-DAG: Literal[Array]/None: [{#(values)#}][#Array<Element>#]; name=[]
// SCRIPT-DAG: Literal[Dictionary]/None: [{#(key)#}: {#(value)#}][#Dictionary<Key, Value>#]; name=[: ]
// SCRIPT-DAG: Literal[Tuple]/None: ({#(values)#}); name=()
// SCRIPT-DAG: Decl[Struct]/CurrModule: MyStruct[#MyStruct#]; name=MyStruct
// SCRIPT-DAG: Decl[Protocol]/CurrModule/Flair[RareType]: MyProtocol[#MyProtocol#]; name=MyProtocol
// SCRIPT-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem: Int[#Int#]; name=Int