diff --git a/languages.toml b/languages.toml index 35c4b4704ca35..fdf0513a0da3b 100644 --- a/languages.toml +++ b/languages.toml @@ -439,7 +439,7 @@ indent = { tab-width = 2, unit = " " } [[grammar]] name = "nix" -source = { git = "https://github.com/cstrahan/tree-sitter-nix", rev = "50f38ceab667f9d482640edfee803d74f4edeba5" } +source = { git = "https://github.com/cstrahan/tree-sitter-nix", rev = "6b71a810c0acd49b980c50fc79092561f7cee307" } [[language]] name = "ruby" diff --git a/runtime/queries/nix/highlights.scm b/runtime/queries/nix/highlights.scm index f6682065e7f69..d5ff40325b79f 100644 --- a/runtime/queries/nix/highlights.scm +++ b/runtime/queries/nix/highlights.scm @@ -1,15 +1,16 @@ (comment) @comment [ - "if" + "if" "then" "else" "let" "inherit" "in" "rec" - "with" + "with" "assert" + "or" ] @keyword ((identifier) @variable.builtin @@ -21,25 +22,25 @@ (#is-not? local)) [ - (string) - (indented_string) + (string_expression) + (indented_string_expression) ] @string [ - (path) - (hpath) - (spath) + (path_expression) + (hpath_expression) + (spath_expression) ] @string.special.path -(uri) @string.special.uri +(uri_expression) @string.special.uri ; boolean ((identifier) @constant.builtin.boolean (#match? @constant.builtin.boolean "^(true|false)$")) @constant.builtin.boolean ; null ((identifier) @constant.builtin (#eq? @constant.builtin "null")) @constant.builtin -(integer) @constant.numeric.integer -(float) @constant.numeric.float +(integer_expression) @constant.numeric.integer +(float_expression) @constant.numeric.float (interpolation "${" @punctuation.special @@ -47,7 +48,7 @@ (escape_sequence) @constant.character.escape -(function +(function_expression universal: (identifier) @variable.parameter ) @@ -55,27 +56,36 @@ name: (identifier) @variable.parameter "?"? @punctuation.delimiter) -(app +(select_expression + attrpath: (attrpath (identifier)) @variable.other.member) + +(apply_expression function: [ - (identifier) @function - (select + (variable_expression (identifier)) @function + (select_expression attrpath: (attrpath - attr: (attr_identifier) @function .))]) - + attr: (identifier) @function .))]) -(unary +(unary_expression operator: _ @operator) -(binary +(binary_expression operator: _ @operator) -(attr_identifier) @variable.other.member -(inherit attrs: (attrs_inherited (identifier) @variable.other.member) ) +(variable_expression (identifier) @variable) + +(binding + attrpath: (attrpath (identifier)) @variable.other.member) + +(identifier) @variable.other.member + +(inherit_from attrs: (inherited_attrs attr: (identifier) @variable.other.member) ) [ ";" "." "," + "=" ] @punctuation.delimiter [ @@ -85,6 +95,4 @@ "]" "{" "}" -] @punctuation.bracket - -(identifier) @variable +] @punctuation.bracket \ No newline at end of file diff --git a/runtime/queries/nix/indents.scm b/runtime/queries/nix/indents.scm index 0790ce2919ff1..a12376e7de70d 100644 --- a/runtime/queries/nix/indents.scm +++ b/runtime/queries/nix/indents.scm @@ -1,18 +1,25 @@ + [ - ; "function", - (bind) - (assert) - (with) + ; Bracket like (let) - (if) - (attrset) - (list) - (indented_string) + (rec_attrset) + (let_attrset) (parenthesized) -] @indent + (list) -[ - "}" - "]" -] @outdent + ; Binding + (bind) + (inherit) + (inherit_from) + (formal) + + ; Binary operations + (binary) + (has_attr) + (select) + (app) + + ; Conditional + (if) +] @indent \ No newline at end of file