Compare commits

..

No commits in common. "9bc2dfc6f4784ae9de67c87799013510c8bbd572" and "662426cd857e57c9c618059542305e8c86b4d30f" have entirely different histories.

7 changed files with 319625 additions and 326618 deletions

View File

@ -20,7 +20,7 @@ include = [
path = "bindings/rust/lib.rs" path = "bindings/rust/lib.rs"
[dependencies] [dependencies]
tree-sitter = ">= 0.19, < 0.21" tree-sitter = "0.20"
[build-dependencies] [build-dependencies]
cc = "1.0" cc = "1.0"

View File

@ -159,6 +159,16 @@ module.exports = grammar({
// * stab arguments item in `arg1, left when right ->` // * stab arguments item in `arg1, left when right ->`
[$.binary_operator, $._stab_clause_arguments_without_parentheses], [$.binary_operator, $._stab_clause_arguments_without_parentheses],
// Given `( -> • \n`, the newline could be either:
// * stab clause without a body
// * stab clause with a body
[$._stab_clause_without_body, $._stab_clause_with_body],
// Given `( -> • /`, `/` token could be either:
// * stab clause with a body
// * -> as an operator followed by `/`
[$._stab_clause_with_body, $.operator_identifier],
// Given `((arg1, arg2 • ,`, `arg3` expression can be either: // Given `((arg1, arg2 • ,`, `arg3` expression can be either:
// * stab parenthesised arguments item in `((arg1, arg2, arg3) ->)` // * stab parenthesised arguments item in `((arg1, arg2, arg3) ->)`
// * stab non-parenthesised arguments item in `((arg1, arg2, arg3 ->))` // * stab non-parenthesised arguments item in `((arg1, arg2, arg3 ->))`
@ -729,13 +739,20 @@ module.exports = grammar({
), ),
stab_clause: ($) => stab_clause: ($) =>
// Right precedence, because we want to consume body if any choice($._stab_clause_with_body, $._stab_clause_without_body),
prec.right(
_stab_clause_with_body: ($) =>
seq( seq(
optional(field("left", $._stab_clause_left)), optional(field("left", $._stab_clause_left)),
field("operator", "->"), field("operator", "->"),
optional(field("right", $.body)) field("right", $.body)
) ),
_stab_clause_without_body: ($) =>
seq(
optional(field("left", $._stab_clause_left)),
field("operator", "->"),
optional($._terminator)
), ),
_stab_clause_left: ($) => _stab_clause_left: ($) =>
@ -817,13 +834,10 @@ module.exports = grammar({
), ),
body: ($) => body: ($) =>
choice(
$._terminator,
seq( seq(
optional($._terminator), optional($._terminator),
sep1($._expression, $._terminator), sep1($._expression, $._terminator),
optional($._terminator) optional($._terminator)
)
), ),
anonymous_function: ($) => anonymous_function: ($) =>

View File

@ -1,7 +0,0 @@
; Phoenix HTML template
((sigil
(sigil_name) @_sigil_name
(quoted_content) @injection.content)
(#eq @_sigil_name "H")
(#set! injection.language "heex")
(#set! injection.combined))

9
src/grammar.json generated
View File

@ -6452,13 +6452,6 @@
} }
}, },
"body": { "body": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_terminator"
},
{
"type": "SEQ", "type": "SEQ",
"members": [ "members": [
{ {
@ -6511,8 +6504,6 @@
] ]
} }
] ]
}
]
}, },
"anonymous_function": { "anonymous_function": {
"type": "SEQ", "type": "SEQ",

2
src/node-types.json generated
View File

@ -1082,7 +1082,7 @@
"fields": {}, "fields": {},
"children": { "children": {
"multiple": true, "multiple": true,
"required": false, "required": true,
"types": [ "types": [
{ {
"type": "access_call", "type": "access_call",

646100
src/parser.c generated

File diff suppressed because it is too large Load Diff

View File

@ -684,11 +684,12 @@ end
(integer)))))) (integer))))))
===================================== =====================================
stab clause / edge cases / empty right-hand-side stab clause / edge cases / empty right-hand-sides
===================================== =====================================
fun do fun do
x -> x ->
y ->
end end
--- ---
@ -699,8 +700,10 @@ end
(do_block (do_block
(stab_clause (stab_clause
(arguments (arguments
(identifier)) (identifier)))
(body))))) (stab_clause
(arguments
(identifier))))))
===================================== =====================================
pattern matching pattern matching