Skip to content

Commit

Permalink
Add support for parsing more expressions
Browse files Browse the repository at this point in the history
  • Loading branch information
yorickpeterse committed Apr 26, 2024
1 parent 5c5d68f commit 0548dba
Show file tree
Hide file tree
Showing 7 changed files with 15,174 additions and 10,260 deletions.
58 changes: 47 additions & 11 deletions grammar.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,13 @@ module.exports = grammar({
import_as($.constant, $.constant),
),
tags: $ => prec.right(seq('if', list($.identifier, 'and', false))),
extern_import: $ => seq(
'import',
'extern',
field('path', alias($.extern_import_path, $.path)),
field('tags', optional($.tags)),
extern_import: $ => prec.right(
seq(
'import',
'extern',
field('path', alias($.extern_import_path, $.path)),
field('tags', optional($.tags)),
),
),
extern_import_path: $ => seq('"', /[^"]*/, '"'),

Expand Down Expand Up @@ -143,13 +145,13 @@ module.exports = grammar({
_class_modifier: $ => choice('async', 'builtin', 'enum'),
class_body: $ => seq('{', repeat($._class_expression) , '}'),
_class_expression: $ => choice(
$.field,
$.define_field,
$.case,
alias($.class_method, $.method),
),
field: $ => seq(
define_field: $ => seq(
'let',
field('name', $.field_name),
field('name', $.field),
':',
field('type', $._type),
),
Expand Down Expand Up @@ -271,7 +273,6 @@ module.exports = grammar({
$.block,
$.string,
$.identifier,
$.constant,
alias($.and_or, $.binary),
$.cast,
$.binary,
Expand All @@ -283,10 +284,14 @@ module.exports = grammar({
$.next,
$.try,
$.closure,
$.field,
$.if,
prec.right(0, $.constant),
prec.right(1, $.instance),
),
grouped_expression: $ => seq('(', $._expression ,')'),

// Sequences
grouped_expression: $ => seq('(', $._expression ,')'),
tuple: $ => seq('(', $._expression, ',', comma_list($._expression), ')'),
array: $ => seq('[', comma_list($._expression), ']'),

Expand All @@ -297,6 +302,37 @@ module.exports = grammar({
),
try: $ => seq('try', $._expression),

if: $ => seq(
'if',
field('condition', $._expression),
field('consequence', $.block),
repeat(field('alternative', $.else_if)),
field('alternative', optional($.else)),
),
else_if: $ => seq(
'else',
'if',
field('condition', $._expression),
field('consequence', $.block),
),
else: $ => seq('else', field('body', $.block)),

// Class instance expressions
instance: $ => seq(
field('name', $.constant),
field('fields', $.instance_fields),
),
instance_fields: $ => seq(
'{',
comma_list($.assign_field),
'}'
),
assign_field: $ => seq(
field('name', $.field),
'=',
field('value', $._expression)
),

// Closures
closure: $ => seq(
'fn',
Expand Down Expand Up @@ -409,7 +445,7 @@ module.exports = grammar({
visibility: _ => 'pub',
line_comment: _ => token(seq('#', /.*/)),
identifier: _ => /([a-z]|_)[a-zA-Z\d_]*/,
field_name: _ => /@[a-zA-Z\d_]+/,
field: _ => /@[a-zA-Z\d_]+/,
constant: _ => /[A-Z][a-zA-Z\d_]*/
}
});
2 changes: 1 addition & 1 deletion queries/highlights.scm
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@

; Classes
(class name: _ @type)
(field name: _ @property)
(define_field name: _ @property)

; Traits
(trait name: _ @type)
Expand Down
Loading

0 comments on commit 0548dba

Please sign in to comment.