diff options
| -rw-r--r-- | lockfile.json | 3 | ||||
| -rw-r--r-- | lua/nvim-treesitter/parsers.lua | 8 | ||||
| -rw-r--r-- | queries/nu/highlights.scm | 356 | ||||
| -rw-r--r-- | queries/nu/indents.scm | 26 | ||||
| -rw-r--r-- | queries/nu/injections.scm | 5 | ||||
| -rw-r--r-- | tests/indent/nu/closure.nu | 6 | ||||
| -rw-r--r-- | tests/indent/nu/for.nu | 3 | ||||
| -rw-r--r-- | tests/indent/nu/if_else.nu | 5 | ||||
| -rw-r--r-- | tests/indent/nu/list.nu | 7 | ||||
| -rw-r--r-- | tests/indent/nu/record.nu | 4 | ||||
| -rw-r--r-- | tests/indent/nu/table.nu | 9 | ||||
| -rw-r--r-- | tests/indent/nu_spec.lua | 17 |
12 files changed, 449 insertions, 0 deletions
diff --git a/lockfile.json b/lockfile.json index 02376dad1..73a36e945 100644 --- a/lockfile.json +++ b/lockfile.json @@ -500,6 +500,9 @@ "nqc": { "revision": "14e6da1627aaef21d2b2aa0c37d04269766dcc1d" }, + "nu": { + "revision": "082a7c7df7db460da6b280c9f902bf2b19a2f423" + }, "objc": { "revision": "62e61b6f5c0289c376d61a8c91faf6435cde9012" }, diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua index cd9b42cc9..a0ed0b427 100644 --- a/lua/nvim-treesitter/parsers.lua +++ b/lua/nvim-treesitter/parsers.lua @@ -1469,6 +1469,14 @@ list.nqc = { maintainers = { "@amaanq" }, } +list.nu = { + install_info = { + url = "https://github.com/nushell/tree-sitter-nu", + files = { "src/parser.c" }, + }, + maintainers = { "@abhisheksingh0x558" }, +} + list.objc = { install_info = { url = "https://github.com/amaanq/tree-sitter-objc", diff --git a/queries/nu/highlights.scm b/queries/nu/highlights.scm new file mode 100644 index 000000000..3d30d4c29 --- /dev/null +++ b/queries/nu/highlights.scm @@ -0,0 +1,356 @@ +; --- +; keywords +[ + "let" + "let-env" + "mut" + "const" + "hide-env" + "source" + "source-env" + "overlay" + "register" +] @keyword + +[ + "if" + "else" + "match" +] @keyword.conditional + +[ + "loop" + "while" + "break" + "continue" +] @keyword.repeat + +[ + "def" + "do" +] @keyword.function + +"return" @keyword.return + +[ + "try" + "catch" + "error" +] @keyword.exception + +"module" @keyword.import + +[ + "alias" + "export-env" + "export" + "extern" +] @keyword.modifier + +(hide_mod + "hide" @keyword) + +(decl_use + module: (unquoted) @module) + +(ctrl_for + "for" @keyword + "in" @keyword) + +(overlay_list + "list" @keyword.import) + +(overlay_hide + "hide" @keyword.import) + +(overlay_new + "new" @keyword.import) + +(overlay_use + "use" @keyword.import + "as" @keyword) + +(ctrl_error + "make" @keyword.import) + +; --- +; literals +(val_number) @number + +(val_duration + unit: _ @variable.parameter) + +(val_filesize + unit: _ @variable.parameter) + +(val_binary + [ + "0b" + "0o" + "0x" + ] @number + digit: [ + "," @punctuation.delimiter + (hex_digit) @number + ]) @number + +(val_bool) @constant.builtin + +(val_nothing) @constant.builtin + +(val_string) @string + +arg_str: (val_string) @variable.parameter + +file_path: (val_string) @variable.parameter + +(val_date) @number + +(inter_escape_sequence) @string.escape + +(escape_sequence) @string.escape + +(val_interpolated + [ + "$\"" + "$'" + "\"" + "'" + ] @string) + +(unescaped_interpolated_content) @string + +(escaped_interpolated_content) @string + +(expr_interpolated + [ + "(" + ")" + ] @variable.parameter) + +; --- +; operators +[ + "+" + "-" + "*" + "/" + "//" + "++" + "**" + "==" + "!=" + "<" + "<=" + ">" + ">=" + "=~" + "!~" + "=" + "+=" + "-=" + "*=" + "/=" + "++=" + "-" + ".." + "..=" + "..<" + "=>" + "=" + "|" + "o>" + "out>" + "e>" + "err>" + "e+o>" + "err+out>" + "o+e>" + "out+err>" +] @operator + +[ + "mod" + "and" + "or" + "xor" + "bit-or" + "bit-xor" + "bit-and" + "bit-shl" + "bit-shr" + "in" + "not-in" + "starts-with" + "ends-with" + "not" +] @keyword.operator + +; --- +; punctuation +[ + "," + ";" + ":" +] @punctuation.delimiter + +(param_long_flag + "--" @punctuation.delimiter) + +(long_flag + "--" @punctuation.delimiter) + +(long_flag_equals_value + "--" @punctuation.delimiter) + +(short_flag + "-" @punctuation.delimiter) + +(long_flag_equals_value + "=" @punctuation.delimiter) + +(param_short_flag + "-" @punctuation.delimiter) + +(param_rest + "..." @punctuation.delimiter) + +(param_value + "=" @punctuation.delimiter) + +(param_cmd + "@" @punctuation.delimiter) + +(param_opt + "?" @punctuation.delimiter) + +(returns + "->" @punctuation.delimiter) + +[ + "(" + ")" + "{" + "}" + "[" + "]" +] @punctuation.bracket + +(parameter_pipes + "|" @punctuation.bracket) + +key: (identifier) @property + +; --- +; identifiers +(param_rest + name: (_) @variable.parameter) + +(param_opt + name: (_) @variable.parameter) + +(parameter + param_name: (_) @variable.parameter) + +(param_cmd + (cmd_identifier) @string) + +(param_long_flag + (long_flag_identifier) @attribute) + +(param_short_flag + (param_short_flag_identifier) @attribute) + +(short_flag + (short_flag_identifier) @attribute) + +(long_flag_identifier) @attribute + +(scope_pattern + (wild_card) @function) + +(cmd_identifier) @function + +; generated with Nu 0.93.0 +; > help commands +; | filter { $in.command_type == builtin and $in.category != core } +; | each {$'"($in.name | split row " " | $in.0)"'} +; | uniq +; | str join ' ' +(command + head: [ + (cmd_identifier) @function.builtin + (#any-of? @function.builtin + "all" "ansi" "any" "append" "ast" "bits" "bytes" "cal" "cd" "char" "clear" "collect" "columns" + "compact" "complete" "config" "cp" "date" "debug" "decode" "default" "detect" "dfr" "drop" + "du" "each" "encode" "enumerate" "every" "exec" "exit" "explain" "explore" "export-env" "fill" + "filter" "find" "first" "flatten" "fmt" "format" "from" "generate" "get" "glob" "grid" "group" + "group-by" "hash" "headers" "histogram" "history" "http" "input" "insert" "inspect" + "interleave" "into" "is-empty" "is-not-empty" "is-terminal" "items" "join" "keybindings" + "kill" "last" "length" "let-env" "lines" "load-env" "ls" "math" "merge" "metadata" "mkdir" + "mktemp" "move" "mv" "nu-check" "nu-highlight" "open" "panic" "par-each" "parse" "path" + "plugin" "port" "prepend" "print" "ps" "query" "random" "range" "reduce" "reject" "rename" + "reverse" "rm" "roll" "rotate" "run-external" "save" "schema" "select" "seq" "shuffle" "skip" + "sleep" "sort" "sort-by" "split" "split-by" "start" "stor" "str" "sys" "table" "take" "tee" + "term" "timeit" "to" "touch" "transpose" "tutor" "ulimit" "uname" "uniq" "uniq-by" "update" + "upsert" "url" "values" "view" "watch" "where" "which" "whoami" "window" "with-env" "wrap" + "zip") + ]) + +(command + "^" @punctuation.delimiter + head: (_) @function) + +"where" @function.builtin + +(path + [ + "." + "?" + ] @punctuation.delimiter) @variable.parameter + +(stmt_let + (identifier) @variable) + +(val_variable + "$" @punctuation.special + [ + (identifier) @variable + "in" @variable.parameter.builtin + "nu" @module + "env" @constant + ]) @none + +; --- +; types +(flat_type) @type + +(list_type + "list" @type.builtin + [ + "<" + ">" + ] @punctuation.bracket) + +(collection_type + [ + "record" + "table" + ] @type.builtin + "<" @punctuation.bracket + key: (_) @variable.parameter + [ + "," + ":" + ] @punctuation.delimiter + ">" @punctuation.bracket) + +(shebang) @keyword.directive + +(comment) @comment @spell + +((comment) @comment.documentation @spell + (decl_def)) + +((parameter) + (comment) @comment.documentation @spell) diff --git a/queries/nu/indents.scm b/queries/nu/indents.scm new file mode 100644 index 000000000..c344d4abd --- /dev/null +++ b/queries/nu/indents.scm @@ -0,0 +1,26 @@ +; Forked from https://github.com/nushell/tree-sitter-nu +; Copyright (c) 2019 - 2022 The Nushell Project Developers +; Licensed under the MIT license. +[ + (expr_parenthesized) + (parameter_bracks) + (val_record) + (val_list) + (val_closure) + (val_table) + (block) +] @indent.begin + +[ + "}" + "]" + ")" +] @indent.end + +[ + "}" + "]" + ")" +] @indent.branch + +(comment) @indent.auto diff --git a/queries/nu/injections.scm b/queries/nu/injections.scm new file mode 100644 index 000000000..d5e70acb5 --- /dev/null +++ b/queries/nu/injections.scm @@ -0,0 +1,5 @@ +; Forked from https://github.com/nushell/tree-sitter-nu +; Copyright (c) 2019 - 2022 The Nushell Project Developers +; Licensed under the MIT license. +((comment) @injection.content + (#set! injection.language "comment")) diff --git a/tests/indent/nu/closure.nu b/tests/indent/nu/closure.nu new file mode 100644 index 000000000..ef6301e4a --- /dev/null +++ b/tests/indent/nu/closure.nu @@ -0,0 +1,6 @@ +do { |x, y| + print ($x + $y); + print ($x - $y); + print ($x * $y); + print ($x / $y); +} diff --git a/tests/indent/nu/for.nu b/tests/indent/nu/for.nu new file mode 100644 index 000000000..87dfd5f3d --- /dev/null +++ b/tests/indent/nu/for.nu @@ -0,0 +1,3 @@ +for x in 1..3 { + print ($x * $x) +} diff --git a/tests/indent/nu/if_else.nu b/tests/indent/nu/if_else.nu new file mode 100644 index 000000000..92b105737 --- /dev/null +++ b/tests/indent/nu/if_else.nu @@ -0,0 +1,5 @@ +if true { + true +} else { + false +} diff --git a/tests/indent/nu/list.nu b/tests/indent/nu/list.nu new file mode 100644 index 000000000..47b6b913c --- /dev/null +++ b/tests/indent/nu/list.nu @@ -0,0 +1,7 @@ +let my_list = [ + foo + bar + baz + qux + quux +] diff --git a/tests/indent/nu/record.nu b/tests/indent/nu/record.nu new file mode 100644 index 000000000..cf119c6e9 --- /dev/null +++ b/tests/indent/nu/record.nu @@ -0,0 +1,4 @@ +let my_record = { + foo: "bar" + bar: 1 +} diff --git a/tests/indent/nu/table.nu b/tests/indent/nu/table.nu new file mode 100644 index 000000000..ffdf30cac --- /dev/null +++ b/tests/indent/nu/table.nu @@ -0,0 +1,9 @@ +let my_table = [ + [a b]; + [1 2] + [3 4] + [5 6] + [7 8] + [9 10] + [11 12] +] diff --git a/tests/indent/nu_spec.lua b/tests/indent/nu_spec.lua new file mode 100644 index 000000000..37c02ebea --- /dev/null +++ b/tests/indent/nu_spec.lua @@ -0,0 +1,17 @@ +local Runner = require("tests.indent.common").Runner +--local XFAIL = require("tests.indent.common").XFAIL + +local run = Runner:new(it, "tests/indent/nu", { + tabstop = 2, + shiftwidth = 2, + softtabstop = -1, + expandtab = true, +}) + +describe("indent Nu:", function() + describe("whole file:", function() + run:whole_file(".", { + expected_failures = {}, + }) + end) +end) |
