aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlefp2023-04-12 19:42:41 +0000
committerGitHub2023-04-12 19:42:41 +0000
commitfff8543b5809766608be14ee1a45f8b86f5a3de2 (patch)
treecc433b37e0e3b27bb3679c95edb1ac5b7e1d99e0
parent70de5026b801fb1a0eb54acc2d3685291c8e14f3 (diff)
Add OpenCL tree-sitter and LSP config (#6473)
-rw-r--r--book/src/generated/lang-support.md1
-rw-r--r--languages.toml13
-rw-r--r--runtime/queries/opencl/highlights.scm150
-rw-r--r--runtime/queries/opencl/indents.scm1
-rw-r--r--runtime/queries/opencl/injections.scm1
-rw-r--r--runtime/queries/opencl/textobjects.scm1
6 files changed, 167 insertions, 0 deletions
diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index 07aabef8..b458bd6f 100644
--- a/book/src/generated/lang-support.md
+++ b/book/src/generated/lang-support.md
@@ -97,6 +97,7 @@
| ocaml | ✓ | | ✓ | `ocamllsp` |
| ocaml-interface | ✓ | | | `ocamllsp` |
| odin | ✓ | | | `ols` |
+| opencl | ✓ | ✓ | ✓ | `clangd` |
| openscad | ✓ | | | `openscad-lsp` |
| org | ✓ | | | |
| pascal | ✓ | ✓ | | `pasls` |
diff --git a/languages.toml b/languages.toml
index 9e55dd4e..86688137 100644
--- a/languages.toml
+++ b/languages.toml
@@ -2472,3 +2472,16 @@ language-server = { command = "markdoc-ls", args = ["--stdio"] }
[[grammar]]
name = "markdoc"
source = { git = "https://github.com/markdoc-extra/tree-sitter-markdoc", rev = "5ffe71b29e8a3f94823913ea9cea51fcfa7e3bf8" }
+
+[[language]]
+name = "opencl"
+scope = "source.cl"
+injection-regex = "(cl|opencl)"
+file-types = ["cl"]
+roots = []
+comment-token = "//"
+language-server = { command = "clangd" }
+
+[[grammar]]
+name = "opencl"
+source = { git = "https://github.com/lefp/tree-sitter-opencl", rev = "8e1d24a57066b3cd1bb9685bbc1ca9de5c1b78fb" }
diff --git a/runtime/queries/opencl/highlights.scm b/runtime/queries/opencl/highlights.scm
new file mode 100644
index 00000000..9d76d6c6
--- /dev/null
+++ b/runtime/queries/opencl/highlights.scm
@@ -0,0 +1,150 @@
+[
+ "sizeof"
+ ; @todo why does "uniform" break highlighting?
+ ; "uniform" ; OpenCL C 3.0.13 reserves this as a keyword, but doesn't seem to use it for anything
+ (function_qualifier)
+] @keyword
+
+[
+ "enum"
+ "struct"
+ "typedef"
+ "union"
+] @keyword.storage.type
+
+[
+ "extern"
+ "register"
+ (type_qualifier)
+ (access_qualifier)
+ (storage_class_specifier)
+ (address_space_qualifier)
+] @keyword.storage.modifier
+
+[
+ "goto"
+ "break"
+ "continue"
+] @keyword.control
+
+[
+ "do"
+ "for"
+ "while"
+] @keyword.control.repeat
+
+[
+ "if"
+ "else"
+ "switch"
+ "case"
+ "default"
+] @keyword.control.conditional
+
+"return" @keyword.control.return
+
+[
+ "defined"
+ "#define"
+ "#elif"
+ "#else"
+ "#endif"
+ "#if"
+ "#ifdef"
+ "#ifndef"
+ "#include"
+ (preproc_directive)
+] @keyword.directive
+
+(pointer_declarator "*" @type.builtin)
+(abstract_pointer_declarator "*" @type.builtin)
+
+[
+ "+"
+ "-"
+ "*"
+ "/"
+ "++"
+ "--"
+ "%"
+ "=="
+ "!="
+ ">"
+ "<"
+ ">="
+ "<="
+ "&&"
+ "||"
+ "!"
+ "&"
+ "|"
+ "^"
+ "~"
+ "<<"
+ ">>"
+ "="
+ "+="
+ "-="
+ "*="
+ "/="
+ "%="
+ "<<="
+ ">>="
+ "&="
+ "^="
+ "|="
+ "?"
+] @operator
+
+(conditional_expression ":" @operator)
+
+"..." @punctuation
+
+["," "." ":" ";" "->" "::"] @punctuation.delimiter
+
+["(" ")" "[" "]" "{" "}"] @punctuation.bracket
+
+[(true) (false)] @constant.builtin.boolean
+
+(enumerator name: (identifier) @type.enum.variant)
+
+(string_literal) @string
+(system_lib_string) @string
+
+(null) @constant
+(number_literal) @constant.numeric
+(char_literal) @constant.character
+
+(call_expression
+ function: (identifier) @function)
+(call_expression
+ function: (field_expression
+ field: (field_identifier) @function))
+(call_expression (argument_list (identifier) @variable))
+(function_declarator
+ declarator: [(identifier) (field_identifier)] @function)
+(parameter_declaration
+ declarator: (identifier) @variable.parameter)
+(parameter_declaration
+ (pointer_declarator
+ declarator: (identifier) @variable.parameter))
+(preproc_function_def
+ name: (identifier) @function.special)
+
+(attribute
+ name: (identifier) @attribute)
+
+(field_identifier) @variable.other.member
+(statement_identifier) @label
+(type_identifier) @type
+(scalar_type) @type.builtin
+(sized_type_specifier) @type.builtin
+(vector_type) @type.builtin
+(other_builtin_type) @type.builtin
+
+((identifier) @constant
+ (#match? @constant "^[A-Z][A-Z\\d_]*$"))
+
+(identifier) @variable
+
+(comment) @comment
diff --git a/runtime/queries/opencl/indents.scm b/runtime/queries/opencl/indents.scm
new file mode 100644
index 00000000..a5a5208c
--- /dev/null
+++ b/runtime/queries/opencl/indents.scm
@@ -0,0 +1 @@
+; inherits: c
diff --git a/runtime/queries/opencl/injections.scm b/runtime/queries/opencl/injections.scm
new file mode 100644
index 00000000..a5a5208c
--- /dev/null
+++ b/runtime/queries/opencl/injections.scm
@@ -0,0 +1 @@
+; inherits: c
diff --git a/runtime/queries/opencl/textobjects.scm b/runtime/queries/opencl/textobjects.scm
new file mode 100644
index 00000000..a5a5208c
--- /dev/null
+++ b/runtime/queries/opencl/textobjects.scm
@@ -0,0 +1 @@
+; inherits: c