nvim-treesitter/queries/nix/highlights.scm

147 lines
5.6 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
2023-09-13 00:25:01 +09:00
(comment) @comment @spell
2020-11-18 16:52:41 -05:00
; strings
([ (string_expression) (indented_string_expression) ]
(#set! "priority" 99)) @string
2020-11-18 16:52:41 -05:00
; paths and URLs
[ (path_expression) (hpath_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
; builtin functions (with builtins prefix)
(select_expression
expression: (variable_expression name: (identifier) @_id)
attrpath: (attrpath attr: (identifier) @function.builtin)
(#eq? @_id "builtins")
)
; builtin functions (without builtins prefix)
(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
; function definition
(binding
attrpath: (attrpath attr: (identifier) @function)
expression: (function_expression))
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