aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lockfile.json3
-rw-r--r--lua/nvim-treesitter/parsers.lua8
-rw-r--r--queries/nu/highlights.scm356
-rw-r--r--queries/nu/indents.scm26
-rw-r--r--queries/nu/injections.scm5
-rw-r--r--tests/indent/nu/closure.nu6
-rw-r--r--tests/indent/nu/for.nu3
-rw-r--r--tests/indent/nu/if_else.nu5
-rw-r--r--tests/indent/nu/list.nu7
-rw-r--r--tests/indent/nu/record.nu4
-rw-r--r--tests/indent/nu/table.nu9
-rw-r--r--tests/indent/nu_spec.lua17
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)