Skip to content

Commit

Permalink
Update tree-sitter grammar for nu (helix-editor#7873)
Browse files Browse the repository at this point in the history
* Update tree-sitter grammar for nu

Change tree-sitter grammar for nushell to 'officially' maintained
by nushell project https://github.com/nushell/tree-sitter-nu. Update
to the latest version. Replace queries with supported

* Restore injection queries for nu

Restore injection.scm queries for nushell tree-sitter grammar
  • Loading branch information
NotLebedev authored and dgkf committed Jan 30, 2024
1 parent f9e8baa commit a35ce8f
Show file tree
Hide file tree
Showing 5 changed files with 278 additions and 63 deletions.
2 changes: 1 addition & 1 deletion languages.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
4 changes: 0 additions & 4 deletions runtime/queries/nu/folds.scm

This file was deleted.

320 changes: 276 additions & 44 deletions runtime/queries/nu/highlights.scm
Original file line number Diff line number Diff line change
@@ -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
2 changes: 1 addition & 1 deletion runtime/queries/nu/injections.scm
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
((comment) @injection.content
(#set! injection.language "comment"))
(#set! injection.language "comment"))
13 changes: 0 additions & 13 deletions runtime/queries/nu/locals.scm

This file was deleted.

0 comments on commit a35ce8f

Please sign in to comment.