improve tree-sitter

This commit is contained in:
csh
2025-10-26 22:51:27 +08:00
parent 9385aaf2c1
commit dbccd5b605
9 changed files with 270641 additions and 270588 deletions
+98 -68
View File
@@ -130,13 +130,28 @@ module.exports = grammar({
),
var_declaration: ($) =>
seq(kw("var"), $._variable_declaration, optional($._type_clause), optional($._initial_value)),
seq(
kw("var"),
$._variable_declaration,
optional($._type_clause),
optional($._initial_value),
),
static_declaration: ($) =>
seq(kw("static"), $._variable_declaration, optional($._type_clause), optional($._initial_value)),
seq(
kw("static"),
$._variable_declaration,
optional($._type_clause),
optional($._initial_value),
),
global_declaration: ($) =>
seq(kw("global"), $._variable_declaration, optional($._type_clause), optional($._initial_value)),
seq(
kw("global"),
$._variable_declaration,
optional($._type_clause),
optional($._initial_value),
),
_initial_value: ($) =>
seq(":=", field("initial_value", $._right_hand_side)),
@@ -177,14 +192,23 @@ module.exports = grammar({
// inherited_statement: ($) => seq($._inherited_expression, kSemicolon),
_built_in_expression: ($) =>
choice($.echo_expression, $.raise_expression, $.new_expression, $.inherited_expression),
choice(
$.echo_expression,
$.raise_expression,
$.new_expression,
$.inherited_expression,
),
echo_expression: ($) =>
prec.left(1, seq(kw("echo"), sep1(field("argument", $.expression), ","))),
raise_expression: ($) => seq(kw("raise"), field("exception", $.expression)),
inherited_expression: ($) => prec.left(0, seq(kw("inherited"), field("class", optional($.expression)))),
inherited_expression: ($) =>
prec.left(
0,
seq(kw("inherited"), field("class", optional($.expression))),
),
new_expression: ($) => seq(kw("new"), field("class", $.expression)),
@@ -323,24 +347,26 @@ module.exports = grammar({
kPrec.kComparsion,
seq(
field("left", $.expression),
field("operator", choice(
"=",
"<>",
">",
">=",
"<",
"<=",
".=",
".<>",
".>",
".>=",
".<",
".<=",
$.in,
kw("is"),
kw("like"),
),
),
field(
"operator",
choice(
"=",
"<>",
">",
">=",
"<",
"<=",
".=",
".<>",
".>",
".>=",
".<",
".<=",
$.in,
kw("is"),
kw("like"),
),
),
field("right", $.expression),
),
),
@@ -600,7 +626,7 @@ module.exports = grammar({
seq(
kw("function"),
$._parameter_signature,
field("return_type", optional($._type_clause)),
optional(field("return_type", $._type_clause)),
optional(kSemicolon),
field("body", $.block_suite),
),
@@ -614,12 +640,7 @@ module.exports = grammar({
),
_left_hand_side: ($) =>
choice(
$._identifier_like,
$.attribute,
$.subscript,
$.unpack_pattern,
),
choice($._identifier_like, $.attribute, $.subscript, $.unpack_pattern),
_right_hand_side: ($) =>
choice(
@@ -929,7 +950,8 @@ module.exports = grammar({
),
),
_parenthesized_expression: ($) => seq("(", optional($._assignable_expression), ")"),
_parenthesized_expression: ($) =>
seq("(", optional($._assignable_expression), ")"),
array: ($) =>
prec(
@@ -985,15 +1007,7 @@ module.exports = grammar({
),
parenthesized_array: ($) =>
prec(
1,
seq(
"(",
sep1($.array_element, ","),
optional(","),
")",
),
),
prec(1, seq("(", sep1($.array_element, ","), optional(","), ")")),
line_comment: (_) => token(seq("//", /.*/)),
@@ -1004,11 +1018,7 @@ module.exports = grammar({
if_statement: ($) =>
prec.right(
kPrec.kIf,
seq(
$.if_clause,
repeat($.else_if_clause),
optional($.else_clause),
),
seq($.if_clause, repeat($.else_if_clause), optional($.else_clause)),
),
if_clause: ($) =>
@@ -1115,21 +1125,23 @@ module.exports = grammar({
anonymous_function_statement: ($) =>
seq($.anonymous_function_expression, optional(kSemicolon)),
function_declaration_statement: ($) =>
_function_header: ($) =>
seq(
kw("function"),
field("name", $.identifier),
$._parameter_signature,
optional(field("return_type", $._type_clause)),
),
function_declaration_statement: ($) =>
seq(
$._function_header,
kSemicolon,
),
function_definition_statement: ($) =>
seq(
kw("function"),
field("name", $.identifier),
$._parameter_signature,
field("return_type", optional($._type_clause)),
$._function_header,
optional(kSemicolon),
field("body", $.block_suite),
optional(kSemicolon),
@@ -1137,10 +1149,7 @@ module.exports = grammar({
function_definition_with_overload_statement: ($) =>
seq(
kw("function"),
field("name", $.identifier),
$._parameter_signature,
field("return_type", optional($._type_clause)),
$._function_header,
kSemicolon,
kw("overload"),
kSemicolon,
@@ -1180,7 +1189,10 @@ module.exports = grammar({
")",
),
class_body: ($) => repeat1($.class_member),
class_body: ($) => choice(
$.uses_statement,
repeat1($.class_member),
),
class_member: ($) =>
choice(
@@ -1191,7 +1203,6 @@ module.exports = grammar({
$._method_declaration,
$.property_declaration,
),
$.uses_statement,
),
access_modifier: (_) =>
@@ -1209,13 +1220,23 @@ module.exports = grammar({
reference_modifier: (_) => choice(kw("weakref"), kw("autoref")),
member_variable: ($) => choice($.static_member_variable, $.field_member_variable),
member_variable: ($) =>
choice($.static_member_variable, $.field_member_variable),
static_member_variable: ($) =>
seq(kw("static"), $._variable_declaration, optional($._type_clause), optional(seq("=", field("initial_value", $._right_hand_side)))),
seq(
kw("static"),
$._variable_declaration,
optional($._type_clause),
optional(seq("=", field("initial_value", $._right_hand_side))),
),
field_member_variable: ($) =>
seq($._variable_declaration, optional($._type_clause), optional(seq("=", field("initial_value", $._right_hand_side)))),
seq(
$._variable_declaration,
optional($._type_clause),
optional(seq("=", field("initial_value", $._right_hand_side))),
),
_method_declaration: ($) =>
choice(
@@ -1283,7 +1304,8 @@ module.exports = grammar({
kSemicolon,
),
_property_index: ($) => seq(kw("index"), field("index", choice($.number, $.string))),
_property_index: ($) =>
seq(kw("index"), field("index", choice($.number, $.string))),
property_accessors: ($) =>
choice(
@@ -1298,10 +1320,20 @@ module.exports = grammar({
_write_only_accessor: ($) => seq(kw("write"), field("write", $.identifier)),
_read_write_accessor: ($) =>
seq(kw("read"), field("read", $.identifier), kw("write"), field("write", $.identifier)),
seq(
kw("read"),
field("read", $.identifier),
kw("write"),
field("write", $.identifier),
),
_write_read_accessor: ($) =>
seq(kw("write"), field("write", $.identifier), kw("read"), field("read", $.identifier)),
seq(
kw("write"),
field("write", $.identifier),
kw("read"),
field("read", $.identifier),
),
// 类外方法实现
external_method_statement: ($) =>
@@ -1382,7 +1414,7 @@ module.exports = grammar({
),
_operator_method: ($) =>
choice($._operator_method, $._operator_method_with_modifier),
choice($._operator_overload_method, $._operator_method_with_modifier),
_normal_method: ($) =>
seq(
@@ -1396,7 +1428,7 @@ module.exports = grammar({
optional(kSemicolon),
),
_operator_method: ($) =>
_operator_overload_method: ($) =>
seq(
kw("function"),
kw("operator"),
@@ -1447,8 +1479,7 @@ module.exports = grammar({
".",
),
interface_section: ($) =>
seq(kw("interface"), repeat($._statement)),
interface_section: ($) => seq(kw("interface"), repeat($._statement)),
implementation_section: ($) =>
seq(kw("implementation"), repeat($._statement)),
@@ -1456,8 +1487,7 @@ module.exports = grammar({
initialization_section: ($) =>
seq(kw("initialization"), repeat($._statement)),
finalization_section: ($) =>
seq(kw("finalization"), repeat($._statement)),
finalization_section: ($) => seq(kw("finalization"), repeat($._statement)),
uses_statement: ($) =>
seq(kw("uses"), sep1(field("unit", $.identifier), ","), kSemicolon),