@willbooster/tree-sitter-haskell 4.1.2 → 5.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
@@ -85,7 +85,9 @@ The package also ships `grammar.js` with the files in `grammar/` it loads, the q
85
85
 
86
86
  For code navigation, use `queries/tags.scm` (or `TAGS_QUERY` in Rust). It indexes module headers, top-level named functions and simple named bindings, named types and classes, class and instance methods, and syntactic variable/operator calls. A signature and each equation have separate definition locations. Call references identify the called name without resolving its binding.
87
87
 
88
- Extra parentheses around a function or type declaration's head are not indexed; parenthesized operator identifiers such as `(:+:)` are supported. Call-name matching supports one extra expression-parenthesis wrapper; deeper wrappers are not indexed. Destructuring bindings, local pattern bindings and constructors (including pattern synonyms) are not indexed.
88
+ Declaration names and variable/operator callees remain indexed through nested parentheses. Class and instance equations retain their method roles; grouping a value without applying it does not create a call reference. Destructuring bindings, local pattern bindings and constructors (including pattern synonyms) are not indexed.
89
+
90
+ Function and type declaration-head parentheses are anonymous syntax: the enclosing declaration directly exposes its `name`, parameter groups and infix `head` fields. Parentheses inside parameters and types retain their existing nodes. A grouped variable name, including a qualified name, uses one `parenthesized_name` node with a direct name child, independent of grouping depth. A symbolic variable operator keeps its required prefix parentheses in `prefix_id`: `(<+>)` and `(Demo.<+>)` remain `prefix_id`, while redundant grouping such as `((<+>))` adds one `parenthesized_name` wrapper around that node. This also applies to unapplied names; only function position creates a call reference or call highlight. A parenthesized simple binding name uses `parenthesized_name` in the `bind` node's `name` field, retaining one wrapper at any grouping depth. Complex expressions retain ordinary `parens` nodes. These changes affect public syntax trees.
89
91
 
90
92
  In a repository checkout, configure the CLI parser directories to include the grammar, then run `script/tree-sitter tags file.hs` to inspect the tags.
91
93
 
@@ -96,7 +98,7 @@ fuzzed with:
96
98
  ```toml
97
99
  [dependencies]
98
100
  tree-sitter = { package = "willbooster-tree-sitter", version = "6.0.0" }
99
- tree-sitter-haskell = { package = "willbooster-tree-sitter-haskell", version = "4" }
101
+ tree-sitter-haskell = { package = "willbooster-tree-sitter-haskell", version = "5" }
100
102
  ```
101
103
 
102
104
  ```rust
@@ -1,116 +1,22 @@
1
1
  module.exports = {
2
2
 
3
3
  conflicts: $ => [
4
-
5
- /**
6
- * For reference in GHC:
7
- * - Note [Ambiguous syntactic categories]
8
- * - Note [PatBuilder]
9
- * - Note [Declaration/signature overlap]
10
- * - These correspond to `DisambECP`
11
- *
12
- * (fun x) y = undefined
13
- * (fun x -> y) = undefined
14
- * (fun) <> x = undefined
15
- *
16
- * The first one is a regular function with some redundant parens, where `fun` is the declared name.
17
- * The second one is a pattern binder with a view pattern, where `fun` is a free variable.
18
- * The third one is an infix pattern binder, where `fun` is a simple varid pattern with redundant parens.
19
- *
20
- * These conflicts are also relevant for top-level expression splices, which fundamentally conflict with decls, and
21
- * since decls start with either `var` or `pat`, they cannot be disambiguated.
22
- *
23
- * GHC parses functions and binds as expressions and sorts them into the right LHS in a post-processing step.
24
- * Since this is not possible in tree-sitter, these conflicts are more function-centric than in GHC.
25
- *
26
- * function:
27
- * func (A a) = a
28
- *
29
- * bind variable:
30
- * a : as = [1, 2, 3]
31
- *
32
- * pattern bind infix:
33
- * a : as = [1, 2, 3]
34
- *
35
- * pattern bind prefix:
36
- * Just 1 = Just 1
37
- *
38
- * splice:
39
- * makeLenses ''A
40
- *
41
- * Signature and bind:
42
- *
43
- * fun :: Int
44
- * fun :: Int = 5
45
- */
46
-
47
- // Function vs bind
4
+ // GHC DisambECP (notes Ambiguous syntactic categories, PatBuilder and Declaration/signature overlap)
5
+ // disambiguates expressions, patterns and declaration heads after parsing; these alternatives must remain
6
+ // available until following syntax determines their role, including for top-level expression splices.
48
7
  [$._function_name, $.pattern],
49
-
50
- // Function vs bind vs splice
51
8
  [$._function_name, $.pattern, $.expression],
52
-
53
- // Bind vs splice
9
+ [$._grouped_name, $._function_name, $.pattern, $.expression],
10
+ [$._grouped_name, $.expression],
11
+ [$._grouped_name, $.pattern, $.expression],
12
+ [$._grouped_name, $.expression, $.pattern, $._function_name, $._binding_name_parens],
13
+ [$.pattern, $._function_name, $._binding_name_parens],
14
+ [$.pattern, $._binding_name_parens],
15
+ [$._grouped_name, $.expression, $.pattern, $._binding_name_parens],
54
16
  [$.pattern, $.expression],
55
-
56
- // Signature vs bind
57
17
  [$.signature, $.pattern],
58
-
59
- /**
60
- * Unboxed syntax
61
- *
62
- * The hash in the opening parenthesis of unboxed tuples can be an operator.
63
- */
18
+ // The hash opening an unboxed tuple can also begin a symbolic operator.
64
19
  [$._operator_hash_head, $._unboxed_open],
65
-
66
- /**
67
- * Types conflicting with structures that look like types
68
- *
69
- * Note: These conflicts have been circumvented by a lookahead mechanism in the scanner.
70
- * This comment is preserved for reference.
71
- *
72
- * `name` and `constructor` use the same terminal symbol, but we cannot reduce `constructor` in prefix data
73
- * constructor declarations.
74
- *
75
- * In GHC, this corresponds to `DisambTD`.
76
- *
77
- * > data A = Name Int
78
- * > data A = Maybe Int :+ Int
79
- * > data A = Monoid a => A a
80
- *
81
- * All of these start with a `name` node.
82
- * In the first example, the `name` is a data constructor, which will not be reduced to a `type`.
83
- *
84
- * In the second example, the `name` is a type constructor applied to another type in the left operand of an infix
85
- * data constructor, so it must be reduced to `type`, and then to `apply` with the `Int`.
86
- *
87
- * In the third example, the `name` is a type constructor applied to a variable resulting in a constraint.
88
- * It will be reduced the same way as the second example, but using the class tree, which is mostly identical to the
89
- * type tree, but conflicts since we want to distinguish classes from types granularly.
90
- *
91
- * In GHC, these correspond to `mkHsAppTyHeadPV` and `mkHsAppTyPV`.
92
- *
93
- * > data A a b = a `C` b => a `A` b
94
- * > data A a b = a `A` b
95
- *
96
- * > data a *** b
97
- * > data a +++ b => a *** b
98
- *
99
- * In GHC, this corresponds to `mkHsOpTyPV`.
100
- *
101
- * > class A where type a + b = r | r -> a b
102
- * > class A where type a + b = (a, b)
103
- *
104
- * The first one is a type family declaration, the second one an instance.
105
- *
106
- * These were the conflicts that have been turned into scanner lookahead:
107
- *
108
- * [$._type_con, $.data_constructor],
109
- * [$._type_con, $._type_head_name],
110
- * [$._type_variable, $._tyvar],
111
- * [$._constructor_ticked, $._tycon_ticked],
112
- */
113
-
114
20
  ],
115
21
 
116
22
  }
package/grammar/decl.js CHANGED
@@ -68,7 +68,7 @@ module.exports = {
68
68
 
69
69
  _function_name: $ => field('name', $._var),
70
70
 
71
- function_head_parens: $ => parens(
71
+ _function_head_parens: $ => parens(
72
72
  $,
73
73
  choice(
74
74
  $._function_head,
@@ -78,7 +78,7 @@ module.exports = {
78
78
 
79
79
  _function_head_patterns: $ => choice(
80
80
  $._function_name,
81
- field('parens', $.function_head_parens),
81
+ $._function_head_parens,
82
82
  ),
83
83
 
84
84
  /**
@@ -98,7 +98,7 @@ module.exports = {
98
98
 
99
99
  _function_head: $ => choice(
100
100
  seq($._function_head_patterns, field('patterns', $.patterns)),
101
- alias($._function_head_infix, $.infix),
101
+ field('head', alias($._function_head_infix, $.infix)),
102
102
  ),
103
103
 
104
104
  function: $ => seq(
@@ -106,6 +106,8 @@ module.exports = {
106
106
  $._bind_matches,
107
107
  ),
108
108
 
109
+ _binding_name_parens: $ => parens($, choice($._var, $._binding_name_parens)),
110
+
109
111
  /**
110
112
  * The `implicit_variable` here is for:
111
113
  * g = let ?par = Impy 5 in f
@@ -114,14 +116,12 @@ module.exports = {
114
116
  choice(
115
117
  field('pattern', $._pat),
116
118
  field('name', $._var),
119
+ field('name', alias($._binding_name_parens, $.parenthesized_name)),
117
120
  field('implicit', $.implicit_variable),
118
121
  ),
119
122
  $._bind_matches,
120
123
  )),
121
124
 
122
- /**
123
- * This is a supertype.
124
- */
125
125
  decl: $ => choice(
126
126
  $.signature,
127
127
  $.function,
package/grammar/exp.js CHANGED
@@ -78,9 +78,6 @@ module.exports = {
78
78
 
79
79
  _exp_list: $ => brackets($, sep1(',', field('element', $._exp)), optional(',')),
80
80
 
81
- /**
82
- * An expression like `[1,2..20]`.
83
- */
84
81
  _exp_arithmetic_sequence: $ => brackets(
85
82
  $,
86
83
  field('from', $._exp),
@@ -119,9 +116,6 @@ module.exports = {
119
116
  alias($._exp, $.boolean),
120
117
  ),
121
118
 
122
- /**
123
- * This is a supertype.
124
- */
125
119
  qualifiers: $ => seq(sep1(',', field('qualifier', $.qualifier))),
126
120
 
127
121
  _exp_list_comprehension: $ => brackets(
@@ -171,9 +165,6 @@ module.exports = {
171
165
 
172
166
  _exp_statement: $ => $._exp,
173
167
 
174
- /**
175
- * This is a supertype.
176
- */
177
168
  statement: $ => choice(
178
169
  alias($._exp_statement, $.exp),
179
170
  alias($.generator, $.bind),
@@ -278,9 +269,6 @@ module.exports = {
278
269
  repeat(seq($._tight_dot, field('field', $.variable))),
279
270
  ),
280
271
 
281
- /**
282
- * A dot-syntax field projection like `var.name.othername`.
283
- */
284
272
  _exp_projection: $ => seq(
285
273
  prec('projection', seq(
286
274
  field('expression', $.expression),
@@ -295,6 +283,10 @@ module.exports = {
295
283
 
296
284
  explicit_type: $ => parens($, 'type', field('type', $.type)),
297
285
 
286
+ _grouped_name: $ => choice($._vars, parens($, $._grouped_name)),
287
+
288
+ parenthesized_name: $ => prec.dynamic(1, parens($, $._grouped_name)),
289
+
298
290
  _exp_apply: $ => prec.left('apply', seq(
299
291
  field('function', $.expression),
300
292
  field('argument', choice(
@@ -367,10 +359,8 @@ module.exports = {
367
359
  // top level
368
360
  // ------------------------------------------------------------------------
369
361
 
370
- /**
371
- * This is a supertype.
372
- */
373
362
  expression: $ => choice(
363
+ $.parenthesized_name,
374
364
  alias($._exp_infix, $.infix),
375
365
  alias($._exp_negation, $.negation),
376
366
  alias($._exp_apply, $.apply),
@@ -41,25 +41,19 @@ module.exports = {
41
41
  // qualified names
42
42
  // ------------------------------------------------
43
43
 
44
- /**
45
- * Prioritize shifting over a tight infix dot over reducing to a qualified constructor or module.
46
- */
44
+ // Shift a tight dot before reducing a qualified constructor or module.
47
45
  [
48
46
  'qualifying-module',
49
47
  'qualified-id',
50
48
  ],
51
49
 
52
- /**
53
- * Prioritize qualified variables over record field projection on constructors.
54
- */
50
+ // Prefer a qualified variable over record-field projection on a constructor.
55
51
  [
56
52
  'qualifying-module',
57
53
  'con',
58
54
  ],
59
55
 
60
- /**
61
- * Prioritize qualified names over the infix operator dot in types.
62
- */
56
+ // Prefer a qualified type name over an infix dot operator.
63
57
  [
64
58
  'qualifying-module',
65
59
  'type-name',
@@ -104,6 +98,8 @@ module.exports = {
104
98
  'apply',
105
99
  ],
106
100
 
101
+ [$._grouped_name, $.parenthesized_name, $._exp_parens],
102
+
107
103
  ],
108
104
 
109
105
  }
package/grammar/type.js CHANGED
@@ -29,9 +29,6 @@ module.exports = {
29
29
 
30
30
  _type_param_invisible: $ => prefix_at($, field('bind', $.type_param)),
31
31
 
32
- /**
33
- * This is a supertype.
34
- */
35
32
  type_param: $ => choice(
36
33
  alias($._type_param_wildcard, $.wildcard),
37
34
  alias($._type_param_invisible, $.invisible),
@@ -101,9 +98,6 @@ module.exports = {
101
98
 
102
99
  _type_apply_arg: $ => choice($.type, alias($._at_type, $.kind_application)),
103
100
 
104
- /**
105
- * Type application, as in `Either e (Int, Text)` or `TypeRep @Int`.
106
- */
107
101
  _type_apply: $ => prec.left('apply', seq(
108
102
  field('constructor', $.type),
109
103
  field('argument', $._type_apply_arg),
@@ -123,9 +117,6 @@ module.exports = {
123
117
  // unquantified type
124
118
  // ------------------------------------------------------------------------
125
119
 
126
- /**
127
- * This is a supertype.
128
- */
129
120
  type: $ => choice(
130
121
  $._type_name,
131
122
  alias($._type_star, $.star),
@@ -240,9 +231,6 @@ module.exports = {
240
231
  // top level
241
232
  // ------------------------------------------------------------------------
242
233
 
243
- /**
244
- * This is a supertype.
245
- */
246
234
  quantified_type: $ => choice(
247
235
  alias($._qtype_function, $.function),
248
236
  alias($._qtype_linear_function, $.linear_function),
@@ -293,7 +281,7 @@ module.exports = {
293
281
 
294
282
  _type_head_params: $ => choice(
295
283
  $._type_head_name,
296
- alias($._type_head_parens, $.parens),
284
+ $._type_head_parens,
297
285
  ),
298
286
 
299
287
  _type_head_infix: $ => prec('infix', seq(
@@ -302,26 +290,10 @@ module.exports = {
302
290
  field('right_operand', $.type_param),
303
291
  )),
304
292
 
305
- /**
306
- * A type head introduces the name and parameters in the declaration of a data type/family, type synonym/family, or
307
- * class.
308
- *
309
- * It can be in prefix or infix form:
310
- *
311
- * > A a b
312
- * > a +++ b
313
- *
314
- * Parameters can be visible or invisible, the latter marked by a prefix `@`.
315
- * They can be plain or parenthesized variable names, the latter with an optional kind signature.
316
- * They can be wildcards.
317
- *
318
- * Examples: `a`, `@a`, `(a :: Type)`, `@(_ :: Type -> Type)`
319
- *
320
- * The rules are slightly relaxed compared to GHC.
321
- */
293
+ // Declaration heads permit variable binders; instance heads below permit full type patterns.
322
294
  _type_head: $ => choice(
323
295
  seq($._type_head_params, optional(field('patterns', $.type_params))),
324
- alias($._type_head_infix, $.infix),
296
+ field('head', alias($._type_head_infix, $.infix)),
325
297
  ),
326
298
 
327
299
  // ------------------------------------------------------------------------
@@ -339,18 +311,14 @@ module.exports = {
339
311
 
340
312
  _type_instance_head_params: $ => choice(
341
313
  field('name', $._tycons),
342
- alias($._type_instance_head_parens, $.parens),
314
+ $._type_instance_head_parens,
343
315
  ),
344
316
 
345
317
  type_patterns: $ => repeat1(prec('patterns', $._type_apply_arg)),
346
318
 
347
- /**
348
- * The equivalent of a type head, for type instances, which can contain full type patterns rather than just variable
349
- * binders.
350
- */
351
319
  _type_instance_head: $ => choice(
352
320
  seq($._type_instance_head_params, optional(field('patterns', $.type_patterns))),
353
- seq($._cond_infix, alias($._type_infix, $.infix)),
321
+ seq($._cond_infix, field('head', alias($._type_infix, $.infix))),
354
322
  ),
355
323
 
356
324
  // ------------------------------------------------------------------------
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@willbooster/tree-sitter-haskell",
3
- "version": "4.1.2",
3
+ "version": "5.0.0",
4
4
  "description": "Haskell grammar for tree-sitter",
5
5
  "keywords": [
6
6
  "incremental",
@@ -449,3 +449,13 @@
449
449
  ; ----------------------------------------------------------------------------
450
450
  ; Spell checking
451
451
  (comment) @spell
452
+
453
+ ; ----------------------------------------------------------------------------
454
+ ; Calls through grouped names
455
+
456
+ (expression/apply
457
+ function: (parenthesized_name
458
+ [
459
+ (variable) @function.call
460
+ (qualified id: (variable) @function.call)
461
+ ]))
@@ -2,3 +2,5 @@
2
2
  (function name: (variable)) @local.definition
3
3
  (pattern/variable) @local.definition
4
4
  (expression/variable) @local.reference
5
+ (expression/parenthesized_name (variable) @local.reference)
6
+ (_ name: (parenthesized_name (variable) @local.definition))
package/queries/tags.scm CHANGED
@@ -3,32 +3,44 @@
3
3
  (declarations
4
4
  [
5
5
  (function name: [(variable) @name (prefix_id (operator) @name)])
6
- (function (infix operator: [(operator) @name (infix_id (variable) @name)]))
6
+ (function head: (infix operator: [(operator) @name (infix_id (variable) @name)]))
7
7
  (signature name: [(variable) @name (prefix_id (operator) @name)])
8
8
  (signature names: (binding_list name: [(variable) @name (prefix_id (operator) @name)]))
9
9
  ] @definition.function)
10
10
 
11
11
  (declarations
12
- (bind name: [(variable) @name (prefix_id (operator) @name)]) @definition.variable)
12
+ (bind name: [
13
+ (variable) @name
14
+ (prefix_id (operator) @name)
15
+ (parenthesized_name [(variable) @name (prefix_id (operator) @name)])
16
+ ]) @definition.variable)
13
17
 
14
18
  [
15
19
  (class_declarations
16
20
  [
17
21
  (function name: [(variable) @name (prefix_id (operator) @name)])
18
- (function (infix operator: [(operator) @name (infix_id (variable) @name)]))
22
+ (function head: (infix operator: [(operator) @name (infix_id (variable) @name)]))
19
23
  (signature name: [(variable) @name (prefix_id (operator) @name)])
20
24
  (signature names: (binding_list name: [(variable) @name (prefix_id (operator) @name)]))
21
25
  (default_signature signature: (signature name: [(variable) @name (prefix_id (operator) @name)]))
22
26
  (default_signature signature: (signature names: (binding_list name: [(variable) @name (prefix_id (operator) @name)])))
23
- (bind name: [(variable) @name (prefix_id (operator) @name)])
27
+ (bind name: [
28
+ (variable) @name
29
+ (prefix_id (operator) @name)
30
+ (parenthesized_name [(variable) @name (prefix_id (operator) @name)])
31
+ ])
24
32
  ] @definition.method)
25
33
  (instance_declarations
26
34
  [
27
35
  (function name: [(variable) @name (prefix_id (operator) @name)])
28
- (function (infix operator: [(operator) @name (infix_id (variable) @name)]))
36
+ (function head: (infix operator: [(operator) @name (infix_id (variable) @name)]))
29
37
  (signature name: [(variable) @name (prefix_id (operator) @name)])
30
38
  (signature names: (binding_list name: [(variable) @name (prefix_id (operator) @name)]))
31
- (bind name: [(variable) @name (prefix_id (operator) @name)])
39
+ (bind name: [
40
+ (variable) @name
41
+ (prefix_id (operator) @name)
42
+ (parenthesized_name [(variable) @name (prefix_id (operator) @name)])
43
+ ])
32
44
  ] @definition.method)
33
45
  ]
34
46
 
@@ -54,9 +66,9 @@
54
66
  ] @definition.class
55
67
 
56
68
  [
57
- (type_synonym (infix operator: [(constructor_operator) @name (operator) @name (infix_id (name) @name)]) "=")
58
- (type_family . [(cpp) (comment) (haddock) (pragma)]* . (infix operator: [(constructor_operator) @name (operator) @name (infix_id (name) @name)]))
59
- (data_family . [(cpp) (comment) (haddock) (pragma)]* . (infix operator: [(constructor_operator) @name (operator) @name (infix_id (name) @name)]))
69
+ (type_synonym head: (infix operator: [(constructor_operator) @name (operator) @name (infix_id (name) @name)]))
70
+ (type_family head: (infix operator: [(constructor_operator) @name (operator) @name (infix_id (name) @name)]))
71
+ (data_family head: (infix operator: [(constructor_operator) @name (operator) @name (infix_id (name) @name)]))
60
72
  ] @definition.class
61
73
 
62
74
  (declarations
@@ -73,10 +85,8 @@
73
85
  (prefix_id [(operator) @name (constructor_operator) @name])
74
86
  (prefix_id (qualified id: [(operator) @name (constructor_operator) @name]))
75
87
  ])
76
- (data_type . [(cpp) (comment) (haddock) (pragma)]* . (infix operator: [(constructor_operator) @name (operator) @name (infix_id (name) @name)]))
77
- (data_type . [(cpp) (comment) (haddock) (pragma)]* . (context) . [(cpp) (comment) (haddock) (pragma)]* . (infix operator: [(constructor_operator) @name (operator) @name (infix_id (name) @name)]))
78
- (newtype . [(cpp) (comment) (haddock) (pragma)]* . (infix operator: [(constructor_operator) @name (operator) @name (infix_id (name) @name)]))
79
- (newtype . [(cpp) (comment) (haddock) (pragma)]* . (context) . [(cpp) (comment) (haddock) (pragma)]* . (infix operator: [(constructor_operator) @name (operator) @name (infix_id (name) @name)]))
88
+ (data_type head: (infix operator: [(constructor_operator) @name (operator) @name (infix_id (name) @name)]))
89
+ (newtype head: (infix operator: [(constructor_operator) @name (operator) @name (infix_id (name) @name)]))
80
90
  ] @definition.class)
81
91
 
82
92
  (class name: [
@@ -85,14 +95,14 @@
85
95
  (prefix_id [(operator) @name (constructor_operator) @name])
86
96
  (prefix_id (qualified id: [(operator) @name (constructor_operator) @name]))
87
97
  ]) @definition.interface
88
- (class (infix operator: [(constructor_operator) @name (operator) @name (infix_id (name) @name)])) @definition.interface
98
+ (class head: (infix operator: [(constructor_operator) @name (operator) @name (infix_id (name) @name)])) @definition.interface
89
99
  (instance name: [
90
100
  (name) @name
91
101
  (qualified id: (name) @name)
92
102
  (prefix_id [(operator) @name (constructor_operator) @name])
93
103
  (prefix_id (qualified id: [(operator) @name (constructor_operator) @name]))
94
104
  ]) @reference.implementation
95
- (instance (infix operator: [
105
+ (instance head: (infix operator: [
96
106
  (constructor_operator) @name
97
107
  (operator) @name
98
108
  (infix_id (name) @name)
@@ -106,7 +116,7 @@
106
116
  (prefix_id [(operator) @name (constructor_operator) @name])
107
117
  (prefix_id (qualified id: [(operator) @name (constructor_operator) @name]))
108
118
  ]) @reference.implementation
109
- (deriving_instance (infix operator: [
119
+ (deriving_instance head: (infix operator: [
110
120
  (constructor_operator) @name
111
121
  (operator) @name
112
122
  (infix_id (name) @name)
@@ -123,7 +133,7 @@
123
133
  (qualified id: (variable) @name)
124
134
  (prefix_id (operator) @name)
125
135
  (prefix_id (qualified id: (operator) @name))
126
- (parens expression: [
136
+ (parenthesized_name [
127
137
  (variable) @name
128
138
  (qualified id: (variable) @name)
129
139
  (prefix_id (operator) @name)
@@ -317,6 +317,10 @@
317
317
  "type": "parens",
318
318
  "named": true
319
319
  },
320
+ {
321
+ "type": "parenthesized_name",
322
+ "named": true
323
+ },
320
324
  {
321
325
  "type": "prefix_id",
322
326
  "named": true
@@ -1105,6 +1109,10 @@
1105
1109
  "multiple": false,
1106
1110
  "required": false,
1107
1111
  "types": [
1112
+ {
1113
+ "type": "parenthesized_name",
1114
+ "named": true
1115
+ },
1108
1116
  {
1109
1117
  "type": "prefix_id",
1110
1118
  "named": true
@@ -1274,6 +1282,16 @@
1274
1282
  }
1275
1283
  ]
1276
1284
  },
1285
+ "head": {
1286
+ "multiple": false,
1287
+ "required": false,
1288
+ "types": [
1289
+ {
1290
+ "type": "infix",
1291
+ "named": true
1292
+ }
1293
+ ]
1294
+ },
1277
1295
  "name": {
1278
1296
  "multiple": false,
1279
1297
  "required": false,
@@ -1297,7 +1315,7 @@
1297
1315
  ]
1298
1316
  },
1299
1317
  "patterns": {
1300
- "multiple": false,
1318
+ "multiple": true,
1301
1319
  "required": false,
1302
1320
  "types": [
1303
1321
  {
@@ -1306,20 +1324,6 @@
1306
1324
  }
1307
1325
  ]
1308
1326
  }
1309
- },
1310
- "children": {
1311
- "multiple": false,
1312
- "required": false,
1313
- "types": [
1314
- {
1315
- "type": "infix",
1316
- "named": true
1317
- },
1318
- {
1319
- "type": "parens",
1320
- "named": true
1321
- }
1322
- ]
1323
1327
  }
1324
1328
  },
1325
1329
  {
@@ -1429,6 +1433,10 @@
1429
1433
  "multiple": false,
1430
1434
  "required": false,
1431
1435
  "types": [
1436
+ {
1437
+ "type": "parenthesized_name",
1438
+ "named": true
1439
+ },
1432
1440
  {
1433
1441
  "type": "prefix_id",
1434
1442
  "named": true
@@ -1592,6 +1600,16 @@
1592
1600
  "type": "data_family",
1593
1601
  "named": true,
1594
1602
  "fields": {
1603
+ "head": {
1604
+ "multiple": false,
1605
+ "required": false,
1606
+ "types": [
1607
+ {
1608
+ "type": "infix",
1609
+ "named": true
1610
+ }
1611
+ ]
1612
+ },
1595
1613
  "kind": {
1596
1614
  "multiple": false,
1597
1615
  "required": false,
@@ -1625,7 +1643,7 @@
1625
1643
  ]
1626
1644
  },
1627
1645
  "patterns": {
1628
- "multiple": false,
1646
+ "multiple": true,
1629
1647
  "required": false,
1630
1648
  "types": [
1631
1649
  {
@@ -1634,20 +1652,6 @@
1634
1652
  }
1635
1653
  ]
1636
1654
  }
1637
- },
1638
- "children": {
1639
- "multiple": false,
1640
- "required": false,
1641
- "types": [
1642
- {
1643
- "type": "infix",
1644
- "named": true
1645
- },
1646
- {
1647
- "type": "parens",
1648
- "named": true
1649
- }
1650
- ]
1651
1655
  }
1652
1656
  },
1653
1657
  {
@@ -1721,9 +1725,19 @@
1721
1725
  }
1722
1726
  ]
1723
1727
  },
1724
- "kind": {
1728
+ "head": {
1725
1729
  "multiple": false,
1726
1730
  "required": false,
1731
+ "types": [
1732
+ {
1733
+ "type": "infix",
1734
+ "named": true
1735
+ }
1736
+ ]
1737
+ },
1738
+ "kind": {
1739
+ "multiple": true,
1740
+ "required": false,
1727
1741
  "types": [
1728
1742
  {
1729
1743
  "type": "quantified_type",
@@ -1758,7 +1772,7 @@
1758
1772
  ]
1759
1773
  },
1760
1774
  "patterns": {
1761
- "multiple": false,
1775
+ "multiple": true,
1762
1776
  "required": false,
1763
1777
  "types": [
1764
1778
  {
@@ -1771,20 +1785,6 @@
1771
1785
  }
1772
1786
  ]
1773
1787
  }
1774
- },
1775
- "children": {
1776
- "multiple": false,
1777
- "required": false,
1778
- "types": [
1779
- {
1780
- "type": "infix",
1781
- "named": true
1782
- },
1783
- {
1784
- "type": "parens",
1785
- "named": true
1786
- }
1787
- ]
1788
1788
  }
1789
1789
  },
1790
1790
  {
@@ -1906,6 +1906,26 @@
1906
1906
  }
1907
1907
  ]
1908
1908
  },
1909
+ "head": {
1910
+ "multiple": false,
1911
+ "required": false,
1912
+ "types": [
1913
+ {
1914
+ "type": "infix",
1915
+ "named": true
1916
+ }
1917
+ ]
1918
+ },
1919
+ "kind": {
1920
+ "multiple": true,
1921
+ "required": false,
1922
+ "types": [
1923
+ {
1924
+ "type": "quantified_type",
1925
+ "named": true
1926
+ }
1927
+ ]
1928
+ },
1909
1929
  "name": {
1910
1930
  "multiple": false,
1911
1931
  "required": false,
@@ -1925,7 +1945,7 @@
1925
1945
  ]
1926
1946
  },
1927
1947
  "patterns": {
1928
- "multiple": false,
1948
+ "multiple": true,
1929
1949
  "required": false,
1930
1950
  "types": [
1931
1951
  {
@@ -1954,20 +1974,6 @@
1954
1974
  }
1955
1975
  ]
1956
1976
  }
1957
- },
1958
- "children": {
1959
- "multiple": false,
1960
- "required": false,
1961
- "types": [
1962
- {
1963
- "type": "infix",
1964
- "named": true
1965
- },
1966
- {
1967
- "type": "parens",
1968
- "named": true
1969
- }
1970
- ]
1971
1977
  }
1972
1978
  },
1973
1979
  {
@@ -2079,6 +2085,26 @@
2079
2085
  }
2080
2086
  ]
2081
2087
  },
2088
+ "head": {
2089
+ "multiple": false,
2090
+ "required": false,
2091
+ "types": [
2092
+ {
2093
+ "type": "infix",
2094
+ "named": true
2095
+ }
2096
+ ]
2097
+ },
2098
+ "kind": {
2099
+ "multiple": true,
2100
+ "required": false,
2101
+ "types": [
2102
+ {
2103
+ "type": "quantified_type",
2104
+ "named": true
2105
+ }
2106
+ ]
2107
+ },
2082
2108
  "name": {
2083
2109
  "multiple": false,
2084
2110
  "required": false,
@@ -2112,7 +2138,7 @@
2112
2138
  ]
2113
2139
  },
2114
2140
  "patterns": {
2115
- "multiple": false,
2141
+ "multiple": true,
2116
2142
  "required": false,
2117
2143
  "types": [
2118
2144
  {
@@ -2133,17 +2159,9 @@
2133
2159
  }
2134
2160
  },
2135
2161
  "children": {
2136
- "multiple": true,
2162
+ "multiple": false,
2137
2163
  "required": false,
2138
2164
  "types": [
2139
- {
2140
- "type": "infix",
2141
- "named": true
2142
- },
2143
- {
2144
- "type": "parens",
2145
- "named": true
2146
- },
2147
2165
  {
2148
2166
  "type": "quantified_type",
2149
2167
  "named": true
@@ -2767,6 +2785,16 @@
2767
2785
  }
2768
2786
  ]
2769
2787
  },
2788
+ "head": {
2789
+ "multiple": false,
2790
+ "required": false,
2791
+ "types": [
2792
+ {
2793
+ "type": "infix",
2794
+ "named": true
2795
+ }
2796
+ ]
2797
+ },
2770
2798
  "match": {
2771
2799
  "multiple": true,
2772
2800
  "required": false,
@@ -2809,18 +2837,8 @@
2809
2837
  }
2810
2838
  ]
2811
2839
  },
2812
- "parens": {
2813
- "multiple": false,
2814
- "required": false,
2815
- "types": [
2816
- {
2817
- "type": "function_head_parens",
2818
- "named": true
2819
- }
2820
- ]
2821
- },
2822
2840
  "patterns": {
2823
- "multiple": false,
2841
+ "multiple": true,
2824
2842
  "required": false,
2825
2843
  "types": [
2826
2844
  {
@@ -2839,66 +2857,6 @@
2839
2857
  }
2840
2858
  ]
2841
2859
  }
2842
- },
2843
- "children": {
2844
- "multiple": false,
2845
- "required": false,
2846
- "types": [
2847
- {
2848
- "type": "infix",
2849
- "named": true
2850
- }
2851
- ]
2852
- }
2853
- },
2854
- {
2855
- "type": "function_head_parens",
2856
- "named": true,
2857
- "fields": {
2858
- "name": {
2859
- "multiple": false,
2860
- "required": false,
2861
- "types": [
2862
- {
2863
- "type": "prefix_id",
2864
- "named": true
2865
- },
2866
- {
2867
- "type": "variable",
2868
- "named": true
2869
- }
2870
- ]
2871
- },
2872
- "parens": {
2873
- "multiple": false,
2874
- "required": false,
2875
- "types": [
2876
- {
2877
- "type": "function_head_parens",
2878
- "named": true
2879
- }
2880
- ]
2881
- },
2882
- "patterns": {
2883
- "multiple": false,
2884
- "required": false,
2885
- "types": [
2886
- {
2887
- "type": "patterns",
2888
- "named": true
2889
- }
2890
- ]
2891
- }
2892
- },
2893
- "children": {
2894
- "multiple": false,
2895
- "required": false,
2896
- "types": [
2897
- {
2898
- "type": "infix",
2899
- "named": true
2900
- }
2901
- ]
2902
2860
  }
2903
2861
  },
2904
2862
  {
@@ -3561,6 +3519,26 @@
3561
3519
  }
3562
3520
  ]
3563
3521
  },
3522
+ "head": {
3523
+ "multiple": false,
3524
+ "required": false,
3525
+ "types": [
3526
+ {
3527
+ "type": "infix",
3528
+ "named": true
3529
+ }
3530
+ ]
3531
+ },
3532
+ "kind": {
3533
+ "multiple": true,
3534
+ "required": false,
3535
+ "types": [
3536
+ {
3537
+ "type": "quantified_type",
3538
+ "named": true
3539
+ }
3540
+ ]
3541
+ },
3564
3542
  "name": {
3565
3543
  "multiple": false,
3566
3544
  "required": false,
@@ -3580,7 +3558,7 @@
3580
3558
  ]
3581
3559
  },
3582
3560
  "patterns": {
3583
- "multiple": false,
3561
+ "multiple": true,
3584
3562
  "required": false,
3585
3563
  "types": [
3586
3564
  {
@@ -3589,20 +3567,6 @@
3589
3567
  }
3590
3568
  ]
3591
3569
  }
3592
- },
3593
- "children": {
3594
- "multiple": false,
3595
- "required": false,
3596
- "types": [
3597
- {
3598
- "type": "infix",
3599
- "named": true
3600
- },
3601
- {
3602
- "type": "parens",
3603
- "named": true
3604
- }
3605
- ]
3606
3570
  }
3607
3571
  },
3608
3572
  {
@@ -3678,6 +3642,16 @@
3678
3642
  "type": "kind_signature",
3679
3643
  "named": true,
3680
3644
  "fields": {
3645
+ "head": {
3646
+ "multiple": false,
3647
+ "required": false,
3648
+ "types": [
3649
+ {
3650
+ "type": "infix",
3651
+ "named": true
3652
+ }
3653
+ ]
3654
+ },
3681
3655
  "kind": {
3682
3656
  "multiple": false,
3683
3657
  "required": true,
@@ -3711,7 +3685,7 @@
3711
3685
  ]
3712
3686
  },
3713
3687
  "patterns": {
3714
- "multiple": false,
3688
+ "multiple": true,
3715
3689
  "required": false,
3716
3690
  "types": [
3717
3691
  {
@@ -3720,20 +3694,6 @@
3720
3694
  }
3721
3695
  ]
3722
3696
  }
3723
- },
3724
- "children": {
3725
- "multiple": false,
3726
- "required": false,
3727
- "types": [
3728
- {
3729
- "type": "infix",
3730
- "named": true
3731
- },
3732
- {
3733
- "type": "parens",
3734
- "named": true
3735
- }
3736
- ]
3737
3697
  }
3738
3698
  },
3739
3699
  {
@@ -4268,9 +4228,19 @@
4268
4228
  }
4269
4229
  ]
4270
4230
  },
4271
- "kind": {
4231
+ "head": {
4272
4232
  "multiple": false,
4273
4233
  "required": false,
4234
+ "types": [
4235
+ {
4236
+ "type": "infix",
4237
+ "named": true
4238
+ }
4239
+ ]
4240
+ },
4241
+ "kind": {
4242
+ "multiple": true,
4243
+ "required": false,
4274
4244
  "types": [
4275
4245
  {
4276
4246
  "type": "quantified_type",
@@ -4305,7 +4275,7 @@
4305
4275
  ]
4306
4276
  },
4307
4277
  "patterns": {
4308
- "multiple": false,
4278
+ "multiple": true,
4309
4279
  "required": false,
4310
4280
  "types": [
4311
4281
  {
@@ -4318,20 +4288,6 @@
4318
4288
  }
4319
4289
  ]
4320
4290
  }
4321
- },
4322
- "children": {
4323
- "multiple": false,
4324
- "required": false,
4325
- "types": [
4326
- {
4327
- "type": "infix",
4328
- "named": true
4329
- },
4330
- {
4331
- "type": "parens",
4332
- "named": true
4333
- }
4334
- ]
4335
4291
  }
4336
4292
  },
4337
4293
  {
@@ -4401,42 +4357,6 @@
4401
4357
  }
4402
4358
  ]
4403
4359
  },
4404
- "kind": {
4405
- "multiple": false,
4406
- "required": false,
4407
- "types": [
4408
- {
4409
- "type": "quantified_type",
4410
- "named": true
4411
- }
4412
- ]
4413
- },
4414
- "name": {
4415
- "multiple": false,
4416
- "required": false,
4417
- "types": [
4418
- {
4419
- "type": "name",
4420
- "named": true
4421
- },
4422
- {
4423
- "type": "prefix_id",
4424
- "named": true
4425
- },
4426
- {
4427
- "type": "prefix_list",
4428
- "named": true
4429
- },
4430
- {
4431
- "type": "qualified",
4432
- "named": true
4433
- },
4434
- {
4435
- "type": "unit",
4436
- "named": true
4437
- }
4438
- ]
4439
- },
4440
4360
  "pattern": {
4441
4361
  "multiple": false,
4442
4362
  "required": false,
@@ -4455,20 +4375,6 @@
4455
4375
  }
4456
4376
  ]
4457
4377
  },
4458
- "patterns": {
4459
- "multiple": false,
4460
- "required": false,
4461
- "types": [
4462
- {
4463
- "type": "type_params",
4464
- "named": true
4465
- },
4466
- {
4467
- "type": "type_patterns",
4468
- "named": true
4469
- }
4470
- ]
4471
- },
4472
4378
  "type": {
4473
4379
  "multiple": false,
4474
4380
  "required": false,
@@ -4496,10 +4402,6 @@
4496
4402
  "type": "constraints",
4497
4403
  "named": true
4498
4404
  },
4499
- {
4500
- "type": "infix",
4501
- "named": true
4502
- },
4503
4405
  {
4504
4406
  "type": "invisible",
4505
4407
  "named": true
@@ -4515,6 +4417,29 @@
4515
4417
  ]
4516
4418
  }
4517
4419
  },
4420
+ {
4421
+ "type": "parenthesized_name",
4422
+ "named": true,
4423
+ "fields": {},
4424
+ "children": {
4425
+ "multiple": false,
4426
+ "required": true,
4427
+ "types": [
4428
+ {
4429
+ "type": "prefix_id",
4430
+ "named": true
4431
+ },
4432
+ {
4433
+ "type": "qualified",
4434
+ "named": true
4435
+ },
4436
+ {
4437
+ "type": "variable",
4438
+ "named": true
4439
+ }
4440
+ ]
4441
+ }
4442
+ },
4518
4443
  {
4519
4444
  "type": "pattern_guard",
4520
4445
  "named": true,
@@ -5630,6 +5555,16 @@
5630
5555
  }
5631
5556
  ]
5632
5557
  },
5558
+ "head": {
5559
+ "multiple": false,
5560
+ "required": false,
5561
+ "types": [
5562
+ {
5563
+ "type": "infix",
5564
+ "named": true
5565
+ }
5566
+ ]
5567
+ },
5633
5568
  "kind": {
5634
5569
  "multiple": false,
5635
5570
  "required": false,
@@ -5663,7 +5598,7 @@
5663
5598
  ]
5664
5599
  },
5665
5600
  "patterns": {
5666
- "multiple": false,
5601
+ "multiple": true,
5667
5602
  "required": false,
5668
5603
  "types": [
5669
5604
  {
@@ -5677,14 +5612,6 @@
5677
5612
  "multiple": true,
5678
5613
  "required": false,
5679
5614
  "types": [
5680
- {
5681
- "type": "infix",
5682
- "named": true
5683
- },
5684
- {
5685
- "type": "parens",
5686
- "named": true
5687
- },
5688
5615
  {
5689
5616
  "type": "type_family_injectivity",
5690
5617
  "named": true
@@ -5756,6 +5683,26 @@
5756
5683
  }
5757
5684
  ]
5758
5685
  },
5686
+ "head": {
5687
+ "multiple": false,
5688
+ "required": false,
5689
+ "types": [
5690
+ {
5691
+ "type": "infix",
5692
+ "named": true
5693
+ }
5694
+ ]
5695
+ },
5696
+ "kind": {
5697
+ "multiple": true,
5698
+ "required": false,
5699
+ "types": [
5700
+ {
5701
+ "type": "quantified_type",
5702
+ "named": true
5703
+ }
5704
+ ]
5705
+ },
5759
5706
  "name": {
5760
5707
  "multiple": false,
5761
5708
  "required": false,
@@ -5775,7 +5722,7 @@
5775
5722
  ]
5776
5723
  },
5777
5724
  "patterns": {
5778
- "multiple": false,
5725
+ "multiple": true,
5779
5726
  "required": false,
5780
5727
  "types": [
5781
5728
  {
@@ -5786,17 +5733,9 @@
5786
5733
  }
5787
5734
  },
5788
5735
  "children": {
5789
- "multiple": true,
5736
+ "multiple": false,
5790
5737
  "required": true,
5791
5738
  "types": [
5792
- {
5793
- "type": "infix",
5794
- "named": true
5795
- },
5796
- {
5797
- "type": "parens",
5798
- "named": true
5799
- },
5800
5739
  {
5801
5740
  "type": "quantified_type",
5802
5741
  "named": true
@@ -5866,6 +5805,16 @@
5866
5805
  "type": "type_synonym",
5867
5806
  "named": true,
5868
5807
  "fields": {
5808
+ "head": {
5809
+ "multiple": false,
5810
+ "required": false,
5811
+ "types": [
5812
+ {
5813
+ "type": "infix",
5814
+ "named": true
5815
+ }
5816
+ ]
5817
+ },
5869
5818
  "name": {
5870
5819
  "multiple": false,
5871
5820
  "required": false,
@@ -5889,7 +5838,7 @@
5889
5838
  ]
5890
5839
  },
5891
5840
  "patterns": {
5892
- "multiple": false,
5841
+ "multiple": true,
5893
5842
  "required": false,
5894
5843
  "types": [
5895
5844
  {
@@ -5912,20 +5861,6 @@
5912
5861
  }
5913
5862
  ]
5914
5863
  }
5915
- },
5916
- "children": {
5917
- "multiple": false,
5918
- "required": false,
5919
- "types": [
5920
- {
5921
- "type": "infix",
5922
- "named": true
5923
- },
5924
- {
5925
- "type": "parens",
5926
- "named": true
5927
- }
5928
- ]
5929
5864
  }
5930
5865
  },
5931
5866
  {
Binary file
package/tree-sitter.json CHANGED
@@ -16,7 +16,7 @@
16
16
  }
17
17
  ],
18
18
  "metadata": {
19
- "version": "4.1.2",
19
+ "version": "5.0.0",
20
20
  "license": "MIT",
21
21
  "description": "Haskell grammar for tree-sitter",
22
22
  "authors": [