mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
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
505 lines
19 KiB
Swift
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^#
|
|
}
|
|
}
|