mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Some editors use diagnostics from SourceKit to replace build issues. This causes issues if the diagnostics from SourceKit are formatted differently than the build issues. Make sure they are rendered the same way, removing most uses of `DiagnosticsEditorMode`. To do so, always emit the `add stubs for conformance` note (which previously was only emitted in editor mode) and remove all `; add <something>` suffixes from notes that state which requirements are missing. rdar://129283608
63 lines
1.3 KiB
Swift
63 lines
1.3 KiB
Swift
// RUN: %target-typecheck-verify-swift
|
|
|
|
protocol P0 {
|
|
// expected-note @+1 {{protocol requires function 'callAsFunction()' with type '() -> Missing'}}
|
|
func callAsFunction() -> Self
|
|
}
|
|
func testProtocol(_ x: P0) {
|
|
_ = x()
|
|
}
|
|
func testGeneric<T : P0>(_ x: T) {
|
|
_ = x()
|
|
}
|
|
|
|
protocol P1 {
|
|
func callAsFunction() -> Self
|
|
}
|
|
extension P1 {
|
|
// expected-note @+1 {{found this candidate}}
|
|
func callAsFunction() -> Self {
|
|
return self
|
|
}
|
|
}
|
|
protocol P2 {}
|
|
extension P2 {
|
|
// expected-note @+1 {{found this candidate}}
|
|
func callAsFunction(x: Int, y: Int) -> Int {
|
|
return x + y
|
|
}
|
|
}
|
|
|
|
// expected-note@+2 {{add stubs for conformance}}
|
|
// expected-error @+1 {{type 'Missing' does not conform to protocol 'P0'}}
|
|
struct Missing : P0 {}
|
|
struct S0 : P0 {
|
|
@discardableResult
|
|
func callAsFunction() -> S0 { return self }
|
|
}
|
|
let s0 = S0()
|
|
s0()
|
|
|
|
struct S1 : P1 {
|
|
func callAsFunction() -> S1 { return self }
|
|
}
|
|
|
|
let s1 = S1()
|
|
_ = s1()()
|
|
|
|
struct Conforming : P0 & P1 & P2 {}
|
|
let conforming = Conforming()
|
|
_ = conforming(x: 1, y: 2)
|
|
_ = conforming().callAsFunction(x:y:)(1, 2)
|
|
_ = conforming.callAsFunction(x:y:)
|
|
_ = conforming.callAsFunction // expected-error {{ambiguous use of 'callAsFunction'}}
|
|
|
|
protocol P3 {}
|
|
extension P3 {
|
|
func callAsFunction() -> Self { return self }
|
|
}
|
|
struct S3 : P3 {}
|
|
|
|
let s3 = S3()
|
|
_ = s3()()
|