// RUN: sed -n -e '/VERIFY_BEGIN/,/VERIFY_END$/ p' %s > %t_no_errors.swift // RUN: %target-swift-frontend -verify -typecheck %t_no_errors.swift // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CONSTRUCTOR_SUPER_NO_DOT_1 > %t.super.txt // RUN: %FileCheck %s -check-prefix=COMMON_BASE_A_NO_DOT < %t.super.txt // RUN: %FileCheck %s -check-prefix=CONSTRUCTOR_SUPER_NO_DOT_1 < %t.super.txt // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CONSTRUCTOR_SUPER_DOT_1 > %t.super.txt // RUN: %FileCheck %s -check-prefix=COMMON_BASE_A_DOT < %t.super.txt // RUN: %FileCheck %s -check-prefix=CONSTRUCTOR_SUPER_DOT_1 < %t.super.txt // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CONSTRUCTOR_SUPER_INIT_PAREN_1 > %t.super.txt // RUN: %FileCheck %s -check-prefix=CONSTRUCTOR_SUPER_INIT_PAREN_1 < %t.super.txt // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=DESTRUCTOR_SUPER_NO_DOT_1 > %t.super.txt // RUN: %FileCheck %s -check-prefix=COMMON_BASE_A_NO_DOT < %t.super.txt // RUN: %FileCheck %s -check-prefix=DESTRUCTOR_SUPER_NO_DOT_1 < %t.super.txt // RUN: %FileCheck %s -check-prefix=NO_CONSTRUCTORS < %t.super.txt // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=DESTRUCTOR_SUPER_DOT_1 > %t.super.txt // RUN: %FileCheck %s -check-prefix=COMMON_BASE_A_DOT < %t.super.txt // RUN: %FileCheck %s -check-prefix=DESTRUCTOR_SUPER_DOT_1 < %t.super.txt // RUN: %FileCheck %s -check-prefix=NO_CONSTRUCTORS < %t.super.txt // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=FUNC_SUPER_NO_DOT_1 > %t.super.txt // RUN: %FileCheck %s -check-prefix=COMMON_BASE_A_NO_DOT < %t.super.txt // RUN: %FileCheck %s -check-prefix=FUNC_SUPER_NO_DOT_1 < %t.super.txt // RUN: %FileCheck %s -check-prefix=NO_CONSTRUCTORS < %t.super.txt // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=FUNC_SUPER_DOT_1 > %t.super.txt // RUN: %FileCheck %s -check-prefix=COMMON_BASE_A_DOT < %t.super.txt // RUN: %FileCheck %s -check-prefix=FUNC_SUPER_DOT_1 < %t.super.txt // RUN: %FileCheck %s -check-prefix=NO_CONSTRUCTORS < %t.super.txt // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CONSTRUCTOR_SUPER_NO_DOT_2 > %t.super.txt // RUN: %FileCheck %s -check-prefix=COMMON_BASE_B_NO_DOT < %t.super.txt // RUN: %FileCheck %s -check-prefix=CONSTRUCTOR_SUPER_NO_DOT_2 < %t.super.txt // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CONSTRUCTOR_SUPER_DOT_2 > %t.super.txt // RUN: %FileCheck %s -check-prefix=COMMON_BASE_B_DOT < %t.super.txt // RUN: %FileCheck %s -check-prefix=CONSTRUCTOR_SUPER_DOT_2 < %t.super.txt // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=DESTRUCTOR_SUPER_NO_DOT_2 > %t.super.txt // RUN: %FileCheck %s -check-prefix=COMMON_BASE_B_NO_DOT < %t.super.txt // RUN: %FileCheck %s -check-prefix=DESTRUCTOR_SUPER_NO_DOT_2 < %t.super.txt // RUN: %FileCheck %s -check-prefix=NO_CONSTRUCTORS < %t.super.txt // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=DESTRUCTOR_SUPER_DOT_2 > %t.super.txt // RUN: %FileCheck %s -check-prefix=COMMON_BASE_B_DOT < %t.super.txt // RUN: %FileCheck %s -check-prefix=DESTRUCTOR_SUPER_DOT_2 < %t.super.txt // RUN: %FileCheck %s -check-prefix=NO_CONSTRUCTORS < %t.super.txt // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=FUNC_SUPER_NO_DOT_2 > %t.super.txt // RUN: %FileCheck %s -check-prefix=COMMON_BASE_B_NO_DOT < %t.super.txt // RUN: %FileCheck %s -check-prefix=FUNC_SUPER_NO_DOT_2 < %t.super.txt // RUN: %FileCheck %s -check-prefix=NO_CONSTRUCTORS < %t.super.txt // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=FUNC_SUPER_DOT_2 > %t.super.txt // RUN: %FileCheck %s -check-prefix=COMMON_BASE_B_DOT < %t.super.txt // RUN: %FileCheck %s -check-prefix=FUNC_SUPER_DOT_2 < %t.super.txt // RUN: %FileCheck %s -check-prefix=NO_CONSTRUCTORS < %t.super.txt // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=SEMANTIC_CONTEXT_OVERRIDDEN_DECL_1 > %t.super.txt // RUN: %FileCheck %s -check-prefix=SEMANTIC_CONTEXT_OVERRIDDEN_DECL_1 < %t.super.txt // RUN: %FileCheck %s -check-prefix=NO_SUPER_DECLS < %t.super.txt // RUN: %FileCheck %s -check-prefix=NO_CONSTRUCTORS < %t.super.txt // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=SEMANTIC_CONTEXT_OVERRIDDEN_DECL_2 > %t.super.txt // RUN: %FileCheck %s -check-prefix=SEMANTIC_CONTEXT_OVERRIDDEN_DECL_2 < %t.super.txt // RUN: %FileCheck %s -check-prefix=NO_SUPER_DECLS < %t.super.txt // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=SEMANTIC_CONTEXT_OVERRIDDEN_DECL_3 > %t.super.txt // RUN: %FileCheck %s -check-prefix=SEMANTIC_CONTEXT_OVERRIDDEN_DECL_3 < %t.super.txt // RUN: %FileCheck %s -check-prefix=NO_SUPER_DECLS < %t.super.txt // RUN: %FileCheck %s -check-prefix=NO_CONSTRUCTORS < %t.super.txt // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=SEMANTIC_CONTEXT_OVERRIDDEN_DECL_4 > %t.super.txt // RUN: %FileCheck %s -check-prefix=SEMANTIC_CONTEXT_OVERRIDDEN_DECL_4 < %t.super.txt // RUN: %FileCheck %s -check-prefix=NO_SUPER_DECLS < %t.super.txt // RUN: %FileCheck %s -check-prefix=NO_CONSTRUCTORS < %t.super.txt // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=SEMANTIC_CONTEXT_OVERRIDDEN_DECL_5 > %t.super.txt // RUN: %FileCheck %s -check-prefix=SEMANTIC_CONTEXT_OVERRIDDEN_DECL_5 < %t.super.txt // RUN: %FileCheck %s -check-prefix=NO_SUPER_DECLS < %t.super.txt // RUN: %FileCheck %s -check-prefix=NO_CONSTRUCTORS < %t.super.txt // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CLOSURE_1 > %t.super.txt // RUN: %FileCheck %s -check-prefix=COMMON_BASE_A_DOT < %t.super.txt // RUN: %FileCheck %s -check-prefix=CLOSURE_1 < %t.super.txt // RUN: %FileCheck %s -check-prefix=NO_CONSTRUCTORS < %t.super.txt // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CLOSURE_2 > %t.super.txt // RUN: %FileCheck %s -check-prefix=COMMON_BASE_A_DOT < %t.super.txt // RUN: %FileCheck %s -check-prefix=CLOSURE_2 < %t.super.txt // RUN: %FileCheck %s -check-prefix=NO_CONSTRUCTORS < %t.super.txt // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CLOSURE_CAPTURE_1 > %t.super.txt // RUN: %FileCheck %s -check-prefix=CLOSURE_CAPTURE_1 < %t.super.txt // RUN: %FileCheck %s -check-prefix=NO_SUPER_DECLS < %t.super.txt // RUN: %FileCheck %s -check-prefix=NO_CONSTRUCTORS < %t.super.txt // NO_CONSTRUCTORS-NOT: init( // NO_SUPER_DECLS-NOT: Decl/Super //===--- //===--- Tests for code completion after 'super'. //===--- //===--- Testcase A, with implicit constructors in the base class. // VERIFY_BEGIN class SuperBaseA { var baseInstanceVar = 0 var baseProp: Int { get { return 42 } set(v) {} } // Don't declare constructors. func baseFunc0() {} func baseFunc1(_ a: Int) {} subscript(i: Int) -> Double { get { return Double(i) } set(v) { baseInstanceVar = i } } // expected-error@+1 {{class stored properties not supported}} class var baseStaticVar: Int = 0 class var baseStaticProp: Int { get { return 42 } set(v) {} } class func baseStaticFunc0() {} struct BaseNestedStruct {} class BaseNestedClass {} enum BaseNestedEnum { case BaseEnumX(Int) } typealias BaseNestedTypealias = Int } extension SuperBaseA { var baseExtProp: Int { get { return 42 } set(v) {} } func baseExtFunc0() {} // expected-error@+1 {{class stored properties not supported}} class var baseExtStaticVar: Int = 0 class func baseExtStaticFunc0() {} struct BaseExtNestedStruct {} class BaseExtNestedClass {} enum BaseExtNestedEnum { case BaseExtEnumX(Int) } typealias BaseExtNestedTypealias = Int } // VERIFY_END // COMMON_BASE_A_NO_DOT: Begin completions // COMMON_BASE_A_NO_DOT-DAG: Decl[InstanceVar]/CurrNominal: .baseInstanceVar[#Int#]{{; name=.+$}} // COMMON_BASE_A_NO_DOT-DAG: Decl[InstanceVar]/CurrNominal: .baseProp[#Int#]{{; name=.+$}} // COMMON_BASE_A_NO_DOT-DAG: Decl[InstanceMethod]/CurrNominal: .baseFunc0()[#Void#]{{; name=.+$}} // COMMON_BASE_A_NO_DOT-DAG: Decl[InstanceMethod]/CurrNominal: .baseFunc1({#(a): Int#})[#Void#]{{; name=.+$}} // COMMON_BASE_A_NO_DOT-DAG: Decl[Subscript]/CurrNominal: [{#Int#}][#Double#]{{; name=.+$}} // COMMON_BASE_A_NO_DOT-DAG: Decl[InstanceVar]/CurrNominal: .baseExtProp[#Int#]{{; name=.+$}} // COMMON_BASE_A_NO_DOT-DAG: Decl[InstanceMethod]/CurrNominal: .baseExtFunc0()[#Void#]{{; name=.+$}} // COMMON_BASE_A_NO_DOT: End completions // COMMON_BASE_A_DOT: Begin completions // COMMON_BASE_A_DOT-DAG: Decl[InstanceVar]/CurrNominal: baseInstanceVar[#Int#]{{; name=.+$}} // COMMON_BASE_A_DOT-DAG: Decl[InstanceVar]/CurrNominal: baseProp[#Int#]{{; name=.+$}} // COMMON_BASE_A_DOT-DAG: Decl[InstanceMethod]/CurrNominal: baseFunc0()[#Void#]{{; name=.+$}} // COMMON_BASE_A_DOT-DAG: Decl[InstanceMethod]/CurrNominal: baseFunc1({#(a): Int#})[#Void#]{{; name=.+$}} // COMMON_BASE_A_DOT-DAG: Decl[InstanceVar]/CurrNominal: baseExtProp[#Int#]{{; name=.+$}} // COMMON_BASE_A_DOT-DAG: Decl[InstanceMethod]/CurrNominal: baseExtFunc0()[#Void#]{{; name=.+$}} // COMMON_BASE_A_DOT: End completions class SuperDerivedA : SuperBaseA { var derivedInstanceVar: Int func derivedFunc0() {} init() { super#^CONSTRUCTOR_SUPER_NO_DOT_1^# // CONSTRUCTOR_SUPER_NO_DOT_1: Begin completions, 8 items // CONSTRUCTOR_SUPER_NO_DOT_1-DAG: Decl[Constructor]/ExprSpecific: .init()[#SuperBaseA#]{{; name=.+$}} // CONSTRUCTOR_SUPER_NO_DOT_1: End completions } init(a: Int) { super.#^CONSTRUCTOR_SUPER_DOT_1^# // CONSTRUCTOR_SUPER_DOT_1: Begin completions, 7 items // CONSTRUCTOR_SUPER_DOT_1-DAG: Decl[Constructor]/CurrNominal: init()[#SuperBaseA#]{{; name=.+$}} // CONSTRUCTOR_SUPER_DOT_1: End completions } init (a: Float) { super.init(#^CONSTRUCTOR_SUPER_INIT_PAREN_1^# // CONSTRUCTOR_SUPER_INIT_PAREN_1: Begin completions // CONSTRUCTOR_SUPER_INIT_PAREN_1-DAG: Pattern/ExprSpecific: ['('])[#SuperBaseA#]; name=) // CONSTRUCTOR_SUPER_INIT_PAREN_1: End completions } deinit { super#^DESTRUCTOR_SUPER_NO_DOT_1^# // DESTRUCTOR_SUPER_NO_DOT_1: Begin completions, 7 items // DESTRUCTOR_SUPER_NO_DOT_1: End completions var resyncParser = 42 super.#^DESTRUCTOR_SUPER_DOT_1^# // DESTRUCTOR_SUPER_DOT_1: Begin completions, 6 items // DESTRUCTOR_SUPER_DOT_1: End completions } func test1() { super#^FUNC_SUPER_NO_DOT_1^# // FUNC_SUPER_NO_DOT_1: Begin completions, 7 items // FUNC_SUPER_NO_DOT_1: End completions } func test2() { super.#^FUNC_SUPER_DOT_1^# // FUNC_SUPER_DOT_1: Begin completions, 6 items // FUNC_SUPER_DOT_1: End completions } } //===--- Testcase B, with explicit constructors in the base class. // COMMON_BASE_B_NO_DOT: Begin completions // COMMON_BASE_B_NO_DOT-DAG: Decl[InstanceVar]/CurrNominal: .baseInstanceVar[#Int#]{{; name=.+$}} // COMMON_BASE_B_NO_DOT-DAG: Decl[InstanceVar]/CurrNominal: .baseProp[#Int#]{{; name=.+$}} // COMMON_BASE_B_NO_DOT-DAG: Decl[InstanceMethod]/CurrNominal: .baseFunc0()[#Void#]{{; name=.+$}} // COMMON_BASE_B_NO_DOT-DAG: Decl[InstanceMethod]/CurrNominal: .baseFunc1({#(a): Int#})[#Void#]{{; name=.+$}} // COMMON_BASE_B_NO_DOT-DAG: Decl[Subscript]/CurrNominal: [{#Int#}][#Double#]{{; name=.+$}} // COMMON_BASE_B_NO_DOT-DAG: Decl[InstanceVar]/CurrNominal: .baseExtProp[#Int#]{{; name=.+$}} // COMMON_BASE_B_NO_DOT-DAG: Decl[InstanceMethod]/CurrNominal: .baseExtFunc0()[#Void#]{{; name=.+$}} // COMMON_BASE_B_NO_DOT: End completions // COMMON_BASE_B_DOT: Begin completions // COMMON_BASE_B_DOT-DAG: Decl[InstanceVar]/CurrNominal: baseInstanceVar[#Int#]{{; name=.+$}} // COMMON_BASE_B_DOT-DAG: Decl[InstanceVar]/CurrNominal: baseProp[#Int#]{{; name=.+$}} // COMMON_BASE_B_DOT-DAG: Decl[InstanceMethod]/CurrNominal: baseFunc0()[#Void#]{{; name=.+$}} // COMMON_BASE_B_DOT-DAG: Decl[InstanceMethod]/CurrNominal: baseFunc1({#(a): Int#})[#Void#]{{; name=.+$}} // COMMON_BASE_B_DOT-DAG: Decl[InstanceVar]/CurrNominal: baseExtProp[#Int#]{{; name=.+$}} // COMMON_BASE_B_DOT-DAG: Decl[InstanceMethod]/CurrNominal: baseExtFunc0()[#Void#]{{; name=.+$}} // COMMON_BASE_B_DOT: End completions // VERIFY_BEGIN class SuperBaseB { var baseInstanceVar: Int var baseProp: Int { get { return 42 } set(v) {} } init() {} init(a: Double) {} init(int: Int) {} func baseFunc0() {} func baseFunc1(_ a: Int) {} subscript(i: Int) -> Double { get { return Double(i) } set(v) { baseInstanceVar = i } } // expected-error@+1 {{class stored properties not supported}} class var baseStaticVar: Int = 0 class var baseStaticProp: Int { get { return 42 } set(v) {} } class func baseStaticFunc0() {} struct BaseNestedStruct {} class BaseNestedClass {} enum BaseNestedEnum { case BaseEnumX(Int) } typealias BaseNestedTypealias = Int } extension SuperBaseB { var baseExtProp: Int { get { return 42 } set(v) {} } func baseExtFunc0() {} // expected-error@+1 {{class stored properties not supported}} class var baseExtStaticVar: Int = 0 class var baseExtStaticProp: Int { get { return 42 } set(v) {} } class func baseExtStaticFunc0() {} struct BaseExtNestedStruct {} class BaseExtNestedClass {} enum BaseExtNestedEnum { case BaseExtEnumX(Int) } typealias BaseExtNestedTypealias = Int } // VERIFY_END class SuperDerivedB : SuperBaseB { var derivedInstanceVar: Int func derivedFunc0() {} init() { super#^CONSTRUCTOR_SUPER_NO_DOT_2^# // CONSTRUCTOR_SUPER_NO_DOT_2: Begin completions, 10 items // CONSTRUCTOR_SUPER_NO_DOT_2-DAG: Decl[Constructor]/ExprSpecific: .init()[#SuperBaseB#]{{; name=.+$}} // CONSTRUCTOR_SUPER_NO_DOT_2-DAG: Decl[Constructor]/CurrNominal: .init({#a: Double#})[#SuperBaseB#]{{; name=.+$}} // CONSTRUCTOR_SUPER_NO_DOT_2-DAG: Decl[Constructor]/CurrNominal: .init({#int: Int#})[#SuperBaseB#]{{; name=.+$}} // CONSTRUCTOR_SUPER_NO_DOT_2: End completions } init(int a: Int) { super.#^CONSTRUCTOR_SUPER_DOT_2^# // CONSTRUCTOR_SUPER_DOT_2: Begin completions, 9 items // CONSTRUCTOR_SUPER_DOT_2-DAG: Decl[Constructor]/CurrNominal: init()[#SuperBaseB#]{{; name=.+$}} // CONSTRUCTOR_SUPER_DOT_2-DAG: Decl[Constructor]/CurrNominal: init({#a: Double#})[#SuperBaseB#]{{; name=.+$}} // CONSTRUCTOR_SUPER_DOT_2-DAG: Decl[Constructor]/ExprSpecific: init({#int: Int#})[#SuperBaseB#]{{; name=.+$}} // CONSTRUCTOR_SUPER_DOT_2: End completions } deinit { super#^DESTRUCTOR_SUPER_NO_DOT_2^# // DESTRUCTOR_SUPER_NO_DOT_2: Begin completions, 7 items // DESTRUCTOR_SUPER_NO_DOT_2: End completions var resyncParser = 42 super.#^DESTRUCTOR_SUPER_DOT_2^# // DESTRUCTOR_SUPER_DOT_2: Begin completions, 6 items // DESTRUCTOR_SUPER_DOT_2: End completions } func test1() { super#^FUNC_SUPER_NO_DOT_2^# // FUNC_SUPER_NO_DOT_2: Begin completions, 7 items // FUNC_SUPER_NO_DOT_2: End completions } func test2() { super.#^FUNC_SUPER_DOT_2^# // FUNC_SUPER_DOT_2: Begin completions, 6 items // FUNC_SUPER_DOT_2: End completions } } //===--- Check that we assign a special semantic context to the overridden decl. class SemanticContextBase1 { init() {} init(a: Int) {} func instanceFunc1() {} func instanceFunc1(_ a: Int) {} } class SemanticContextDerived1 : SemanticContextBase1 { init() {} init(a: Int) { #^SEMANTIC_CONTEXT_OVERRIDDEN_DECL_1^# // SEMANTIC_CONTEXT_OVERRIDDEN_DECL_1: Begin completions // SEMANTIC_CONTEXT_OVERRIDDEN_DECL_1-DAG: Decl[InstanceMethod]/CurrNominal: instanceFunc1()[#Void#]{{; name=.+$}} // SEMANTIC_CONTEXT_OVERRIDDEN_DECL_1-DAG: Decl[InstanceMethod]/CurrNominal: instanceFunc1({#(a): Int#})[#Void#]{{; name=.+$}} // SEMANTIC_CONTEXT_OVERRIDDEN_DECL_1: End completions super.#^SEMANTIC_CONTEXT_OVERRIDDEN_DECL_2^# // SEMANTIC_CONTEXT_OVERRIDDEN_DECL_2: Begin completions // SEMANTIC_CONTEXT_OVERRIDDEN_DECL_2-NEXT: Decl[Constructor]/CurrNominal: init()[#SemanticContextBase1#]{{; name=.+$}} // SEMANTIC_CONTEXT_OVERRIDDEN_DECL_2-NEXT: Decl[Constructor]/ExprSpecific: init({#a: Int#})[#SemanticContextBase1#]{{; name=.+$}} // SEMANTIC_CONTEXT_OVERRIDDEN_DECL_2-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc1()[#Void#]{{; name=.+$}} // SEMANTIC_CONTEXT_OVERRIDDEN_DECL_2-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc1({#(a): Int#})[#Void#]{{; name=.+$}} // SEMANTIC_CONTEXT_OVERRIDDEN_DECL_2-NEXT: End completions } func instanceFunc1() { #^SEMANTIC_CONTEXT_OVERRIDDEN_DECL_3^# // SEMANTIC_CONTEXT_OVERRIDDEN_DECL_3: Begin completions // SEMANTIC_CONTEXT_OVERRIDDEN_DECL_3-DAG: Decl[InstanceMethod]/CurrNominal: instanceFunc1()[#Void#]{{; name=.+$}} // SEMANTIC_CONTEXT_OVERRIDDEN_DECL_3-DAG: Decl[InstanceMethod]/CurrNominal: instanceFunc1({#(a): Int#})[#Void#]{{; name=.+$}} // SEMANTIC_CONTEXT_OVERRIDDEN_DECL_3: End completions super.#^SEMANTIC_CONTEXT_OVERRIDDEN_DECL_4^# // SEMANTIC_CONTEXT_OVERRIDDEN_DECL_4: Begin completions // SEMANTIC_CONTEXT_OVERRIDDEN_DECL_4-NEXT: Decl[InstanceMethod]/ExprSpecific: instanceFunc1()[#Void#]{{; name=.+$}} // SEMANTIC_CONTEXT_OVERRIDDEN_DECL_4-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc1({#(a): Int#})[#Void#]{{; name=.+$}} // SEMANTIC_CONTEXT_OVERRIDDEN_DECL_4-NEXT: End completions } func instanceFunc1(_ a: Int) { super.#^SEMANTIC_CONTEXT_OVERRIDDEN_DECL_5^# // SEMANTIC_CONTEXT_OVERRIDDEN_DECL_5: Begin completions // SEMANTIC_CONTEXT_OVERRIDDEN_DECL_5-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc1()[#Void#]{{; name=.+$}} // SEMANTIC_CONTEXT_OVERRIDDEN_DECL_5-NEXT: Decl[InstanceMethod]/ExprSpecific: instanceFunc1({#(a): Int#})[#Void#]{{; name=.+$}} // SEMANTIC_CONTEXT_OVERRIDDEN_DECL_5-NEXT: End completions } } class Closures : SuperBaseA { func foo() { func inner() { super.#^CLOSURE_1^# // CLOSURE_1: Begin completions, 6 items // CLOSURE_1: End completions } } func bar() { let inner = { () -> Void in // CLOSURE_2: Begin completions, 6 items // CLOSURE_2: End completions super.#^CLOSURE_2^# } } func baz() { let inner = { [weak self] in super.#^CLOSURE_CAPTURE_1^# // CLOSURE_CAPTURE_1-NOT: Begin completions } } } //===--- Code completion for 'super' keyword itself. class SuperKWBase { func test() { // FIXME: make sure we don't code complete 'super' keyword here. #^BASE_SUPER_KW^# } } class SuperKWDerived : SuperKWBase { func test() { // FIXME: make sure include 'super' keyword in code completion results here. #^DERIVED_SUPER_KW^# } }