From 107763083405868f3679d8e12476ed0688896f87 Mon Sep 17 00:00:00 2001 From: Artemiy Date: Wed, 9 Aug 2023 15:00:59 +0300 Subject: [PATCH] Update tree-sitter grammar for nu (#7873) * 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 --- languages.toml | 2 +- runtime/queries/nu/folds.scm | 4 - runtime/queries/nu/highlights.scm | 320 ++++++++++++++++++++++++++---- runtime/queries/nu/injections.scm | 2 +- runtime/queries/nu/locals.scm | 13 -- 5 files changed, 278 insertions(+), 63 deletions(-) delete mode 100644 runtime/queries/nu/folds.scm delete mode 100644 runtime/queries/nu/locals.scm diff --git a/languages.toml b/languages.toml index 465b505bc..618b18c1d 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 f6b5acb15..000000000 --- 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 b643a63af..746c50251 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 321c90add..30804d652 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 2a341f80e..000000000 --- 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