From 745c8d2f1c59febfc91f438ad7a103a26bac9150 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Wed, 31 Jan 2024 21:32:17 +0100 Subject: [PATCH] slint: Update treesitter parser and queries --- book/src/generated/lang-support.md | 2 +- languages.toml | 2 +- runtime/queries/rust/injections.scm | 20 +- runtime/queries/slint/highlights.scm | 311 +++++++++++++++----------- runtime/queries/slint/indents.scm | 17 +- runtime/queries/slint/locals.scm | 6 +- runtime/queries/slint/textobjects.scm | 35 +++ 7 files changed, 246 insertions(+), 147 deletions(-) create mode 100644 runtime/queries/slint/textobjects.scm diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index ddd480536dc35..279acc4fbae8f 100644 --- a/book/src/generated/lang-support.md +++ b/book/src/generated/lang-support.md @@ -148,7 +148,7 @@ | scala | ✓ | ✓ | ✓ | `metals` | | scheme | ✓ | | ✓ | | | scss | ✓ | | | `vscode-css-language-server` | -| slint | ✓ | | ✓ | `slint-lsp` | +| slint | ✓ | ✓ | ✓ | `slint-lsp` | | smali | ✓ | | ✓ | | | smithy | ✓ | | | `cs` | | sml | ✓ | | | | diff --git a/languages.toml b/languages.toml index 11afea0cad297..afbbbbe1537c6 100644 --- a/languages.toml +++ b/languages.toml @@ -2139,7 +2139,7 @@ language-servers = [ "slint-lsp" ] [[grammar]] name = "slint" -source = { git = "https://github.com/jrmoulton/tree-sitter-slint", rev = "00c8a2d3645766f68c0d0460086c0a994e5b0d85" } +source = { git = "https://github.com/slint-ui/tree-sitter-slint", rev = "fcdc1d5a302fa2792d941d77ce5525ff4f3b4fca" } [[language]] name = "task" diff --git a/runtime/queries/rust/injections.scm b/runtime/queries/rust/injections.scm index ae9e587fd4687..49833e39f4dea 100644 --- a/runtime/queries/rust/injections.scm +++ b/runtime/queries/rust/injections.scm @@ -2,11 +2,29 @@ (#set! injection.language "comment")) ((macro_invocation - macro: (identifier) @_html (#eq? @_html "html") + macro: + [ + (scoped_identifier + name: (_) @_macro_name) + (identifier) @_macro_name + ] (token_tree) @injection.content) + (#eq? @_macros_name "html") (#set! injection.language "html") (#set! injection.include-children)) +((macro_invocation + macro: + [ + (scoped_identifier + name: (_) @_macro_name) + (identifier) @_macro_name + ] + (token_tree) @injection.content) + (#eq? @_macros_name "slint") + (#set! injection.language "slint") + (#set! injection.include-children)) + ((macro_invocation (token_tree) @injection.content) (#set! injection.language "rust") diff --git a/runtime/queries/slint/highlights.scm b/runtime/queries/slint/highlights.scm index c0ef3dd889f4a..31d192f3ee8e3 100644 --- a/runtime/queries/slint/highlights.scm +++ b/runtime/queries/slint/highlights.scm @@ -1,122 +1,125 @@ +(comment) @comment + +; Different types: +(string_value) @string + +(escape_sequence) @constant.character.escape + +(color_value) @constant -(identifier) @variable [ - (type_identifier) - (units) -]@type + (children_identifier) + (easing_kind_identifier) +] @constant.builtin -(array_literal - (identifier) @type) +(bool_value) @constant.builtin.boolean + +(int_value) @constant.numeric.integer -(function_identifier) @function [ - (image_macro) - (children_macro) - (radial_grad_macro) - (linear_grad_macro) -] @function.macro + (float_value) + (percent_value) + (length_value) + (physical_length_value) + (duration_value) + (angle_value) + (relative_font_size_value) +] @constant.numeric.float -(call_expression - function: (identifier) @function) -(call_expression - function: (field_expression - field: (identifier) @function)) +(simple_identifier) @variable.other -(vis) @keyword.control.import +(purity) @keyword.storage.modifier -(transition_statement state: (identifier) @variable.other.member) -(state_expression state: (identifier) @variable.other.member) -(struct_block_definition field: (identifier) @variable.other.member) -(assign_property (identifier) @attribute) +(function_visibility) @keyword.storage.modifier -(comment) @comment +(property_visibility) @keyword.storage.modifier -(string_literal) @string -(int_literal) @constant.numeric.integer -(float_literal) @constant.numeric.float +(animate_option_identifier) @keyword -[ - "in" - "in-out" - "for" -] @keyword.control.repeat +(builtin_type_identifier) @type.builtin -[ - "import" - "export" - "from" -] @keyword.control.import +(reference_identifier) @variable.builtin -[ - "if" - "else" - "when" -] @keyword.control.conditional +(type + [ + (type_list) + (user_type_identifier) + (anon_struct_block) + ]) @type -[ - "struct" - "property" -] @keyword.storage.type +(user_type_identifier) @type [ - "global" -] @keyword.storage.modifier + (comparison_operator) + (mult_prec_operator) + (add_prec_operator) + (unary_prec_operator) + (assignment_prec_operator) +] @operator +; Functions and callbacks +(argument) @variable.parameter -[ - "root" - "parent" - "duration" - "easing" -] @variable.builtin +(function_call) @function +; definitions +(callback + name: (_) @function) -[ - "callback" - "animate" - "states" - "out" - "transitions" - "component" - "inherits" -] @keyword +(component + id: (_) @variable) -[ - "black" - "transparent" - "blue" - "ease" - "ease_in" - "ease-in" - "ease_in_out" - "ease-in-out" - "ease_out" - "ease-out" - "end" - "green" - "red" - "start" - "yellow" - "white" - "gray" - ] @constant.builtin +(enum_definition + name: (_) @type.enum) -[ - "true" - "false" -] @constant.builtin.boolean +(function_definition + name: (_) @function) + +(property + name: (_) @variable.other.member) + +(struct_definition + name: (_) @type) + +(typed_identifier + name: (_) @variable) + +(typed_identifier + type: (_) @type) + +(binary_expression + op: (_) @operator) -"@" @keyword +":=" @operator -; ; Punctuation +(unary_expression + op: (_) @operator) + +(if_statement + "if" @keyword.conditional) + +(if_statement + ":" @punctuation.delimiter) + +(if_expr + [ + "if" + "else" + ] @keyword.conditional) + +(ternary_expression + [ + "?" + ":" + ] @keyword.conditional) + +; Keywords: [ - "," - "." ";" - ":" + "." + "," ] @punctuation.delimiter -; ; Brackets [ "(" ")" @@ -126,46 +129,90 @@ "}" ] @punctuation.bracket -(define_property ["<" ">"] @punctuation.bracket) - [ - "angle" - "bool" - "brush" - "color" - "duration" - "easing" - "float" - "image" - "int" - "length" - "percent" - "physical-length" - "physical_length" - "string" -] @type.builtin + (linear_gradient_identifier) + (radial_gradient_identifier) + (radial_gradient_kind) +] @attribute -[ - ":=" - "<=>" - "!" - "-" - "+" - "*" - "/" - "&&" - "||" - ">" - "<" - ">=" - "<=" - "=" - ":" - "+=" - "-=" - "*=" - "/=" - "?" - "=>" ] @operator - -(ternary_expression [":" "?"] @keyword.control.conditional) \ No newline at end of file +(export) @keyword.import + +(animate_option + ":" @punctuation.delimiter) + +(animate_statement + "animate" @keyword) + +(assignment_expr + name: (_) @variable.other.member) + +(callback + "callback" @keyword.function) + +(component_definition + [ + "component" + "inherits" + ] @keyword.storage.type) + +(enum_definition + "enum" @keyword.storage.type) + +(for_loop + [ + "for" + "in" + ] @keyword.repeat) + +(for_loop + ":" @punctuation.delimiter) + +(function_definition + "function" @keyword.function) + +(function_call + name: (_) @function.call) + +(global_definition + "global" @keyword.storage.type) + +(image_call + "@image-url" @attribute) + +(imperative_block + "return" @keyword.return) + +(import_statement + [ + "import" + "from" + ] @keyword.import) + +(import_type + "as" @keyword.import) + +(property + [ + "property" + "<" + ">" + ] @keyword.storage.type) + +(states_definition + [ + "states" + "when" + ] @keyword) + +(struct_definition + "struct" @keyword.storage.type) + +(tr + "@tr" @attribute) + +(transitions_definition + [ + "transitions" + "in" + "out" + ] @keyword) diff --git a/runtime/queries/slint/indents.scm b/runtime/queries/slint/indents.scm index 4b5ce41b85305..189f8a0e5ac44 100644 --- a/runtime/queries/slint/indents.scm +++ b/runtime/queries/slint/indents.scm @@ -1,12 +1,11 @@ [ - (comp_body) - (state_statement) - (transition_statement) - (handler_body) - (consequence_body) - (global_single) + (anon_struct_block) + (assignment_block) + (block) + (enum_block) + (global_block) + (imperative_block) + (struct_block) ] @indent -[ - "}" -] @outdent +"}" @outdent diff --git a/runtime/queries/slint/locals.scm b/runtime/queries/slint/locals.scm index a115f0c69f4e1..99ebbfe400d66 100644 --- a/runtime/queries/slint/locals.scm +++ b/runtime/queries/slint/locals.scm @@ -1,3 +1,3 @@ -; locals.scm - -(component_item) @local.scope +[ + (component_item) +] @local.scope diff --git a/runtime/queries/slint/textobjects.scm b/runtime/queries/slint/textobjects.scm new file mode 100644 index 0000000000000..261c2e1ed99d5 --- /dev/null +++ b/runtime/queries/slint/textobjects.scm @@ -0,0 +1,35 @@ +(function_definiiton + (iterative_block @funtion.inside)) @function.around + +(callabck_event + (iterative_block @function.inside)) @function.around + +(property + (binding @function.inside)) @function.around + +(struct_definition + (struct_block) @class.inside)) @class.around + +(enum_definition + (enum_block) @class.inside)) @class.around + +(global_definition + (global_block) @class.inside)) @class.around + +(component_definition) + (block) @class.inside)) @class.around + +(component_definition) + (block) @class.inside)) @class.around + +(comment) @comment.around + +(type_identifier + name: (_) @parameter.inside) @parameter.around + +(callback + arguments: (_) @parameter.inside) + +(string_value + "\"" . (_) @text.inside. "\"") @text.around +