highlights(nix): improve highlights

This commit is contained in:
figsoda 2022-11-28 20:19:27 -05:00 committed by Stephan Seitz
parent a851cef248
commit df67a47a7e

View file

@ -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
; 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"
))
; 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
; 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))))