From b65694f102da9b3d15d241b6f121b4019936fab6 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Wed, 31 Jan 2024 21:32:17 +0100 Subject: [PATCH 1/2] 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 | 9 +- runtime/queries/slint/textobjects.scm | 35 +++ 7 files changed, 249 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 ddd480536dc3..279acc4fbae8 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 11afea0cad29..afbbbbe1537c 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 ae9e587fd468..b05b9d9750a4 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? @_macro_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? @_macro_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 c0ef3dd889f4..31d192f3ee8e 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 4b5ce41b8530..189f8a0e5ac4 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 a115f0c69f4e..06601b05dabc 100644 --- a/runtime/queries/slint/locals.scm +++ b/runtime/queries/slint/locals.scm @@ -1,3 +1,6 @@ -; locals.scm - -(component_item) @local.scope +[ + (component) + (component_definition) + (function_definition) + (imperative_block) +] @local.scope diff --git a/runtime/queries/slint/textobjects.scm b/runtime/queries/slint/textobjects.scm new file mode 100644 index 000000000000..7e2f36096c71 --- /dev/null +++ b/runtime/queries/slint/textobjects.scm @@ -0,0 +1,35 @@ +(function_definition + (imperative_block) @funtion.inside) @function.around + +(callback_event + (imperative_block) @function.inside) @function.around + +(property + (imperative_block) @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 + +(typed_identifier + name: (_) @parameter.inside) @parameter.around + +(callback + arguments: (_) @parameter.inside) + +(string_value + "\"" . (_) @text.inside . "\"") @text.around + From f505df2de5634dc324773f54a6d426fcd314614d Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Wed, 7 Feb 2024 18:46:49 +0100 Subject: [PATCH 2/2] slint: Port over suggestions from nvim review --- languages.toml | 2 +- runtime/queries/slint/highlights.scm | 172 ++++++++++++++++----------- 2 files changed, 102 insertions(+), 72 deletions(-) diff --git a/languages.toml b/languages.toml index afbbbbe1537c..bad221299b31 100644 --- a/languages.toml +++ b/languages.toml @@ -2139,7 +2139,7 @@ language-servers = [ "slint-lsp" ] [[grammar]] name = "slint" -source = { git = "https://github.com/slint-ui/tree-sitter-slint", rev = "fcdc1d5a302fa2792d941d77ce5525ff4f3b4fca" } +source = { git = "https://github.com/slint-ui/tree-sitter-slint", rev = "15618215b79b9db08f824a5c97a12d073dcc1c00" } [[language]] name = "task" diff --git a/runtime/queries/slint/highlights.scm b/runtime/queries/slint/highlights.scm index 31d192f3ee8e..06d82a413ca7 100644 --- a/runtime/queries/slint/highlights.scm +++ b/runtime/queries/slint/highlights.scm @@ -2,6 +2,9 @@ ; Different types: (string_value) @string +(bool_value) @constant.builtin.boolean + +; Constants (escape_sequence) @constant.character.escape @@ -12,30 +15,26 @@ (easing_kind_identifier) ] @constant.builtin -(bool_value) @constant.builtin.boolean - -(int_value) @constant.numeric.integer +[ + (int_value) + (physical_length_value) +] @constant.numeric.integer [ (float_value) (percent_value) (length_value) - (physical_length_value) (duration_value) (angle_value) (relative_font_size_value) ] @constant.numeric.float -(simple_identifier) @variable.other - (purity) @keyword.storage.modifier (function_visibility) @keyword.storage.modifier (property_visibility) @keyword.storage.modifier -(animate_option_identifier) @keyword - (builtin_type_identifier) @type.builtin (reference_identifier) @variable.builtin @@ -49,25 +48,21 @@ (user_type_identifier) @type -[ - (comparison_operator) - (mult_prec_operator) - (add_prec_operator) - (unary_prec_operator) - (assignment_prec_operator) -] @operator - ; Functions and callbacks (argument) @variable.parameter -(function_call) @function +(function_call + name: (_) @function.call) ; definitions (callback name: (_) @function) -(component - id: (_) @variable) +(callback_alias + name: (_) @function) + +(callback_event + name: (simple_identifier) @function.call) (enum_definition name: (_) @type.enum) @@ -75,45 +70,34 @@ (function_definition name: (_) @function) -(property - name: (_) @variable.other.member) - (struct_definition name: (_) @type) -(typed_identifier - name: (_) @variable) - (typed_identifier type: (_) @type) +; Operators (binary_expression op: (_) @operator) -":=" @operator - (unary_expression op: (_) @operator) -(if_statement - "if" @keyword.conditional) - -(if_statement - ":" @punctuation.delimiter) - -(if_expr - [ - "if" - "else" - ] @keyword.conditional) +[ + (comparison_operator) + (mult_prec_operator) + (add_prec_operator) + (unary_prec_operator) + (assignment_prec_operator) +] @operator -(ternary_expression - [ - "?" - ":" - ] @keyword.conditional) +[ + ":=" + "=>" + "->" + "<=>" +] @operator -; Keywords: [ ";" "." @@ -129,23 +113,85 @@ "}" ] @punctuation.bracket +(property + [ + "<" + ">" + ] @punctuation.bracket) + +; Properties, constants and variables +(component + id: (simple_identifier) @constant) + +(property + name: (simple_identifier) @variable) + +(binding_alias + name: (simple_identifier) @variable) + +(binding + name: (simple_identifier) @variable) + +(struct_block + (simple_identifier) @variable.other.member) + +(anon_struct_block + (simple_identifier) @variable.other.member) + +(property_assignment + property: (simple_identifier) @variable) + +(states_definition + name: (simple_identifier) @variable) + +(callback + name: (simple_identifier) @variable) + +(typed_identifier + name: (_) @variable) + +(simple_indexed_identifier + (simple_identifier) @variable) + +(expression + (simple_identifier) @variable) + +; Attributes [ (linear_gradient_identifier) (radial_gradient_identifier) (radial_gradient_kind) ] @attribute -(export) @keyword.import +(image_call + "@image-url" @attribute) + +(tr + "@tr" @attribute) + +; Keywords +(animate_option_identifier) @keyword + +(export) @keyword.control.import -(animate_option - ":" @punctuation.delimiter) +(if_statement + "if" @keyword.control.conditional) + +(if_expr + [ + "if" + "else" + ] @keyword.control.conditional) + +(ternary_expression + [ + "?" + ":" + ] @keyword.control.conditional) (animate_statement "animate" @keyword) -(assignment_expr - name: (_) @variable.other.member) - (callback "callback" @keyword.function) @@ -162,41 +208,28 @@ [ "for" "in" - ] @keyword.repeat) - -(for_loop - ":" @punctuation.delimiter) + ] @keyword.control.repeat) (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) + "return" @keyword.control.return) (import_statement [ "import" "from" - ] @keyword.import) + ] @keyword.control.import) (import_type - "as" @keyword.import) + "as" @keyword.control.import) (property - [ - "property" - "<" - ">" - ] @keyword.storage.type) + "property" @keyword.storage.type) (states_definition [ @@ -207,9 +240,6 @@ (struct_definition "struct" @keyword.storage.type) -(tr - "@tr" @attribute) - (transitions_definition [ "transitions"