mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
723 lines
28 KiB
Swift
723 lines
28 KiB
Swift
// RUN: %empty-directory(%t)
|
|
// RUN: %target-swift-ide-test -disable-implicit-concurrency-module-import -batch-code-completion -source-filename %s -filecheck %raw-FileCheck -completion-output-dir %t
|
|
// RUN: sed -n -e '1,/NO_ERRORS_UP_TO_HERE$/ p' %s > %t_no_errors.swift
|
|
// RUN: %target-swift-frontend -typecheck -verify -disable-objc-attr-requires-foundation-module -enable-objc-interop %t_no_errors.swift
|
|
|
|
// NORESULT: Token
|
|
|
|
@objc
|
|
class TagPA {}
|
|
@objc
|
|
protocol ProtocolA {
|
|
init(fromProtocolA: Int)
|
|
|
|
func protoAFunc()
|
|
@objc optional func protoAFuncOptional()
|
|
|
|
subscript(a: TagPA) -> Int { get }
|
|
|
|
var protoAVarRW: Int { get set }
|
|
var protoAVarRO: Int { get }
|
|
}
|
|
// WITH_PA-DAG: Decl[Constructor]/Super: required init(fromProtocolA: Int) {|}{{; name=.+$}}
|
|
// WITH_PA-DAG: Decl[InstanceMethod]/Super: func protoAFunc() {|}{{; name=.+$}}
|
|
// WITH_PA-DAG: Decl[InstanceMethod]/Super: func protoAFuncOptional() {|}{{; name=.+$}}
|
|
// WITH_PA-DAG: Decl[Subscript]/Super: subscript(a: TagPA) -> Int {|}{{; name=.+$}}
|
|
// WITH_PA-DAG: Decl[InstanceVar]/Super: var protoAVarRW: Int{{; name=.+$}}
|
|
// WITH_PA-DAG: Decl[InstanceVar]/Super: var protoAVarRO: Int{{; name=.+$}}
|
|
|
|
// WITH_PA_NO_PROTOFUNCA-DAG: Decl[Constructor]/Super: required init(fromProtocolA: Int) {|}{{; name=.+$}}
|
|
// WITH_PA_NO_PROTOFUNCA-DAG: Decl[InstanceMethod]/Super: func protoAFuncOptional() {|}{{; name=.+$}}
|
|
// WITH_PA_NO_PROTOFUNCA-DAG: Decl[InstanceVar]/Super: var protoAVarRW: Int{{; name=.+$}}
|
|
// WITH_PA_NO_PROTOFUNCA-DAG: Decl[InstanceVar]/Super: var protoAVarRO: Int{{; name=.+$}}
|
|
|
|
struct TagPB {}
|
|
protocol ProtocolB : ProtocolA {
|
|
init(fromProtocolB: Int)
|
|
|
|
func protoBFunc()
|
|
|
|
subscript(a: TagPB) -> Int { get }
|
|
|
|
var protoBVarRW: Int { get set }
|
|
var protoBVarRO: Int { get }
|
|
}
|
|
// WITH_PB-DAG: Decl[Constructor]/Super: required init(fromProtocolA: Int) {|}{{; name=.+$}}
|
|
// WITH_PB-DAG: Decl[InstanceMethod]/Super: func protoAFunc() {|}{{; name=.+$}}
|
|
// WITH_PB-DAG: Decl[InstanceMethod]/Super: func protoBFunc() {|}{{; name=.+$}}
|
|
// WITH_PB-DAG: Decl[Subscript]/Super: subscript(a: TagPB) -> Int {|}{{; name=.+$}}
|
|
// WITH_PB-DAG: Decl[InstanceVar]/Super: var protoBVarRW: Int{{; name=.+$}}
|
|
// WITH_PB-DAG: Decl[InstanceVar]/Super: var protoBVarRO: Int{{; name=.+$}}
|
|
|
|
struct TagPE {}
|
|
protocol ProtocolE {
|
|
init(fromProtocolE: Int)
|
|
|
|
func protoEFunc()
|
|
|
|
subscript(a: TagPE) -> Int { get }
|
|
|
|
var protoEVarRW: Int { get set }
|
|
var protoEVarRO: Int { get }
|
|
}
|
|
// WITH_PE-DAG: Decl[Constructor]/Super: required init(fromProtocolE: Int) {|}{{; name=.+$}}
|
|
// WITH_PE-DAG: Decl[InstanceMethod]/Super: func protoEFunc() {|}{{; name=.+$}}
|
|
// WITH_PE-DAG: Decl[Subscript]/Super: subscript(a: TagPE) -> Int {|}{{; name=.+$}}
|
|
// WITH_PE-DAG: Decl[InstanceVar]/Super: var protoEVarRW: Int{{; name=.+$}}
|
|
// WITH_PE-DAG: Decl[InstanceVar]/Super: var protoEVarRO: Int{{; name=.+$}}
|
|
|
|
class BaseA {
|
|
init(fromBaseA: Int) {}
|
|
init(fromBaseAWithParamName foo: Int, withOther bar: Double) {}
|
|
convenience init(convenienceFromBaseA: Double) {
|
|
self.init(fromBaseA: 0)
|
|
}
|
|
|
|
func baseAFunc(foo x: Int) {}
|
|
func baseAFunc2(foo x: Int) {}
|
|
|
|
var baseAVarRW: Int { get { return 0 } set {} }
|
|
var baseAVarRO: Int { return 0 }
|
|
}
|
|
// WITH_BA-DAG: Decl[Constructor]/Super: override init(fromBaseA: Int) {|}{{; name=.+$}}
|
|
// WITH_BA-DAG: Decl[Constructor]/Super: override init(fromBaseAWithParamName foo: Int, withOther bar: Double) {|}{{; name=.+$}}
|
|
// WITH_BA-DAG: Decl[InstanceMethod]/Super: override func baseAFunc(foo x: Int) {|}{{; name=.+$}}
|
|
// WITH_BA-DAG: Decl[InstanceMethod]/Super: override func baseAFunc2(foo x: Int) {|}{{; name=.+$}}
|
|
// WITH_BA-DAG: Decl[InstanceVar]/Super: override var baseAVarRW: Int{{; name=.+$}}
|
|
// WITH_BA-DAG: Decl[InstanceVar]/Super: override var baseAVarRO: Int{{; name=.+$}}
|
|
|
|
class BaseB : BaseA {
|
|
override func baseAFunc2(foo x: Int) {}
|
|
|
|
init(fromBaseB: Int) {}
|
|
convenience init(convenienceFromBaseB: Double) {
|
|
self.init(fromBaseB: 0)
|
|
}
|
|
|
|
func baseBFunc() {}
|
|
|
|
var baseBVarRW: Int { get { return 0 } set {} }
|
|
var baseBVarRO: Int { return 0 }
|
|
}
|
|
// WITH_BB-DAG: Decl[InstanceMethod]/Super: override func baseAFunc(foo x: Int) {|}{{; name=.+$}}
|
|
// WITH_BB-DAG: Decl[InstanceMethod]/Super: override func baseAFunc2(foo x: Int) {|}{{; name=.+$}}
|
|
// WITH_BB-DAG: Decl[Constructor]/Super: override init(fromBaseB: Int) {|}{{; name=.+$}}
|
|
// WITH_BB-DAG: Decl[InstanceMethod]/Super: override func baseBFunc() {|}{{; name=.+$}}
|
|
// WITH_BB-DAG: Decl[InstanceVar]/Super: override var baseAVarRW: Int{{; name=.+$}}
|
|
// WITH_BB-DAG: Decl[InstanceVar]/Super: override var baseAVarRO: Int{{; name=.+$}}
|
|
// WITH_BB-DAG: Decl[InstanceVar]/Super: override var baseBVarRW: Int{{; name=.+$}}
|
|
// WITH_BB-DAG: Decl[InstanceVar]/Super: override var baseBVarRO: Int{{; name=.+$}}
|
|
|
|
class BaseE : ProtocolE {
|
|
required init(fromProtocolE: Int) {}
|
|
|
|
func protoEFunc() {}
|
|
|
|
subscript(a: TagPE) -> Int { return 0 }
|
|
|
|
var protoEVarRW: Int { get { return 0 } set {} }
|
|
var protoEVarRO: Int { return 0 }
|
|
|
|
init(fromBaseE: Int) {}
|
|
|
|
func baseEFunc() {}
|
|
|
|
var baseEVarRW: Int { get { return 0 } set {} }
|
|
var baseEVarRO: Int { return 0 }
|
|
}
|
|
// WITH_BE-DAG: Decl[Constructor]/Super: required init(fromProtocolE: Int) {|}{{; name=.+$}}
|
|
// WITH_BE-DAG: Decl[InstanceMethod]/Super: override func protoEFunc() {|}{{; name=.+$}}
|
|
// WITH_BE-DAG: Decl[Subscript]/Super: override subscript(a: TagPE) -> Int {|}{{; name=.+$}}
|
|
// WITH_BE-DAG: Decl[Constructor]/Super: override init(fromBaseE: Int) {|}{{; name=.+$}}
|
|
// WITH_BE-DAG: Decl[InstanceMethod]/Super: override func baseEFunc() {|}{{; name=.+$}}
|
|
// WITH_BE-DAG: Decl[InstanceVar]/Super: override var protoEVarRW: Int{{; name=.+$}}
|
|
// WITH_BE-DAG: Decl[InstanceVar]/Super: override var protoEVarRO: Int{{; name=.+$}}
|
|
// WITH_BE-DAG: Decl[InstanceVar]/Super: override var baseEVarRW: Int{{; name=.+$}}
|
|
// WITH_BE-DAG: Decl[InstanceVar]/Super: override var baseEVarRO: Int{{; name=.+$}}
|
|
|
|
class ProtocolEImpl /* : ProtocolE but does not implement the protocol */ {
|
|
init(fromProtocolE: Int) {}
|
|
|
|
func protoEFunc() {}
|
|
|
|
subscript(a: TagPE) -> Int { return 0 }
|
|
|
|
var protoEVarRW: Int { get { return 0 } set {} }
|
|
var protoEVarRO: Int { return 0 }
|
|
}
|
|
// WITH_PEI-DAG: Decl[Constructor]/Super: override init(fromProtocolE: Int) {|}{{; name=.+$}}
|
|
// WITH_PEI-DAG: Decl[InstanceMethod]/Super: override func protoEFunc() {|}{{; name=.+$}}
|
|
// WITH_PEI-DAG: Decl[Subscript]/Super: override subscript(a: TagPE) -> Int {|}{{; name=.+$}}
|
|
// WITH_PEI-DAG: Decl[InstanceVar]/Super: override var protoEVarRW: Int{{; name=.+$}}
|
|
// WITH_PEI-DAG: Decl[InstanceVar]/Super: override var protoEVarRO: Int{{; name=.+$}}
|
|
|
|
// NO_ERRORS_UP_TO_HERE
|
|
|
|
class TestClass_PA : ProtocolA {
|
|
func ERROR() {}
|
|
|
|
#^CLASS_PA?check=CLASS_PA;check=WITH_PA;keywords=false^#
|
|
}
|
|
// CLASS_PA: Begin completions, 6 items
|
|
|
|
class TestClass_PA_Ext {
|
|
func ERROR1() {}
|
|
#^CLASS_PA_EXT_1?check=CLASS_PA;check=WITH_PA;keywords=false^#
|
|
}
|
|
extension TestClass_PA_Ext : ProtocolA {
|
|
func ERROR2() {}
|
|
#^CLASS_PA_EXT_2?check=CLASS_PA;check=WITH_PA;keywords=false^#
|
|
}
|
|
|
|
class TestClass_PB : ProtocolB {
|
|
#^CLASS_PB?check=CLASS_PB;check=WITH_PB;keywords=false^#
|
|
}
|
|
// CLASS_PB: Begin completions, 11 items
|
|
|
|
class TestClass_PA_PB : ProtocolA, ProtocolB {
|
|
#^CLASS_PA_PB?check=CLASS_PA_PB;check=WITH_PA;check=WITH_PB;keywords=false^#
|
|
}
|
|
// CLASS_PA_PB: Begin completions, 11 items
|
|
|
|
class TestClass_BA : BaseA {
|
|
#^CLASS_BA?check=CLASS_BA;check=WITH_BA;keywords=false^#
|
|
}
|
|
// CLASS_BA: Begin completions, 6 items
|
|
|
|
class TestClass_BA_PA : BaseA, ProtocolA {
|
|
#^CLASS_BA_PA?check=CLASS_BA_PA;check=WITH_BA;check=WITH_PA;keywords=false^#
|
|
}
|
|
// CLASS_BA_PA: Begin completions, 12 items
|
|
|
|
class TestClass_BA_PA_Ext : BaseA {
|
|
#^CLASS_BA_PA_EXT1?check=CLASS_BA_PA;check=WITH_BA;check=WITH_PA;keywords=false^#
|
|
}
|
|
|
|
extension TestClass_BA_PA_Ext : ProtocolA {
|
|
#^CLASS_BA_PA_EXT2?check=CLASS_BA_PA;check=WITH_BA;check=WITH_PA;keywords=false^#
|
|
}
|
|
|
|
class TestClass_BA_PB : BaseA, ProtocolB {
|
|
#^CLASS_BA_PB?check=CLASS_BA_PB;check=WITH_BA;check=WITH_PB;keywords=false^#
|
|
}
|
|
// CLASS_BA_PB: Begin completions, 17 items
|
|
|
|
class TestClass_BB : BaseB {
|
|
#^CLASS_BB?check=CLASS_BB;check=WITH_BB;keywords=false^#
|
|
}
|
|
// CLASS_BB: Begin completions, 8 items
|
|
|
|
class TestClass_BE : BaseE {
|
|
#^CLASS_BE?check=CLASS_BE;check=WITH_BE;keywords=false^#
|
|
}
|
|
// CLASS_BE: Begin completions, 9 items
|
|
|
|
class TestClass_BE_PA : BaseE, ProtocolA {
|
|
#^CLASS_BE_PA?check=CLASS_BE_PA;check=WITH_BE;check=WITH_PA;keywords=false^#
|
|
}
|
|
// CLASS_BE_PA: Begin completions, 15 items
|
|
|
|
class TestClass_BE_PA_PE : BaseE, ProtocolA, ProtocolE {
|
|
#^CLASS_BE_PA_PE?check=CLASS_BE_PA_PE;check=WITH_BE;check=WITH_PA;keywords=false^#
|
|
}
|
|
// CLASS_BE_PA_PE: Begin completions, 15 items
|
|
|
|
class TestClass_BE_PA_PE_Ext : BaseE {
|
|
#^CLASS_BE_PA_PE_EXT1?check=CLASS_BE_PA_PE;check=WITH_BE;check=WITH_PA;keywords=false^#
|
|
}
|
|
extension TestClass_BE_PA_PE_Ext : ProtocolA, ProtocolE {
|
|
#^CLASS_BE_PA_PE_EXT2?check=CLASS_BE_PA_PE;check=WITH_BE;check=WITH_PA;keywords=false^#
|
|
}
|
|
|
|
class TestClass_PEI_PE : ProtocolEImpl, ProtocolE {
|
|
#^CLASS_PEI_PE?check=CLASS_PEI_PE;check=WITH_PEI;keywords=false^#
|
|
}
|
|
// CLASS_PEI_PE: Begin completions, 5 items
|
|
|
|
protocol TestProtocol_PA : ProtocolA {
|
|
#^PROTOCOL_PA?keywords=false;check=NORESULT^#
|
|
}
|
|
|
|
extension TestProtocol_PA {
|
|
#^PROTOCOL_PA_EXT?keywords=false^#
|
|
}
|
|
|
|
// PROTOCOL_PA_EXT-DAG: Decl[Constructor]/Super: init(fromProtocolA: Int) {|}; name=init(fromProtocolA:)
|
|
// PROTOCOL_PA_EXT-DAG: Decl[InstanceMethod]/Super: func protoAFunc() {|}; name=protoAFunc()
|
|
// PROTOCOL_PA_EXT-DAG: Decl[InstanceMethod]/Super: func protoAFuncOptional() {|}; name=protoAFuncOptional()
|
|
// PROTOCOL_PA_EXT-DAG: Decl[Subscript]/Super: subscript(a: TagPA) -> Int {|}; name=subscript(:)
|
|
// PROTOCOL_PA_EXT-DAG: Decl[InstanceVar]/Super: var protoAVarRW: Int; name=protoAVarRW
|
|
// PROTOCOL_PA_EXT-DAG: Decl[InstanceVar]/Super: var protoAVarRO: Int; name=protoAVarRO
|
|
|
|
class OuterNominal : ProtocolA {
|
|
class Inner {
|
|
#^NESTED_NOMINAL?check=NORESULT;keywords=false^#
|
|
}
|
|
}
|
|
|
|
class OuterNominal2: ProtocolA {
|
|
var f = { #^NESTED_CLOSURE_1?keywords=false^# }()
|
|
}
|
|
// NESTED_CLOSURE_1-NOT: Decl{{.*}}/Super: func
|
|
// NESTED_CLOSURE_1-NOT: {|}
|
|
|
|
class OuterNominal3: ProtocolA {
|
|
var f = { static #^NESTED_CLOSURE_2?keywords=false^# }()
|
|
}
|
|
// NESTED_CLOSURE_2-NOT: Decl{{.*}}/Super: func
|
|
// NESTED_CLOSURE_2-NOT: {|}
|
|
|
|
class OmitKW1 : ProtocolA {
|
|
override#^OMIT_KEYWORD1?keywords=false^#
|
|
}
|
|
|
|
// OMIT_KEYWORD1-NOT: Decl[Constructor]
|
|
// OMIT_KEYWORD1-DAG: Decl[InstanceMethod]/Super: func protoAFunc() {|}; name=protoAFunc(){{$}}
|
|
// OMIT_KEYWORD1-DAG: Decl[InstanceMethod]/Super: func protoAFuncOptional() {|}; name=protoAFuncOptional(){{$}}
|
|
// OMIT_KEYWORD1-DAG: Decl[Subscript]/Super: subscript(a: TagPA) -> Int {|}; name=subscript(:)
|
|
// OMIT_KEYWORD1-DAG: Decl[InstanceVar]/Super: var protoAVarRW: Int{{; name=.+$}}
|
|
// OMIT_KEYWORD1-NOT: Decl[Constructor]
|
|
|
|
class OmitKW2 : ProtocolA {
|
|
override func#^OMIT_KEYWORD2?keywords=false^#
|
|
}
|
|
|
|
// OMIT_KEYWORD2-NOT: Decl[InstanceVar]/Super: var protoAVarRW: Int{{; name=.+$}}
|
|
// OMIT_KEYWORD2-NOT: Decl[Constructor]
|
|
// OMIT_KEYWORD2-NOT: Decl[Subscript]
|
|
// OMIT_KEYWORD2-DAG: Decl[InstanceMethod]/Super: protoAFunc() {|}; name=protoAFunc(){{$}}
|
|
// OMIT_KEYWORD2-DAG: Decl[InstanceMethod]/Super: protoAFuncOptional() {|}; name=protoAFuncOptional(){{$}}
|
|
// OMIT_KEYWORD2-NOT: Decl[InstanceVar]/Super: var protoAVarRW: Int{{; name=.+$}}
|
|
// OMIT_KEYWORD2-NOT: Decl[Constructor]
|
|
// OMIT_KEYWORD2-NOT: Decl[Subscript]
|
|
|
|
class OmitKW3 : ProtocolA {
|
|
func#^OMIT_KEYWORD3?keywords=false^#
|
|
}
|
|
|
|
// FIXME: missing 'override'
|
|
// OMIT_KEYWORD3-NOT: Decl[InstanceVar]/Super: var protoAVarRW: Int{{; name=.+$}}
|
|
// OMIT_KEYWORD3-NOT: Decl[Constructor]
|
|
// OMIT_KEYWORD2-NOT: Decl[Subscript]
|
|
// OMIT_KEYWORD3-DAG: Decl[InstanceMethod]/Super: protoAFunc() {|}; name=protoAFunc(){{$}}
|
|
// OMIT_KEYWORD3-DAG: Decl[InstanceMethod]/Super: protoAFuncOptional() {|}; name=protoAFuncOptional(){{$}}
|
|
// OMIT_KEYWORD3-NOT: Decl[InstanceVar]/Super: var protoAVarRW: Int{{; name=.+$}}
|
|
// OMIT_KEYWORD3-NOT: Decl[Constructor]
|
|
// OMIT_KEYWORD2-NOT: Decl[Subscript]
|
|
|
|
class OmitKW4: ProtocolA {
|
|
var #^OMIT_KEYWORD4?keywords=false^#
|
|
}
|
|
class OmitKW4_let: ProtocolA {
|
|
let #^OMIT_KEYWORD4_LET?check=OMIT_KEYWORD4;keywords=false^#
|
|
}
|
|
|
|
// OMIT_KEYWORD4-NOT: Decl[Constructor]
|
|
// OMIT_KEYWORD4-NOT: Decl[InstanceMethod]
|
|
// OMIT_KEYWORD4: Decl[InstanceVar]/Super: protoAVarRW: Int{{; name=.+$}}
|
|
// OMIT_KEYWORD4-NOT: Decl[InstanceMethod]
|
|
// OMIT_KEYWORD4-NOT: Decl[Constructor]
|
|
// OMIT_KEYWORD4-NOT: Decl[Subscript]
|
|
|
|
class OmitKW5: ProtocolA {
|
|
override
|
|
#^OMIT_KEYWORD5?check=OMIT_KEYWORD1;keywords=false^#
|
|
// Same as OMIT_KEYWORD1
|
|
}
|
|
class OmitKW6: ProtocolA {
|
|
override
|
|
func
|
|
#^OMIT_KEYWORD6?check=OMIT_KEYWORD2;keywords=false^#
|
|
// Same as OMIT_KEYWORD2
|
|
}
|
|
class OmitKW7: ProtocolA {
|
|
func
|
|
#^OMIT_KEYWORD7?check=OMIT_KEYWORD3;keywords=false^#
|
|
// Same as OMIT_KEYWORD3
|
|
}
|
|
|
|
class OmitKW8: ProtocolA {
|
|
var
|
|
#^OMIT_KEYWORD8?check=OMIT_KEYWORD4;keywords=false^#
|
|
// Same as OMIT_KEYWORD4
|
|
}
|
|
class OmitKW8_let: ProtocolA {
|
|
let
|
|
#^OMIT_KEYWORD8_LET?check=OMIT_KEYWORD4;keywords=false^#
|
|
}
|
|
class OmitKW9: ProtocolA {
|
|
override
|
|
var
|
|
#^OMIT_KEYWORD9?check=OMIT_KEYWORD4;keywords=false^#
|
|
// Same as OMIT_KEYWORD4
|
|
}
|
|
class OmitKW9_let: ProtocolA {
|
|
override
|
|
let
|
|
#^OMIT_KEYWORD9_LET?check=OMIT_KEYWORD4;keywords=false^#
|
|
// Same as OMIT_KEYWORD4
|
|
}
|
|
class OmitKW10: ProtocolA {
|
|
override func protoAFunc() {}; #^OMIT_KEYWORD10?check=WITH_PA_NO_PROTOFUNCA;keywords=false^#
|
|
// WITH_PA
|
|
}
|
|
|
|
// https://github.com/apple/swift/issues/45165
|
|
|
|
protocol P_45165 {
|
|
func foo<S : Sequence>(x: S) where S.Iterator.Element == Int
|
|
}
|
|
class C_45165: P_45165 {
|
|
#^ISSUE_45165_WHERE_CLAUSE?keywords=false^#
|
|
}
|
|
|
|
// ISSUE_45165_WHERE_CLAUSE: Decl[InstanceMethod]/Super: func foo<S>(x: S) where S : Sequence, S.Element == Int {|};
|
|
|
|
protocol HasThrowingProtocol {
|
|
func foo() throws
|
|
}
|
|
|
|
class HasThrowing {
|
|
func bar() throws {}
|
|
func baz(x: @escaping () throws -> ()) rethrows {}
|
|
init() throws {}
|
|
}
|
|
class TestClassWithThrows : HasThrowing, HasThrowingProtocol {
|
|
#^HAS_THROWING?keywords=false^#
|
|
}
|
|
// HAS_THROWING-DAG: Decl[InstanceMethod]/Super: func foo() throws {|}; name=foo()
|
|
// HAS_THROWING-DAG: Decl[InstanceMethod]/Super: override func bar() throws {|}; name=bar()
|
|
// HAS_THROWING-DAG: Decl[InstanceMethod]/Super: override func baz(x: @escaping () throws -> ()) rethrows {|}; name=baz(x:)
|
|
// HAS_THROWING-DAG: Decl[Constructor]/Super: override init() throws {|}; name=init()
|
|
|
|
protocol P0
|
|
protocol P1 {
|
|
associatedtype T1 = Int
|
|
associatedtype T2 : P0
|
|
associatedtype T3
|
|
}
|
|
class C1 : P1 {
|
|
#^ASSOC_TYPE1?keywords=false^#
|
|
}
|
|
|
|
// ASSOC_TYPE1: Begin completions, 2 items
|
|
// ASSOC_TYPE1: Decl[AssociatedType]/Super: typealias T2 = {#(Type)#}; name=T2 =
|
|
// ASSOC_TYPE1: Decl[AssociatedType]/Super: typealias T3 = {#(Type)#}; name=T3 =
|
|
|
|
class Deprecated1 {
|
|
@available(*, deprecated)
|
|
func deprecated() {}
|
|
}
|
|
|
|
class Deprecated2 : Deprecated1 {
|
|
override func #^DEPRECATED_1?keywords=false^#
|
|
}
|
|
// DEPRECATED_1: Decl[InstanceMethod]/Super/NotRecommended: deprecated() {|};
|
|
|
|
class EscapingBase {
|
|
func method(_ x: @escaping (@escaping ()->()) -> (()->())) -> ((@escaping ()->() )->()) { }
|
|
func autoclosure(arg: @autoclosure () -> Bool) {}
|
|
}
|
|
class Escaping : EscapingBase {
|
|
override func #^ESCAPING_1?keywords=false^#
|
|
}
|
|
// ESCAPING_1: Decl[InstanceMethod]/Super: method(_ x: @escaping (@escaping () -> ()) -> (() -> ())) -> ((@escaping () -> ()) -> ()) {|};
|
|
// ESCAPING_1: Decl[InstanceMethod]/Super: autoclosure(arg: @autoclosure () -> Bool) {|};
|
|
class OverrideBase {
|
|
static let staticLet = 0
|
|
static var staticVar = 0
|
|
static var staticGetOnlyVar: Int { return 0 }
|
|
|
|
class let classLet = 0
|
|
class var classVar = 0
|
|
class var classGetOnlyVar: Int { return 0 }
|
|
|
|
static func staticMethod() {}
|
|
class func classMethod() {}
|
|
|
|
let letDecl = 0
|
|
var varDecl: Int = 0
|
|
|
|
init(x: Int) {}
|
|
convenience init(y: Int) { self.init(x: y) }
|
|
required init(a: Int) {}
|
|
required convenience init(b: Int) {}
|
|
func defaultMethod() {}
|
|
final func finalMethod() {}
|
|
open func openMethod() {}
|
|
}
|
|
protocol OverrideP {
|
|
associatedtype Assoc : OverrideP
|
|
init(p: Int)
|
|
}
|
|
|
|
class Override1 : OverrideBase, OverrideP {
|
|
#^MODIFIER1?keywords=false^#
|
|
}
|
|
class Override2 : OverrideBase, OverrideP {
|
|
final #^MODIFIER2?keywords=false^#
|
|
}
|
|
class Override3 : OverrideBase, OverrideP {
|
|
open #^MODIFIER3?check=MODIFIER2;keywords=false^#
|
|
// Same as MODIFIER2.
|
|
}
|
|
class Override4 : OverrideBase, OverrideP {
|
|
required #^MODIFIER4?keywords=false^#
|
|
}
|
|
class Override5 : OverrideBase, OverrideP {
|
|
convenience #^MODIFIER5?keywords=false^#
|
|
}
|
|
class Override6 : OverrideBase, OverrideP {
|
|
typealias #^MODIFIER6?keywords=false^#
|
|
}
|
|
class Override7 : OverrideBase, OverrideP {
|
|
override #^MODIFIER7?keywords=false^#
|
|
}
|
|
class Override8 : OverrideBase, OverrideP {
|
|
// Note: This *does* emit functions. It will result invalid decl, but fix-it
|
|
// will do the job.
|
|
convenience func #^MODIFIER8?keywords=false^#
|
|
}
|
|
class Override9 : OverrideBase, OverrideP {
|
|
// Ditto.
|
|
required var #^MODIFIER9?keywords=false^#
|
|
}
|
|
class Override10 : OverrideBase, OverrideP {
|
|
// Ditto.
|
|
final typealias #^MODIFIER10?check=MODIFIER6;keywords=false^#
|
|
// Same as MODIFIER6.
|
|
}
|
|
class Override11 : OverrideBase, OverrideP {
|
|
var #^MODIFIER11?check=MODIFIER9;keywords=false^#
|
|
// Same as MODIFIER9.
|
|
}
|
|
class Override12 : OverrideBase, OverrideP {
|
|
override var #^MODIFIER12?keywords=false^#
|
|
}
|
|
class Override13 : OverrideBase, OverrideP {
|
|
// No completions.
|
|
let #^MODIFIER13?keywords=false^#
|
|
}
|
|
class Override14 : OverrideBase, OverrideP {
|
|
// Note: This *does* emit variables. It will result invalid decl, but a
|
|
// diagnostic will tell the user what to do.
|
|
override let #^MODIFIER14?check=MODIFIER12;keywords=false^#
|
|
// Same as MODIFIER12.
|
|
}
|
|
class Override15 : OverrideBase, OverrideP {
|
|
required static var #^MODIFIER15?keywords=false^#
|
|
}
|
|
class Override16 : OverrideBase, OverrideP {
|
|
class var #^MODIFIER16?check=MODIFIER15;keywords=false^#
|
|
// Same as MODIFIER15
|
|
}
|
|
class Override17 : OverrideBase, OverrideP {
|
|
override class var #^MODIFIER17?keywords=false^#
|
|
}
|
|
class Override18 : OverrideBase, OverrideP {
|
|
// Note: This *does* emit variables. See MODIFIER14
|
|
override static let #^MODIFIER18?check=MODIFIER17;keywords=false^#
|
|
// Same as MODIFIER17
|
|
}
|
|
class Override19 : OverrideBase, OverrideP {
|
|
// No completions.
|
|
class let #^MODIFIER19?check=MODIFIER13;keywords=false^#
|
|
}
|
|
class Override20 : OverrideBase, OverrideP {
|
|
// No completions.
|
|
static let #^MODIFIER20?check=MODIFIER13;keywords=false^#
|
|
}
|
|
class Override21 : OverrideBase, OverrideP {
|
|
override class func #^MODIFIER21?keywords=false^#
|
|
}
|
|
class Override22 : OverrideBase, OverrideP {
|
|
class func #^MODIFIER22?keywords=false^#
|
|
}
|
|
class Override23 : OverrideBase, OverrideP {
|
|
static #^MODIFIER23?keywords=false^#
|
|
}
|
|
class Override24 : OverrideBase, OverrideP {
|
|
override static #^MODIFIER24?keywords=false^#
|
|
}
|
|
class Override25 : OverrideBase, OverrideP {
|
|
class #^MODIFIER25?check=MODIFIER23;keywords=false^#
|
|
// Same as MODIFIER23
|
|
}
|
|
class Override26 : OverrideBase, OverrideP {
|
|
class override #^MODIFIER26?check=MODIFIER24;keywords=false^#
|
|
// Same as MODIFIER24
|
|
}
|
|
|
|
// MODIFIER1: Begin completions, 10 items
|
|
// MODIFIER1-DAG: Decl[Constructor]/Super: required init(p: Int) {|}; name=init(p:)
|
|
// MODIFIER1-DAG: Decl[StaticMethod]/Super: override class func classMethod() {|}; name=classMethod()
|
|
// MODIFIER1-DAG: Decl[StaticVar]/Super: override class var classVar: Int; name=classVar
|
|
// MODIFIER1-DAG: Decl[StaticVar]/Super: override class var classGetOnlyVar: Int; name=classGetOnlyVar
|
|
// MODIFIER1-DAG: Decl[InstanceMethod]/Super: override func defaultMethod() {|}; name=defaultMethod()
|
|
// MODIFIER1-DAG: Decl[InstanceMethod]/Super: override func openMethod() {|}; name=openMethod()
|
|
// MODIFIER1-DAG: Decl[InstanceVar]/Super: override var varDecl: Int; name=varDecl
|
|
// MODIFIER1-DAG: Decl[Constructor]/Super: override init(x: Int) {|}; name=init(x:)
|
|
// MODIFIER1-DAG: Decl[Constructor]/Super: required init(a: Int) {|}; name=init(a:)
|
|
// MODIFIER1-DAG: Decl[AssociatedType]/Super: typealias Assoc = {#(Type)#}; name=Assoc =
|
|
|
|
// MODIFIER2: Begin completions, 6 items
|
|
// MODIFIER2-DAG: Decl[StaticVar]/Super: override class var classVar: Int; name=classVar
|
|
// MODIFIER2-DAG: Decl[StaticVar]/Super: override class var classGetOnlyVar: Int; name=classGetOnlyVar
|
|
// MODIFIER2-DAG: Decl[StaticMethod]/Super: override class func classMethod() {|}; name=classMethod()
|
|
// MODIFIER2-DAG: Decl[InstanceMethod]/Super: override func defaultMethod() {|}; name=defaultMethod()
|
|
// MODIFIER2-DAG: Decl[InstanceMethod]/Super: override func openMethod() {|}; name=openMethod()
|
|
// MODIFIER2-DAG: Decl[InstanceVar]/Super: override var varDecl: Int; name=varDecl
|
|
|
|
// MODIFIER4: Begin completions, 3 items
|
|
// MODIFIER4-DAG: Decl[Constructor]/Super: init(p: Int) {|}; name=init(p:)
|
|
// MODIFIER4-DAG: Decl[Constructor]/Super: override init(x: Int) {|}; name=init(x:)
|
|
// MODIFIER4-DAG: Decl[Constructor]/Super: init(a: Int) {|}; name=init(a:)
|
|
|
|
// MODIFIER5: Begin completions, 3 items
|
|
// MODIFIER5-DAG: Decl[Constructor]/Super: required init(p: Int) {|}; name=init(p:)
|
|
// MODIFIER5-DAG: Decl[Constructor]/Super: override init(x: Int) {|}; name=init(x:)
|
|
// MODIFIER5-DAG: Decl[Constructor]/Super: required init(a: Int) {|}; name=init(a:)
|
|
|
|
// MODIFIER6: Begin completions, 1 items
|
|
// MODIFIER6-DAG: Decl[AssociatedType]/Super: Assoc = {#(Type)#}; name=Assoc =
|
|
|
|
// MODIFIER7: Begin completions, 8 items
|
|
// MODIFIER7-DAG: Decl[StaticVar]/Super: class var classVar: Int; name=classVar
|
|
// MODIFIER7-DAG: Decl[StaticVar]/Super: class var classGetOnlyVar: Int; name=classGetOnlyVar
|
|
// MODIFIER7-DAG: Decl[StaticMethod]/Super: class func classMethod() {|}; name=classMethod()
|
|
// MODIFIER7-DAG: Decl[InstanceMethod]/Super: func defaultMethod() {|}; name=defaultMethod()
|
|
// MODIFIER7-DAG: Decl[InstanceVar]/Super: var varDecl: Int; name=varDecl
|
|
// MODIFIER7-DAG: Decl[InstanceMethod]/Super: func openMethod() {|}; name=openMethod()
|
|
// MODIFIER7-DAG: Decl[Constructor]/Super: init(x: Int) {|}; name=init(x:)
|
|
// MODIFIER7-DAG: Decl[Constructor]/Super: required init(a: Int) {|}; name=init(a:)
|
|
|
|
// MODIFIER8: Begin completions, 2 items
|
|
// MODIFIER8-DAG: Decl[InstanceMethod]/Super/Erase[5]: override func defaultMethod() {|}; name=defaultMethod()
|
|
// MODIFIER8-DAG: Decl[InstanceMethod]/Super/Erase[5]: override func openMethod() {|}; name=openMethod()
|
|
|
|
// MODIFIER9: Begin completions, 1 items
|
|
// MODIFIER9-DAG: Decl[InstanceVar]/Super/Erase[4]: override var varDecl: Int; name=varDecl
|
|
|
|
// MODIFIER12: Begin completions, 1 items
|
|
// MODIFIER12-DAG: Decl[InstanceVar]/Super: varDecl: Int; name=varDecl
|
|
|
|
// MODIFIER13-NOT: Begin completions
|
|
|
|
// MODIFIER15: Begin completions, 2 items
|
|
// MODIFIER15-DAG: Decl[StaticVar]/Super/Erase[4]: override var classVar: Int; name=classVar
|
|
// MODIFIER15-DAG: Decl[StaticVar]/Super/Erase[4]: override var classGetOnlyVar: Int; name=classGetOnlyVar
|
|
|
|
// MODIFIER17: Begin completions, 2 items
|
|
// MODIFIER17-DAG: Decl[StaticVar]/Super: classVar: Int; name=classVar
|
|
// MODIFIER17-DAG: Decl[StaticVar]/Super: classGetOnlyVar: Int; name=classGetOnlyVar
|
|
|
|
// MODIFIER21: Begin completions, 1 items
|
|
// MODIFIER21: Decl[StaticMethod]/Super: classMethod() {|}; name=classMethod()
|
|
|
|
// MODIFIER22: Begin completions, 1 items
|
|
// MODIFIER22: Decl[StaticMethod]/Super/Erase[5]: override func classMethod() {|}; name=classMethod()
|
|
|
|
// MODIFIER23: Begin completions, 3 items
|
|
// MODIFIER23-DAG: Decl[StaticMethod]/Super: override func classMethod() {|}; name=classMethod()
|
|
// MODIFIER23-DAG: Decl[StaticVar]/Super: override var classVar: Int; name=classVar
|
|
// MODIFIER23-DAG: Decl[StaticVar]/Super: override var classGetOnlyVar: Int; name=classGetOnlyVar
|
|
|
|
// MODIFIER24: Begin completions, 3 items
|
|
// MODIFIER24-DAG: Decl[StaticMethod]/Super: func classMethod() {|}; name=classMethod()
|
|
// MODIFIER24-DAG: Decl[StaticVar]/Super: var classVar: Int; name=classVar
|
|
// MODIFIER24-DAG: Decl[StaticVar]/Super: var classGetOnlyVar: Int; name=classGetOnlyVar
|
|
|
|
protocol RequiredP {
|
|
init(p: Int)
|
|
}
|
|
class RequiredClass : RequiredP {
|
|
#^PROTOINIT_NORM?keywords=false^#
|
|
}
|
|
final class RequiredFinal : RequiredP {
|
|
#^PROTOINIT_FINAL?keywords=false^#
|
|
}
|
|
struct RequiredS : RequiredP {
|
|
#^PROTOINIT_STRUCT?keywords=false^#
|
|
}
|
|
|
|
// PROTOINIT_NORM: Begin completions, 1 items
|
|
// PROTOINIT_NORM-DAG: required init(p: Int) {|}; name=init(p:)
|
|
|
|
// PROTOINIT_FINAL: Begin completions, 1 items
|
|
// PROTOINIT_FINAL-DAG: init(p: Int) {|}; name=init(p:)
|
|
|
|
// PROTOINIT_STRUCT: Begin completions, 1 items
|
|
// PROTOINIT_STRUCT-DAG: init(p: Int) {|}; name=init(p:)
|
|
|
|
protocol AssocAndMethod {
|
|
associatedtype T = Int
|
|
associatedtype U: P0
|
|
associatedtype V
|
|
|
|
func f1(_: T)
|
|
func f2(_: U)
|
|
func f3(_: V)
|
|
}
|
|
|
|
struct MissingAssoc: AssocAndMethod {
|
|
func #^MISSING_ASSOC_1?keywords=false^#
|
|
}
|
|
// MISSING_ASSOC_1-DAG: Decl[InstanceMethod]/Super: f1(_: T) {|};
|
|
// MISSING_ASSOC_1-DAG: Decl[InstanceMethod]/Super: f2(_: U) {|};
|
|
// MISSING_ASSOC_1-DAG: Decl[InstanceMethod]/Super: f3(_: V) {|};
|
|
|
|
// Test that we don't skip out on synthesized conformance members.
|
|
|
|
struct SynthesizedConformance1: Codable {
|
|
let foo: Int
|
|
#^OVERRIDE_SYNTHESIZED_1?keywords=false^#
|
|
// OVERRIDE_SYNTHESIZED_1: Begin completions, 2 items
|
|
// OVERRIDE_SYNTHESIZED_1-DAG: Decl[Constructor]/Super/IsSystem: init(from decoder: any Decoder) throws {|};
|
|
// OVERRIDE_SYNTHESIZED_1-DAG: Decl[InstanceMethod]/Super/IsSystem: func encode(to encoder: any Encoder) throws {|};
|
|
}
|
|
|
|
open class SynthesizedConformance2: Codable {
|
|
let foo: Int
|
|
func encode(to encoder: Encoder) throws {}
|
|
#^OVERRIDE_SYNTHESIZED_2?keywords=false^#
|
|
// OVERRIDE_SYNTHESIZED_2: Begin completions, 1 items
|
|
// OVERRIDE_SYNTHESIZED_2: Decl[Constructor]/Super/IsSystem: public required init(from decoder: any Decoder) throws {|};
|
|
}
|
|
|
|
struct SynthesizedConformance3: Hashable {
|
|
let foo: Int
|
|
#^OVERRIDE_SYNTHESIZED_3?keywords=false^#
|
|
// FIXME: Where did Equatable.(==) go?
|
|
// OVERRIDE_SYNTHESIZED_3: Begin completions, 2 items
|
|
// OVERRIDE_SYNTHESIZED_3-DAG: Decl[InstanceVar]/Super/IsSystem: var hashValue: Int; name=hashValue
|
|
// OVERRIDE_SYNTHESIZED_3-DAG: Decl[InstanceMethod]/Super/IsSystem: func hash(into hasher: inout Hasher) {|}
|
|
}
|
|
|
|
enum SynthesizedConformance4: CaseIterable {
|
|
case a, b, c, d
|
|
#^OVERRIDE_SYNTHESIZED_4?keywords=false^#
|
|
// OVERRIDE_SYNTHESIZED_4: Begin completions, 3 items
|
|
// OVERRIDE_SYNTHESIZED_4-DAG: Decl[InstanceVar]/Super/IsSystem: var hashValue: Int
|
|
// OVERRIDE_SYNTHESIZED_4-DAG: Decl[InstanceMethod]/Super/IsSystem: func hash(into hasher: inout Hasher) {|};
|
|
// OVERRIDE_SYNTHESIZED_4-DAG: Decl[StaticVar]/Super/IsSystem: static var allCases: [SynthesizedConformance4];
|
|
}
|
|
|
|
class SynthesizedConformance5: SynthesizedConformance2 {
|
|
#^OVERRIDE_SYNTHESIZED_5?keywords=false^#
|
|
// OVERRIDE_SYNTHESIZED_5: Begin completions, 3 items
|
|
// OVERRIDE_SYNTHESIZED_5-DAG: Decl[InstanceMethod]/Super: override func encode(to encoder: any Encoder) throws {|};
|
|
// OVERRIDE_SYNTHESIZED_5-DAG: Decl[Constructor]/Super/IsSystem: required init(from decoder: any Decoder) throws {|};
|
|
// OVERRIDE_SYNTHESIZED_5-DAG: Decl[Constructor]/Super: required init(from decoder: any Decoder) throws {|};
|
|
// FIXME: 'required init(from decoder: Decoder)' is suggested twice
|
|
}
|
|
|
|
// https://github.com/apple/swift/issues/57037
|
|
protocol P_57037 {
|
|
var value: Int { get }
|
|
}
|
|
struct S_57037: P_57037 {
|
|
let foo = val, #^MULTI_VAR_DECL_OVERRIDE^#
|
|
// MULTI_VAR_DECL_OVERRIDE: Begin completions, 1 items
|
|
// MULTI_VAR_DECL_OVERRIDE-DAG: Decl[InstanceVar]/Super: value: Int;
|
|
}
|