aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--book/src/generated/lang-support.md1
-rw-r--r--languages.toml14
-rw-r--r--runtime/queries/slint/highlights.scm125
-rw-r--r--runtime/queries/slint/indents.scm29
-rw-r--r--runtime/queries/slint/locals.scm3
5 files changed, 172 insertions, 0 deletions
diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index a33b5acc..a79f79f0 100644
--- a/book/src/generated/lang-support.md
+++ b/book/src/generated/lang-support.md
@@ -90,6 +90,7 @@
| scala | ✓ | | ✓ | `metals` |
| scheme | ✓ | | | |
| scss | ✓ | | | `vscode-css-language-server` |
+| slint | ✓ | | ✓ | `slint-lsp` |
| solidity | ✓ | | | `solc` |
| sql | ✓ | | | |
| sshclientconfig | ✓ | | | |
diff --git a/languages.toml b/languages.toml
index 7947104b..287d4534 100644
--- a/languages.toml
+++ b/languages.toml
@@ -1613,3 +1613,17 @@ indent = { tab-width = 4, unit = "\t" }
[[grammar]]
name = "cue"
source = { git = "https://github.com/eonpatapon/tree-sitter-cue", rev = "61843e3beebf19417e4fede4e8be4df1084317ad" }
+
+[[language]]
+name = "slint"
+scope = "source.slint"
+injection-regex = "slint"
+file-types = ["slint"]
+roots = []
+comment-token = "//"
+indent = { tab-width = 4, unit = " " }
+language-server = { command = "slint-lsp", args = [] }
+
+[[grammar]]
+name = "slint"
+source = { git = "https://github.com/jrmoulton/tree-sitter-slint", rev = "0d4dda94f96623302dfc234e06be62a5717f47da" }
diff --git a/runtime/queries/slint/highlights.scm b/runtime/queries/slint/highlights.scm
new file mode 100644
index 00000000..c7773913
--- /dev/null
+++ b/runtime/queries/slint/highlights.scm
@@ -0,0 +1,125 @@
+
+(user_type_identifier) @type
+
+(var_identifier) @variable
+
+(state_identifier) @variable.other.member
+
+(var_identifier
+ (post_identifier) @variable)
+
+(function_identifier) @function
+
+(reference_identifier) @keyword.storage.modifier.ref
+(visibility_modifier) @keyword.storage.modifier
+
+(comment) @comment
+
+(string) @string
+(int_number) @constant.numeric
+(unit_type) @type.builtin
+
+[
+"struct"
+"property"
+"callback"
+"import"
+"from"
+"root"
+"parent"
+"this"
+"for"
+"in"
+"if"
+"else if"
+"else"
+"animate"
+"states"
+"when"
+"in"
+"out"
+"transitions"
+"global"
+] @keyword
+
+[
+ "black"
+ "transparent"
+ "blue"
+ "ease"
+ "ease_in"
+ "ease-in"
+ "ease_in_out"
+ "ease-in-out"
+ "ease_out"
+ "ease-out"
+ "end"
+ "green"
+ "red"
+ "red"
+ "start"
+ "yellow"
+ "true"
+ "false"
+ ] @constant.builtin
+
+"@" @keyword
+
+; ; Punctuation
+[
+ ","
+ "."
+] @punctuation.delimiter
+
+; ; Brackets
+[
+"("
+")"
+"["
+"]"
+"{"
+"}"
+] @punctuation.bracket
+
+[
+"angle"
+"bool"
+"brush"
+; "color" // This causes problems
+"duration"
+"easing"
+"float"
+"image"
+"int"
+"length"
+"percent"
+"physical-length"
+"physical_length"
+"string"
+] @type.builtin
+
+[
+ ":="
+ "!"
+ "-"
+ "+"
+ "*"
+ "/"
+ "&&"
+ "||"
+ ">"
+ "<"
+ ">="
+ "<="
+ "="
+ ":"
+ "+="
+ "-="
+ "*="
+ "/="
+ "?"
+
+ "=>"
+ ] @operator
+
+(ternary_expression [":" "?"] @keyword.control.conditional) \ No newline at end of file
diff --git a/runtime/queries/slint/indents.scm b/runtime/queries/slint/indents.scm
new file mode 100644
index 00000000..253b9c48
--- /dev/null
+++ b/runtime/queries/slint/indents.scm
@@ -0,0 +1,29 @@
+
+; [
+; (struct_definition)
+; (component_definition)
+; ] @indent
+
+[
+(field_declaration_list_body)
+(list_definition_body)
+(struct_field_declaration_list_body)
+] @indent
+
+; [
+; "{"
+; "}"
+; "("
+; ")"
+; (if_statement)
+; "else if"
+; "else"
+; ] @branch
+
+; "{" @indent
+"}" @indent_end
+
+(comment) @auto
+
+(string) @auto
+
diff --git a/runtime/queries/slint/locals.scm b/runtime/queries/slint/locals.scm
new file mode 100644
index 00000000..feba5ebb
--- /dev/null
+++ b/runtime/queries/slint/locals.scm
@@ -0,0 +1,3 @@
+; locals.scm
+
+(component_definition) @local.scope