Skip to content

Commit 91d8f4d

Browse files
committed
Fixes for namedFunction
1 parent d6e2817 commit 91d8f4d

File tree

4 files changed

+430
-326
lines changed

4 files changed

+430
-326
lines changed

data/playground/haskell/RFC.hs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
1-
-- RFC: What should "arg" match?
1+
-- RFC 1: What should "arg" match?
22
fst :: (a, b) -> a
33
fst tup@(x, y) = x
4-
-- ^^^^^^^^^^ <- 1️⃣ the whole pattern
5-
-- ^^^ <- 2️⃣ only the name of the whole argument, if given
6-
-- ^^^ ^ ^ <- 3️⃣ all names in the pattern
4+
-- ^^^^^^^^^^ <- 🎉 the whole pattern
5+
-- ^^^ <- 👀 only the name of the whole argument, if given
6+
-- ^^^ ^ ^ <- 🚀 all names in the pattern
77

8-
-- RFC: What should "branch" match?
8+
-- RFC 2: What should "branch" match?
99
foo = bar
1010
where
1111
bar = 1
12-
-- 1️⃣ `foo = bar` and `bar = 1`
13-
-- 2️⃣ `foo = bar where bar = 1`
14-
-- 3️⃣ `foo = bar where bar = 1` and `bar = 1`
12+
-- 🎉 `foo = bar` and `bar = 1`
13+
-- 👀 `foo = bar where bar = 1`
14+
-- 🚀 `foo = bar where bar = 1` and `bar = 1`
15+
16+
-- RFC 3: What should "condition" match?
17+
bap :: Int -> Int
18+
bap | 1 == 1, 2 == 2 = x
19+
-- 🎉 `1 == 1` and `2 == 2`
20+
-- 👀 `1 == 1, 2 == 2`

data/playground/haskell/branch.hs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
fib :: Integer -> Integer
2+
fib 0 = 0
3+
fib 1 = 1
4+
fib n = fib (n-1) + fib (n-2)
5+
6+
abs :: Int -> Int
7+
abs x
8+
| x >= 0 = x
9+
| otherwise = -x
10+
11+
bap :: Int -> Int
12+
bap x
13+
| x > 0, x == 0 = x
14+
| otherwise = -x
15+
16+
compare :: Int -> Int -> Ordering
17+
compare x y
18+
| x < y = LT
19+
| x == y = EQ
20+
| x > y = GT
21+
22+
fromEither :: (a -> c) -> (b -> c) -> Either a b -> c
23+
fromEither f g x = case x of
24+
Left l -> f l
25+
Right r -> g r

queries/haskell.function.scm renamed to queries/haskell.namedFunction.scm

Lines changed: 91 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -166,30 +166,68 @@
166166
]
167167
.
168168
;; function declaration
169+
[
170+
(
171+
(signature
172+
name: (variable) @functionName @name
173+
) @namedFunction.start @functionName.domain.start @name.domain.start
174+
(#not-eq? @_previous @name)
175+
)
176+
(
177+
(function
178+
name: (variable) @functionName @name
179+
) @namedFunction.start @functionName.domain.start @name.domain.start
180+
(#not-eq? @_previous @name)
181+
)
182+
]
183+
.
184+
(function)*
185+
.
169186
(
170-
[
171-
(
172-
(signature
173-
name: (variable) @functionName @name
174-
) @namedFunction.start @functionName.domain.start @name.domain.start
175-
(#not-eq? @_previous @name)
187+
(function
188+
name: (variable) @_end_name
189+
) @namedFunction.end @functionName.domain.end @name.domain.end
190+
(#eq? @name @_end_name)
191+
)
192+
.
193+
)
194+
(haskell
195+
;; previous declaration
196+
[
197+
(
198+
(_) @_previous
199+
(#not-type? @_previous "function" "signature")
200+
)
201+
(
202+
(function
203+
name: (variable) @_previous
176204
)
177-
(
178-
(function
205+
)
206+
]
207+
.
208+
;; function declaration
209+
[
210+
(
211+
(signature
179212
name: (variable) @functionName @name
180-
) @namedFunction.start @functionName.domain.start @name.domain.start
181-
(#not-eq? @_previous @name)
182-
)
183-
]
184-
.
185-
(function)*
186-
.
213+
) @namedFunction.start @functionName.domain.start @name.domain.start
214+
(#not-eq? @_previous @name)
215+
)
187216
(
188217
(function
189-
name: (variable) @_end_name
190-
) @namedFunction.end @functionName.domain.end @name.domain.end
191-
(#eq? @name @_end_name)
218+
name: (variable) @functionName @name
219+
) @namedFunction.start @functionName.domain.start @name.domain.start
220+
(#not-eq? @_previous @name)
192221
)
222+
]
223+
.
224+
(function)*
225+
.
226+
(
227+
(function
228+
name: (variable) @_end_name
229+
) @namedFunction.end @functionName.domain.end @name.domain.end
230+
(#eq? @name @_end_name)
193231
)
194232
.
195233
)
@@ -198,43 +236,36 @@
198236
(haskell
199237
.
200238
;; function declaration
201-
(
202-
(function
203-
name: (variable) @functionName @name @_end_name
204-
;; The annotation `@_end_name` is REQUIRED because assertions are
205-
;; hoisted, which means that the assertion `(#eq? @name @_end_name)`
206-
;; is ALWAYS evaluated, so if we don't set `@_end_name`, it fails.
207-
) @namedFunction @functionName.domain @name.domain
208-
)
239+
(function
240+
name: (variable) @functionName @name
241+
) @namedFunction @functionName.domain @name.domain
209242
.
210243
)
211244
;; ... as the ONLY in the file
212245
;; ... with SIGNATURE and/or MULTIPLE declarations
213246
(haskell
214247
.
215248
;; function declaration
216-
(
217-
[
218-
(
219-
(signature
220-
name: (variable) @functionName @name
221-
) @namedFunction.start @functionName.domain.start @name.domain.start
222-
)
223-
(
224-
(function
249+
[
250+
(
251+
(signature
225252
name: (variable) @functionName @name
226-
) @namedFunction.start @functionName.domain.start @name.domain.start
227-
)
228-
]
229-
.
230-
(function)*
231-
.
253+
) @namedFunction.start @functionName.domain.start @name.domain.start
254+
)
232255
(
233256
(function
234-
name: (variable) @_end_name
235-
) @namedFunction.end @functionName.domain.end @name.domain.end
236-
(#eq? @name @_end_name)
257+
name: (variable) @functionName @name
258+
) @namedFunction.start @functionName.domain.start @name.domain.start
237259
)
260+
]
261+
.
262+
(function)*
263+
.
264+
(
265+
(function
266+
name: (variable) @_end_name
267+
) @namedFunction.end @functionName.domain.end @name.domain.end
268+
(#eq? @name @_end_name)
238269
)
239270
.
240271
)
@@ -384,28 +415,26 @@
384415
(decls
385416
.
386417
;; function declaration
387-
(
388-
[
389-
(
390-
(signature
391-
name: (variable) @functionName @name
392-
) @namedFunction.start @functionName.domain.start @name.domain.start
393-
)
394-
(
395-
(function
418+
[
419+
(
420+
(signature
396421
name: (variable) @functionName @name
397-
) @namedFunction.start @functionName.domain.start @name.domain.start
398-
)
399-
]
400-
.
401-
(function)*
402-
.
422+
) @namedFunction.start @functionName.domain.start @name.domain.start
423+
)
403424
(
404425
(function
405-
name: (variable) @_end_name
406-
) @namedFunction.end @functionName.domain.end @name.domain.end
407-
(#eq? @name @_end_name)
426+
name: (variable) @functionName @name
427+
) @namedFunction.start @functionName.domain.start @name.domain.start
408428
)
429+
]
430+
.
431+
(function)*
432+
.
433+
(
434+
(function
435+
name: (variable) @_end_name
436+
) @namedFunction.end @functionName.domain.end @name.domain.end
437+
(#eq? @name @_end_name)
409438
)
410439
.
411440
)

0 commit comments

Comments
 (0)