aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBlaž Hrastnik2022-05-01 02:24:17 +0000
committerBlaž Hrastnik2022-05-01 02:24:17 +0000
commit73879052c14a84de6efe6991881c53d542b7a8e6 (patch)
tree53b6fc36e18eac18901dc86a86157bc13e6f25e6
parent2c60798b00cc9b8efc9fdbec304a7ea04d11de4c (diff)
Add Cairo support
-rw-r--r--languages.toml13
-rw-r--r--runtime/queries/cairo/highlights.scm96
-rw-r--r--runtime/queries/cairo/injections.scm5
3 files changed, 114 insertions, 0 deletions
diff --git a/languages.toml b/languages.toml
index e5230fba..f065b109 100644
--- a/languages.toml
+++ b/languages.toml
@@ -1276,3 +1276,16 @@ indent = { tab-width = 4, unit = "\t" }
[[grammar]]
name = "devicetree"
source = { git = "https://github.com/joelspadin/tree-sitter-devicetree", rev = "877adbfa0174d25894c40fa75ad52d4515a36368" }
+
+[[language]]
+name = "cairo"
+scope = "source.cairo"
+injection-regex = "cairo"
+file-types = ["cairo"]
+roots = []
+comment-token = "#"
+indent = { tab-width = 4, unit = " " }
+
+[[grammar]]
+name = "cairo"
+source = { git = "https://github.com/archseer/tree-sitter-cairo", rev = "5155c6eb40db6d437f4fa41b8bcd8890a1c91716" }
diff --git a/runtime/queries/cairo/highlights.scm b/runtime/queries/cairo/highlights.scm
new file mode 100644
index 00000000..3a30d188
--- /dev/null
+++ b/runtime/queries/cairo/highlights.scm
@@ -0,0 +1,96 @@
+(ERROR) @error
+
+((identifier) @constant
+ (#match? @constant "^[A-Z][A-Z\\d_]+$"))
+((identifier_def) @constant
+ (#match? @constant "^[A-Z][A-Z\\d_]+$"))
+
+((identifier) @namespace
+ (#match? @namespace "^[A-Z]"))
+((identifier_def) @namespace
+ (#match? @namespace "^[A-Z]"))
+
+(identifier "." @punctuation)
+(function_call (identifier) @function)
+(func (identifier_def) @function)
+
+(string) @string
+(atom_short_string) @string
+
+(code_element_directive) @keyword.directive
+"return" @keyword
+
+(number) @constant.numeric
+(atom_hex_number) @constant.numeric
+
+(comment) @comment
+
+"*" @special
+(type) @type
+
+[
+ "felt"
+ ; "codeoffset"
+] @type.builtin
+
+[
+ "if"
+ "else"
+ "end"
+ "assert"
+ "with"
+ "with_attr"
+] @keyword.control
+
+[
+ "from"
+ "import"
+ "func"
+ "namespace"
+] @keyword ; keyword.declaration
+
+[
+ "let"
+ "const"
+ "local"
+ "struct"
+ "member"
+ "alloc_locals"
+ "tempvar"
+] @keyword
+
+(decorator) @attribute
+
+[
+ "="
+ "+"
+ "-"
+ "*"
+ "/"
+ ; "%"
+ ; "!"
+ ; ">"
+ ; "<"
+ ; "\\"
+ ; "&"
+ ; "?"
+ ; "^"
+ ; "~"
+ "=="
+ "!="
+ "new"
+] @operator
+
+[
+ "("
+ ")"
+ "["
+ "]"
+ "{"
+ "}"
+] @punctuation.bracket
+
+[
+ ","
+ ":"
+] @punctuation.delimiter
diff --git a/runtime/queries/cairo/injections.scm b/runtime/queries/cairo/injections.scm
new file mode 100644
index 00000000..e6f9be1b
--- /dev/null
+++ b/runtime/queries/cairo/injections.scm
@@ -0,0 +1,5 @@
+((hint) @injection.content
+ (#set! injection.language "python"))
+
+((comment) @injection.content
+ (#set! injection.language "comment"))