Skip to content

Commit 4130d3b

Browse files
authored
parse default const parameters (#255)
* parse default const parameters * implement type_parameter like const_parameter instead of having two seperate type_parameter rules: `constrained_type_parameter` and `optional_type_parameter`, combine them into one rule with two `optional`s. * split type_parameter into itself and lifetime_parameter * chore: tree-sitter generate
1 parent 509e251 commit 4130d3b

File tree

5 files changed

+93157
-94296
lines changed

5 files changed

+93157
-94296
lines changed

grammar.js

+29-17
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,6 @@ module.exports = grammar({
107107
[$.scoped_identifier, $.scoped_type_identifier],
108108
[$.parameters, $._pattern],
109109
[$.parameters, $.tuple_struct_pattern],
110-
[$.type_parameters, $.for_lifetimes],
111110
[$.array_expression],
112111
[$.visibility_modifier],
113112
[$.visibility_modifier, $.scoped_identifier, $.scoped_type_identifier],
@@ -549,11 +548,9 @@ module.exports = grammar({
549548
sepBy1(',', seq(
550549
repeat($.attribute_item),
551550
choice(
552-
$.lifetime,
553551
$.metavariable,
554-
$._type_identifier,
555-
$.constrained_type_parameter,
556-
$.optional_type_parameter,
552+
$.type_parameter,
553+
$.lifetime_parameter,
557554
$.const_parameter,
558555
),
559556
)),
@@ -566,21 +563,36 @@ module.exports = grammar({
566563
field('name', $.identifier),
567564
':',
568565
field('type', $._type),
566+
optional(
567+
seq(
568+
'=',
569+
field('value',
570+
choice(
571+
$.block,
572+
$.identifier,
573+
$._literal,
574+
$.negative_literal,
575+
),
576+
),
577+
),
578+
),
569579
),
570580

571-
constrained_type_parameter: $ => seq(
572-
field('left', choice($.lifetime, $._type_identifier)),
573-
field('bounds', $.trait_bounds),
574-
),
581+
type_parameter: $ => prec(1, seq(
582+
field('name', $._type_identifier),
583+
optional(field('bounds', $.trait_bounds)),
584+
optional(
585+
seq(
586+
'=',
587+
field('default_type', $._type),
588+
),
589+
),
590+
)),
575591

576-
optional_type_parameter: $ => seq(
577-
field('name', choice(
578-
$._type_identifier,
579-
$.constrained_type_parameter,
580-
)),
581-
'=',
582-
field('default_type', $._type),
583-
),
592+
lifetime_parameter: $ => prec(1, seq(
593+
field('name', $.lifetime),
594+
optional(field('bounds', $.trait_bounds)),
595+
)),
584596

585597
let_declaration: $ => seq(
586598
'let',

src/grammar.json

+119-70
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)