aboutsummaryrefslogtreecommitdiffstats
path: root/queries/nix
diff options
context:
space:
mode:
authorfigsoda <figsoda@pm.me>2022-11-28 20:19:27 -0500
committerStephan Seitz <stephan.seitz@fau.de>2022-12-23 13:08:05 +0100
commitdf67a47a7e68c6df045e5a51ca87bca383891f1e (patch)
tree2605be2a15817a52f6a241ce9d48506465d1269f /queries/nix
parentinjections(nix): fix runCommand* (diff)
downloadnvim-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.scm148
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))))