1919// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=KEYWORD_INDEPENDENT_2 | %FileCheck %s -check-prefix=KEYWORD_LAST
2020// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=KEYWORD_LAST | %FileCheck %s -check-prefix=KEYWORD_LAST
2121
22+ // NOTE: If you want to test code completion for an experimental feature, please
23+ // put your tests in complete_decl_attribute_feature_requirement.swift, not
24+ // here. That file has the infrastructure to test that completions are not
25+ // offered when the feature is disabled.
26+
2227struct MyStruct { }
2328
2429@propertyWrapper
@@ -111,7 +116,10 @@ actor MyGenericGlobalActor<T> {
111116// KEYWORD2-NEXT: Keyword/None: Sendable[#Func Attribute#]; name=Sendable
112117// KEYWORD2-NEXT: Keyword/None: preconcurrency[#Func Attribute#]; name=preconcurrency
113118// KEYWORD2-NEXT: Keyword/None: backDeployed[#Func Attribute#]; name=backDeployed
114- // KEYWORD2-NEXT Keyword/None: lifetime[#Func Attribute#]; name=lifetime
119+ // KEYWORD2-NEXT: Keyword/None: lifetime[#Func Attribute#]; name=lifetime
120+ // KEYWORD2-NEXT: Keyword/None: abi[#Func Attribute#]; name=abi{{$}}
121+ // KEYWORD2-NEXT: Keyword/None: concurrent[#Func Attribute#]; name=concurrent
122+ // KEYWORD2-NOT: Keyword
115123// KEYWORD2-DAG: Decl[Struct]/CurrModule: MyStruct[#MyStruct#]; name=MyStruct
116124// KEYWORD2-DAG: Decl[Struct]/CurrModule: MyPropertyWrapper[#Property Wrapper#]; name=MyPropertyWrapper
117125// KEYWORD2-DAG: Decl[Struct]/CurrModule/TypeRelation[Convertible]: MyResultBuilder[#Result Builder#]; name=MyResultBuilder
@@ -167,6 +175,7 @@ actor MyGenericGlobalActor<T> {
167175// KEYWORD5-NEXT: Keyword/None: preconcurrency[#Struct Attribute#]; name=preconcurrency
168176
169177@#^ON_GLOBALVAR^# var globalVar
178+ // ON_GLOBALVAR-DAG: Keyword/None: abi[#Var Attribute#]; name=abi
170179// ON_GLOBALVAR-DAG: Keyword/None: available[#Var Attribute#]; name=available
171180// ON_GLOBALVAR-DAG: Keyword/None: objc[#Var Attribute#]; name=objc
172181// ON_GLOBALVAR-DAG: Keyword/None: NSCopying[#Var Attribute#]; name=NSCopying
@@ -195,6 +204,7 @@ actor MyGenericGlobalActor<T> {
195204
196205struct _S {
197206 @#^ON_INIT^# init( )
207+ // ON_INIT-DAG: Keyword/None: abi[#Constructor Attribute#]; name=abi
198208// ON_INIT-DAG: Keyword/None: available[#Constructor Attribute#]; name=available
199209// ON_INIT-DAG: Keyword/None: objc[#Constructor Attribute#]; name=objc
200210// ON_INIT-DAG: Keyword/None: inline[#Constructor Attribute#]; name=inline
@@ -205,6 +215,7 @@ struct _S {
205215// ON_INIT-DAG: Keyword/None: preconcurrency[#Constructor Attribute#]; name=preconcurrency
206216
207217 @#^ON_PROPERTY^# var foo
218+ // ON_PROPERTY-DAG: Keyword/None: abi[#Var Attribute#]; name=abi
208219// ON_PROPERTY-DAG: Keyword/None: available[#Var Attribute#]; name=available
209220// ON_PROPERTY-DAG: Keyword/None: objc[#Var Attribute#]; name=objc
210221// ON_PROPERTY-DAG: Keyword/None: NSCopying[#Var Attribute#]; name=NSCopying
@@ -232,8 +243,12 @@ struct _S {
232243// ON_PROPERTY-DAG: Decl[Actor]/CurrModule/TypeRelation[Convertible]: MyGenericGlobalActor[#Global Actor#]; name=MyGenericGlobalActor
233244// ON_PROPERTY-NOT: Decl[PrecedenceGroup]
234245
246+ @#^ON_SUBSCR^# subscript
247+ // ON_SUBSCR-DAG: Keyword/None: abi[#Declaration Attribute#]; name=abi
248+
235249 @#^ON_METHOD^# private
236250 func foo( )
251+ // ON_METHOD-DAG: Keyword/None: abi[#Func Attribute#]; name=abi
237252// ON_METHOD-DAG: Keyword/None: available[#Func Attribute#]; name=available
238253// ON_METHOD-DAG: Keyword/None: objc[#Func Attribute#]; name=objc
239254// ON_METHOD-DAG: Keyword/None: IBAction[#Func Attribute#]; name=IBAction
@@ -291,6 +306,7 @@ struct _S {
291306
292307
293308 @#^ON_MEMBER_LAST^#
309+ // ON_MEMBER_LAST-DAG: Keyword/None: abi[#Declaration Attribute#]; name=abi
294310// ON_MEMBER_LAST-DAG: Keyword/None: available[#Declaration Attribute#]; name=available
295311// ON_MEMBER_LAST-DAG: Keyword/None: objc[#Declaration Attribute#]; name=objc
296312// ON_MEMBER_LAST-DAG: Keyword/None: dynamicCallable[#Declaration Attribute#]; name=dynamicCallable
@@ -345,6 +361,8 @@ func takeClosure(_: () -> Void) {
345361 print ( " x " )
346362 }
347363}
364+ // FIXME: Not valid in this position (but CompletionLookup can't tell that)
365+ // IN_CLOSURE-DAG: Keyword/None: abi[#Declaration Attribute#]; name=abi
348366// FIXME: We should mark MyPropertyWrapper and MyResultBuilder as Unrelated
349367// IN_CLOSURE-DAG: Decl[Struct]/CurrModule: MyStruct[#MyStruct#]; name=MyStruct
350368// IN_CLOSURE-DAG: Decl[Struct]/CurrModule/TypeRelation[Convertible]: MyPropertyWrapper[#Property Wrapper#]; name=MyPropertyWrapper
@@ -363,6 +381,7 @@ func dummy2() {}
363381
364382@#^KEYWORD_LAST^#
365383
384+ // KEYWORD_LAST-DAG: Keyword/None: abi[#Declaration Attribute#]; name=abi
366385// KEYWORD_LAST-DAG: Keyword/None: available[#Declaration Attribute#]; name=available{{$}}
367386// KEYWORD_LAST-DAG: Keyword/None: freestanding[#Declaration Attribute#]; name=freestanding{{$}}
368387// KEYWORD_LAST-DAG: Keyword/None: objc[#Declaration Attribute#]; name=objc{{$}}
0 commit comments