From 19dff5c3a4c1f41436cc11372e5e7dcbfe197112 Mon Sep 17 00:00:00 2001
From: Erasin Wang
Date: Sun, 13 Aug 2023 15:18:57 +0800
Subject: Update slint grammar (#7893)

---
 runtime/queries/slint/highlights.scm | 190 ++++++++++++++++++++++-------------
 runtime/queries/slint/indents.scm    |  11 +-
 runtime/queries/slint/injections.scm |   2 +
 runtime/queries/slint/locals.scm     |   2 +-
 4 files changed, 127 insertions(+), 78 deletions(-)
 create mode 100644 runtime/queries/slint/injections.scm

(limited to 'runtime/queries/slint')

diff --git a/runtime/queries/slint/highlights.scm b/runtime/queries/slint/highlights.scm
index c7773913..c0ef3dd8 100644
--- a/runtime/queries/slint/highlights.scm
+++ b/runtime/queries/slint/highlights.scm
@@ -1,105 +1,153 @@
 
-(user_type_identifier) @type
+(identifier) @variable
+[
+  (type_identifier) 
+  (units)
+]@type
 
-(var_identifier) @variable
+(array_literal 
+  (identifier) @type)
 
-(state_identifier) @variable.other.member
+(function_identifier) @function
+[
+  (image_macro)
+  (children_macro)
+  (radial_grad_macro)
+  (linear_grad_macro)
+] @function.macro
 
-(var_identifier
-  (post_identifier) @variable)
+(call_expression
+  function: (identifier) @function)
+(call_expression
+  function: (field_expression
+    field: (identifier) @function))
 
-(function_identifier) @function
+(vis) @keyword.control.import
 
-(reference_identifier) @keyword.storage.modifier.ref
-(visibility_modifier) @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)
 
 (comment) @comment
 
-(string) @string
-(int_number) @constant.numeric
-(unit_type) @type.builtin
+(string_literal) @string
+(int_literal) @constant.numeric.integer
+(float_literal) @constant.numeric.float
+
+[
+  "in"
+  "in-out"
+  "for"
+] @keyword.control.repeat
+
+[
+  "import"
+  "export"
+  "from"
+] @keyword.control.import
+
+[
+  "if"
+  "else"
+  "when"
+] @keyword.control.conditional
+
+[
+  "struct"
+  "property"
+] @keyword.storage.type
+
+[
+  "global"
+] @keyword.storage.modifier
+
 
 [
-"struct"
-"property"
-"callback"
-"import"
-"from"
-"root"
-"parent"
-"this"
-"for"
-"in"
-"if"
-"else if"
-"else"
-"animate"
-"states"
-"when"
-"in"
-"out"
-"transitions"
-"global"
+  "root"
+  "parent"
+  "duration"
+  "easing"
+] @variable.builtin
+
+
+[
+  "callback"
+  "animate"
+  "states"
+  "out"
+  "transitions"
+  "component"
+  "inherits"
 ] @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"
+  "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
 
+[
+  "true"
+  "false"
+] @constant.builtin.boolean
+
 "@" @keyword
 
 ; ; Punctuation
 [
   ","
   "."
+  ";"
+  ":"
 ] @punctuation.delimiter
 
 ; ; Brackets
 [
-"("
-")"
-"["
-"]"
-"{"
-"}"
+  "("
+  ")"
+  "["
+  "]"
+  "{"
+  "}"
 ] @punctuation.bracket
 
+(define_property ["<" ">"] @punctuation.bracket)
+
 [
-"angle"
-"bool"
-"brush"
-; "color" // This causes problems
-"duration"
-"easing"
-"float"
-"image"
-"int"
-"length"
-"percent"
-"physical-length"
-"physical_length"
-"string"
+  "angle"
+  "bool"
+  "brush"
+  "color" 
+  "duration"
+  "easing"
+  "float"
+  "image"
+  "int"
+  "length"
+  "percent"
+  "physical-length"
+  "physical_length"
+  "string"
 ] @type.builtin
 
 [
  ":="
+ "<=>"
  "!"
  "-"
  "+"
@@ -118,8 +166,6 @@
  "*="
  "/="
  "?"
-
- "=>"
- ] @operator
+ "=>" ] @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
index 37bbd536..4b5ce41b 100644
--- a/runtime/queries/slint/indents.scm
+++ b/runtime/queries/slint/indents.scm
@@ -1,11 +1,12 @@
 [
-  (field_declaration_list_body) 
-  (list_definition_body) 
-  (struct_field_declaration_list_body)
+  (comp_body) 
+  (state_statement)
+  (transition_statement)
+  (handler_body)
+  (consequence_body)
+  (global_single)
 ] @indent
 
 [
   "}"
-  "]"
-  ")"
 ] @outdent
diff --git a/runtime/queries/slint/injections.scm b/runtime/queries/slint/injections.scm
new file mode 100644
index 00000000..321c90ad
--- /dev/null
+++ b/runtime/queries/slint/injections.scm
@@ -0,0 +1,2 @@
+((comment) @injection.content
+ (#set! injection.language "comment"))
diff --git a/runtime/queries/slint/locals.scm b/runtime/queries/slint/locals.scm
index feba5ebb..a115f0c6 100644
--- a/runtime/queries/slint/locals.scm
+++ b/runtime/queries/slint/locals.scm
@@ -1,3 +1,3 @@
 ; locals.scm
 
-(component_definition) @local.scope
+(component_item) @local.scope
-- 
cgit v1.2.3-70-g09d2