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"
[dependencies]
tree-sitter = ">= 0.19, < 0.21"
tree-sitter = "0.20"
[build-dependencies]
cc = "1.0"

View File

@ -159,6 +159,16 @@ module.exports = grammar({
// * stab arguments item in `arg1, left when right ->`
[$.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:
// * stab 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: ($) =>
// Right precedence, because we want to consume body if any
prec.right(
seq(
optional(field("left", $._stab_clause_left)),
field("operator", "->"),
optional(field("right", $.body))
)
choice($._stab_clause_with_body, $._stab_clause_without_body),
_stab_clause_with_body: ($) =>
seq(
optional(field("left", $._stab_clause_left)),
field("operator", "->"),
field("right", $.body)
),
_stab_clause_without_body: ($) =>
seq(
optional(field("left", $._stab_clause_left)),
field("operator", "->"),
optional($._terminator)
),
_stab_clause_left: ($) =>
@ -817,13 +834,10 @@ module.exports = grammar({
),
body: ($) =>
choice(
$._terminator,
seq(
optional($._terminator),
sep1($._expression, $._terminator),
optional($._terminator)
)
seq(
optional($._terminator),
sep1($._expression, $._terminator),
optional($._terminator)
),
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))

81
src/grammar.json generated
View File

@ -6452,63 +6452,54 @@
}
},
"body": {
"type": "CHOICE",
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_terminator"
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_terminator"
},
{
"type": "BLANK"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_terminator"
},
{
"type": "BLANK"
}
]
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_terminator"
},
{
"type": "SYMBOL",
"name": "_expression"
}
]
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_terminator"
},
{
"type": "SYMBOL",
"name": "_expression"
}
}
]
]
}
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_terminator"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_terminator"
},
{
"type": "BLANK"
}
]
"type": "BLANK"
}
]
}

2
src/node-types.json generated
View File

@ -1082,7 +1082,7 @@
"fields": {},
"children": {
"multiple": true,
"required": false,
"required": true,
"types": [
{
"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))))))
=====================================
stab clause / edge cases / empty right-hand-side
stab clause / edge cases / empty right-hand-sides
=====================================
fun do
x ->
y ->
end
---
@ -699,8 +700,10 @@ end
(do_block
(stab_clause
(arguments
(identifier))
(body)))))
(identifier)))
(stab_clause
(arguments
(identifier))))))
=====================================
pattern matching