aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--languages.toml2
-rw-r--r--runtime/queries/nu/folds.scm4
-rw-r--r--runtime/queries/nu/highlights.scm320
-rw-r--r--runtime/queries/nu/injections.scm2
-rw-r--r--runtime/queries/nu/locals.scm13
5 files changed, 278 insertions, 63 deletions
diff --git a/languages.toml b/languages.toml
index 465b505b..618b18c1 100644
--- a/languages.toml
+++ b/languages.toml
@@ -1697,7 +1697,7 @@ indent = { tab-width = 2, unit = " " }
[[grammar]]
name = "nu"
-source = { git = "https://github.com/LhKipp/tree-sitter-nu", rev = "eb95bdac3abd73ef47e53f19c63e74a31405ebd2" }
+source = { git = "https://github.com/nushell/tree-sitter-nu", rev = "98c11c491e3405c75affa1cf004097692da3dda2" }
[[language]]
name = "vala"
diff --git a/runtime/queries/nu/folds.scm b/runtime/queries/nu/folds.scm
deleted file mode 100644
index f6b5acb1..00000000
--- a/runtime/queries/nu/folds.scm
+++ /dev/null
@@ -1,4 +0,0 @@
-[
- (function_definition)
- (block)
-] @fold
diff --git a/runtime/queries/nu/highlights.scm b/runtime/queries/nu/highlights.scm
index b643a63a..746c5025 100644
--- a/runtime/queries/nu/highlights.scm
+++ b/runtime/queries/nu/highlights.scm
@@ -1,55 +1,287 @@
-(string) @string
-(type) @type
-(value_path) @variable
-(comment) @comment
+;;; ---
+;;; keywords
+[
+ "def"
+ "def-env"
+ "alias"
+ "export-env"
+ "export"
+ "extern"
+ "module"
-(number_literal) @constant.numeric
-(range from: (number_literal) @constant.numeric)
-(range to: (number_literal) @constant.numeric)
+ "let"
+ "let-env"
+ "mut"
+ "const"
-(command cmd_name: (identifier) @function)
-(function_definition func_name: (identifier) @function)
+ "hide-env"
-[
- (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?
+ "source"
+ "source-env"
-(cmd_invocation) @embedded
+ "overlay"
+ "register"
+ "loop"
+ "while"
+ "error"
-((identifier) @constant
- (#match? @constant "^[A-Z][A-Z\\d_]*$"))
+ "do"
+ "if"
+ "else"
+ "try"
+ "catch"
+ "match"
+
+ "break"
+ "continue"
+ "return"
-[
- "if"
- "else"
- "let"
- "def"
- "export"
] @keyword
+(hide_mod "hide" @keyword)
+(decl_use "use" @keyword)
+
+(ctrl_for
+ "for" @keyword
+ "in" @keyword
+)
+(overlay_list "list" @keyword.storage.modifier)
+(overlay_hide "hide" @keyword.storage.modifier)
+(overlay_new "new" @keyword.storage.modifier)
+(overlay_use
+ "use" @keyword.storage.modifier
+ "as" @keyword
+)
+(ctrl_error "make" @keyword.storage.modifier)
+
+;;; ---
+;;; literals
+(val_number) @constant.numeric
+(val_duration
+ unit: [
+ "ns" "µs" "us" "ms" "sec" "min" "hr" "day" "wk"
+ ] @variable.parameter
+)
+(val_filesize
+ unit: [
+ "b" "B"
+
+ "kb" "kB" "Kb" "KB"
+ "mb" "mB" "Mb" "MB"
+ "gb" "gB" "Gb" "GB"
+ "tb" "tB" "Tb" "TB"
+ "pb" "pB" "Pb" "PB"
+ "eb" "eB" "Eb" "EB"
+ "zb" "zB" "Zb" "ZB"
+
+ "kib" "kiB" "kIB" "kIb" "Kib" "KIb" "KIB"
+ "mib" "miB" "mIB" "mIb" "Mib" "MIb" "MIB"
+ "gib" "giB" "gIB" "gIb" "Gib" "GIb" "GIB"
+ "tib" "tiB" "tIB" "tIb" "Tib" "TIb" "TIB"
+ "pib" "piB" "pIB" "pIb" "Pib" "PIb" "PIB"
+ "eib" "eiB" "eIB" "eIb" "Eib" "EIb" "EIB"
+ "zib" "ziB" "zIB" "zIb" "Zib" "ZIb" "ZIB"
+ ] @variable.parameter
+)
+(val_binary
+ [
+ "0b"
+ "0o"
+ "0x"
+ ] @constant.numeric
+ "[" @punctuation.bracket
+ digit: [
+ "," @punctuation.delimiter
+ (hex_digit) @constant.number
+ ]
+ "]" @punctuation.bracket
+) @constant.numeric
+(val_bool) @constant.builtin
+(val_nothing) @constant.builtin
+(val_string) @string
+(val_date) @constant.number
+(inter_escape_sequence) @constant.character.escape
+(escape_sequence) @constant.character.escape
+(val_interpolated [
+ "$\""
+ "$\'"
+ "\""
+ "\'"
+] @string)
+(unescaped_interpolated_content) @string
+(escaped_interpolated_content) @string
+(expr_interpolated ["(" ")"] @variable.parameter)
+
+;;; ---
+;;; operators
+(expr_binary [
+ "+"
+ "-"
+ "*"
+ "/"
+ "mod"
+ "//"
+ "++"
+ "**"
+ "=="
+ "!="
+ "<"
+ "<="
+ ">"
+ ">="
+ "=~"
+ "!~"
+ "and"
+ "or"
+ "xor"
+ "bit-or"
+ "bit-xor"
+ "bit-and"
+ "bit-shl"
+ "bit-shr"
+ "in"
+ "not-in"
+ "starts-with"
+ "ends-with"
+] @operator )
+
+(where_command [
+ "+"
+ "-"
+ "*"
+ "/"
+ "mod"
+ "//"
+ "++"
+ "**"
+ "=="
+ "!="
+ "<"
+ "<="
+ ">"
+ ">="
+ "=~"
+ "!~"
+ "and"
+ "or"
+ "xor"
+ "bit-or"
+ "bit-xor"
+ "bit-and"
+ "bit-shl"
+ "bit-shr"
+ "in"
+ "not-in"
+ "starts-with"
+ "ends-with"
+] @operator)
+
+(assignment [
+ "="
+ "+="
+ "-="
+ "*="
+ "/="
+ "++="
+] @operator)
+
+(expr_unary ["not" "-"] @operator)
+
+(val_range [
+ ".."
+ "..="
+ "..<"
+] @operator)
+
+["=>" "=" "|"] @operator
+
[
- ; "/" Not making / an operator may lead to better highlighting?
- "$"
- "|"
- "+"
- "-"
- "*"
- "="
- "!="
- "&&"
- "||"
- "=="
- ">"
-] @operator
-
-["."
- ","
- ";"
+ "o>" "out>"
+ "e>" "err>"
+ "e+o>" "err+out>"
+ "o+e>" "out+err>"
+] @special
+
+;;; ---
+;;; punctuation
+[
+ ","
+ ";"
] @punctuation.delimiter
+
+(param_short_flag "-" @punctuation.delimiter)
+(param_long_flag ["--"] @punctuation.delimiter)
+(long_flag ["--"] @punctuation.delimiter)
+(param_rest "..." @punctuation.delimiter)
+(param_type [":"] @punctuation.special)
+(param_value ["="] @punctuation.special)
+(param_cmd ["@"] @punctuation.special)
+(param_opt ["?"] @punctuation.special)
+
+[
+ "(" ")"
+ "{" "}"
+ "[" "]"
+] @punctuation.bracket
+
+(val_record
+ (record_entry ":" @punctuation.delimiter))
+;;; ---
+;;; identifiers
+(param_rest
+ name: (_) @variable.parameter)
+(param_opt
+ name: (_) @variable.parameter)
+(parameter
+ param_name: (_) @variable.parameter)
+(param_cmd
+ (cmd_identifier) @string)
+(param_long_flag) @variable.parameter
+(param_short_flag) @variable.parameter
+
+(short_flag) @variable.parameter
+(long_flag) @variable.parameter
+
+(scope_pattern [(wild_card) @function])
+
+(cmd_identifier) @function
+
+(command
+ "^" @punctuation.delimiter
+ head: (_) @function
+)
+
+"where" @function
+
+(path
+ ["." "?"] @punctuation.delimiter
+) @variable.parameter
+
+(val_variable
+ "$" @variable.parameter
+ [
+ (identifier) @namespace
+ "in"
+ "nu"
+ "env"
+ "nothing"
+ ] @special
+)
+;;; ---
+;;; types
+(flat_type) @type.builtin
+(list_type
+ "list" @type.enum
+ ["<" ">"] @punctuation.bracket
+)
+(collection_type
+ ["record" "table"] @type.enum
+ "<" @punctuation.bracket
+ key: (_) @variable.parameter
+ ["," ":"] @punctuation.delimiter
+ ">" @punctuation.bracket
+)
+
+(shebang) @comment
+(comment) @comment
diff --git a/runtime/queries/nu/injections.scm b/runtime/queries/nu/injections.scm
index 321c90ad..30804d65 100644
--- a/runtime/queries/nu/injections.scm
+++ b/runtime/queries/nu/injections.scm
@@ -1,2 +1,2 @@
((comment) @injection.content
- (#set! injection.language "comment"))
+ (#set! injection.language "comment")) \ No newline at end of file
diff --git a/runtime/queries/nu/locals.scm b/runtime/queries/nu/locals.scm
deleted file mode 100644
index 2a341f80..00000000
--- a/runtime/queries/nu/locals.scm
+++ /dev/null
@@ -1,13 +0,0 @@
-; Scopes
-(function_definition) @scope
-
-; Definitions
-(variable_declaration
- name: (identifier) @definition.var)
-
-(function_definition
- func_name: (identifier) @definition.function)
-
-; References
-(value_path) @reference
-(word) @reference