File: cursor_info_keypath_member_lookup.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 (77 lines) | stat: -rw-r--r-- 2,648 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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
struct Point {
  var x: Int
  var y: Int
}

struct Rectangle {
  var topLeft: Point
  var bottomRight: Point
}

@dynamicMemberLookup
struct Lens<T> {
  var obj: T
  init(_ obj: T) {
    self.obj = obj
  }

  subscript<U>(dynamicMember member: WritableKeyPath<T, U>) -> Lens<U> {
    get { return Lens<U>(obj[keyPath: member]) }
    set { obj[keyPath: member] = newValue.obj }
  }
}

func test(r: Lens<Rectangle>) {
  _ = r.topLeft
  _ = r.bottomRight.y
}

func keyPathTester<V>(keyPath: KeyPath<Lens<Rectangle>, V>) {}

func testKeyPath() {
  keyPathTester(keyPath: \.topLeft)
}

// RUN: %sourcekitd-test -req=cursor -pos=18:3 -cursor-action %s -- %s | %FileCheck -check-prefix=SUBSCRIPT %s
// SUBSCRIPT: source.lang.swift.decl.function.subscript (18:3-18:12)
// SUBSCRIPT: subscript(dynamicMember:)
// SUBSCRIPT: <T, U> (dynamicMember: WritableKeyPath<T, U>) -> Lens<U>
// SUBSCRIPT: ACTIONS BEGIN
// FIXME: should not allow rename since that would break the contract.
// SUBSCRIPT: source.refactoring.kind.rename.global
// SUBSCRIPT: ACTIONS END

// RUN: %sourcekitd-test -req=cursor -pos=25:9 -cursor-action %s -- %s | %FileCheck -check-prefix=TOP_LEFT %s
// TOP_LEFT: source.lang.swift.ref.var.instance
// TOP_LEFT: topLeft
// TOP_LEFT: Point
// TOP_LEFT: <decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>topLeft</decl.name>: <decl.var.type><ref.struct usr="{{s:.*}}">Point</ref.struct></decl.var.type></decl.var.instance>
// TOP_LEVEL: ACTIONS BEGIN
// TOP_LEVEL: source.refactoring.kind.rename.global
// TOP_LEVEL: ACTIONS END

// RUN: %sourcekitd-test -req=cursor -pos=26:9 -cursor-action %s -- %s | %FileCheck -check-prefix=BOTTOM_RIGHT %s
// BOTTOM_RIGHT: source.lang.swift.ref.var.instance
// BOTTOM_RIGHT: bottomRight
// BOTTOM_RIGHT: Point
// BOTTOM_RIGHT: ACTIONS BEGIN
// BOTTOM_RIGHT: source.refactoring.kind.rename.global
// BOTTOM_RIGHT: ACTIONS END

/// RUN: %sourcekitd-test -req=cursor -pos=26:21 -cursor-action %s -- %s | %FileCheck -check-prefix=YREF %s
// YREF: source.lang.swift.ref.var.instance
// YREF: y
// YREF: Int
// YREF: <decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>y</decl.name>: <decl.var.type><ref.struct usr="s:Si">Int</ref.struct></decl.var.type></decl.var.instance>
// YREF: ACTIONS BEGIN
// YREF: source.refactoring.kind.rename.global
// YREF: ACTIONS END

// RUN: %sourcekitd-test -req=cursor -pos=32:28 -cursor-action %s -- %s | %FileCheck -check-prefix=KEYPATH %s
// KEYPATH: source.lang.swift.ref.var.instance
// KEYPATH: topLeft
// KEYPATH: Point
// KEYPATH: ACTIONS BEGIN
// KEYPATH: source.refactoring.kind.rename.global
// KEYPATH: ACTIONS END