@willbooster/tree-sitter-haskell 12.0.0 → 13.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -22,6 +22,8 @@ the supported language extensions. The fork's node and query contracts are descr
22
22
  The fork's main differences from upstream 0.23.1 are:
23
23
 
24
24
  - **Whitespace**: horizontal tabs separate tokens, are accepted before Haddock markers, and advance layout to the next eight-column tab stop.
25
+ - **ExplicitNamespaces**: import and export items, including subordinate items, accept the `data` namespace, and fixity declarations accept `type` and `data`. A namespaced subordinate item such as `type (#)` or `data P` is a `namespaced_child` node with a `namespace` child; a `data` item puts a constructor name in a `constructor` field and a variable or operator in the `variable` or `operator` field.
26
+ - **OrPatterns**: parenthesized alternatives separated by semicolons, such as `(A; B)`, parse as an `or_pattern` node with an `alternative` field for each pattern.
25
27
  - **MultilineStrings**: triple-quoted literals retain their complete source as a single `string` node, including embedded quotes, escapes, and string gaps.
26
28
  - **Comment scanning**: comments and Haddock nodes expose a named `content` child, preserving body whitespace and excluding outer delimiters. Ordinary comment injection captures this child.
27
29
  Empty block comments such as `{--}` terminate at their closing delimiter and preserve following code.
package/grammar/decl.js CHANGED
@@ -33,6 +33,7 @@ module.exports = {
33
33
  seq(
34
34
  field('associativity', choice('infixl', 'infixr', 'infix')),
35
35
  field('precedence', optional($.integer)),
36
+ optional(field('namespace', alias(choice('type', 'data'), $.namespace))),
36
37
  field('operator', sep1(',', choice($._operator_minus, $._varop, $._conop))),
37
38
  ),
38
39
  ),
package/grammar/module.js CHANGED
@@ -49,23 +49,37 @@ module.exports = {
49
49
 
50
50
  namespace: _ => choice('pattern', 'type'),
51
51
 
52
- _child_type: $ => seq(field('namespace', 'type'), field('type', $._tyconids)),
52
+ _ie_value: $ => choice(
53
+ field('variable', $._varids),
54
+ field('operator', choice($._sym_prefix, $._pqsym)),
55
+ ),
56
+
57
+ _ie_name: $ => choice($._ie_value, field('type', $._tyconids)),
58
+
59
+ _ie_data: $ => seq(
60
+ field('namespace', alias('data', $.namespace)),
61
+ choice($._ie_value, field('constructor', choice($._qconid, $._constructor))),
62
+ ),
63
+
64
+ _child_namespaced: $ => choice(
65
+ seq(field('namespace', alias('type', $.namespace)), $._ie_name),
66
+ $._ie_data,
67
+ ),
53
68
 
54
69
  _child: $ => choice(
55
- alias($._child_type, $.associated_type),
70
+ alias($._child_namespaced, $.namespaced_child),
56
71
  $._qname,
57
72
  ),
58
73
 
59
74
  children: $ => parens($, sep(',', field('element', choice(alias('..', $.all_names), $._child)))),
60
75
 
61
- _ie_entity: $ => seq(
62
- optional(field('namespace', $.namespace)),
63
- choice(
64
- field('variable', $._varids),
65
- field('type', $._tyconids),
66
- field('operator', choice($._sym_prefix, $._pqsym)),
76
+ _ie_entity: $ => choice(
77
+ seq(
78
+ optional(field('namespace', $.namespace)),
79
+ $._ie_name,
80
+ optional(field('children', $.children)),
67
81
  ),
68
- optional(field('children', $.children)),
82
+ $._ie_data,
69
83
  ),
70
84
 
71
85
  // ------------------------------------------------------------------------
package/grammar/pat.js CHANGED
@@ -23,6 +23,8 @@ const patternRules = (name, recordField) => {
23
23
 
24
24
  [name('_pat_tuple')]: $ => parens($, rule($, '_pat_tuple_elems')),
25
25
 
26
+ [name('_pat_or')]: $ => parens($, sep2(';', field('alternative', rule($, '_pat_texp')))),
27
+
26
28
  [name('_pat_unboxed_tuple')]: $ => unboxed_tuple_full($, rule($, '_pat_texp')),
27
29
 
28
30
  [name('_pat_unboxed_sum')]: $ => unboxed_sum_single($, rule($, '_pat_texp')),
@@ -120,6 +122,7 @@ const patternRules = (name, recordField) => {
120
122
  alias(rule($, '_pat_wildcard'), $.wildcard),
121
123
  alias(rule($, '_pat_parens'), $.parens),
122
124
  alias(rule($, '_pat_tuple'), $.tuple),
125
+ alias(rule($, '_pat_or'), $.or_pattern),
123
126
  alias(rule($, '_pat_unboxed_tuple'), $.unboxed_tuple),
124
127
  alias(rule($, '_pat_unboxed_sum'), $.unboxed_sum),
125
128
  alias(rule($, '_pat_list'), $.list),
@@ -45,6 +45,10 @@
45
45
  "type": "negation",
46
46
  "named": true
47
47
  },
48
+ {
49
+ "type": "or_pattern",
50
+ "named": true
51
+ },
48
52
  {
49
53
  "type": "parens",
50
54
  "named": true
@@ -603,6 +607,10 @@
603
607
  "type": "negation",
604
608
  "named": true
605
609
  },
610
+ {
611
+ "type": "or_pattern",
612
+ "named": true
613
+ },
606
614
  {
607
615
  "type": "parens",
608
616
  "named": true
@@ -1169,36 +1177,6 @@
1169
1177
  }
1170
1178
  }
1171
1179
  },
1172
- {
1173
- "type": "associated_type",
1174
- "named": true,
1175
- "fields": {
1176
- "namespace": {
1177
- "multiple": false,
1178
- "required": true,
1179
- "types": [
1180
- {
1181
- "type": "type",
1182
- "named": false
1183
- }
1184
- ]
1185
- },
1186
- "type": {
1187
- "multiple": false,
1188
- "required": true,
1189
- "types": [
1190
- {
1191
- "type": "name",
1192
- "named": true
1193
- },
1194
- {
1195
- "type": "qualified",
1196
- "named": true
1197
- }
1198
- ]
1199
- }
1200
- }
1201
- },
1202
1180
  {
1203
1181
  "type": "bind",
1204
1182
  "named": true,
@@ -1409,15 +1387,15 @@
1409
1387
  "named": true
1410
1388
  },
1411
1389
  {
1412
- "type": "associated_type",
1390
+ "type": "constructor",
1413
1391
  "named": true
1414
1392
  },
1415
1393
  {
1416
- "type": "constructor",
1394
+ "type": "hsc",
1417
1395
  "named": true
1418
1396
  },
1419
1397
  {
1420
- "type": "hsc",
1398
+ "type": "namespaced_child",
1421
1399
  "named": true
1422
1400
  },
1423
1401
  {
@@ -2510,6 +2488,20 @@
2510
2488
  }
2511
2489
  ]
2512
2490
  },
2491
+ "constructor": {
2492
+ "multiple": false,
2493
+ "required": false,
2494
+ "types": [
2495
+ {
2496
+ "type": "constructor",
2497
+ "named": true
2498
+ },
2499
+ {
2500
+ "type": "qualified",
2501
+ "named": true
2502
+ }
2503
+ ]
2504
+ },
2513
2505
  "namespace": {
2514
2506
  "multiple": false,
2515
2507
  "required": false,
@@ -2853,6 +2845,16 @@
2853
2845
  }
2854
2846
  ]
2855
2847
  },
2848
+ "namespace": {
2849
+ "multiple": false,
2850
+ "required": false,
2851
+ "types": [
2852
+ {
2853
+ "type": "namespace",
2854
+ "named": true
2855
+ }
2856
+ ]
2857
+ },
2856
2858
  "operator": {
2857
2859
  "multiple": true,
2858
2860
  "required": true,
@@ -3628,6 +3630,20 @@
3628
3630
  }
3629
3631
  ]
3630
3632
  },
3633
+ "constructor": {
3634
+ "multiple": false,
3635
+ "required": false,
3636
+ "types": [
3637
+ {
3638
+ "type": "constructor",
3639
+ "named": true
3640
+ },
3641
+ {
3642
+ "type": "qualified",
3643
+ "named": true
3644
+ }
3645
+ ]
3646
+ },
3631
3647
  "namespace": {
3632
3648
  "multiple": false,
3633
3649
  "required": false,
@@ -4635,6 +4651,74 @@
4635
4651
  "named": true,
4636
4652
  "fields": {}
4637
4653
  },
4654
+ {
4655
+ "type": "namespaced_child",
4656
+ "named": true,
4657
+ "fields": {
4658
+ "constructor": {
4659
+ "multiple": false,
4660
+ "required": false,
4661
+ "types": [
4662
+ {
4663
+ "type": "constructor",
4664
+ "named": true
4665
+ },
4666
+ {
4667
+ "type": "qualified",
4668
+ "named": true
4669
+ }
4670
+ ]
4671
+ },
4672
+ "namespace": {
4673
+ "multiple": false,
4674
+ "required": true,
4675
+ "types": [
4676
+ {
4677
+ "type": "namespace",
4678
+ "named": true
4679
+ }
4680
+ ]
4681
+ },
4682
+ "operator": {
4683
+ "multiple": false,
4684
+ "required": false,
4685
+ "types": [
4686
+ {
4687
+ "type": "prefix_id",
4688
+ "named": true
4689
+ }
4690
+ ]
4691
+ },
4692
+ "type": {
4693
+ "multiple": false,
4694
+ "required": false,
4695
+ "types": [
4696
+ {
4697
+ "type": "name",
4698
+ "named": true
4699
+ },
4700
+ {
4701
+ "type": "qualified",
4702
+ "named": true
4703
+ }
4704
+ ]
4705
+ },
4706
+ "variable": {
4707
+ "multiple": false,
4708
+ "required": false,
4709
+ "types": [
4710
+ {
4711
+ "type": "qualified",
4712
+ "named": true
4713
+ },
4714
+ {
4715
+ "type": "variable",
4716
+ "named": true
4717
+ }
4718
+ ]
4719
+ }
4720
+ }
4721
+ },
4638
4722
  {
4639
4723
  "type": "negation",
4640
4724
  "named": true,
@@ -4874,6 +4958,38 @@
4874
4958
  }
4875
4959
  }
4876
4960
  },
4961
+ {
4962
+ "type": "or_pattern",
4963
+ "named": true,
4964
+ "fields": {
4965
+ "alternative": {
4966
+ "multiple": true,
4967
+ "required": true,
4968
+ "types": [
4969
+ {
4970
+ "type": "binding_pattern_operand",
4971
+ "named": true
4972
+ },
4973
+ {
4974
+ "type": "infix_chain",
4975
+ "named": true
4976
+ },
4977
+ {
4978
+ "type": "pattern_operand",
4979
+ "named": true
4980
+ },
4981
+ {
4982
+ "type": "signature",
4983
+ "named": true
4984
+ },
4985
+ {
4986
+ "type": "view_pattern",
4987
+ "named": true
4988
+ }
4989
+ ]
4990
+ }
4991
+ }
4992
+ },
4877
4993
  {
4878
4994
  "type": "parens",
4879
4995
  "named": true,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@willbooster/tree-sitter-haskell",
3
- "version": "12.0.0",
3
+ "version": "13.0.0",
4
4
  "description": "Haskell grammar for tree-sitter",
5
5
  "keywords": [
6
6
  "incremental",
@@ -116,6 +116,8 @@
116
116
  "infixr"
117
117
  ] @keyword
118
118
 
119
+ (namespace) @keyword
120
+
119
121
  [
120
122
  (function name: (variable) @function)
121
123
  (bind name: (variable) @function)
@@ -41,6 +41,10 @@
41
41
  "type": "negation",
42
42
  "named": true
43
43
  },
44
+ {
45
+ "type": "or_pattern",
46
+ "named": true
47
+ },
44
48
  {
45
49
  "type": "parens",
46
50
  "named": true
@@ -587,6 +591,10 @@
587
591
  "type": "negation",
588
592
  "named": true
589
593
  },
594
+ {
595
+ "type": "or_pattern",
596
+ "named": true
597
+ },
590
598
  {
591
599
  "type": "parens",
592
600
  "named": true
@@ -1149,36 +1157,6 @@
1149
1157
  }
1150
1158
  }
1151
1159
  },
1152
- {
1153
- "type": "associated_type",
1154
- "named": true,
1155
- "fields": {
1156
- "namespace": {
1157
- "multiple": false,
1158
- "required": true,
1159
- "types": [
1160
- {
1161
- "type": "type",
1162
- "named": false
1163
- }
1164
- ]
1165
- },
1166
- "type": {
1167
- "multiple": false,
1168
- "required": true,
1169
- "types": [
1170
- {
1171
- "type": "name",
1172
- "named": true
1173
- },
1174
- {
1175
- "type": "qualified",
1176
- "named": true
1177
- }
1178
- ]
1179
- }
1180
- }
1181
- },
1182
1160
  {
1183
1161
  "type": "bind",
1184
1162
  "named": true,
@@ -1381,11 +1359,11 @@
1381
1359
  "named": true
1382
1360
  },
1383
1361
  {
1384
- "type": "associated_type",
1362
+ "type": "constructor",
1385
1363
  "named": true
1386
1364
  },
1387
1365
  {
1388
- "type": "constructor",
1366
+ "type": "namespaced_child",
1389
1367
  "named": true
1390
1368
  },
1391
1369
  {
@@ -2450,6 +2428,20 @@
2450
2428
  }
2451
2429
  ]
2452
2430
  },
2431
+ "constructor": {
2432
+ "multiple": false,
2433
+ "required": false,
2434
+ "types": [
2435
+ {
2436
+ "type": "constructor",
2437
+ "named": true
2438
+ },
2439
+ {
2440
+ "type": "qualified",
2441
+ "named": true
2442
+ }
2443
+ ]
2444
+ },
2453
2445
  "namespace": {
2454
2446
  "multiple": false,
2455
2447
  "required": false,
@@ -2783,6 +2775,16 @@
2783
2775
  }
2784
2776
  ]
2785
2777
  },
2778
+ "namespace": {
2779
+ "multiple": false,
2780
+ "required": false,
2781
+ "types": [
2782
+ {
2783
+ "type": "namespace",
2784
+ "named": true
2785
+ }
2786
+ ]
2787
+ },
2786
2788
  "operator": {
2787
2789
  "multiple": true,
2788
2790
  "required": true,
@@ -3512,6 +3514,20 @@
3512
3514
  }
3513
3515
  ]
3514
3516
  },
3517
+ "constructor": {
3518
+ "multiple": false,
3519
+ "required": false,
3520
+ "types": [
3521
+ {
3522
+ "type": "constructor",
3523
+ "named": true
3524
+ },
3525
+ {
3526
+ "type": "qualified",
3527
+ "named": true
3528
+ }
3529
+ ]
3530
+ },
3515
3531
  "namespace": {
3516
3532
  "multiple": false,
3517
3533
  "required": false,
@@ -4480,6 +4496,74 @@
4480
4496
  "named": true,
4481
4497
  "fields": {}
4482
4498
  },
4499
+ {
4500
+ "type": "namespaced_child",
4501
+ "named": true,
4502
+ "fields": {
4503
+ "constructor": {
4504
+ "multiple": false,
4505
+ "required": false,
4506
+ "types": [
4507
+ {
4508
+ "type": "constructor",
4509
+ "named": true
4510
+ },
4511
+ {
4512
+ "type": "qualified",
4513
+ "named": true
4514
+ }
4515
+ ]
4516
+ },
4517
+ "namespace": {
4518
+ "multiple": false,
4519
+ "required": true,
4520
+ "types": [
4521
+ {
4522
+ "type": "namespace",
4523
+ "named": true
4524
+ }
4525
+ ]
4526
+ },
4527
+ "operator": {
4528
+ "multiple": false,
4529
+ "required": false,
4530
+ "types": [
4531
+ {
4532
+ "type": "prefix_id",
4533
+ "named": true
4534
+ }
4535
+ ]
4536
+ },
4537
+ "type": {
4538
+ "multiple": false,
4539
+ "required": false,
4540
+ "types": [
4541
+ {
4542
+ "type": "name",
4543
+ "named": true
4544
+ },
4545
+ {
4546
+ "type": "qualified",
4547
+ "named": true
4548
+ }
4549
+ ]
4550
+ },
4551
+ "variable": {
4552
+ "multiple": false,
4553
+ "required": false,
4554
+ "types": [
4555
+ {
4556
+ "type": "qualified",
4557
+ "named": true
4558
+ },
4559
+ {
4560
+ "type": "variable",
4561
+ "named": true
4562
+ }
4563
+ ]
4564
+ }
4565
+ }
4566
+ },
4483
4567
  {
4484
4568
  "type": "negation",
4485
4569
  "named": true,
@@ -4711,6 +4795,38 @@
4711
4795
  }
4712
4796
  }
4713
4797
  },
4798
+ {
4799
+ "type": "or_pattern",
4800
+ "named": true,
4801
+ "fields": {
4802
+ "alternative": {
4803
+ "multiple": true,
4804
+ "required": true,
4805
+ "types": [
4806
+ {
4807
+ "type": "binding_pattern_operand",
4808
+ "named": true
4809
+ },
4810
+ {
4811
+ "type": "infix_chain",
4812
+ "named": true
4813
+ },
4814
+ {
4815
+ "type": "pattern_operand",
4816
+ "named": true
4817
+ },
4818
+ {
4819
+ "type": "signature",
4820
+ "named": true
4821
+ },
4822
+ {
4823
+ "type": "view_pattern",
4824
+ "named": true
4825
+ }
4826
+ ]
4827
+ }
4828
+ }
4829
+ },
4714
4830
  {
4715
4831
  "type": "parens",
4716
4832
  "named": true,
Binary file
Binary file
package/tree-sitter.json CHANGED
@@ -35,7 +35,7 @@
35
35
  }
36
36
  ],
37
37
  "metadata": {
38
- "version": "12.0.0",
38
+ "version": "13.0.0",
39
39
  "license": "MIT",
40
40
  "description": "Haskell grammar for tree-sitter",
41
41
  "authors": [