diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index 07aabef82..b458bd6f1 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 9e55dd4e0..866881370 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 000000000..9d76d6c66 --- /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 000000000..a5a5208ca --- /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 000000000..a5a5208ca --- /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 000000000..a5a5208ca --- /dev/null +++ b/runtime/queries/opencl/textobjects.scm @@ -0,0 +1 @@ +; inherits: c