-
-
Notifications
You must be signed in to change notification settings - Fork 84
/
Copy pathpython.fieldAccess.scm
93 lines (85 loc) · 1.83 KB
/
python.fieldAccess.scm
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
;;!! foo.bar
;;! ^^^
(
(attribute
object: (_) @private.fieldAccess
)
(#not-type? @private.fieldAccess call attribute subscript)
)
;;!! foo().bar
;;! ^^^^^
(
(attribute
object: (call
function: (_) @_dummy
) @private.fieldAccess
)
(#not-type? @_dummy attribute)
)
;;!! foo[0].bar
;;! ^^^^^^
(
(attribute
object: (subscript
value: (_) @_dummy
) @private.fieldAccess
)
(#not-type? @_dummy attribute)
)
;;!! foo.bar
;;! ^^^^
(
(attribute
"." @private.fieldAccess.start
attribute: (_) @private.fieldAccess.end
) @_dummy
(#not-parent-type? @_dummy call subscript)
)
;;!! foo.bar()
;;! ^^^^^^
(call
function: (attribute
"." @private.fieldAccess.start
)
arguments: (_) @private.fieldAccess.end
)
;;!! foo.bar[0]
;;! ^^^^^^^
(subscript
value: (attribute
"." @private.fieldAccess.start
)
"]" @private.fieldAccess.end
)
;;!! foo[bar.baz]
;;! ^^^^
;; The reason we need this special treatment for subscript is that
;; the attribute inside the subscript of the subscript is a
;; direct child of the subscript, so will be ruled out by the
;; `foo.bar` pattern above. Note that this is not the case for `call`,
;; where the arguments get their own parent node, and are thus not direct children
;; of the call.
(subscript
subscript: (attribute
"." @private.fieldAccess.start
attribute: (_) @private.fieldAccess.end
)
)
;; Use the largest attribute, call, or subscript
;; in a chain of such ancestors as the iteration scope.
(
[
(attribute)
(call)
(subscript)
] @private.fieldAccess.iteration
(#not-parent-type? @private.fieldAccess.iteration attribute call subscript)
)
;; Use the interior of the `[]` in a subscript as an iteration scope
(subscript
subscript: [
(attribute)
(call)
(subscript)
] @private.fieldAccess.iteration
)