summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--book/src/generated/lang-support.md2
-rw-r--r--languages.toml2
-rw-r--r--runtime/queries/rust/injections.scm20
-rw-r--r--runtime/queries/slint/highlights.scm339
-rw-r--r--runtime/queries/slint/indents.scm17
-rw-r--r--runtime/queries/slint/locals.scm9
-rw-r--r--runtime/queries/slint/textobjects.scm35
7 files changed, 278 insertions, 146 deletions
diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index ddd48053..279acc4f 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 11afea0c..bad22129 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 = "15618215b79b9db08f824a5c97a12d073dcc1c00" }
[[language]]
name = "task"
diff --git a/runtime/queries/rust/injections.scm b/runtime/queries/rust/injections.scm
index ae9e587f..b05b9d97 100644
--- a/runtime/queries/rust/injections.scm
+++ b/runtime/queries/rust/injections.scm
@@ -2,12 +2,30 @@
(#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")
(#set! injection.include-children))
diff --git a/runtime/queries/slint/highlights.scm b/runtime/queries/slint/highlights.scm
index c0ef3dd8..06d82a41 100644
--- a/runtime/queries/slint/highlights.scm
+++ b/runtime/queries/slint/highlights.scm
@@ -1,122 +1,109 @@
+(comment) @comment
+
+; Different types:
+(string_value) @string
+(bool_value) @constant.builtin.boolean
+
+; Constants
+
+(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)
+[
+ (int_value)
+ (physical_length_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)
+ (duration_value)
+ (angle_value)
+ (relative_font_size_value)
+] @constant.numeric.float
-(call_expression
- function: (identifier) @function)
-(call_expression
- function: (field_expression
- field: (identifier) @function))
+(purity) @keyword.storage.modifier
-(vis) @keyword.control.import
+(function_visibility) @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)
+(property_visibility) @keyword.storage.modifier
-(comment) @comment
+(builtin_type_identifier) @type.builtin
-(string_literal) @string
-(int_literal) @constant.numeric.integer
-(float_literal) @constant.numeric.float
+(reference_identifier) @variable.builtin
-[
- "in"
- "in-out"
- "for"
-] @keyword.control.repeat
+(type
+ [
+ (type_list)
+ (user_type_identifier)
+ (anon_struct_block)
+ ]) @type
-[
- "import"
- "export"
- "from"
-] @keyword.control.import
+(user_type_identifier) @type
-[
- "if"
- "else"
- "when"
-] @keyword.control.conditional
+; Functions and callbacks
+(argument) @variable.parameter
-[
- "struct"
- "property"
-] @keyword.storage.type
+(function_call
+ name: (_) @function.call)
-[
- "global"
-] @keyword.storage.modifier
+; definitions
+(callback
+ name: (_) @function)
+(callback_alias
+ name: (_) @function)
-[
- "root"
- "parent"
- "duration"
- "easing"
-] @variable.builtin
+(callback_event
+ name: (simple_identifier) @function.call)
+(enum_definition
+ name: (_) @type.enum)
-[
- "callback"
- "animate"
- "states"
- "out"
- "transitions"
- "component"
- "inherits"
-] @keyword
+(function_definition
+ name: (_) @function)
-[
- "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
+(struct_definition
+ name: (_) @type)
+
+(typed_identifier
+ type: (_) @type)
+
+; Operators
+(binary_expression
+ op: (_) @operator)
+
+(unary_expression
+ op: (_) @operator)
[
- "true"
- "false"
-] @constant.builtin.boolean
+ (comparison_operator)
+ (mult_prec_operator)
+ (add_prec_operator)
+ (unary_prec_operator)
+ (assignment_prec_operator)
+] @operator
-"@" @keyword
+[
+ ":="
+ "=>"
+ "->"
+ "<=>"
+] @operator
-; ; Punctuation
[
- ","
- "."
";"
- ":"
+ "."
+ ","
] @punctuation.delimiter
-; ; Brackets
[
"("
")"
@@ -126,46 +113,136 @@
"}"
] @punctuation.bracket
-(define_property ["<" ">"] @punctuation.bracket)
+(property
+ [
+ "<"
+ ">"
+ ] @punctuation.bracket)
-[
- "angle"
- "bool"
- "brush"
- "color"
- "duration"
- "easing"
- "float"
- "image"
- "int"
- "length"
- "percent"
- "physical-length"
- "physical_length"
- "string"
-] @type.builtin
+; 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
[
- ":="
- "<=>"
- "!"
- "-"
- "+"
- "*"
- "/"
- "&&"
- "||"
- ">"
- "<"
- ">="
- "<="
- "="
- ":"
- "+="
- "-="
- "*="
- "/="
- "?"
- "=>" ] @operator
-
-(ternary_expression [":" "?"] @keyword.control.conditional) \ No newline at end of file
+ (linear_gradient_identifier)
+ (radial_gradient_identifier)
+ (radial_gradient_kind)
+] @attribute
+
+(image_call
+ "@image-url" @attribute)
+
+(tr
+ "@tr" @attribute)
+
+; Keywords
+(animate_option_identifier) @keyword
+
+(export) @keyword.control.import
+
+(if_statement
+ "if" @keyword.control.conditional)
+
+(if_expr
+ [
+ "if"
+ "else"
+ ] @keyword.control.conditional)
+
+(ternary_expression
+ [
+ "?"
+ ":"
+ ] @keyword.control.conditional)
+
+(animate_statement
+ "animate" @keyword)
+
+(callback
+ "callback" @keyword.function)
+
+(component_definition
+ [
+ "component"
+ "inherits"
+ ] @keyword.storage.type)
+
+(enum_definition
+ "enum" @keyword.storage.type)
+
+(for_loop
+ [
+ "for"
+ "in"
+ ] @keyword.control.repeat)
+
+(function_definition
+ "function" @keyword.function)
+
+(global_definition
+ "global" @keyword.storage.type)
+
+(imperative_block
+ "return" @keyword.control.return)
+
+(import_statement
+ [
+ "import"
+ "from"
+ ] @keyword.control.import)
+
+(import_type
+ "as" @keyword.control.import)
+
+(property
+ "property" @keyword.storage.type)
+
+(states_definition
+ [
+ "states"
+ "when"
+ ] @keyword)
+
+(struct_definition
+ "struct" @keyword.storage.type)
+
+(transitions_definition
+ [
+ "transitions"
+ "in"
+ "out"
+ ] @keyword)
diff --git a/runtime/queries/slint/indents.scm b/runtime/queries/slint/indents.scm
index 4b5ce41b..189f8a0e 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 a115f0c6..06601b05 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 00000000..7e2f3609
--- /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
+