Skip to content

Commit f20c8e2

Browse files
authored
Add Visibility, Div and some UnaryOps (#28)
1 parent c16088d commit f20c8e2

18 files changed

Lines changed: 12489 additions & 10046 deletions

.github/workflows/ci.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,9 @@ jobs:
3333
- name: Checkout repository
3434
uses: actions/checkout@v4
3535
- name: Set up tree-sitter
36-
uses: tree-sitter/setup-action/cli@v1
36+
uses: tree-sitter/setup-action@v2
3737
- name: Run tests
38-
uses: tree-sitter/parser-test-action@v2
38+
uses: tree-sitter/parser-test-action@v3
3939
with:
4040
test-rust: ${{runner.os == 'Linux'}}
41+
generate: false

.gitignore

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,9 @@ dist/
3535
# Grammar volatiles
3636
*.wasm
3737
*.obj
38-
*.o
38+
*.o
39+
40+
.*/
41+
!.github/
42+
*.md
43+
!README.md

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[package]
22
name = "tree-sitter-inference"
33
description = "Inference grammar for tree-sitter"
4-
version = "0.0.37"
4+
version = "0.0.38"
55
authors = [
66
"Georgii Plotnikov <accembler@gmail.com>"
77
]

Makefile

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

grammar.js

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ module.exports = grammar({
8484
$.struct_definition,
8585
),
8686

87+
visibility: _ => 'pub',
88+
8789
_type: $ => choice(
8890
$._embedded_type,
8991
$._bracketed_generic_name,
@@ -261,7 +263,11 @@ module.exports = grammar({
261263
)),
262264

263265
prefix_unary_expression: $ => prec(PRECEDENCE.UNARY, seq(
264-
field('operator', $.unary_not),
266+
field('operator', choice(
267+
$.unary_not,
268+
$.unary_minus,
269+
$.unary_bitnot,
270+
)),
265271
$._expression,
266272
)),
267273

@@ -282,6 +288,7 @@ module.exports = grammar({
282288
['+', PRECEDENCE.ADD],
283289
['-', PRECEDENCE.ADD],
284290
['*', PRECEDENCE.MUL],
291+
['/', PRECEDENCE.MUL],
285292
['%', PRECEDENCE.MUL],
286293
['<', PRECEDENCE.COMPARE],
287294
['<=', PRECEDENCE.COMPARE],
@@ -309,6 +316,7 @@ module.exports = grammar({
309316
),
310317

311318
type_definition_statement: $ => seq(
319+
optional(field('visibility', $.visibility)),
312320
'type',
313321
field('name', $.identifier),
314322
'=',
@@ -317,6 +325,7 @@ module.exports = grammar({
317325
),
318326

319327
constant_definition: $ => seq(
328+
optional(field('visibility', $.visibility)),
320329
'const',
321330
field('name', $.identifier),
322331
':',
@@ -335,6 +344,7 @@ module.exports = grammar({
335344
),
336345

337346
enum_definition: $ => seq(
347+
optional(field('visibility', $.visibility)),
338348
'enum',
339349
field('name', $.identifier),
340350
'{',
@@ -343,12 +353,13 @@ module.exports = grammar({
343353
),
344354

345355
struct_definition: $ => seq(
356+
optional(field('visibility', $.visibility)),
346357
'struct',
347358
field('name', $.identifier),
348359
'{',
349360
repeat(choice(
350361
seq(field('field', $.struct_field), ';'),
351-
field('value', $.function_definition),
362+
field('method', $.function_definition),
352363
)),
353364
'}',
354365
),
@@ -366,6 +377,7 @@ module.exports = grammar({
366377
),
367378

368379
function_definition: $ => seq(
380+
optional(field('visibility', $.visibility)),
369381
'fn',
370382
field('name', $.identifier),
371383
optional(field('type_parameters', $.type_argument_list_definition)),
@@ -482,6 +494,8 @@ module.exports = grammar({
482494
uzumaki_keyword: _ => '@',
483495
mut_keyword: _ => 'mut',
484496
unary_not: _ => '!',
497+
unary_minus: _ => '-',
498+
unary_bitnot: _ => '~',
485499
bool_literal: _ => choice(
486500
token('true'),
487501
token('false'),
@@ -495,7 +509,9 @@ module.exports = grammar({
495509

496510
_string_literal_content: _ => token.immediate(prec(1, /[^"\\\n]+/)),
497511

498-
number_literal: _ => seq(optional('-'), /\d+/),
512+
// Higher precedence than UNARY ensures -42 parses as a single number_literal,
513+
// not as unary_minus applied to a positive literal
514+
number_literal: _ => token(prec(PRECEDENCE.UNARY + 1, seq(optional('-'), /\d+/))),
499515

500516
unit_literal: _ => seq('(', token.immediate(')')),
501517

@@ -551,10 +567,13 @@ module.exports = grammar({
551567
)
552568
)),
553569

570+
// Type argument list - space-separated like definitions
571+
// Note: Nested generics are syntactically valid but rejected at compilation
554572
type_argument_list: $ => prec.left(seq(
555-
choice(
556-
sep1(seq(field('type', $._type), token.immediate('\'')), ','),
557-
),
573+
seq(field('type', $._type), token.immediate('\'')),
574+
repeat(
575+
seq(field('type', $._type), token.immediate('\'')),
576+
)
558577
)),
559578

560579
_reserved_identifier: _ => choice(

0 commit comments

Comments
 (0)