diff options
| author | figsoda <figsoda@pm.me> | 2022-11-28 20:19:27 -0500 |
|---|---|---|
| committer | Stephan Seitz <stephan.seitz@fau.de> | 2022-12-23 13:08:05 +0100 |
| commit | df67a47a7e68c6df045e5a51ca87bca383891f1e (patch) | |
| tree | 2605be2a15817a52f6a241ce9d48506465d1269f /queries/nix | |
| parent | injections(nix): fix runCommand* (diff) | |
| download | nvim-treesitter-df67a47a7e68c6df045e5a51ca87bca383891f1e.tar nvim-treesitter-df67a47a7e68c6df045e5a51ca87bca383891f1e.tar.gz nvim-treesitter-df67a47a7e68c6df045e5a51ca87bca383891f1e.tar.bz2 nvim-treesitter-df67a47a7e68c6df045e5a51ca87bca383891f1e.tar.lz nvim-treesitter-df67a47a7e68c6df045e5a51ca87bca383891f1e.tar.xz nvim-treesitter-df67a47a7e68c6df045e5a51ca87bca383891f1e.tar.zst nvim-treesitter-df67a47a7e68c6df045e5a51ca87bca383891f1e.zip | |
highlights(nix): improve highlights
Diffstat (limited to 'queries/nix')
| -rw-r--r-- | queries/nix/highlights.scm | 148 |
1 files changed, 120 insertions, 28 deletions
diff --git a/queries/nix/highlights.scm b/queries/nix/highlights.scm index 3885d5d90..94ff7b2f1 100644 --- a/queries/nix/highlights.scm +++ b/queries/nix/highlights.scm @@ -1,22 +1,26 @@ ; basic keywords [ - ("assert") - ("with") - ("let") - ("in") - ("rec") - ("inherit") + "assert" + "in" + "inherit" + "let" + "rec" + "with" ] @keyword +; these are technically functions but they act more like keywords (abort and throw are control flow, derivation is a core language construct) +((identifier) @keyword + (#any-of? @keyword "abort" "derivation" "throw")) + ; if/then/else [ - ("if") - ("then") - ("else") + "if" + "then" + "else" ] @conditional ; field access default (`a.b or c`) -("or") @keyword.operator +"or" @keyword.operator ; comments (comment) @comment @@ -48,10 +52,9 @@ ] @punctuation.bracket ; `?` in `{ x ? y }:`, used to set defaults for named function arguments -; I'm not really sure what group this should go in, but it should probably have highlighting, so I'm putting it in @punctuation.special (formal name: (identifier) @parameter - "?"? @punctuation.special) + "?"? @operator) ; `...` in `{ ... }`, used to ignore unknown named function arguments (see above) (ellipses) @punctuation.special @@ -62,33 +65,122 @@ universal: (identifier) @parameter ":" @punctuation.special) +; function calls +(apply_expression + function: (variable_expression + name: (identifier) @function.call)) + ; basic identifiers (variable_expression) @variable ; builtin functions -((identifier) @_i (#match? @_i "^(builtins|baseNameOf|dirOf|fetchTarball|map|removeAttrs|toString)$")) @variable.builtin - -; display entire builtins path as builtin (ex. `builtins.filter` is highlighted as one long builtin) -(select_expression - expression: ((variable_expression) @_i (#eq? @_i "builtins")) - attrpath: (attrpath attr: (identifier) @variable.builtin)) @variable.builtin - -; import -((identifier) @_i (#eq? @_i "import")) @include +; modified from `nix __dump-builtins | jq keys` +((identifier) @function.builtin (#any-of? @function.builtin + "add" + "all" + "any" + "attrNames" + "attrValues" + "baseNameOf" + "bitAnd" + "bitOr" + "bitXor" + "break" + "catAttrs" + "ceil" + "compareVersions" + "concatLists" + "concatMap" + "concatStringsSep" + "deepSeq" + "dirOf" + "div" + "elem" + "elemAt" + "fetchClosure" + "fetchGit" + "fetchTarball" + "fetchurl" + "filter" + "filterSource" + "floor" + "foldl'" + "fromJSON" + "functionArgs" + "genList" + "genericClosure" + "getAttr" + "getEnv" + "getFlake" + "groupBy" + "hasAttr" + "hashFile" + "hashString" + "head" + "intersectAttrs" + "isAttrs" + "isBool" + "isFloat" + "isFunction" + "isInt" + "isList" + "isNull" + "isPath" + "isString" + "length" + "lessThan" + "listToAttrs" + "map" + "mapAttrs" + "match" + "mul" + "parseDrvName" + "partition" + "path" + "pathExists" + "placeholder" + "readDir" + "readFile" + "removeAttrs" + "replaceStrings" + "seq" + "sort" + "split" + "splitVersion" + "storePath" + "stringLength" + "sub" + "substring" + "tail" + "toFile" + "toJSON" + "toPath" + "toString" + "toXML" + "trace" + "traceVerbose" + "tryEval" + "typeOf" + "zipAttrsWith" +)) -; null -((identifier) @_i (#eq? @_i "import")) @constant.builtin - -; these are technically functions but they act more like keywords (abort and throw are control flow, derivation is a core language construct) -((identifier) @_i (#match? @_i "^(abort|derivation|throw)$")) @keyword +((identifier) @include (#eq? @include "import")) ; booleans -((identifier) @_i (#match? @_i "^(true|false)$")) @boolean +((identifier) @boolean (#any-of? @boolean "true" "false")) + +; constants +((identifier) @constant.builtin (#any-of? @constant.builtin "builtins" "null")) ; string interpolation (this was very annoying to get working properly) (interpolation "${" @punctuation.special (_) "}" @punctuation.special) @none -; fields (the `.` in `a.b = c;` isn't included) +; display entire builtins path as builtin (ex. `builtins.filter` is highlighted as one long builtin) +(select_expression + expression: ((variable_expression) @_i (#eq? @_i "builtins")) + attrpath: (attrpath attr: (identifier) @function.builtin)) + +(select_expression attrpath: (attrpath attr: (identifier) @field)) (attrset_expression (binding_set (binding . (attrpath (identifier) @field)))) (rec_attrset_expression (binding_set (binding . (attrpath (identifier) @field)))) |
