nvim-treesitter/queries/nix/highlights.scm

134 lines
5.3 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
(variable_expression
name: (identifier) @keyword
(#eq? @keyword "derivation")
(#set! "priority" 101))
; exceptions
(variable_expression
name: (identifier) @exception
(#any-of? @exception "abort" "throw")
(#set! "priority" 101))
2022-11-28 20:19:27 -05:00
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
([ (string_expression) (indented_string_expression) ]
(#set! "priority" 99)) @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
(variable_expression
name: (identifier) @include
(#eq? @include "import"))
(variable_expression
name: (identifier) @boolean
(#any-of? @boolean "true" "false"))
2022-11-30 10:19:53 -05:00
2020-11-18 16:52:41 -05:00
; builtin functions
(variable_expression name: (identifier) @function.builtin (#any-of? @function.builtin
; nix eval --impure --expr 'with builtins; filter (x: !(elem x [ "abort" "derivation" "import" "throw" ]) && isFunction builtins.${x}) (attrNames builtins)'
"add" "addErrorContext" "all" "any" "appendContext" "attrNames" "attrValues" "baseNameOf" "bitAnd" "bitOr" "bitXor" "break" "catAttrs" "ceil" "compareVersions" "concatLists" "concatMap" "concatStringsSep" "deepSeq" "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" "toFile" "toJSON" "toPath" "toString" "toXML" "trace" "traceVerbose" "tryEval" "typeOf" "unsafeDiscardOutputDependency" "unsafeDiscardStringContext" "unsafeGetAttrPos" "zipAttrsWith"
2022-11-30 10:19:53 -05:00
; 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
(variable_expression name: (identifier) @constant.builtin (#any-of? @constant.builtin
2022-11-30 10:19:53 -05:00
; 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