Skip to content

Commit 7536803

Browse files
committed
update queries to pass tests
1 parent 20a1f3b commit 7536803

File tree

1 file changed

+85
-35
lines changed

1 file changed

+85
-35
lines changed

queries/r.scm

Lines changed: 85 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
(repeat_statement)
88
(function_definition)
99
(while_statement)
10-
(function_definition)
1110
] @statement
1211

1312
;;!! # hello
@@ -27,10 +26,26 @@
2726
;; alternative: (braced_expression)? @branch.end
2827
;; ) @branch.iteration
2928

29+
;; named function
30+
;;!! abc <- function(x){ }
31+
;;! ^^^^^^^^^^^^^^^^^^^^^
32+
(binary_operator
33+
;;!! abc <- function(x){ }
34+
;;! ^^^
35+
lhs: (identifier) @functionName
36+
rhs: (function_definition
37+
name: "function"
38+
parameters: (parameters)
39+
body: (braced_expression) @interior
40+
) @functionName.trailing.startOf
41+
) @namedFunction @namedFunction.domain @functionName.domain
42+
43+
;; anonymous function
3044
;;!! function(x){ }
3145
;;! ^^^^^^^^^^^^^^
3246
(function_definition) @anonymousFunction
3347

48+
;; argument.actual
3449
;;!! foo("bar")
3550
;;! ^^^^^
3651
(
@@ -50,55 +65,90 @@
5065
(#single-or-multi-line-delimiter! @argumentOrParameter @_dummy ", " ",\n")
5166
)
5267

53-
54-
;;!! function(a, b){ }
68+
;; argument.formal
69+
;;!! function(a, b){}
5570
;;! ^^^^
56-
(_
57-
parameters: (parameters
58-
open: "(" @argumentList.start.endOf @argumentOrParameter.iteration.start.endOf
59-
close: ")" @argumentList.end.startOf @argumentOrParameter.iteration.end.startOf
60-
) @_dummy
61-
(#empty-single-multi-delimiter! @argumentList.start.endOf @_dummy "" ", " ",\n")
62-
) @argumentList.domain @argumentOrParameter.iteration.domain
63-
64-
;;!! foo(a, b)
65-
;;! ^^^^
66-
(_
67-
arguments: (arguments
68-
open: "(" @argumentList.start.endOf @argumentOrParameter.iteration.start.endOf
69-
close: ")" @argumentList.end.startOf @argumentOrParameter.iteration.end.startOf
71+
(
72+
(parameters
73+
(
74+
(parameter) @_.leading.endOf
75+
(comma)
76+
)?
77+
.
78+
(parameter) @argumentOrParameter
79+
.
80+
(
81+
(comma)
82+
(parameter) @_.trailing.startOf
83+
)?
7084
) @_dummy
71-
(#empty-single-multi-delimiter! @argumentList.start.endOf @_dummy "" ", " ",\n")
72-
) @argumentList.domain @argumentOrParameter.iteration.domain
85+
(#single-or-multi-line-delimiter! @argumentOrParameter @_dummy ", " ",\n")
86+
)
87+
88+
[
89+
;; argument.actual
90+
;;!! foo(a, b)
91+
;;! ^^^^
92+
(call
93+
arguments: (arguments
94+
open: "(" @argumentList.start.endOf @argumentOrParameter.iteration.start.endOf
95+
close: ")" @argumentList.end.startOf @argumentOrParameter.iteration.end.startOf
96+
) @_dummy
97+
(#empty-single-multi-delimiter! @argumentList.start.endOf @_dummy "" ", " ",\n")
98+
)
99+
100+
;; argument.formal
101+
;;!! function(a, b){}
102+
;;! ^^^^
103+
(function_definition
104+
parameters: (parameters
105+
open: "(" @argumentList.start.endOf @argumentOrParameter.iteration.start.endOf
106+
close: ")" @argumentList.end.startOf @argumentOrParameter.iteration.end.startOf
107+
) @_dummy
108+
(#empty-single-multi-delimiter! @argumentList.start.endOf @_dummy "" ", " ",\n")
109+
)
110+
] @argumentList.domain @argumentOrParameter.iteration.domain
73111

74112
(arguments
75113
"(" @argumentOrParameter.iteration.start.endOf
76114
")" @argumentOrParameter.iteration.end.startOf
77-
) @argumentOrParameter.iteration.domain
115+
)
78116

79117
(parameters
80118
"(" @name.iteration.start.endOf @value.iteration.start.endOf @type.iteration.start.endOf
81119
")" @name.iteration.end.startOf @value.iteration.end.startOf @type.iteration.end.startOf
82120
)
83121

84-
85-
;;!! abc <- function(x){ }
86-
;;! ^^^^^^^^^^^^^^^^^^^^^
87-
(binary_operator
88-
;;!! abc <- function(x){ }
89-
;;! ^^^
90-
lhs: (identifier) @functionName
91-
rhs: (function_definition
92-
name: "function"
93-
parameters: (parameters)
94-
body: (braced_expression) @interior
95-
) @functionName.trailing.startOf
96-
) @namedFunction @_.domain
97-
122+
;;!! function(a, b){ }
123+
;;! ^^^^
124+
;; For domain, have to handle either named or unnamed function using
125+
;; alternation, to ensure that the function name is part of the domain if it
126+
;; exists
127+
[
128+
(binary_operator
129+
(function_definition
130+
parameters: (parameters
131+
open: "(" @argumentList.start.endOf @argumentOrParameter.iteration.start.endOf
132+
close: ")" @argumentList.end.startOf @argumentOrParameter.iteration.end.startOf
133+
) @_dummy
134+
(#empty-single-multi-delimiter! @argumentList.start.endOf @_dummy "" ", " ",\n")
135+
)
136+
)
137+
(function_definition
138+
parameters: (parameters
139+
open: "(" @argumentList.start.endOf @argumentOrParameter.iteration.start.endOf
140+
close: ")" @argumentList.end.startOf @argumentOrParameter.iteration.end.startOf
141+
) @_dummy
142+
(#empty-single-multi-delimiter! @argumentList.start.endOf @_dummy "" ", " ",\n")
143+
)
144+
] @argumentList.domain @argumentOrParameter.iteration.domain
145+
146+
147+
;; Function calls
98148
;;!! foo()
99149
;;! ^^^^^
100150
;;! -----
101-
(call) @functionCall
151+
(call) @functionCall @argumentOrParameter.iteration.domain
102152

103153
;;!! foo()
104154
;;! ^^^

0 commit comments

Comments
 (0)