Skip to content

Commit 817d5d9

Browse files
committed
[new-hs-indexer] Index instance declarations and class defaults
We can now, for example, find all the places where a particular method is defined by an instance.
1 parent 84838c3 commit 817d5d9

10 files changed

Lines changed: 341 additions & 133 deletions

File tree

glean/lang/haskell/HieIndexer/Index.hs

Lines changed: 174 additions & 80 deletions
Large diffs are not rendered by default.

glean/lang/haskell/tests/code/A.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ data R a = R { f1 :: Char, f2 :: [a] }
3131

3232
class Eq a => C a where
3333
m :: a -> Bool
34+
m _ = True
3435

3536
instance C Int where
3637
m x = x == x

glean/lang/haskell/tests/code/hsClassDecl.out

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,25 @@
22
"@generated",
33
{
44
"key": {
5+
"defaults": [
6+
{
7+
"key": {
8+
"loc": {
9+
"file": { "key": "glean/lang/haskell/tests/code/A.hs" },
10+
"span": { "length": 10, "start": 535 }
11+
},
12+
"name": {
13+
"key": {
14+
"mod": {
15+
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
16+
},
17+
"occ": { "key": { "name": "m", "namespace_": 0 } },
18+
"sort": { "external": { } }
19+
}
20+
}
21+
}
22+
}
23+
],
524
"methods": [
625
{
726
"key": {

glean/lang/haskell/tests/code/hsDeclarationLocation.out

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
"sort": { "external": { } }
2828
}
2929
},
30-
"span": { "length": 40, "start": 492 }
30+
"span": { "length": 53, "start": 492 }
3131
}
3232
},
3333
{
@@ -189,10 +189,10 @@
189189
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
190190
},
191191
"occ": { "key": { "name": "a", "namespace_": 2 } },
192-
"sort": { "internal": { "length": 15, "start": 591 } }
192+
"sort": { "internal": { "length": 15, "start": 604 } }
193193
}
194194
},
195-
"span": { "length": 15, "start": 591 }
195+
"span": { "length": 15, "start": 604 }
196196
}
197197
},
198198
{
@@ -207,7 +207,7 @@
207207
"sort": { "external": { } }
208208
}
209209
},
210-
"span": { "length": 68, "start": 607 }
210+
"span": { "length": 68, "start": 620 }
211211
}
212212
},
213213
{
@@ -264,10 +264,25 @@
264264
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
265265
},
266266
"occ": { "key": { "name": "m", "namespace_": 0 } },
267-
"sort": { "internal": { "length": 12, "start": 557 } }
267+
"sort": { "internal": { "length": 10, "start": 535 } }
268268
}
269269
},
270-
"span": { "length": 12, "start": 557 }
270+
"span": { "length": 10, "start": 535 }
271+
}
272+
},
273+
{
274+
"key": {
275+
"file": { "key": "glean/lang/haskell/tests/code/A.hs" },
276+
"name": {
277+
"key": {
278+
"mod": {
279+
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
280+
},
281+
"occ": { "key": { "name": "m", "namespace_": 0 } },
282+
"sort": { "internal": { "length": 12, "start": 570 } }
283+
}
284+
},
285+
"span": { "length": 12, "start": 570 }
271286
}
272287
},
273288
{
@@ -279,10 +294,10 @@
279294
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
280295
},
281296
"occ": { "key": { "name": "r", "namespace_": 0 } },
282-
"sort": { "internal": { "length": 1, "start": 630 } }
297+
"sort": { "internal": { "length": 1, "start": 643 } }
283298
}
284299
},
285-
"span": { "length": 1, "start": 630 }
300+
"span": { "length": 1, "start": 643 }
286301
}
287302
},
288303
{
@@ -294,10 +309,10 @@
294309
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
295310
},
296311
"occ": { "key": { "name": "x", "namespace_": 0 } },
297-
"sort": { "internal": { "length": 1, "start": 559 } }
312+
"sort": { "internal": { "length": 1, "start": 572 } }
298313
}
299314
},
300-
"span": { "length": 1, "start": 559 }
315+
"span": { "length": 1, "start": 572 }
301316
}
302317
},
303318
{
@@ -309,10 +324,10 @@
309324
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
310325
},
311326
"occ": { "key": { "name": "x", "namespace_": 0 } },
312-
"sort": { "internal": { "length": 1, "start": 617 } }
327+
"sort": { "internal": { "length": 1, "start": 630 } }
313328
}
314329
},
315-
"span": { "length": 1, "start": 617 }
330+
"span": { "length": 1, "start": 630 }
316331
}
317332
},
318333
{
@@ -327,7 +342,7 @@
327342
"sort": { "external": { } }
328343
}
329344
},
330-
"span": { "length": 8, "start": 581 }
345+
"span": { "length": 8, "start": 594 }
331346
}
332347
},
333348
{

glean/lang/haskell/tests/code/hsFileXRefs.out

Lines changed: 49 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
"file": { "key": "glean/lang/haskell/tests/code/A.hs" },
1010
"refs": [
1111
{ "kind": 0, "span": { "length": 3, "start": 364 } },
12-
{ "kind": 2, "span": { "length": 3, "start": 651 } }
12+
{ "kind": 2, "span": { "length": 3, "start": 664 } }
1313
],
1414
"target": {
1515
"name": {
@@ -83,7 +83,7 @@
8383
"refs": [
8484
{ "kind": 1, "span": { "length": 1, "start": 279 } },
8585
{ "kind": 2, "span": { "length": 1, "start": 442 } },
86-
{ "kind": 2, "span": { "length": 1, "start": 579 } }
86+
{ "kind": 2, "span": { "length": 1, "start": 592 } }
8787
],
8888
"target": {
8989
"name": {
@@ -103,7 +103,7 @@
103103
"file": { "key": "glean/lang/haskell/tests/code/A.hs" },
104104
"refs": [
105105
{ "kind": 1, "span": { "length": 1, "start": 285 } },
106-
{ "kind": 2, "span": { "length": 1, "start": 603 } }
106+
{ "kind": 2, "span": { "length": 1, "start": 616 } }
107107
],
108108
"target": {
109109
"name": {
@@ -123,7 +123,7 @@
123123
"file": { "key": "glean/lang/haskell/tests/code/A.hs" },
124124
"refs": [
125125
{ "kind": 1, "span": { "length": 1, "start": 295 } },
126-
{ "kind": 2, "span": { "length": 1, "start": 596 } }
126+
{ "kind": 2, "span": { "length": 1, "start": 609 } }
127127
],
128128
"target": {
129129
"name": {
@@ -143,7 +143,7 @@
143143
"file": { "key": "glean/lang/haskell/tests/code/A.hs" },
144144
"refs": [
145145
{ "kind": 1, "span": { "length": 1, "start": 305 } },
146-
{ "kind": 2, "span": { "length": 1, "start": 543 } }
146+
{ "kind": 2, "span": { "length": 1, "start": 556 } }
147147
],
148148
"target": {
149149
"name": {
@@ -163,7 +163,7 @@
163163
"file": { "key": "glean/lang/haskell/tests/code/A.hs" },
164164
"refs": [
165165
{ "kind": 1, "span": { "length": 1, "start": 324 } },
166-
{ "kind": 3, "span": { "length": 1, "start": 591 } }
166+
{ "kind": 3, "span": { "length": 1, "start": 604 } }
167167
],
168168
"target": {
169169
"name": {
@@ -183,7 +183,7 @@
183183
"file": { "key": "glean/lang/haskell/tests/code/A.hs" },
184184
"refs": [
185185
{ "kind": 1, "span": { "length": 4, "start": 315 } },
186-
{ "kind": 3, "span": { "length": 4, "start": 571 } }
186+
{ "kind": 3, "span": { "length": 4, "start": 584 } }
187187
],
188188
"target": {
189189
"name": {
@@ -256,8 +256,9 @@
256256
"key": {
257257
"file": { "key": "glean/lang/haskell/tests/code/A.hs" },
258258
"refs": [
259-
{ "kind": 2, "span": { "length": 1, "start": 557 } },
260-
{ "kind": 2, "span": { "length": 1, "start": 634 } }
259+
{ "kind": 2, "span": { "length": 1, "start": 535 } },
260+
{ "kind": 2, "span": { "length": 1, "start": 570 } },
261+
{ "kind": 2, "span": { "length": 1, "start": 647 } }
261262
],
262263
"target": {
263264
"name": {
@@ -276,8 +277,8 @@
276277
"key": {
277278
"file": { "key": "glean/lang/haskell/tests/code/A.hs" },
278279
"refs": [
279-
{ "kind": 2, "span": { "length": 1, "start": 563 } },
280-
{ "kind": 2, "span": { "length": 1, "start": 568 } }
280+
{ "kind": 2, "span": { "length": 1, "start": 576 } },
281+
{ "kind": 2, "span": { "length": 1, "start": 581 } }
281282
],
282283
"target": {
283284
"name": {
@@ -286,7 +287,7 @@
286287
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
287288
},
288289
"occ": { "key": { "name": "x", "namespace_": 0 } },
289-
"sort": { "internal": { "length": 1, "start": 559 } }
290+
"sort": { "internal": { "length": 1, "start": 572 } }
290291
}
291292
}
292293
}
@@ -296,8 +297,8 @@
296297
"key": {
297298
"file": { "key": "glean/lang/haskell/tests/code/A.hs" },
298299
"refs": [
299-
{ "kind": 2, "span": { "length": 1, "start": 598 } },
300-
{ "kind": 2, "span": { "length": 1, "start": 605 } }
300+
{ "kind": 2, "span": { "length": 1, "start": 611 } },
301+
{ "kind": 2, "span": { "length": 1, "start": 618 } }
301302
],
302303
"target": {
303304
"name": {
@@ -306,7 +307,7 @@
306307
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
307308
},
308309
"occ": { "key": { "name": "a", "namespace_": 2 } },
309-
"sort": { "internal": { "length": 15, "start": 591 } }
310+
"sort": { "internal": { "length": 15, "start": 604 } }
310311
}
311312
}
312313
}
@@ -316,7 +317,7 @@
316317
"key": {
317318
"file": { "key": "glean/lang/haskell/tests/code/A.hs" },
318319
"refs": [
319-
{ "kind": 2, "span": { "length": 1, "start": 609 } },
320+
{ "kind": 2, "span": { "length": 1, "start": 622 } },
320321
{ "kind": 2, "span": { "length": 2, "start": 467 } },
321322
{ "kind": 2, "span": { "length": 2, "start": 479 } }
322323
],
@@ -336,15 +337,15 @@
336337
{
337338
"key": {
338339
"file": { "key": "glean/lang/haskell/tests/code/A.hs" },
339-
"refs": [ { "kind": 2, "span": { "length": 1, "start": 626 } } ],
340+
"refs": [ { "kind": 2, "span": { "length": 1, "start": 639 } } ],
340341
"target": {
341342
"name": {
342343
"key": {
343344
"mod": {
344345
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
345346
},
346347
"occ": { "key": { "name": "x", "namespace_": 0 } },
347-
"sort": { "internal": { "length": 1, "start": 617 } }
348+
"sort": { "internal": { "length": 1, "start": 630 } }
348349
}
349350
}
350351
}
@@ -353,15 +354,15 @@
353354
{
354355
"key": {
355356
"file": { "key": "glean/lang/haskell/tests/code/A.hs" },
356-
"refs": [ { "kind": 2, "span": { "length": 1, "start": 659 } } ],
357+
"refs": [ { "kind": 2, "span": { "length": 1, "start": 672 } } ],
357358
"target": {
358359
"name": {
359360
"key": {
360361
"mod": {
361362
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
362363
},
363364
"occ": { "key": { "name": "r", "namespace_": 0 } },
364-
"sort": { "internal": { "length": 1, "start": 630 } }
365+
"sort": { "internal": { "length": 1, "start": 643 } }
365366
}
366367
}
367368
}
@@ -372,8 +373,8 @@
372373
"file": { "key": "glean/lang/haskell/tests/code/A.hs" },
373374
"refs": [
374375
{ "kind": 2, "span": { "length": 2, "start": 467 } },
375-
{ "kind": 2, "span": { "length": 2, "start": 656 } },
376-
{ "kind": 2, "span": { "length": 2, "start": 663 } }
376+
{ "kind": 2, "span": { "length": 2, "start": 669 } },
377+
{ "kind": 2, "span": { "length": 2, "start": 676 } }
377378
],
378379
"target": {
379380
"name": {
@@ -393,7 +394,7 @@
393394
"file": { "key": "glean/lang/haskell/tests/code/A.hs" },
394395
"refs": [
395396
{ "kind": 2, "span": { "length": 2, "start": 479 } },
396-
{ "kind": 2, "span": { "length": 2, "start": 611 } }
397+
{ "kind": 2, "span": { "length": 2, "start": 624 } }
397398
],
398399
"target": {
399400
"name": {
@@ -431,7 +432,7 @@
431432
{
432433
"key": {
433434
"file": { "key": "glean/lang/haskell/tests/code/A.hs" },
434-
"refs": [ { "kind": 2, "span": { "length": 2, "start": 565 } } ],
435+
"refs": [ { "kind": 2, "span": { "length": 2, "start": 578 } } ],
435436
"target": {
436437
"name": {
437438
"key": {
@@ -451,7 +452,7 @@
451452
{
452453
"key": {
453454
"file": { "key": "glean/lang/haskell/tests/code/A.hs" },
454-
"refs": [ { "kind": 2, "span": { "length": 2, "start": 623 } } ],
455+
"refs": [ { "kind": 2, "span": { "length": 2, "start": 636 } } ],
455456
"target": {
456457
"name": {
457458
"key": {
@@ -468,7 +469,7 @@
468469
{
469470
"key": {
470471
"file": { "key": "glean/lang/haskell/tests/code/A.hs" },
471-
"refs": [ { "kind": 2, "span": { "length": 2, "start": 647 } } ],
472+
"refs": [ { "kind": 2, "span": { "length": 2, "start": 660 } } ],
472473
"target": {
473474
"name": {
474475
"key": {
@@ -507,8 +508,8 @@
507508
"file": { "key": "glean/lang/haskell/tests/code/A.hs" },
508509
"refs": [
509510
{ "kind": 2, "span": { "length": 3, "start": 412 } },
510-
{ "kind": 2, "span": { "length": 3, "start": 545 } },
511-
{ "kind": 2, "span": { "length": 3, "start": 640 } }
511+
{ "kind": 2, "span": { "length": 3, "start": 558 } },
512+
{ "kind": 2, "span": { "length": 3, "start": 653 } }
512513
],
513514
"target": {
514515
"name": {
@@ -566,6 +567,26 @@
566567
}
567568
}
568569
},
570+
{
571+
"key": {
572+
"file": { "key": "glean/lang/haskell/tests/code/A.hs" },
573+
"refs": [ { "kind": 2, "span": { "length": 4, "start": 541 } } ],
574+
"target": {
575+
"name": {
576+
"key": {
577+
"mod": {
578+
"key": {
579+
"name": { "key": "GHC.Types" },
580+
"unit": { "key": "ghc-prim" }
581+
}
582+
},
583+
"occ": { "key": { "name": "True", "namespace_": 1 } },
584+
"sort": { "external": { } }
585+
}
586+
}
587+
}
588+
}
589+
},
569590
{
570591
"key": {
571592
"file": { "key": "glean/lang/haskell/tests/code/A.hs" },

0 commit comments

Comments
 (0)