Unnamed repository; edit this file 'description' to name the repository.
chore: Point OpenSCAD grammar to official repo (#13033)
Mikhail Katychev 12 months ago
parent d1e0891 · commit 430ce9c
-rw-r--r--languages.toml2
-rw-r--r--runtime/queries/openscad/highlights.scm152
2 files changed, 127 insertions, 27 deletions
diff --git a/languages.toml b/languages.toml
index df69d6f3..3e790d76 100644
--- a/languages.toml
+++ b/languages.toml
@@ -2414,7 +2414,7 @@ indent = { tab-width = 2, unit = "\t" }
[[grammar]]
name = "openscad"
-source = { git = "https://github.com/bollian/tree-sitter-openscad", rev = "5c3ce93df0ac1da7197cf6ae125aade26d6b8972" }
+source = { git = "https://github.com/openscad/tree-sitter-openscad", rev = "acc196e969a169cadd8b7f8d9f81ff2d30e3e253" }
[[language]]
name = "prisma"
diff --git a/runtime/queries/openscad/highlights.scm b/runtime/queries/openscad/highlights.scm
index 90d5ac59..a79dc41e 100644
--- a/runtime/queries/openscad/highlights.scm
+++ b/runtime/queries/openscad/highlights.scm
@@ -1,40 +1,68 @@
-(number) @constant.numeric
-(string) @string
-(boolean) @constant.builtin.boolean
+; Includes
+(identifier) @variable
+
+"include" @keyword.control.import
+
(include_path) @string.special.path
-(identifier) @variable
+; Functions
+
+(function_item
+ (identifier) @function
+)
+(function_item
+ parameters: (parameters (parameter (assignment value: (_) @constant)))
+)
+(function_call name: (identifier) @function)
+(function_call
+ arguments: (arguments (assignment name: _ @variable.parameter))
+)
+; for the puroposes of distintion since modules are "coloured" impure functions, we will treat them as methods
+(module_item (identifier) @function.method)
+(module_item
+ parameters: (parameters (parameter (assignment value: (_) @constant)))
+)
+(module_call name: (identifier) @function.method)
+(module_call
+ arguments: (arguments (assignment name: _ @variable.parameter))
+)
-(parameters_declaration (identifier) @variable.parameter)
-(function_declaration name: (identifier) @function)
+; assertion statements/expression arguments behave similar to function calls
+(assert_expression
+ arguments: (arguments (assignment name: _ @variable.parameter))
+)
+(assert_statement
+ arguments: (arguments (assignment name: _ @variable.parameter))
+)
-(function_call function: (identifier) @function)
-(module_call name: (identifier) @function)
+(echo_expression
+ arguments: (arguments (assignment name: _ @variable.parameter))
+)
+(echo_expression "echo" @function.builtin)
+; Variables
+(parameter
+ [_ @variable.parameter (assignment name: _ @variable.parameter)]
+)
(special_variable) @variable.builtin
+(undef) @constant.builtin
+
+; Types/Properties/
+(dot_index_expression index: (_) @variable.other.member)
+; Keywords
[
+ "module"
"function"
"let"
"assign"
-] @keyword
-
-[
- "for"
- "each"
- "intersection_for"
-] @keyword.control.repeat
-
-[
- "if"
-] @keyword.control.conditional
-
-[
- "module"
"use"
- "include"
-] @keyword.control.import
+ "each"
+ (assert_statement "assert")
+ (assert_expression "assert")
+] @keyword
+; Operators
[
"||"
"&&"
@@ -50,15 +78,87 @@
"/"
"%"
"^"
- "?"
"!"
":"
+ "="
] @operator
+; Builtin modules
+(module_call
+ name: (identifier) @function.builtin
+ (#any-of? @function.builtin
+ "circle"
+ "color"
+ "cube"
+ "cylinder"
+ "difference"
+ "hull"
+ "intersection"
+ "linear_extrude"
+ "minkowski"
+ "mirror"
+ "multmatrix"
+ "offset"
+ "polygon"
+ "polyhedron"
+ "projection"
+ "resize"
+ "rotate"
+ "rotate_extrude"
+ "scale"
+ "sphere"
+ "square"
+ "surface"
+ "text"
+ "translate"
+ "union"
+ "echo"
+ )
+)
+(
+ (identifier) @identifier
+ (#eq? @identifier "PI")
+) @constant.builtin
+
+; Conditionals
+[
+ "if"
+ "else"
+] @keyword.control.conditional
+(ternary_expression
+ ["?" ":"] @keyword.control.conditional
+)
+
+; Repeats
+[
+ "for"
+ "intersection_for"
+] @keyword.control.repeat
+
+; Literals
+(integer) @constant.numeric.integer
+(float) @constant.numeric.float
+(string) @string
+(escape_sequence) @constant.character.escape
+(boolean) @constant.builtin.boolean
+
+; Misc
+(modifier
+ [
+ "*"
+ "!"
+ "#"
+ "%"
+ ] @keyword.storage.modifier
+)
+["{" "}"] @punctuation.bracket
+["(" ")"] @punctuation.bracket
+["[" "]"] @punctuation.bracket
[
";"
","
"."
] @punctuation.delimiter
-(comment) @comment
+; Comments
+[(line_comment) (block_comment)] @comment