diff --git a/SUPPORTED_LANGUAGES.md b/SUPPORTED_LANGUAGES.md index 98b798ab9..16805c6fb 100644 --- a/SUPPORTED_LANGUAGES.md +++ b/SUPPORTED_LANGUAGES.md @@ -36,6 +36,7 @@ Language | Tier | Queries | Maintainer [caddy](https://github.com/opa-oz/tree-sitter-caddy) | unmaintained | `HFIJ ` | [cairo](https://github.com/tree-sitter-grammars/tree-sitter-cairo) | unstable | `HFIJL` | @amaanq [capnp](https://github.com/tree-sitter-grammars/tree-sitter-capnp) | unstable | `HFIJL` | @amaanq +[cel](https://github.com/bufbuild/tree-sitter-cel) | unstable | `HFIJL` | @stefanvanburen [chatito](https://github.com/tree-sitter-grammars/tree-sitter-chatito) | unstable | `HFIJL` | @ObserverOfTime [circom](https://github.com/Decurity/tree-sitter-circom) | unstable | `HF JL` | @alexandr-martirosyan [clojure](https://github.com/sogaiu/tree-sitter-clojure) | unstable | `HF JL` | @NoahTheDuke diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua index fc5e42ac0..7b210f413 100644 --- a/lua/nvim-treesitter/parsers.lua +++ b/lua/nvim-treesitter/parsers.lua @@ -267,6 +267,14 @@ return { maintainers = { '@jakestanger' }, tier = 2, }, + cel = { + install_info = { + revision = 'e0b695e6c318babff09de7e66e0de0adaab7b8ad', + url = 'https://github.com/bufbuild/tree-sitter-cel', + }, + maintainers = { '@stefanvanburen' }, + tier = 2, + }, cpon = { install_info = { revision = '594289eadfec719198e560f9d7fd243c4db678d5', diff --git a/runtime/queries/cel/folds.scm b/runtime/queries/cel/folds.scm new file mode 100644 index 000000000..d076a77c2 --- /dev/null +++ b/runtime/queries/cel/folds.scm @@ -0,0 +1,10 @@ +; Code folding queries for CEL (Common Expression Language). +; Marks collection literals as foldable regions. +; Fold map expressions +(map_expression) @fold + +; Fold list expressions +(list_expression) @fold + +; Fold struct expressions +(struct_expression) @fold diff --git a/runtime/queries/cel/highlights.scm b/runtime/queries/cel/highlights.scm new file mode 100644 index 000000000..89a4ac659 --- /dev/null +++ b/runtime/queries/cel/highlights.scm @@ -0,0 +1,95 @@ +; Syntax highlighting queries for CEL (Common Expression Language). +; Maps CEL grammar nodes to standard tree-sitter highlight capture names. +; Operators +[ + "-" + "!" + "*" + "/" + "&&" + "%" + "+" + "<" + "<=" + "!=" + "==" + ">" + ">=" + "||" +] @operator + +; Ternary operator +"?" @operator + +(conditional_expression + ":" @operator) + +(map_entry + ":" @punctuation.delimiter) + +(field_initializer + ":" @punctuation.delimiter) + +; Punctuation +[ + "(" + ")" + "[" + "]" + "{" + "}" +] @punctuation.bracket + +"," @punctuation.delimiter + +"." @punctuation.delimiter + +; Keywords +"in" @keyword.operator + +(reserved_keyword) @keyword + +; Function calls +(call_expression + function: (identifier) @function.call) + +(absolute_expression + name: (identifier) @function.call + arguments: (arguments)) + +(member_call_expression + function: [ + (identifier) + (reserved_keyword) + ] @function.method.call) + +; Member access +(select_expression + member: [ + (identifier) + (reserved_keyword) + ] @variable.member) + +; Variables +(identifier) @variable + +; Literals +[ + (string_literal) + (bytes_literal) +] @string + +[ + (int_literal) + (uint_literal) +] @number + +(float_literal) @number.float + +[ + (true) + (false) + (null) +] @constant.builtin + +(comment) @comment @spell diff --git a/runtime/queries/cel/indents.scm b/runtime/queries/cel/indents.scm new file mode 100644 index 000000000..77009528d --- /dev/null +++ b/runtime/queries/cel/indents.scm @@ -0,0 +1,16 @@ +; Indentation queries for CEL (Common Expression Language). +; Marks nodes that should increase or decrease indentation level. +; Indent after opening delimiters of collection literals and function arguments +[ + (map_expression) + (list_expression) + (struct_expression) + (arguments) +] @indent.begin + +; Dedent before closing delimiters +[ + "}" + "]" + ")" +] @indent.dedent diff --git a/runtime/queries/cel/injections.scm b/runtime/queries/cel/injections.scm new file mode 100644 index 000000000..170820b54 --- /dev/null +++ b/runtime/queries/cel/injections.scm @@ -0,0 +1,4 @@ +; Inject the "comment" language into comments to enable highlighting of +; TODO, FIXME, etc. markers within CEL comment text. +((comment) @injection.content + (#set! injection.language "comment")) diff --git a/runtime/queries/cel/locals.scm b/runtime/queries/cel/locals.scm new file mode 100644 index 000000000..4a637b089 --- /dev/null +++ b/runtime/queries/cel/locals.scm @@ -0,0 +1,9 @@ +; CEL is a pure expression language — variables are provided by the evaluation +; environment rather than declared in the expression itself. We mark the root +; expression as a scope and all identifiers as references so that editors can +; apply local-variable highlighting and scope-aware navigation. +; Scopes +(expr) @local.scope + +; References +(identifier) @local.reference