diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index a33b5acc3..a79f79f02 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 7947104bd..287d45348 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 000000000..c7773913d --- /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 000000000..253b9c489 --- /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 000000000..feba5ebb0 --- /dev/null +++ b/runtime/queries/slint/locals.scm @@ -0,0 +1,3 @@ +; locals.scm + +(component_definition) @local.scope