Files
swift-mirror/test/IDE/complete_after_super.swift
Ben Langmuir 642ae90a86 [code-complete] Reduce the priority of function call patterns
Constructor call patterns already get a real priority, but because of
the way we do function call patterns we don't have enough information,
and previously we were setting it to "expression specific", which is
unnecessarily high, particularly since functions (unlike inits) have
other better ways to code-complete already.

rdar://31113161
2017-12-18 12:55:20 -08:00

505 lines
19 KiB
Swift

// 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_1 > %t.super.txt
// RUN: %FileCheck %s -check-prefix=CONSTRUCTOR_SUPER_INIT_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_1^#
// CONSTRUCTOR_SUPER_INIT_1: Begin completions
// CONSTRUCTOR_SUPER_INIT_1-DAG: Pattern/CurrModule: ()[#SuperBaseA#];
// CONSTRUCTOR_SUPER_INIT_1: End completions
}
init (b: Float) {
super.init(#^CONSTRUCTOR_SUPER_INIT_PAREN_1^#
// CONSTRUCTOR_SUPER_INIT_PAREN_1-NOT: Pattern/
}
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^#
}
}