tm-grammars
Version:
Collecton of TextMate grammars in JSON
1,201 lines (1,200 loc) • 27.8 kB
JSON
{
"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"
}