diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index ef3c94513..7292b61ba 100644 --- a/book/src/generated/lang-support.md +++ b/book/src/generated/lang-support.md @@ -50,6 +50,7 @@ | mint | | | | `mint` | | nickel | ✓ | | ✓ | `nls` | | nix | ✓ | | ✓ | `rnix-lsp` | +| nu | ✓ | | | | | ocaml | ✓ | | ✓ | `ocamllsp` | | ocaml-interface | ✓ | | | `ocamllsp` | | org | ✓ | | | | diff --git a/languages.toml b/languages.toml index 76b4ca167..3b2eedf2c 100644 --- a/languages.toml +++ b/languages.toml @@ -1210,3 +1210,16 @@ indent = { tab-width = 4, unit = " " } [[grammar]] name = "gdscript" source = { git = "https://github.com/PrestonKnopp/tree-sitter-gdscript", rev = "2a6abdaa47fcb91397e09a97c7433fd995ea46c6" } + +[[language]] +name = "nu" +scope = "source.nu" +injection-regex = "nu" +file-types = ["nu"] +roots = [] +comment-token = "#" +indent = { tab-width = 2, unit = " " } + +[[grammar]] +name = "nu" +source = { git = "https://github.com/LhKipp/tree-sitter-nu", rev = "db4e990b78824c8abef3618e0f93b7fe1e8f4c0d" } diff --git a/runtime/queries/nu/folds.scm b/runtime/queries/nu/folds.scm new file mode 100644 index 000000000..f6b5acb15 --- /dev/null +++ b/runtime/queries/nu/folds.scm @@ -0,0 +1,4 @@ +[ + (function_definition) + (block) +] @fold diff --git a/runtime/queries/nu/highlights.scm b/runtime/queries/nu/highlights.scm new file mode 100644 index 000000000..b643a63af --- /dev/null +++ b/runtime/queries/nu/highlights.scm @@ -0,0 +1,55 @@ +(string) @string +(type) @type +(value_path) @variable +(comment) @comment + +(number_literal) @constant.numeric +(range from: (number_literal) @constant.numeric) +(range to: (number_literal) @constant.numeric) + +(command cmd_name: (identifier) @function) +(function_definition func_name: (identifier) @function) + +[ + (variable_declaration name: (identifier)) + (parameter (identifier)) + (flag (flag_name)) + (flag (flag_shorthand_name)) + (record_entry entry_name: (identifier)) + (block_args block_param: (identifier)) +] @variable.other.member +; (parameter (identifier) @variable.parameter) ; -- alternative highlighting group? + +(cmd_invocation) @embedded + + +((identifier) @constant + (#match? @constant "^[A-Z][A-Z\\d_]*$")) + +[ + "if" + "else" + "let" + "def" + "export" +] @keyword + +[ + ; "/" Not making / an operator may lead to better highlighting? + "$" + "|" + "+" + "-" + "*" + "=" + "!=" + "&&" + "||" + "==" + ">" +] @operator + +["." + "," + ";" +] @punctuation.delimiter diff --git a/runtime/queries/nu/injections.scm b/runtime/queries/nu/injections.scm new file mode 100644 index 000000000..321c90add --- /dev/null +++ b/runtime/queries/nu/injections.scm @@ -0,0 +1,2 @@ +((comment) @injection.content + (#set! injection.language "comment")) diff --git a/runtime/queries/nu/locals.scm b/runtime/queries/nu/locals.scm new file mode 100644 index 000000000..2a341f80e --- /dev/null +++ b/runtime/queries/nu/locals.scm @@ -0,0 +1,13 @@ +; Scopes +(function_definition) @scope + +; Definitions +(variable_declaration + name: (identifier) @definition.var) + +(function_definition + func_name: (identifier) @definition.function) + +; References +(value_path) @reference +(word) @reference