nvim-treesitter/queries/nix/highlights.scm

121 lines
5.1 KiB
Scheme
Raw Normal View History

2020-11-18 16:52:41 -05:00
; basic keywords
[
2022-11-28 20:19:27 -05:00
"assert"
"in"
"inherit"
"let"
"rec"
"with"
2020-11-18 16:52:41 -05:00
] @keyword
2022-11-28 20:19:27 -05:00
; 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"))
2020-11-18 16:52:41 -05:00
; if/then/else
[
2022-11-28 20:19:27 -05:00
"if"
"then"
"else"
2020-11-18 16:52:41 -05:00
] @conditional
2020-11-19 12:42:34 -05:00
; field access default (`a.b or c`)
2022-11-28 20:19:27 -05:00
"or" @keyword.operator
2020-11-18 16:52:41 -05:00
; comments
(comment) @comment
; strings
2022-05-22 13:22:01 +02:00
[ (string_expression) (indented_string_expression) ] @string
2020-11-18 16:52:41 -05:00
; paths and URLs
2022-05-22 13:22:01 +02:00
[ (path_expression) (spath_expression) (uri_expression) ] @string.special
2020-11-18 16:52:41 -05:00
2020-11-19 15:16:07 -05:00
; escape sequences
(escape_sequence) @string.escape
2020-11-18 16:52:41 -05:00
; delimiters
[
"."
";"
","
] @punctuation.delimiter
; brackets
[
"("
")"
"["
"]"
"{"
"}"
] @punctuation.bracket
; `?` in `{ x ? y }:`, used to set defaults for named function arguments
2022-11-21 18:18:11 -05:00
(formal
name: (identifier) @parameter
2022-11-28 20:19:27 -05:00
"?"? @operator)
2020-11-18 16:52:41 -05:00
; `...` in `{ ... }`, used to ignore unknown named function arguments (see above)
(ellipses) @punctuation.special
2022-11-21 18:18:11 -05:00
; universal is the parameter of the function expression
2020-11-18 16:52:41 -05:00
; `:` in `x: y`, used to separate function argument from body (see above)
2022-11-21 18:18:11 -05:00
(function_expression
universal: (identifier) @parameter
":" @punctuation.special)
2020-11-18 16:52:41 -05:00
2022-11-28 20:19:27 -05:00
; function calls
(apply_expression
function: (variable_expression
name: (identifier) @function.call))
2020-11-18 16:52:41 -05:00
; basic identifiers
2022-05-22 13:22:01 +02:00
(variable_expression) @variable
2020-11-18 16:52:41 -05:00
2022-11-30 10:19:53 -05:00
((identifier) @include (#eq? @include "import"))
((identifier) @boolean (#any-of? @boolean "true" "false"))
2020-11-18 16:52:41 -05:00
; builtin functions
2022-11-28 20:19:27 -05:00
((identifier) @function.builtin (#any-of? @function.builtin
2022-11-30 10:19:53 -05:00
; nix eval --impure --expr 'with builtins; filter (x: x != "import" && isFunction builtins.${x}) (attrNames builtins)'
"abort" "add" "addErrorContext" "all" "any" "appendContext" "attrNames" "attrValues" "baseNameOf" "bitAnd" "bitOr" "bitXor" "break" "catAttrs" "ceil" "compareVersions" "concatLists" "concatMap" "concatStringsSep" "deepSeq" "derivation" "derivationStrict" "dirOf" "div" "elem" "elemAt" "fetchGit" "fetchMercurial" "fetchTarball" "fetchTree" "fetchurl" "filter" "filterSource" "findFile" "floor" "foldl'" "fromJSON" "fromTOML" "functionArgs" "genList" "genericClosure" "getAttr" "getContext" "getEnv" "getFlake" "groupBy" "hasAttr" "hasContext" "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" "scopedImport" "seq" "sort" "split" "splitVersion" "storePath" "stringLength" "sub" "substring" "tail" "throw" "toFile" "toJSON" "toPath" "toString" "toXML" "trace" "traceVerbose" "tryEval" "typeOf" "unsafeDiscardOutputDependency" "unsafeDiscardStringContext" "unsafeGetAttrPos" "zipAttrsWith"
; primops, `__<tab>` in `nix repl`
"__add" "__filter" "__isFunction" "__split" "__addErrorContext" "__filterSource" "__isInt" "__splitVersion" "__all" "__findFile" "__isList" "__storeDir" "__any" "__floor" "__isPath" "__storePath" "__appendContext" "__foldl'" "__isString" "__stringLength" "__attrNames" "__fromJSON" "__langVersion" "__sub" "__attrValues" "__functionArgs" "__length" "__substring" "__bitAnd" "__genList" "__lessThan" "__tail" "__bitOr" "__genericClosure" "__listToAttrs" "__toFile" "__bitXor" "__getAttr" "__mapAttrs" "__toJSON" "__catAttrs" "__getContext" "__match" "__toPath" "__ceil" "__getEnv" "__mul" "__toXML" "__compareVersions" "__getFlake" "__nixPath" "__trace" "__concatLists" "__groupBy" "__nixVersion" "__traceVerbose" "__concatMap" "__hasAttr" "__parseDrvName" "__tryEval" "__concatStringsSep" "__hasContext" "__partition" "__typeOf" "__currentSystem" "__hashFile" "__path" "__unsafeDiscardOutputDependency" "__currentTime" "__hashString" "__pathExists" "__unsafeDiscardStringContext" "__deepSeq" "__head" "__readDir" "__unsafeGetAttrPos" "__div" "__intersectAttrs" "__readFile" "__zipAttrsWith" "__elem" "__isAttrs" "__replaceStrings" "__elemAt" "__isBool" "__seq" "__fetchurl" "__isFloat" "__sort"
2022-11-28 20:19:27 -05:00
))
; constants
2022-11-30 10:19:53 -05:00
((identifier) @constant.builtin (#any-of? @constant.builtin
; nix eval --impure --expr 'with builtins; filter (x: !(isFunction builtins.${x} || isBool builtins.${x})) (attrNames builtins)'
"builtins" "currentSystem" "currentTime" "langVersion" "nixPath" "nixVersion" "null" "storeDir"
))
2020-11-18 16:52:41 -05:00
; string interpolation (this was very annoying to get working properly)
(interpolation "${" @punctuation.special (_) "}" @punctuation.special) @none
2022-11-28 20:19:27 -05:00
(select_expression
2022-11-30 10:19:53 -05:00
expression: (_) @_expr
attrpath: (attrpath attr: (identifier) @field)
(#not-eq? @_expr "builtins")
)
2022-05-22 13:22:01 +02:00
(attrset_expression (binding_set (binding . (attrpath (identifier) @field))))
(rec_attrset_expression (binding_set (binding . (attrpath (identifier) @field))))
2020-11-18 17:43:17 -05:00
2020-11-18 16:52:41 -05:00
; unary operators
2022-05-22 13:22:01 +02:00
(unary_expression operator: _ @operator)
2020-11-18 16:52:41 -05:00
; binary operators
2022-05-22 13:22:01 +02:00
(binary_expression operator: _ @operator)
2020-11-19 12:47:10 -05:00
; integers, also highlight a unary -
[
2022-05-22 13:22:01 +02:00
(unary_expression "-" (integer_expression))
(integer_expression)
2020-11-19 12:47:10 -05:00
] @number
; floats, also highlight a unary -
[
2022-05-22 13:22:01 +02:00
(unary_expression "-" (float_expression))
(float_expression)
2020-11-19 12:47:10 -05:00
] @float