Constant tree_sitter_svelte::GRAMMAR[][src]

pub const GRAMMAR: &'static str = "/// <reference types=\"tree-sitter-cli/dsl\" />\n\nmodule.exports = grammar({\n  name: \"svelte\",\n\n  externals: ($) => [\n    $._start_tag_name,\n    $._script_start_tag_name,\n    $._style_start_tag_name,\n    $._end_tag_name,\n    $.errorneous_end_tag_name,\n    \"/>\",\n    $._implicit_end_tag,\n    $.raw_text,\n    $.raw_text_expr,\n    $.raw_text_await,\n    $.raw_text_each,\n    $.comment,\n  ],\n\n  extras: () => [/\\s+/],\n\n  rules: {\n    document: ($) => repeat($._node),\n\n    _node: ($) => choice($.script_element, $.style_element, $._statement),\n\n    _statement: ($) =>\n      choice(\n        $.comment,\n        $._text,\n        $.element,\n        $.if_statement,\n        $.key_statement,\n        $.each_statement,\n        $.await_statement\n      ),\n\n    element: ($) =>\n      choice(\n        seq(\n          $.start_tag,\n          repeat($._node),\n          choice($.end_tag, $._implicit_end_tag)\n        ),\n        $.self_closing_tag\n      ),\n\n    start_tag: ($) =>\n      seq(\"<\", alias($._start_tag_name, $.tag_name), repeat($.attribute), \">\"),\n\n    self_closing_tag: ($) =>\n      seq(\"<\", alias($._start_tag_name, $.tag_name), repeat($.attribute), \"/>\"),\n\n    end_tag: ($) => seq(\"</\", alias($._end_tag_name, $.tag_name), \">\"),\n\n    errorneous_end_tag: ($) => seq(\"</\", $.errorneous_end_tag_name, \">\"),\n\n    // -------- script and style element ---------\n    script_element: ($) =>\n      seq(\n        alias($.script_start_tag, $.start_tag),\n        optional($.raw_text),\n        $.end_tag\n      ),\n    script_start_tag: ($) =>\n      seq(\n        \"<\",\n        alias($._script_start_tag_name, $.tag_name),\n        repeat($.attribute),\n        \">\"\n      ),\n\n    style_element: ($) =>\n      seq(\n        alias($.style_start_tag, $.start_tag),\n        optional($.raw_text),\n        $.end_tag\n      ),\n    style_start_tag: ($) =>\n      seq(\n        \"<\",\n        alias($._style_start_tag_name, $.tag_name),\n        repeat($.attribute),\n        \">\"\n      ),\n    // -------------------------------------------\n\n    // ------- svelte attribute --------\n    attribute: ($) =>\n      choice(\n        seq(\n          $.attribute_name,\n          optional(\n            seq(\n              \"=\",\n              choice(\n                $.attribute_value,\n                $.quoted_attribute_value,\n                $.expr_attribute_value\n              )\n            )\n          )\n        ),\n        alias($.expression, $.attribute_name)\n      ),\n\n    attribute_name: () => /[^<>{}\"\'/=\\s]+/,\n    attribute_value: ($) => /[^<>{}\"\'/=\\s]+/,\n    expr_attribute_value: ($) => $.expression,\n    quoted_attribute_value: ($) =>\n      choice(\n        seq(\"\'\", optional(alias(/[^\']+/, $.attribute_value)), \"\'\"),\n        seq(\'\"\', optional(alias(/[^\"]+/, $.attribute_value)), \'\"\')\n      ),\n\n    _text: ($) => choice(alias(/[^<>{}]+/, $.text), $._expression),\n\n    _expression: ($) =>\n      choice($.expression, $.html_expr, alias(\"{}\", $.expression)),\n\n    expression: ($) => seq(\"{\", $.raw_text_expr, \"}\"),\n\n    html_expr: ($) =>\n      seq(\n        \"{\",\n        \"@\",\n        alias(\"html\", $.special_block_keyword),\n        optional($.raw_text_expr),\n        \"}\"\n      ),\n    // ------------ if-else ------------------\n\n    if_statement: ($) =>\n      seq(\n        $.if_start_expr,\n        repeat($._node),\n        choice($.else_if_statement, $.else_statement, $.if_end_expr)\n      ),\n\n    else_if_statement: ($) =>\n      seq(\n        $.else_if_expr,\n        repeat($._node),\n        choice($.if_end_expr, $.else_statement, $.else_if_statement)\n      ),\n\n    else_statement: ($) => seq($.else_expr, repeat($._node), $.if_end_expr),\n\n    if_start_expr: ($) =>\n      seq(\"{\", \"#\", alias(\"if\", $.special_block_keyword), $.raw_text_expr, \"}\"),\n\n    else_expr: ($) =>\n      seq(\"{\", \":\", alias(\"else\", $.special_block_keyword), \"}\"),\n\n    else_if_expr: ($) =>\n      seq(\n        \"{\",\n        \":\",\n        alias(\"else\", $.special_block_keyword),\n        alias(\"if\", $.special_block_keyword),\n        optional($.raw_text_expr),\n        \"}\"\n      ),\n\n    if_end_expr: ($) =>\n      seq(\"{\", \"/\", alias(\"if\", $.special_block_keyword), \"}\"),\n\n    // ----------- each and await ------------\n\n    each_statement: ($) =>\n      seq($.each_start_expr, repeat($._node), $.each_end_expr),\n\n    each_start_expr: ($) =>\n      seq(\n        \"{\",\n        \"#\",\n        alias(\"each\", $.special_block_keyword),\n        choice(\n          $.raw_text_expr,\n          seq($.raw_text_each, alias(\"as\", $.as), $.raw_text_expr)\n        ),\n        \"}\"\n      ),\n\n    each_end_expr: ($) =>\n      seq(\"{\", \"/\", alias(\"each\", $.special_block_keyword), \"}\"),\n\n    await_statement: ($) =>\n      prec.right(\n        seq(\n          $.await_start_expr,\n          repeat($._node),\n          choice($.then_statement, $.catch_statement, $.await_end_expr)\n        )\n      ),\n\n    then_statement: ($) =>\n      seq(\n        $.then_expr,\n        repeat($._node),\n        choice($.await_end_expr, $.catch_statement)\n      ),\n\n    catch_statement: ($) =>\n      seq($.catch_expr, repeat($._node), $.await_end_expr),\n\n    await_start_expr: ($) =>\n      seq(\n        \"{\",\n        \"#\",\n        alias(\"await\", $.special_block_keyword),\n        choice(\n          $.raw_text_expr,\n          seq($.raw_text_await, alias(\"then\", $.then), $.raw_text_expr)\n        ),\n        \"}\"\n      ),\n    then_expr: ($) =>\n      seq(\n        \"{\",\n        \":\",\n        alias(\"then\", $.special_block_keyword),\n        optional($.raw_text_expr),\n        \"}\"\n      ),\n    catch_expr: ($) =>\n      seq(\n        \"{\",\n        \":\",\n        alias(\"catch\", $.special_block_keyword),\n        optional($.raw_text_expr),\n        \"}\"\n      ),\n    await_end_expr: ($) =>\n      seq(\"{\", \"/\", alias(\"await\", $.special_block_keyword), \"}\"),\n\n\n    // ----------------- Key statement ----------------------\n    key_statement: ($) =>\n      seq($.key_start_expr, repeat($._node), $.key_end_expr),\n\n    key_start_expr: ($) =>\n      seq(\n        \"{\",\n        \"#\",\n        alias(\"key\", $.special_block_keyword),\n        choice($.raw_text_expr),\n        \"}\"\n      ),\n\n    key_end_expr: ($) =>\n      seq(\"{\", \"/\", alias(\"key\", $.special_block_keyword), \"}\"),\n  },\n});\n";

The source of the JavaScript tree-sitter grammar description.