aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--book/src/generated/lang-support.md1
-rw-r--r--languages.toml13
-rw-r--r--runtime/queries/odin/highlights.scm141
3 files changed, 155 insertions, 0 deletions
diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index b4e7ff93..68163e08 100644
--- a/book/src/generated/lang-support.md
+++ b/book/src/generated/lang-support.md
@@ -59,6 +59,7 @@
| nu | ✓ | | | |
| ocaml | ✓ | | ✓ | `ocamllsp` |
| ocaml-interface | ✓ | | | `ocamllsp` |
+| odin | ✓ | | | |
| org | ✓ | | | |
| perl | ✓ | ✓ | ✓ | |
| php | ✓ | ✓ | ✓ | `intelephense` |
diff --git a/languages.toml b/languages.toml
index ee9b9961..e4f203f8 100644
--- a/languages.toml
+++ b/languages.toml
@@ -1329,3 +1329,16 @@ indent = { tab-width = 2, unit = " " }
[[grammar]]
name = "cpon"
source = { git = "https://github.com/fvacek/tree-sitter-cpon", rev = "11ba46a4de3eb86934003133099c9963a60f9687" }
+
+[[language]]
+name = "odin"
+auto-format = false
+scope = "source.odin"
+file-types = ["odin"]
+roots = []
+comment-token = "//"
+indent = { tab-width = 4, unit = " " }
+
+[[grammar]]
+name = "odin"
+source = { git = "https://github.com/MineBill/tree-sitter-odin", rev = "da885f4a387f169b9b69fe0968259ee257a8f69a" }
diff --git a/runtime/queries/odin/highlights.scm b/runtime/queries/odin/highlights.scm
new file mode 100644
index 00000000..1d801ff1
--- /dev/null
+++ b/runtime/queries/odin/highlights.scm
@@ -0,0 +1,141 @@
+; Function calls
+
+(call_expression
+ function: (identifier) @function)
+
+(call_expression
+ function: (selector_expression
+ field: (field_identifier) @function))
+
+
+; ; Function definitions
+
+(function_declaration
+ name: (identifier) @function)
+
+(proc_group
+ (identifier) @function)
+
+; ; Identifiers
+
+(type_identifier) @type
+(field_identifier) @variable.other.member
+(identifier) @variable
+
+(const_declaration
+ (identifier) @constant)
+(const_declaration_with_type
+ (identifier) @constant)
+
+"any" @type
+
+(directive_identifier) @constant
+
+; ; Operators
+
+[
+ "?"
+ "-"
+ "-="
+ ":="
+ "!"
+ "!="
+ "*"
+ "*"
+ "*="
+ "/"
+ "/="
+ "&"
+ "&&"
+ "&="
+ "%"
+ "%="
+ "^"
+ "+"
+ "+="
+ "<-"
+ "<"
+ "<<"
+ "<<="
+ "<="
+ "="
+ "=="
+ ">"
+ ">="
+ ">>"
+ ">>="
+ "|"
+ "|="
+ "||"
+ "~"
+ ".."
+ "..<"
+ "..="
+ "::"
+] @operator
+
+; ; Keywords
+
+[
+ ; "asm"
+ "auto_cast"
+ ; "bit_set"
+ "cast"
+ ; "context"
+ ; "or_else"
+ ; "or_return"
+ "in"
+ ; "not_in"
+ "distinct"
+ "foreign"
+ "transmute"
+ ; "typeid"
+
+ "break"
+ "case"
+ "continue"
+ "defer"
+ "else"
+ "using"
+ "when"
+ "where"
+ "fallthrough"
+ "for"
+ "proc"
+ "if"
+ "import"
+ "map"
+ "package"
+ "return"
+ "struct"
+ "union"
+ "enum"
+ "switch"
+ "dynamic"
+] @keyword
+
+; ; Literals
+
+[
+ (interpreted_string_literal)
+ (raw_string_literal)
+ (rune_literal)
+] @string
+
+(escape_sequence) @constant.character.escape
+
+(int_literal) @constant.numeric.integer
+(float_literal) @constant.numeric.float
+(imaginary_literal) @constant.numeric
+
+[
+ (true)
+ (false)
+] @constant.builtin.boolean
+
+[
+ (nil)
+ (undefined)
+] @constant.builtin
+
+(comment) @comment.line