tm-grammars
Version:
Collecton of TextMate grammars in JSON
773 lines (772 loc) • 18.4 kB
JSON
{
"displayName": "Puppet",
"fileTypes": [
"pp"
],
"foldingStartMarker": "(^\\s*/\\*|([(\\[{])\\s*$)",
"foldingStopMarker": "(\\*/|^\\s*([])}]))",
"name": "puppet",
"patterns": [
{
"include": "#line_comment"
},
{
"include": "#constants"
},
{
"begin": "^\\s*/\\*",
"end": "\\*/",
"name": "comment.block.puppet"
},
{
"begin": "\\b(node)\\b",
"captures": {
"1": {
"name": "storage.type.puppet"
},
"2": {
"name": "entity.name.type.class.puppet"
}
},
"end": "(?=\\{)",
"name": "meta.definition.class.puppet",
"patterns": [
{
"match": "\\bdefault\\b",
"name": "keyword.puppet"
},
{
"include": "#strings"
},
{
"include": "#regex-literal"
}
]
},
{
"begin": "\\b(class)\\s+((?:[a-z][0-9_a-z]*)?(?:::[a-z][0-9_a-z]*)+|[a-z][0-9_a-z]*)\\s*",
"captures": {
"1": {
"name": "storage.type.puppet"
},
"2": {
"name": "entity.name.type.class.puppet"
}
},
"end": "(?=\\{)",
"name": "meta.definition.class.puppet",
"patterns": [
{
"begin": "\\b(inherits)\\b\\s+",
"captures": {
"1": {
"name": "storage.modifier.puppet"
}
},
"end": "(?=[({])",
"name": "meta.definition.class.inherits.puppet",
"patterns": [
{
"match": "\\b((?:[-\".0-9A-Z_a-z]+::)*[-\".0-9A-Z_a-z]+)\\b",
"name": "support.type.puppet"
}
]
},
{
"include": "#line_comment"
},
{
"include": "#resource-parameters"
},
{
"include": "#parameter-default-types"
}
]
},
{
"begin": "^\\s*(plan)\\s+((?:[a-z][0-9_a-z]*)?(?:::[a-z][0-9_a-z]*)+|[a-z][0-9_a-z]*)\\s*",
"captures": {
"1": {
"name": "storage.type.puppet"
},
"2": {
"name": "entity.name.type.plan.puppet"
}
},
"end": "(?=\\{)",
"name": "meta.definition.plan.puppet",
"patterns": [
{
"include": "#line_comment"
},
{
"include": "#resource-parameters"
},
{
"include": "#parameter-default-types"
}
]
},
{
"begin": "^\\s*(define|function)\\s+([a-z][0-9_a-z]*|(?:[a-z][0-9_a-z]*)?(?:::[a-z][0-9_a-z]*)+)\\s*(\\()",
"captures": {
"1": {
"name": "storage.type.function.puppet"
},
"2": {
"name": "entity.name.function.puppet"
}
},
"end": "(?=\\{)",
"name": "meta.function.puppet",
"patterns": [
{
"include": "#line_comment"
},
{
"include": "#resource-parameters"
},
{
"include": "#parameter-default-types"
}
]
},
{
"captures": {
"1": {
"name": "keyword.control.puppet"
}
},
"match": "\\b(case|else|elsif|if|unless)(?!::)\\b"
},
{
"include": "#keywords"
},
{
"include": "#resource-definition"
},
{
"include": "#heredoc"
},
{
"include": "#strings"
},
{
"include": "#puppet-datatypes"
},
{
"include": "#array"
},
{
"match": "((\\$?)\"?[A-Z_a-z\\x7F-ÿ][0-9A-Z_a-z\\x7F-ÿ]*\"?):(?=\\s+|$)",
"name": "entity.name.section.puppet"
},
{
"include": "#numbers"
},
{
"include": "#variable"
},
{
"begin": "\\b(import|include|contain|require)\\s+(?!.*=>)",
"beginCaptures": {
"1": {
"name": "keyword.control.import.include.puppet"
}
},
"contentName": "variable.parameter.include.puppet",
"end": "(?=\\s|$)",
"name": "meta.include.puppet"
},
{
"match": "\\b\\w+\\s*(?==>)\\s*",
"name": "constant.other.key.puppet"
},
{
"match": "(?<=\\{)\\s*\\w+\\s*(?=})",
"name": "constant.other.bareword.puppet"
},
{
"match": "\\b(alert|crit|debug|defined|emerg|err|escape|fail|failed|file|generate|gsub|info|notice|package|realize|search|tag|tagged|template|warning)\\b(?!.*\\{)",
"name": "support.function.puppet"
},
{
"match": "=>",
"name": "punctuation.separator.key-value.puppet"
},
{
"match": "->",
"name": "keyword.control.orderarrow.puppet"
},
{
"match": "~>",
"name": "keyword.control.notifyarrow.puppet"
},
{
"include": "#regex-literal"
}
],
"repository": {
"array": {
"begin": "(\\[)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.array.begin.puppet"
}
},
"end": "]",
"endCaptures": {
"0": {
"name": "punctuation.definition.array.end.puppet"
}
},
"name": "meta.array.puppet",
"patterns": [
{
"match": "\\s*,\\s*"
},
{
"include": "#parameter-default-types"
},
{
"include": "#line_comment"
}
]
},
"constants": {
"patterns": [
{
"match": "\\b(absent|directory|false|file|present|running|stopped|true)\\b(?!.*\\{)",
"name": "constant.language.puppet"
}
]
},
"double-quoted-string": {
"begin": "\"",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.puppet"
}
},
"end": "\"",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.puppet"
}
},
"name": "string.quoted.double.interpolated.puppet",
"patterns": [
{
"include": "#escaped_char"
},
{
"include": "#interpolated_puppet"
}
]
},
"escaped_char": {
"match": "\\\\.",
"name": "constant.character.escape.puppet"
},
"function_call": {
"begin": "([A-Z_a-z][0-9A-Z_a-z]*)(\\()",
"end": "\\)",
"name": "meta.function-call.puppet",
"patterns": [
{
"include": "#parameter-default-types"
},
{
"match": ",",
"name": "punctuation.separator.parameters.puppet"
}
]
},
"hash": {
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.definition.hash.begin.puppet"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.definition.hash.end.puppet"
}
},
"name": "meta.hash.puppet",
"patterns": [
{
"match": "\\b\\w+\\s*(?==>)\\s*",
"name": "constant.other.key.puppet"
},
{
"include": "#parameter-default-types"
},
{
"include": "#line_comment"
}
]
},
"heredoc": {
"patterns": [
{
"begin": "@\\(\\p{blank}*\"([^\\t )/:]+)\"\\p{blank}*(:\\p{blank}*[a-z][+0-9A-Z_a-z]*\\p{blank}*)?(/\\p{blank}*[$Lnrst]*)?\\p{blank}*\\)",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.puppet"
}
},
"end": "^\\p{blank}*(\\|\\p{blank}*-|[-|])?\\p{blank}*\\1",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.puppet"
}
},
"name": "string.interpolated.heredoc.puppet",
"patterns": [
{
"include": "#escaped_char"
},
{
"include": "#interpolated_puppet"
}
]
},
{
"begin": "@\\(\\p{blank}*([^\\t )/:]+)\\p{blank}*(:\\p{blank}*[a-z][+0-9A-Z_a-z]*\\p{blank}*)?(/\\p{blank}*[$Lnrst]*)?\\p{blank}*\\)",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.puppet"
}
},
"end": "^\\p{blank}*(\\|\\p{blank}*-|[-|])?\\p{blank}*\\1",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.puppet"
}
},
"name": "string.unquoted.heredoc.puppet"
}
]
},
"interpolated_puppet": {
"patterns": [
{
"begin": "(\\$\\{)(\\d+)",
"beginCaptures": {
"1": {
"name": "punctuation.section.embedded.begin.puppet"
},
"2": {
"name": "source.puppet variable.other.readwrite.global.pre-defined.puppet"
}
},
"contentName": "source.puppet",
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.section.embedded.end.puppet"
}
},
"name": "meta.embedded.line.puppet",
"patterns": [
{
"include": "$self"
}
]
},
{
"begin": "(\\$\\{)(_[0-9A-Z_a-z]*)",
"beginCaptures": {
"1": {
"name": "punctuation.section.embedded.begin.puppet"
},
"2": {
"name": "source.puppet variable.other.readwrite.global.puppet"
}
},
"contentName": "source.puppet",
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.section.embedded.end.puppet"
}
},
"name": "meta.embedded.line.puppet",
"patterns": [
{
"include": "$self"
}
]
},
{
"begin": "(\\$\\{)(([a-z][0-9_a-z]*)?(?:::[a-z][0-9_a-z]*)*)",
"beginCaptures": {
"1": {
"name": "punctuation.section.embedded.begin.puppet"
},
"2": {
"name": "source.puppet variable.other.readwrite.global.puppet"
}
},
"contentName": "source.puppet",
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.section.embedded.end.puppet"
}
},
"name": "meta.embedded.line.puppet",
"patterns": [
{
"include": "$self"
}
]
},
{
"begin": "\\$\\{",
"beginCaptures": {
"0": {
"name": "punctuation.section.embedded.begin.puppet"
}
},
"contentName": "source.puppet",
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.section.embedded.end.puppet"
}
},
"name": "meta.embedded.line.puppet",
"patterns": [
{
"include": "$self"
}
]
}
]
},
"keywords": {
"captures": {
"1": {
"name": "keyword.puppet"
}
},
"match": "\\b(undef)\\b"
},
"line_comment": {
"patterns": [
{
"captures": {
"1": {
"name": "comment.line.number-sign.puppet"
},
"2": {
"name": "punctuation.definition.comment.puppet"
}
},
"match": "^((#).*$\\n?)",
"name": "meta.comment.full-line.puppet"
},
{
"captures": {
"1": {
"name": "punctuation.definition.comment.puppet"
}
},
"match": "(#).*$\\n?",
"name": "comment.line.number-sign.puppet"
}
]
},
"nested_braces": {
"begin": "\\{",
"captures": {
"1": {
"name": "punctuation.section.scope.puppet"
}
},
"end": "}",
"patterns": [
{
"include": "#escaped_char"
},
{
"include": "#nested_braces"
}
]
},
"nested_braces_interpolated": {
"begin": "\\{",
"captures": {
"1": {
"name": "punctuation.section.scope.puppet"
}
},
"end": "}",
"patterns": [
{
"include": "#escaped_char"
},
{
"include": "#variable"
},
{
"include": "#nested_braces_interpolated"
}
]
},
"nested_brackets": {
"begin": "\\[",
"captures": {
"1": {
"name": "punctuation.section.scope.puppet"
}
},
"end": "]",
"patterns": [
{
"include": "#escaped_char"
},
{
"include": "#nested_brackets"
}
]
},
"nested_brackets_interpolated": {
"begin": "\\[",
"captures": {
"1": {
"name": "punctuation.section.scope.puppet"
}
},
"end": "]",
"patterns": [
{
"include": "#escaped_char"
},
{
"include": "#variable"
},
{
"include": "#nested_brackets_interpolated"
}
]
},
"nested_parens": {
"begin": "\\(",
"captures": {
"1": {
"name": "punctuation.section.scope.puppet"
}
},
"end": "\\)",
"patterns": [
{
"include": "#escaped_char"
},
{
"include": "#nested_parens"
}
]
},
"nested_parens_interpolated": {
"begin": "\\(",
"captures": {
"1": {
"name": "punctuation.section.scope.puppet"
}
},
"end": "\\)",
"patterns": [
{
"include": "#escaped_char"
},
{
"include": "#variable"
},
{
"include": "#nested_parens_interpolated"
}
]
},
"numbers": {
"patterns": [
{
"match": "(?<![\\w\\d])([-+]?)(?i:0x)(?i:[0-9a-f])+(?![\\w\\d])",
"name": "constant.numeric.hexadecimal.puppet"
},
{
"match": "(?<![.\\w])([-+]?)(?<!\\d)\\d+(?i:e([-+])?\\d+)?(?![.\\w\\d])",
"name": "constant.numeric.integer.puppet"
},
{
"match": "(?<!\\w)([-+]?)\\d+\\.\\d+(?i:e([-+])?\\d+)?(?![\\w\\d])",
"name": "constant.numeric.integer.puppet"
}
]
},
"parameter-default-types": {
"patterns": [
{
"include": "#strings"
},
{
"include": "#numbers"
},
{
"include": "#variable"
},
{
"include": "#hash"
},
{
"include": "#array"
},
{
"include": "#function_call"
},
{
"include": "#constants"
},
{
"include": "#puppet-datatypes"
}
]
},
"puppet-datatypes": {
"patterns": [
{
"match": "(?<![$A-Za-z])([A-Z][0-9A-Z_a-z]*)(?![0-9A-Z_a-z])",
"name": "storage.type.puppet"
}
]
},
"regex-literal": {
"match": "(/)(.+?)[^\\\\]/",
"name": "string.regexp.literal.puppet"
},
"resource-definition": {
"begin": "(?:^|\\b)(::[a-z][0-9_a-z]*|[a-z][0-9_a-z]*|(?:[a-z][0-9_a-z]*)?(?:::[a-z][0-9_a-z]*)+)\\s*(\\{)\\s*",
"beginCaptures": {
"1": {
"name": "meta.definition.resource.puppet storage.type.puppet"
}
},
"contentName": "entity.name.section.puppet",
"end": ":",
"patterns": [
{
"include": "#strings"
},
{
"include": "#variable"
},
{
"include": "#array"
}
]
},
"resource-parameters": {
"patterns": [
{
"captures": {
"1": {
"name": "variable.other.puppet"
},
"2": {
"name": "punctuation.definition.variable.puppet"
}
},
"match": "((\\$+)[A-Z_a-z][0-9A-Z_a-z]*)\\s*(?=[),])",
"name": "meta.function.argument.puppet"
},
{
"begin": "((\\$+)[A-Z_a-z][0-9A-Z_a-z]*)\\s*(=)\\s*\\s*",
"captures": {
"1": {
"name": "variable.other.puppet"
},
"2": {
"name": "punctuation.definition.variable.puppet"
},
"3": {
"name": "keyword.operator.assignment.puppet"
}
},
"end": "(?=[),])",
"name": "meta.function.argument.puppet",
"patterns": [
{
"include": "#parameter-default-types"
}
]
}
]
},
"single-quoted-string": {
"begin": "'",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.puppet"
}
},
"end": "'",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.puppet"
}
},
"name": "string.quoted.single.puppet",
"patterns": [
{
"include": "#escaped_char"
}
]
},
"strings": {
"patterns": [
{
"include": "#double-quoted-string"
},
{
"include": "#single-quoted-string"
}
]
},
"variable": {
"patterns": [
{
"captures": {
"1": {
"name": "punctuation.definition.variable.puppet"
}
},
"match": "(\\$)(\\d+)",
"name": "variable.other.readwrite.global.pre-defined.puppet"
},
{
"captures": {
"1": {
"name": "punctuation.definition.variable.puppet"
}
},
"match": "(\\$)_[0-9A-Z_a-z]*",
"name": "variable.other.readwrite.global.puppet"
},
{
"captures": {
"1": {
"name": "punctuation.definition.variable.puppet"
}
},
"match": "(\\$)(([a-z][0-9A-Z_a-z]*)?(?:::[a-z][0-9A-Z_a-z]*)*)",
"name": "variable.other.readwrite.global.puppet"
}
]
}
},
"scopeName": "source.puppet"
}