File: complete_from_constraint_extensions.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (53 lines) | stat: -rw-r--r-- 1,966 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CONSTRAINT1 | %FileCheck %s -check-prefix=CONSTRAINT1
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CONSTRAINT2 | %FileCheck %s -check-prefix=CONSTRAINT2
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CONSTRAINT3 | %FileCheck %s -check-prefix=CONSTRAINT3

public protocol P1 {}
public protocol P2 {}
public struct Example<T: Any> {}

extension Example where T: P1 {
  func P1Method() {}
}

extension Example where T: P2 {
  func P2Method() {}
}

public struct S1 : P1 {}
public struct S2 : P2 {}

func foo1() {
  var I1 = Example<S1>()
  I1.#^CONSTRAINT1^#
}

// CONSTRAINT1: 	 Begin completions, 2 items
// CONSTRAINT1-NEXT: Keyword[self]/CurrNominal: self[#Example<S1>#]; name=self
// CONSTRAINT1-NEXT: Decl[InstanceMethod]/CurrNominal:   P1Method()[#Void#]; name=P1Method()

func foo2() {
  var I2 = Example<S2>()
  I2.#^CONSTRAINT2^#
}

// CONSTRAINT2:      Begin completions, 2 items
// CONSTRAINT2-NEXT: Keyword[self]/CurrNominal: self[#Example<S2>#]; name=self
// CONSTRAINT2-NEXT: Decl[InstanceMethod]/CurrNominal:   P2Method()[#Void#]; name=P2Method()

protocol MyIndexable {}
protocol MyCollection : MyIndexable {
  associatedtype Indices = MyDefaultIndices<Self>
  var indices: Indices { get }
}
struct MyDefaultIndices<Elements : MyIndexable> : MyCollection {}
extension MyCollection where Indices == MyDefaultIndices<Self> {
    var indices: MyDefaultIndices<Self> { return MyDefaultIndices() }
}
struct ConcreteCollection<Element> : MyCollection {}
func foo3() {
  ConcreteCollection<Int>().#^CONSTRAINT3^#
}
// CONSTRAINT3:      Begin completions, 2 items
// CONSTRAINT3-NEXT: Keyword[self]/CurrNominal: self[#ConcreteCollection<Int>#]; name=self
// CONSTRAINT3-NEXT: Decl[InstanceVar]/Super:            indices[#MyDefaultIndices<ConcreteCollection<Int>>#]; name=indices