UNPKG

tm-grammars

Version:
1,201 lines (1,200 loc) 27.8 kB
{ "displayName": "Nix", "fileTypes": [ "nix" ], "name": "nix", "patterns": [ { "include": "#expression" } ], "repository": { "attribute-bind": { "patterns": [ { "include": "#attribute-name" }, { "include": "#attribute-bind-from-equals" } ] }, "attribute-bind-from-equals": { "begin": "=", "beginCaptures": { "0": { "name": "keyword.operator.bind.nix" } }, "end": ";", "endCaptures": { "0": { "name": "punctuation.terminator.bind.nix" } }, "patterns": [ { "include": "#expression" } ] }, "attribute-inherit": { "begin": "\\binherit\\b", "beginCaptures": { "0": { "name": "keyword.other.inherit.nix" } }, "end": ";", "endCaptures": { "0": { "name": "punctuation.terminator.inherit.nix" } }, "patterns": [ { "begin": "\\(", "beginCaptures": { "0": { "name": "punctuation.section.function.arguments.nix" } }, "end": "(?=;)", "patterns": [ { "begin": "\\)", "beginCaptures": { "0": { "name": "punctuation.section.function.arguments.nix" } }, "end": "(?=;)", "patterns": [ { "include": "#bad-reserved" }, { "include": "#attribute-name-single" }, { "include": "#others" } ] }, { "include": "#expression" } ] }, { "begin": "(?=[A-Z_a-z])", "end": "(?=;)", "patterns": [ { "include": "#bad-reserved" }, { "include": "#attribute-name-single" }, { "include": "#others" } ] }, { "include": "#others" } ] }, "attribute-name": { "patterns": [ { "match": "\\b[A-Z_a-z][-'0-9A-Z_a-z]*", "name": "entity.other.attribute-name.multipart.nix" }, { "match": "\\." }, { "include": "#string-quoted" }, { "include": "#interpolation" } ] }, "attribute-name-single": { "match": "\\b[A-Z_a-z][-'0-9A-Z_a-z]*", "name": "entity.other.attribute-name.single.nix" }, "attrset-contents": { "patterns": [ { "include": "#attribute-inherit" }, { "include": "#bad-reserved" }, { "include": "#attribute-bind" }, { "include": "#others" } ] }, "attrset-definition": { "begin": "(?=\\{)", "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "begin": "(\\{)", "beginCaptures": { "0": { "name": "punctuation.definition.attrset.nix" } }, "end": "(})", "endCaptures": { "0": { "name": "punctuation.definition.attrset.nix" } }, "patterns": [ { "include": "#attrset-contents" } ] }, { "begin": "(?<=})", "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "include": "#expression-cont" } ] } ] }, "attrset-definition-brace-opened": { "patterns": [ { "begin": "(?<=})", "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "include": "#expression-cont" } ] }, { "begin": "(?=.?)", "end": "}", "endCaptures": { "0": { "name": "punctuation.definition.attrset.nix" } }, "patterns": [ { "include": "#attrset-contents" } ] } ] }, "attrset-for-sure": { "patterns": [ { "begin": "(?=\\brec\\b)", "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "begin": "\\brec\\b", "beginCaptures": { "0": { "name": "keyword.other.nix" } }, "end": "(?=\\{)", "patterns": [ { "include": "#others" } ] }, { "include": "#attrset-definition" }, { "include": "#others" } ] }, { "begin": "(?=\\{\\s*(}|[^,?]*([;=])))", "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "include": "#attrset-definition" }, { "include": "#others" } ] } ] }, "attrset-or-function": { "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.definition.attrset-or-function.nix" } }, "end": "(?=([]);}]|\\b(else|then)\\b))", "patterns": [ { "begin": "(?=(\\s*}|\"|\\binherit\\b|\\$\\{|\\b[A-Z_a-z][-'0-9A-Z_a-z]*(\\s*\\.|\\s*=[^=])))", "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "include": "#attrset-definition-brace-opened" } ] }, { "begin": "(?=(\\.\\.\\.|\\b[A-Z_a-z][-'0-9A-Z_a-z]*\\s*[,?]))", "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "include": "#function-definition-brace-opened" } ] }, { "include": "#bad-reserved" }, { "begin": "\\b[A-Z_a-z][-'0-9A-Z_a-z]*", "beginCaptures": { "0": { "name": "variable.parameter.function.maybe.nix" } }, "end": "(?=([]);}]|\\b(else|then)\\b))", "patterns": [ { "begin": "(?=\\.)", "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "include": "#attrset-definition-brace-opened" } ] }, { "begin": "\\s*(,)", "beginCaptures": { "1": { "name": "keyword.operator.nix" } }, "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "include": "#function-definition-brace-opened" } ] }, { "begin": "(?==)", "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "include": "#attribute-bind-from-equals" }, { "include": "#attrset-definition-brace-opened" } ] }, { "begin": "(?=\\?)", "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "include": "#function-parameter-default" }, { "begin": ",", "beginCaptures": { "0": { "name": "keyword.operator.nix" } }, "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "include": "#function-definition-brace-opened" } ] } ] }, { "include": "#others" } ] }, { "include": "#others" } ] }, "bad-reserved": { "match": "(?<![-'\\w])(if|then|else|assert|with|let|in|rec|inherit)(?![-'\\w])", "name": "invalid.illegal.reserved.nix" }, "comment": { "patterns": [ { "begin": "/\\*([^*]|\\*[^/])*", "end": "\\*/", "name": "comment.block.nix", "patterns": [ { "include": "#comment-remark" } ] }, { "begin": "#", "end": "$", "name": "comment.line.number-sign.nix", "patterns": [ { "include": "#comment-remark" } ] } ] }, "comment-remark": { "captures": { "1": { "name": "markup.bold.comment.nix" } }, "match": "(TODO|FIXME|BUG|!!!):?" }, "constants": { "patterns": [ { "begin": "\\b(builtins|true|false|null)\\b", "beginCaptures": { "0": { "name": "constant.language.nix" } }, "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "include": "#expression-cont" } ] }, { "begin": "\\b(scopedImport|import|isNull|abort|throw|baseNameOf|dirOf|removeAttrs|map|toString|derivationStrict|derivation)\\b", "beginCaptures": { "0": { "name": "support.function.nix" } }, "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "include": "#expression-cont" } ] }, { "begin": "\\b[0-9]+\\b", "beginCaptures": { "0": { "name": "constant.numeric.nix" } }, "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "include": "#expression-cont" } ] } ] }, "expression": { "patterns": [ { "include": "#parens-and-cont" }, { "include": "#list-and-cont" }, { "include": "#string" }, { "include": "#interpolation" }, { "include": "#with-assert" }, { "include": "#function-for-sure" }, { "include": "#attrset-for-sure" }, { "include": "#attrset-or-function" }, { "include": "#let" }, { "include": "#if" }, { "include": "#operator-unary" }, { "include": "#constants" }, { "include": "#bad-reserved" }, { "include": "#parameter-name-and-cont" }, { "include": "#others" } ] }, "expression-cont": { "begin": "(?=.?)", "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "include": "#parens" }, { "include": "#list" }, { "include": "#string" }, { "include": "#interpolation" }, { "include": "#function-for-sure" }, { "include": "#attrset-for-sure" }, { "include": "#attrset-or-function" }, { "match": "(\\bor\\b|\\.|\\|>|<\\||==|!=|!|<=|<|>=|>|&&|\\|\\||->|//|\\?|\\+\\+|[-*]|/(?=([^*]|$))|\\+)", "name": "keyword.operator.nix" }, { "include": "#constants" }, { "include": "#bad-reserved" }, { "include": "#parameter-name" }, { "include": "#others" } ] }, "function-body": { "begin": "(@\\s*([A-Z_a-z][-'0-9A-Z_a-z]*)\\s*)?(:)", "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "include": "#expression" } ] }, "function-body-from-colon": { "begin": "(:)", "beginCaptures": { "0": { "name": "punctuation.definition.function.nix" } }, "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "include": "#expression" } ] }, "function-contents": { "patterns": [ { "include": "#bad-reserved" }, { "include": "#function-parameter" }, { "include": "#others" } ] }, "function-definition": { "begin": "(?=.?)", "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "include": "#function-body-from-colon" }, { "begin": "(?=.?)", "end": "(?=:)", "patterns": [ { "begin": "\\b([A-Z_a-z][-'0-9A-Z_a-z]*)", "beginCaptures": { "0": { "name": "variable.parameter.function.4.nix" } }, "end": "(?=:)", "patterns": [ { "begin": "@", "end": "(?=:)", "patterns": [ { "include": "#function-header-until-colon-no-arg" }, { "include": "#others" } ] }, { "include": "#others" } ] }, { "begin": "(?=\\{)", "end": "(?=:)", "patterns": [ { "include": "#function-header-until-colon-with-arg" } ] } ] }, { "include": "#others" } ] }, "function-definition-brace-opened": { "begin": "(?=.?)", "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "include": "#function-body-from-colon" }, { "begin": "(?=.?)", "end": "(?=:)", "patterns": [ { "include": "#function-header-close-brace-with-arg" }, { "begin": "(?=.?)", "end": "(?=})", "patterns": [ { "include": "#function-contents" } ] } ] }, { "include": "#others" } ] }, "function-for-sure": { "patterns": [ { "begin": "(?=(\\b[A-Z_a-z][-'0-9A-Z_a-z]*\\s*[:@]|\\{[^}]*}\\s*:|\\{[^\"#'/=}]*[,?]))", "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "include": "#function-definition" } ] } ] }, "function-header-close-brace-no-arg": { "begin": "}", "beginCaptures": { "0": { "name": "punctuation.definition.entity.function.nix" } }, "end": "(?=:)", "patterns": [ { "include": "#others" } ] }, "function-header-close-brace-with-arg": { "begin": "}", "beginCaptures": { "0": { "name": "punctuation.definition.entity.function.nix" } }, "end": "(?=:)", "patterns": [ { "include": "#function-header-terminal-arg" }, { "include": "#others" } ] }, "function-header-open-brace": { "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.definition.entity.function.2.nix" } }, "end": "(?=})", "patterns": [ { "include": "#function-contents" } ] }, "function-header-terminal-arg": { "begin": "(?=@)", "end": "(?=:)", "patterns": [ { "begin": "@", "end": "(?=:)", "patterns": [ { "begin": "\\b([A-Z_a-z][-'0-9A-Z_a-z]*)", "end": "(?=:)", "name": "variable.parameter.function.3.nix" }, { "include": "#others" } ] }, { "include": "#others" } ] }, "function-header-until-colon-no-arg": { "begin": "(?=\\{)", "end": "(?=:)", "patterns": [ { "include": "#function-header-open-brace" }, { "include": "#function-header-close-brace-no-arg" } ] }, "function-header-until-colon-with-arg": { "begin": "(?=\\{)", "end": "(?=:)", "patterns": [ { "include": "#function-header-open-brace" }, { "include": "#function-header-close-brace-with-arg" } ] }, "function-parameter": { "patterns": [ { "begin": "(\\.\\.\\.)", "end": "(,|(?=}))", "name": "keyword.operator.nix", "patterns": [ { "include": "#others" } ] }, { "begin": "\\b[A-Z_a-z][-'0-9A-Z_a-z]*", "beginCaptures": { "0": { "name": "variable.parameter.function.1.nix" } }, "end": "(,|(?=}))", "endCaptures": { "0": { "name": "keyword.operator.nix" } }, "patterns": [ { "include": "#whitespace" }, { "include": "#comment" }, { "include": "#function-parameter-default" }, { "include": "#expression" } ] }, { "include": "#others" } ] }, "function-parameter-default": { "begin": "\\?", "beginCaptures": { "0": { "name": "keyword.operator.nix" } }, "end": "(?=[,}])", "patterns": [ { "include": "#expression" } ] }, "if": { "begin": "(?=\\bif\\b)", "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "begin": "\\bif\\b", "beginCaptures": { "0": { "name": "keyword.other.nix" } }, "end": "\\bth(?=en\\b)", "endCaptures": { "0": { "name": "keyword.other.nix" } }, "patterns": [ { "include": "#expression" } ] }, { "begin": "(?<=th)en\\b", "beginCaptures": { "0": { "name": "keyword.other.nix" } }, "end": "\\bel(?=se\\b)", "endCaptures": { "0": { "name": "keyword.other.nix" } }, "patterns": [ { "include": "#expression" } ] }, { "begin": "(?<=el)se\\b", "beginCaptures": { "0": { "name": "keyword.other.nix" } }, "end": "(?=([]),;}]|\\b(else|then)\\b))", "endCaptures": { "0": { "name": "keyword.other.nix" } }, "patterns": [ { "include": "#expression" } ] } ] }, "illegal": { "match": ".", "name": "invalid.illegal" }, "interpolation": { "begin": "\\$\\{", "beginCaptures": { "0": { "name": "punctuation.section.embedded.begin.nix" } }, "end": "}", "endCaptures": { "0": { "name": "punctuation.section.embedded.end.nix" } }, "name": "meta.embedded", "patterns": [ { "include": "#expression" } ] }, "let": { "begin": "(?=\\blet\\b)", "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "begin": "\\blet\\b", "beginCaptures": { "0": { "name": "keyword.other.nix" } }, "end": "(?=([]),;}]|\\b(in|else|then)\\b))", "patterns": [ { "begin": "(?=\\{)", "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "begin": "\\{", "end": "}", "patterns": [ { "include": "#attrset-contents" } ] }, { "begin": "(^|(?<=}))", "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "include": "#expression-cont" } ] }, { "include": "#others" } ] }, { "include": "#attrset-contents" }, { "include": "#others" } ] }, { "begin": "\\bin\\b", "beginCaptures": { "0": { "name": "keyword.other.nix" } }, "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "include": "#expression" } ] } ] }, "list": { "begin": "\\[", "beginCaptures": { "0": { "name": "punctuation.definition.list.nix" } }, "end": "]", "endCaptures": { "0": { "name": "punctuation.definition.list.nix" } }, "patterns": [ { "include": "#expression" } ] }, "list-and-cont": { "begin": "(?=\\[)", "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "include": "#list" }, { "include": "#expression-cont" } ] }, "operator-unary": { "match": "([-!])", "name": "keyword.operator.unary.nix" }, "others": { "patterns": [ { "include": "#whitespace" }, { "include": "#comment" }, { "include": "#illegal" } ] }, "parameter-name": { "captures": { "0": { "name": "variable.parameter.name.nix" } }, "match": "\\b[A-Z_a-z][-'0-9A-Z_a-z]*" }, "parameter-name-and-cont": { "begin": "\\b[A-Z_a-z][-'0-9A-Z_a-z]*", "beginCaptures": { "0": { "name": "variable.parameter.name.nix" } }, "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "include": "#expression-cont" } ] }, "parens": { "begin": "\\(", "beginCaptures": { "0": { "name": "punctuation.definition.expression.nix" } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.definition.expression.nix" } }, "patterns": [ { "include": "#expression" } ] }, "parens-and-cont": { "begin": "(?=\\()", "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "include": "#parens" }, { "include": "#expression-cont" } ] }, "string": { "patterns": [ { "begin": "(?='')", "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "begin": "''", "beginCaptures": { "0": { "name": "punctuation.definition.string.other.start.nix" } }, "end": "''(?![$']|\\\\.)", "endCaptures": { "0": { "name": "punctuation.definition.string.other.end.nix" } }, "name": "string.quoted.other.nix", "patterns": [ { "match": "''([$']|\\\\.)", "name": "constant.character.escape.nix" }, { "include": "#interpolation" } ] }, { "include": "#expression-cont" } ] }, { "begin": "(?=\")", "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "include": "#string-quoted" }, { "include": "#expression-cont" } ] }, { "begin": "(~?[-+.0-9A-Z_a-z]*(/[-+.0-9A-Z_a-z]+)+)", "beginCaptures": { "0": { "name": "string.unquoted.path.nix" } }, "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "include": "#expression-cont" } ] }, { "begin": "(<[-+.0-9A-Z_a-z]+(/[-+.0-9A-Z_a-z]+)*>)", "beginCaptures": { "0": { "name": "string.unquoted.spath.nix" } }, "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "include": "#expression-cont" } ] }, { "begin": "([A-Za-z][-+.0-9A-Za-z]*:[!$-'*-:=?-Z_a-z~]+)", "beginCaptures": { "0": { "name": "string.unquoted.url.nix" } }, "end": "(?=([]),;}]|\\b(else|then)\\b))", "patterns": [ { "include": "#expression-cont" } ] } ] }, "string-quoted": { "begin": "\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.double.start.nix" } }, "end": "\"", "endCaptures": { "0": { "name": "punctuation.definition.string.double.end.nix" } }, "name": "string.quoted.double.nix", "patterns": [ { "match": "\\\\.", "name": "constant.character.escape.nix" }, { "include": "#interpolation" } ] }, "whitespace": { "match": "\\s+" }, "with-assert": { "begin": "(?<![-'\\w])(with|assert)(?![-'\\w])", "beginCaptures": { "0": { "name": "keyword.other.nix" } }, "end": ";", "patterns": [ { "include": "#expression" } ] } }, "scopeName": "source.nix" }