tm-grammars
Version:
Collecton of TextMate grammars in JSON
1,801 lines • 61.6 kB
JSON
{
"displayName": "Erlang",
"fileTypes": [
"erl",
"escript",
"hrl",
"xrl",
"yrl"
],
"name": "erlang",
"patterns": [
{
"include": "#module-directive"
},
{
"include": "#import-export-directive"
},
{
"include": "#behaviour-directive"
},
{
"include": "#record-directive"
},
{
"include": "#define-directive"
},
{
"include": "#macro-directive"
},
{
"include": "#doc-directive"
},
{
"include": "#directive"
},
{
"include": "#function"
},
{
"include": "#everything-else"
}
],
"repository": {
"atom": {
"patterns": [
{
"begin": "(')",
"beginCaptures": {
"1": {
"name": "punctuation.definition.symbol.begin.erlang"
}
},
"end": "(')",
"endCaptures": {
"1": {
"name": "punctuation.definition.symbol.end.erlang"
}
},
"name": "constant.other.symbol.quoted.single.erlang",
"patterns": [
{
"captures": {
"1": {
"name": "punctuation.definition.escape.erlang"
},
"3": {
"name": "punctuation.definition.escape.erlang"
}
},
"match": "(\\\\)([\"'\\\\bdefnrstv]|(\\^)[@-_a-z]|[0-7]{1,3}|x[A-Fa-f\\d]{2})",
"name": "constant.other.symbol.escape.erlang"
},
{
"match": "\\\\\\^?.?",
"name": "invalid.illegal.atom.erlang"
}
]
},
{
"match": "[a-z][@-Z_a-z\\d]*+",
"name": "constant.other.symbol.unquoted.erlang"
}
]
},
"behaviour-directive": {
"captures": {
"1": {
"name": "punctuation.section.directive.begin.erlang"
},
"2": {
"name": "keyword.control.directive.behaviour.erlang"
},
"3": {
"name": "punctuation.definition.parameters.begin.erlang"
},
"4": {
"name": "entity.name.type.class.behaviour.definition.erlang"
},
"5": {
"name": "punctuation.definition.parameters.end.erlang"
},
"6": {
"name": "punctuation.section.directive.end.erlang"
}
},
"match": "^\\s*+(-)\\s*+(behaviour)\\s*+(\\()\\s*+([a-z][@-Z_a-z\\d]*+)\\s*+(\\))\\s*+(\\.)",
"name": "meta.directive.behaviour.erlang"
},
"binary": {
"begin": "(<<)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.binary.begin.erlang"
}
},
"end": "(>>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.binary.end.erlang"
}
},
"name": "meta.structure.binary.erlang",
"patterns": [
{
"captures": {
"1": {
"name": "punctuation.separator.binary.erlang"
},
"2": {
"name": "punctuation.separator.value-size.erlang"
}
},
"match": "(,)|(:)"
},
{
"include": "#internal-type-specifiers"
},
{
"include": "#everything-else"
}
]
},
"character": {
"patterns": [
{
"captures": {
"1": {
"name": "punctuation.definition.character.erlang"
},
"2": {
"name": "constant.character.escape.erlang"
},
"3": {
"name": "punctuation.definition.escape.erlang"
},
"5": {
"name": "punctuation.definition.escape.erlang"
}
},
"match": "(\\$)((\\\\)([\"'\\\\bdefnrstv]|(\\^)[@-_a-z]|[0-7]{1,3}|x[A-Fa-f\\d]{2}))",
"name": "constant.character.erlang"
},
{
"match": "\\$\\\\\\^?.?",
"name": "invalid.illegal.character.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.definition.character.erlang"
}
},
"match": "(\\$)[ \\S]",
"name": "constant.character.erlang"
},
{
"match": "\\$.?",
"name": "invalid.illegal.character.erlang"
}
]
},
"comment": {
"begin": "(^[\\t ]+)?(?=%)",
"beginCaptures": {
"1": {
"name": "punctuation.whitespace.comment.leading.erlang"
}
},
"end": "(?!\\G)",
"patterns": [
{
"begin": "%",
"beginCaptures": {
"0": {
"name": "punctuation.definition.comment.erlang"
}
},
"end": "\\n",
"name": "comment.line.percentage.erlang"
}
]
},
"define-directive": {
"patterns": [
{
"begin": "^\\s*+(-)\\s*+(define)\\s*+(\\()\\s*+([@-Z_a-z\\d]++)\\s*+",
"beginCaptures": {
"1": {
"name": "punctuation.section.directive.begin.erlang"
},
"2": {
"name": "keyword.control.directive.define.erlang"
},
"3": {
"name": "punctuation.definition.parameters.begin.erlang"
},
"4": {
"name": "entity.name.function.macro.definition.erlang"
}
},
"end": "(\\))\\s*+(\\.)",
"endCaptures": {
"1": {
"name": "punctuation.definition.parameters.end.erlang"
},
"2": {
"name": "punctuation.section.directive.end.erlang"
}
},
"name": "meta.directive.define.erlang",
"patterns": [
{
"include": "#everything-else"
}
]
},
{
"begin": "(?=^\\s*+-\\s*+define\\s*+\\(\\s*+[@-Z_a-z\\d]++\\s*+\\()",
"end": "(\\))\\s*+(\\.)",
"endCaptures": {
"1": {
"name": "punctuation.definition.parameters.end.erlang"
},
"2": {
"name": "punctuation.section.directive.end.erlang"
}
},
"name": "meta.directive.define.erlang",
"patterns": [
{
"begin": "^\\s*+(-)\\s*+(define)\\s*+(\\()\\s*+([@-Z_a-z\\d]++)\\s*+(\\()",
"beginCaptures": {
"1": {
"name": "punctuation.section.directive.begin.erlang"
},
"2": {
"name": "keyword.control.directive.define.erlang"
},
"3": {
"name": "punctuation.definition.parameters.begin.erlang"
},
"4": {
"name": "entity.name.function.macro.definition.erlang"
},
"5": {
"name": "punctuation.definition.parameters.begin.erlang"
}
},
"end": "(\\))\\s*(,)",
"endCaptures": {
"1": {
"name": "punctuation.definition.parameters.end.erlang"
},
"2": {
"name": "punctuation.separator.parameters.erlang"
}
},
"patterns": [
{
"match": ",",
"name": "punctuation.separator.parameters.erlang"
},
{
"include": "#everything-else"
}
]
},
{
"match": "\\|\\||[,.:;|]|->",
"name": "punctuation.separator.define.erlang"
},
{
"include": "#everything-else"
}
]
}
]
},
"directive": {
"patterns": [
{
"begin": "^\\s*+(-)\\s*+([a-z][@-Z_a-z\\d]*+)\\s*+(\\(?)",
"beginCaptures": {
"1": {
"name": "punctuation.section.directive.begin.erlang"
},
"2": {
"name": "keyword.control.directive.erlang"
},
"3": {
"name": "punctuation.definition.parameters.begin.erlang"
}
},
"end": "(\\)?)\\s*+(\\.)",
"endCaptures": {
"1": {
"name": "punctuation.definition.parameters.end.erlang"
},
"2": {
"name": "punctuation.section.directive.end.erlang"
}
},
"name": "meta.directive.erlang",
"patterns": [
{
"include": "#everything-else"
}
]
},
{
"captures": {
"1": {
"name": "punctuation.section.directive.begin.erlang"
},
"2": {
"name": "keyword.control.directive.erlang"
},
"3": {
"name": "punctuation.section.directive.end.erlang"
}
},
"match": "^\\s*+(-)\\s*+([a-z][@-Z_a-z\\d]*+)\\s*+(\\.)",
"name": "meta.directive.erlang"
}
]
},
"doc-directive": {
"begin": "^\\s*+(-)\\s*+((module)?doc)\\s*(\\(\\s*)?(~[BSbs]?)?((\"{3,})\\s*)(\\S.*)?$",
"beginCaptures": {
"1": {
"name": "punctuation.section.directive.begin.erlang"
},
"2": {
"name": "keyword.control.directive.doc.erlang"
},
"4": {
"name": "punctuation.definition.parameters.begin.erlang"
},
"5": {
"name": "storage.type.string.erlang"
},
"6": {
"name": "comment.block.documentation.erlang"
},
"7": {
"name": "punctuation.definition.string.begin.erlang"
},
"8": {
"name": "invalid.illegal.string.erlang"
}
},
"contentName": "meta.embedded.block.markdown",
"end": "^(\\s*(\\7))\\s*(\\)\\s*)?(\\.)",
"endCaptures": {
"1": {
"name": "comment.block.documentation.erlang"
},
"2": {
"name": "punctuation.definition.string.end.erlang"
},
"3": {
"name": "punctuation.section.directive.end.Erlang"
}
},
"name": "meta.directive.doc.erlang",
"patterns": [
{
"include": "text.html.markdown"
}
]
},
"docstring": {
"begin": "(?<!\")((\"{3,})\\s*)(\\S.*)?$",
"beginCaptures": {
"1": {
"name": "meta.string.quoted.triple.begin.erlang"
},
"2": {
"name": "punctuation.definition.string.begin.erlang"
},
"3": {
"name": "invalid.illegal.string.erlang"
}
},
"end": "^(\\s*(\\2))(?!\")",
"endCaptures": {
"1": {
"name": "meta.string.quoted.triple.end.erlang"
},
"2": {
"name": "punctuation.definition.string.end.erlang"
}
},
"name": "string.quoted.triple.erlang",
"patterns": [
{
"include": "#internal-string-body-verbatim"
}
]
},
"everything-else": {
"patterns": [
{
"include": "#comment"
},
{
"include": "#record-usage"
},
{
"include": "#macro-usage"
},
{
"include": "#expression"
},
{
"include": "#keyword"
},
{
"include": "#textual-operator"
},
{
"include": "#language-constant"
},
{
"include": "#function-call"
},
{
"include": "#tuple"
},
{
"include": "#list"
},
{
"include": "#binary"
},
{
"include": "#parenthesized-expression"
},
{
"include": "#character"
},
{
"include": "#number"
},
{
"include": "#atom"
},
{
"include": "#sigil-docstring"
},
{
"include": "#sigil-docstring-verbatim"
},
{
"include": "#sigil-string"
},
{
"include": "#docstring"
},
{
"include": "#string"
},
{
"include": "#symbolic-operator"
},
{
"include": "#variable"
}
]
},
"expression": {
"patterns": [
{
"begin": "\\b(if)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.if.erlang"
}
},
"end": "\\b(end)\\b",
"endCaptures": {
"1": {
"name": "keyword.control.end.erlang"
}
},
"name": "meta.expression.if.erlang",
"patterns": [
{
"include": "#internal-expression-punctuation"
},
{
"include": "#everything-else"
}
]
},
{
"begin": "\\b(case)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.case.erlang"
}
},
"end": "\\b(end)\\b",
"endCaptures": {
"1": {
"name": "keyword.control.end.erlang"
}
},
"name": "meta.expression.case.erlang",
"patterns": [
{
"include": "#internal-expression-punctuation"
},
{
"include": "#everything-else"
}
]
},
{
"begin": "\\b(receive)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.receive.erlang"
}
},
"end": "\\b(end)\\b",
"endCaptures": {
"1": {
"name": "keyword.control.end.erlang"
}
},
"name": "meta.expression.receive.erlang",
"patterns": [
{
"include": "#internal-expression-punctuation"
},
{
"include": "#everything-else"
}
]
},
{
"captures": {
"1": {
"name": "keyword.control.fun.erlang"
},
"10": {
"name": "punctuation.separator.function-arity.erlang"
},
"4": {
"name": "entity.name.type.class.module.erlang"
},
"5": {
"name": "variable.other.erlang"
},
"6": {
"name": "punctuation.separator.module-function.erlang"
},
"8": {
"name": "entity.name.function.erlang"
},
"9": {
"name": "variable.other.erlang"
}
},
"match": "\\b(fun)\\s+((([a-z][@-Z_a-z\\d]*+)|(_[@-Z_a-z\\d]++|[A-Z][@-Z_a-z\\d]*+))\\s*+(:)\\s*+)?(([a-z][@-Z_a-z\\d]*+|'[^']*+')|(_[@-Z_a-z\\d]++|[A-Z][@-Z_a-z\\d]*+))\\s*(/)",
"name": "meta.expression.fun.implicit.erlang"
},
{
"begin": "\\b(fun)\\s+(([a-z][@-Z_a-z\\d]*+)|(_[@-Z_a-z\\d]++|[A-Z][@-Z_a-z\\d]*+))\\s*+(:)",
"beginCaptures": {
"1": {
"name": "keyword.control.fun.erlang"
},
"3": {
"name": "entity.name.type.class.module.erlang"
},
"4": {
"name": "variable.other.erlang"
},
"5": {
"name": "punctuation.separator.module-function.erlang"
}
},
"end": "(/)",
"endCaptures": {
"1": {
"name": "punctuation.separator.function-arity.erlang"
}
},
"name": "meta.expression.fun.implicit.erlang",
"patterns": [
{
"include": "#everything-else"
}
]
},
{
"begin": "\\b(fun)\\s+(?!\\()",
"beginCaptures": {
"1": {
"name": "keyword.control.fun.erlang"
}
},
"end": "(/)",
"endCaptures": {
"1": {
"name": "punctuation.separator.function-arity.erlang"
}
},
"name": "meta.expression.fun.implicit.erlang",
"patterns": [
{
"include": "#everything-else"
}
]
},
{
"begin": "\\b(fun)\\s*+(\\()(?=(\\s*+\\()|(\\)))",
"beginCaptures": {
"1": {
"name": "entity.name.function.erlang"
},
"2": {
"name": "punctuation.definition.parameters.begin.erlang"
}
},
"end": "(\\))",
"endCaptures": {
"1": {
"name": "punctuation.definition.parameters.end.erlang"
}
},
"patterns": [
{
"include": "#everything-else"
}
]
},
{
"begin": "\\b(fun)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.fun.erlang"
}
},
"end": "\\b(end)\\b",
"endCaptures": {
"1": {
"name": "keyword.control.end.erlang"
}
},
"name": "meta.expression.fun.erlang",
"patterns": [
{
"begin": "(?=\\()",
"end": "(;)|(?=\\bend\\b)",
"endCaptures": {
"1": {
"name": "punctuation.separator.clauses.erlang"
}
},
"patterns": [
{
"include": "#internal-function-parts"
}
]
},
{
"include": "#everything-else"
}
]
},
{
"begin": "\\b(try)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.try.erlang"
}
},
"end": "\\b(end)\\b",
"endCaptures": {
"1": {
"name": "keyword.control.end.erlang"
}
},
"name": "meta.expression.try.erlang",
"patterns": [
{
"include": "#internal-expression-punctuation"
},
{
"include": "#everything-else"
}
]
},
{
"begin": "\\b(begin)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.begin.erlang"
}
},
"end": "\\b(end)\\b",
"endCaptures": {
"1": {
"name": "keyword.control.end.erlang"
}
},
"name": "meta.expression.begin.erlang",
"patterns": [
{
"include": "#internal-expression-punctuation"
},
{
"include": "#everything-else"
}
]
},
{
"begin": "\\b(maybe)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.maybe.erlang"
}
},
"end": "\\b(end)\\b",
"endCaptures": {
"1": {
"name": "keyword.control.end.erlang"
}
},
"name": "meta.expression.maybe.erlang",
"patterns": [
{
"include": "#internal-expression-punctuation"
},
{
"include": "#everything-else"
}
]
}
]
},
"function": {
"begin": "^\\s*+([a-z][@-Z_a-z\\d]*+|'[^']*+')\\s*+(?=\\()",
"beginCaptures": {
"1": {
"name": "entity.name.function.definition.erlang"
}
},
"end": "(\\.)",
"endCaptures": {
"1": {
"name": "punctuation.terminator.function.erlang"
}
},
"name": "meta.function.erlang",
"patterns": [
{
"captures": {
"1": {
"name": "entity.name.function.erlang"
}
},
"match": "^\\s*+([a-z][@-Z_a-z\\d]*+|'[^']*+')\\s*+(?=\\()"
},
{
"begin": "(?=\\()",
"end": "(;)|(?=\\.)",
"endCaptures": {
"1": {
"name": "punctuation.separator.clauses.erlang"
}
},
"patterns": [
{
"include": "#parenthesized-expression"
},
{
"include": "#internal-function-parts"
}
]
},
{
"include": "#everything-else"
}
]
},
"function-call": {
"begin": "(?=([a-z][@-Z_a-z\\d]*+|'[^']*+'|_[@-Z_a-z\\d]++|[A-Z][@-Z_a-z\\d]*+)\\s*+(\\(|:\\s*+([a-z][@-Z_a-z\\d]*+|'[^']*+'|_[@-Z_a-z\\d]++|[A-Z][@-Z_a-z\\d]*+)\\s*+\\())",
"end": "(\\))",
"endCaptures": {
"1": {
"name": "punctuation.definition.parameters.end.erlang"
}
},
"name": "meta.function-call.erlang",
"patterns": [
{
"begin": "((erlang)\\s*+(:)\\s*+)?(is_atom|is_binary|is_constant|is_float|is_function|is_integer|is_list|is_number|is_pid|is_port|is_reference|is_tuple|is_record|abs|element|hd|length|node|round|self|size|tl|trunc)\\s*+(\\()",
"beginCaptures": {
"2": {
"name": "entity.name.type.class.module.erlang"
},
"3": {
"name": "punctuation.separator.module-function.erlang"
},
"4": {
"name": "entity.name.function.guard.erlang"
},
"5": {
"name": "punctuation.definition.parameters.begin.erlang"
}
},
"end": "(?=\\))",
"patterns": [
{
"match": ",",
"name": "punctuation.separator.parameters.erlang"
},
{
"include": "#everything-else"
}
]
},
{
"begin": "((([a-z][@-Z_a-z\\d]*+|'[^']*+')|(_[@-Z_a-z\\d]++|[A-Z][@-Z_a-z\\d]*+))\\s*+(:)\\s*+)?(([a-z][@-Z_a-z\\d]*+|'[^']*+')|(_[@-Z_a-z\\d]++|[A-Z][@-Z_a-z\\d]*+))\\s*+(\\()",
"beginCaptures": {
"3": {
"name": "entity.name.type.class.module.erlang"
},
"4": {
"name": "variable.other.erlang"
},
"5": {
"name": "punctuation.separator.module-function.erlang"
},
"7": {
"name": "entity.name.function.erlang"
},
"8": {
"name": "variable.other.erlang"
},
"9": {
"name": "punctuation.definition.parameters.begin.erlang"
}
},
"end": "(?=\\))",
"patterns": [
{
"match": ",",
"name": "punctuation.separator.parameters.erlang"
},
{
"include": "#everything-else"
}
]
}
]
},
"import-export-directive": {
"patterns": [
{
"begin": "^\\s*+(-)\\s*+(import)\\s*+(\\()\\s*+([a-z][@-Z_a-z\\d]*+|'[^']*+')\\s*+(,)",
"beginCaptures": {
"1": {
"name": "punctuation.section.directive.begin.erlang"
},
"2": {
"name": "keyword.control.directive.import.erlang"
},
"3": {
"name": "punctuation.definition.parameters.begin.erlang"
},
"4": {
"name": "entity.name.type.class.module.erlang"
},
"5": {
"name": "punctuation.separator.parameters.erlang"
}
},
"end": "(\\))\\s*+(\\.)",
"endCaptures": {
"1": {
"name": "punctuation.definition.parameters.end.erlang"
},
"2": {
"name": "punctuation.section.directive.end.erlang"
}
},
"name": "meta.directive.import.erlang",
"patterns": [
{
"include": "#internal-function-list"
}
]
},
{
"begin": "^\\s*+(-)\\s*+(export)\\s*+(\\()",
"beginCaptures": {
"1": {
"name": "punctuation.section.directive.begin.erlang"
},
"2": {
"name": "keyword.control.directive.export.erlang"
},
"3": {
"name": "punctuation.definition.parameters.begin.erlang"
}
},
"end": "(\\))\\s*+(\\.)",
"endCaptures": {
"1": {
"name": "punctuation.definition.parameters.end.erlang"
},
"2": {
"name": "punctuation.section.directive.end.erlang"
}
},
"name": "meta.directive.export.erlang",
"patterns": [
{
"include": "#internal-function-list"
}
]
}
]
},
"internal-expression-punctuation": {
"captures": {
"1": {
"name": "punctuation.separator.clause-head-body.erlang"
},
"2": {
"name": "punctuation.separator.clauses.erlang"
},
"3": {
"name": "punctuation.separator.expressions.erlang"
}
},
"match": "(->)|(;)|(,)"
},
"internal-function-list": {
"begin": "(\\[)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.list.begin.erlang"
}
},
"end": "(])",
"endCaptures": {
"1": {
"name": "punctuation.definition.list.end.erlang"
}
},
"name": "meta.structure.list.function.erlang",
"patterns": [
{
"begin": "([a-z][@-Z_a-z\\d]*+|'[^']*+')\\s*+(/)",
"beginCaptures": {
"1": {
"name": "entity.name.function.erlang"
},
"2": {
"name": "punctuation.separator.function-arity.erlang"
}
},
"end": "(,)|(?=])",
"endCaptures": {
"1": {
"name": "punctuation.separator.list.erlang"
}
},
"patterns": [
{
"include": "#everything-else"
}
]
},
{
"include": "#everything-else"
}
]
},
"internal-function-parts": {
"patterns": [
{
"begin": "(?=\\()",
"end": "(->)",
"endCaptures": {
"1": {
"name": "punctuation.separator.clause-head-body.erlang"
}
},
"patterns": [
{
"begin": "(\\()",
"beginCaptures": {
"1": {
"name": "punctuation.definition.parameters.begin.erlang"
}
},
"end": "(\\))",
"endCaptures": {
"1": {
"name": "punctuation.definition.parameters.end.erlang"
}
},
"patterns": [
{
"match": ",",
"name": "punctuation.separator.parameters.erlang"
},
{
"include": "#everything-else"
}
]
},
{
"match": "[,;]",
"name": "punctuation.separator.guards.erlang"
},
{
"include": "#everything-else"
}
]
},
{
"match": ",",
"name": "punctuation.separator.expressions.erlang"
},
{
"include": "#everything-else"
}
]
},
"internal-record-body": {
"begin": "(\\{)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.class.record.begin.erlang"
}
},
"end": "(})",
"endCaptures": {
"1": {
"name": "punctuation.definition.class.record.end.erlang"
}
},
"name": "meta.structure.record.erlang",
"patterns": [
{
"begin": "(([a-z][@-Z_a-z\\d]*+|'[^']*+')|(_))",
"beginCaptures": {
"2": {
"name": "variable.other.field.erlang"
},
"3": {
"name": "variable.language.omitted.field.erlang"
}
},
"end": "(,)|(?=})",
"endCaptures": {
"1": {
"name": "punctuation.separator.class.record.erlang"
}
},
"patterns": [
{
"include": "#everything-else"
}
]
},
{
"include": "#everything-else"
}
]
},
"internal-string-body": {
"patterns": [
{
"captures": {
"1": {
"name": "punctuation.definition.escape.erlang"
},
"3": {
"name": "punctuation.definition.escape.erlang"
}
},
"match": "(\\\\)([\"'\\\\bdefnrstv]|(\\^)[@-_a-z]|[0-7]{1,3}|x[A-Fa-f\\d]{2})",
"name": "constant.character.escape.erlang"
},
{
"match": "\\\\\\^?.?",
"name": "invalid.illegal.string.erlang"
},
{
"include": "#internal-string-body-verbatim"
}
]
},
"internal-string-body-verbatim": {
"patterns": [
{
"captures": {
"1": {
"name": "punctuation.definition.placeholder.erlang"
},
"10": {
"name": "punctuation.separator.placeholder-parts.erlang"
},
"6": {
"name": "punctuation.separator.placeholder-parts.erlang"
}
},
"match": "(~)((-)?\\d++|(\\*))?((\\.)(\\d++|(\\*))?((\\.)((\\*)|.))?)?[Kklt]*[#+BPWXbcefginpswx~]",
"name": "constant.character.format.placeholder.other.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.definition.placeholder.erlang"
}
},
"match": "(~)(\\*)?(\\d++)?(t)?[-#acdflsu~]",
"name": "constant.character.format.placeholder.other.erlang"
},
{
"match": "~[^\"]?",
"name": "invalid.illegal.string.erlang"
}
]
},
"internal-type-specifiers": {
"begin": "(/)",
"beginCaptures": {
"1": {
"name": "punctuation.separator.value-type.erlang"
}
},
"end": "(?=[,:]|>>)",
"patterns": [
{
"captures": {
"1": {
"name": "storage.type.erlang"
},
"2": {
"name": "storage.modifier.signedness.erlang"
},
"3": {
"name": "storage.modifier.endianness.erlang"
},
"4": {
"name": "storage.modifier.unit.erlang"
},
"5": {
"name": "punctuation.separator.unit-specifiers.erlang"
},
"6": {
"name": "constant.numeric.integer.decimal.erlang"
},
"7": {
"name": "punctuation.separator.type-specifiers.erlang"
}
},
"match": "(integer|float|binary|bytes|bitstring|bits|utf8|utf16|utf32)|((?:|un)signed)|(big|little|native)|(unit)(:)(\\d++)|(-)"
}
]
},
"keyword": {
"match": "\\b(after|begin|case|catch|cond|end|fun|if|let|of|try|receive|when|maybe|else)\\b",
"name": "keyword.control.erlang"
},
"language-constant": {
"match": "\\b(false|true|undefined)\\b",
"name": "constant.language"
},
"list": {
"begin": "(\\[)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.list.begin.erlang"
}
},
"end": "(])",
"endCaptures": {
"1": {
"name": "punctuation.definition.list.end.erlang"
}
},
"name": "meta.structure.list.erlang",
"patterns": [
{
"match": "\\|\\|??|,",
"name": "punctuation.separator.list.erlang"
},
{
"include": "#everything-else"
}
]
},
"macro-directive": {
"patterns": [
{
"captures": {
"1": {
"name": "punctuation.section.directive.begin.erlang"
},
"2": {
"name": "keyword.control.directive.ifdef.erlang"
},
"3": {
"name": "punctuation.definition.parameters.begin.erlang"
},
"4": {
"name": "entity.name.function.macro.erlang"
},
"5": {
"name": "punctuation.definition.parameters.end.erlang"
},
"6": {
"name": "punctuation.section.directive.end.erlang"
}
},
"match": "^\\s*+(-)\\s*+(ifdef)\\s*+(\\()\\s*+([@-z\\d]++)\\s*+(\\))\\s*+(\\.)",
"name": "meta.directive.ifdef.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.section.directive.begin.erlang"
},
"2": {
"name": "keyword.control.directive.ifndef.erlang"
},
"3": {
"name": "punctuation.definition.parameters.begin.erlang"
},
"4": {
"name": "entity.name.function.macro.erlang"
},
"5": {
"name": "punctuation.definition.parameters.end.erlang"
},
"6": {
"name": "punctuation.section.directive.end.erlang"
}
},
"match": "^\\s*+(-)\\s*+(ifndef)\\s*+(\\()\\s*+([@-z\\d]++)\\s*+(\\))\\s*+(\\.)",
"name": "meta.directive.ifndef.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.section.directive.begin.erlang"
},
"2": {
"name": "keyword.control.directive.undef.erlang"
},
"3": {
"name": "punctuation.definition.parameters.begin.erlang"
},
"4": {
"name": "entity.name.function.macro.erlang"
},
"5": {
"name": "punctuation.definition.parameters.end.erlang"
},
"6": {
"name": "punctuation.section.directive.end.erlang"
}
},
"match": "^\\s*+(-)\\s*+(undef)\\s*+(\\()\\s*+([@-z\\d]++)\\s*+(\\))\\s*+(\\.)",
"name": "meta.directive.undef.erlang"
}
]
},
"macro-usage": {
"captures": {
"1": {
"name": "keyword.operator.macro.erlang"
},
"2": {
"name": "entity.name.function.macro.erlang"
}
},
"match": "(\\?\\??)\\s*+([@-Z_a-z\\d]++)",
"name": "meta.macro-usage.erlang"
},
"module-directive": {
"captures": {
"1": {
"name": "punctuation.section.directive.begin.erlang"
},
"2": {
"name": "keyword.control.directive.module.erlang"
},
"3": {
"name": "punctuation.definition.parameters.begin.erlang"
},
"4": {
"name": "entity.name.type.class.module.definition.erlang"
},
"5": {
"name": "punctuation.definition.parameters.end.erlang"
},
"6": {
"name": "punctuation.section.directive.end.erlang"
}
},
"match": "^\\s*+(-)\\s*+(module)\\s*+(\\()\\s*+([a-z][@-Z_a-z\\d]*+)\\s*+(\\))\\s*+(\\.)",
"name": "meta.directive.module.erlang"
},
"number": {
"begin": "(?=\\d)",
"end": "(?!\\d)",
"patterns": [
{
"captures": {
"1": {
"name": "punctuation.separator.integer-float.erlang"
},
"2": {
"name": "punctuation.separator.float-exponent.erlang"
}
},
"match": "\\d++(\\.)\\d++([Ee][-+]?\\d++)?",
"name": "constant.numeric.float.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "2(#)([01]++_)*[01]++",
"name": "constant.numeric.integer.binary.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "3(#)([012]++_)*[012]++",
"name": "constant.numeric.integer.base-3.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "4(#)([0-3]++_)*[0-3]++",
"name": "constant.numeric.integer.base-4.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "5(#)([0-4]++_)*[0-4]++",
"name": "constant.numeric.integer.base-5.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "6(#)([0-5]++_)*[0-5]++",
"name": "constant.numeric.integer.base-6.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "7(#)([0-6]++_)*[0-6]++",
"name": "constant.numeric.integer.base-7.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "8(#)([0-7]++_)*[0-7]++",
"name": "constant.numeric.integer.octal.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "9(#)([0-8]++_)*[0-8]++",
"name": "constant.numeric.integer.base-9.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "10(#)(\\d++_)*\\d++",
"name": "constant.numeric.integer.decimal.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "11(#)([Aa\\d]++_)*[Aa\\d]++",
"name": "constant.numeric.integer.base-11.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "12(#)([ABab\\d]++_)*[ABab\\d]++",
"name": "constant.numeric.integer.base-12.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "13(#)([ABCabc\\d]++_)*[ABCabc\\d]++",
"name": "constant.numeric.integer.base-13.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "14(#)([A-Da-d\\d]++_)*[A-Da-d\\d]++",
"name": "constant.numeric.integer.base-14.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "15(#)([A-Ea-e\\d]++_)*[A-Ea-e\\d]++",
"name": "constant.numeric.integer.base-15.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "16(#)([A-Fa-f\\d]++_)*[A-Fa-f\\d]++",
"name": "constant.numeric.integer.hexadecimal.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "17(#)([A-Ga-g\\d]++_)*[A-Ga-g\\d]++",
"name": "constant.numeric.integer.base-17.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "18(#)([A-Ha-h\\d]++_)*[A-Ha-h\\d]++",
"name": "constant.numeric.integer.base-18.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "19(#)([A-Ia-i\\d]++_)*[A-Ia-i\\d]++",
"name": "constant.numeric.integer.base-19.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "20(#)([A-Ja-j\\d]++_)*[A-Ja-j\\d]++",
"name": "constant.numeric.integer.base-20.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "21(#)([A-Ka-k\\d]++_)*[A-Ka-k\\d]++",
"name": "constant.numeric.integer.base-21.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "22(#)([A-La-l\\d]++_)*[A-La-l\\d]++",
"name": "constant.numeric.integer.base-22.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "23(#)([A-Ma-m\\d]++_)*[A-Ma-m\\d]++",
"name": "constant.numeric.integer.base-23.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "24(#)([A-Na-n\\d]++_)*[A-Na-n\\d]++",
"name": "constant.numeric.integer.base-24.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "25(#)([A-Oa-o\\d]++_)*[A-Oa-o\\d]++",
"name": "constant.numeric.integer.base-25.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "26(#)([A-Pa-p\\d]++_)*[A-Pa-p\\d]++",
"name": "constant.numeric.integer.base-26.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "27(#)([A-Qa-q\\d]++_)*[A-Qa-q\\d]++",
"name": "constant.numeric.integer.base-27.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "28(#)([A-Ra-r\\d]++_)*[A-Ra-r\\d]++",
"name": "constant.numeric.integer.base-28.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "29(#)([A-Sa-s\\d]++_)*[A-Sa-s\\d]++",
"name": "constant.numeric.integer.base-29.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "30(#)([A-Ta-t\\d]++_)*[A-Ta-t\\d]++",
"name": "constant.numeric.integer.base-30.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "31(#)([A-Ua-u\\d]++_)*[A-Ua-u\\d]++",
"name": "constant.numeric.integer.base-31.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "32(#)([A-Va-v\\d]++_)*[A-Va-v\\d]++",
"name": "constant.numeric.integer.base-32.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "33(#)([A-Wa-w\\d]++_)*[A-Wa-w\\d]++",
"name": "constant.numeric.integer.base-33.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "34(#)([A-Xa-x\\d]++_)*[A-Xa-x\\d]++",
"name": "constant.numeric.integer.base-34.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "35(#)([A-Ya-y\\d]++_)*[A-Ya-y\\d]++",
"name": "constant.numeric.integer.base-35.erlang"
},
{
"captures": {
"1": {
"name": "punctuation.separator.base-integer.erlang"
}
},
"match": "36(#)([A-Za-z\\d]++_)*[A-Za-z\\d]++",
"name": "constant.numeric.integer.base-36.erlang"
},
{
"match": "\\d++#([A-Za-z\\d]++_)*[A-Za-z\\d]++",
"name": "invalid.illegal.integer.erlang"
},
{
"match": "(\\d++_)*\\d++",
"name": "constant.numeric.integer.decimal.erlang"
}
]
},
"parenthesized-expression": {
"begin": "(\\()",
"beginCaptures": {
"1": {
"name": "punctuation.section.expression.begin.erlang"
}
},
"end": "(\\))",
"endCaptures": {
"1": {
"name": "punctuation.section.expression.end.erlang"
}
},
"name": "meta.expression.parenthesized",
"patterns": [
{
"include": "#everything-else"
}
]
},
"record-directive": {
"begin": "^\\s*+(-)\\s*+(record)\\s*+(\\()\\s*+([a-z][@-Z_a-z\\d]*+|'[^']*+')\\s*+(,)",
"beginCaptures": {
"1": {
"name": "punctuation.section.directive.begin.erlang"
},
"2": {
"name": "keyword.control.directive.import.erlang"
},
"3": {
"name": "punctuation.definition.parameters.begin.erlang"
},
"4": {
"name": "entity.name.type.class.record.definition.erlang"
},
"5": {
"name": "punctuation.separator.parameters.erlang"
}
},
"end": "(\\))\\s*+(\\.)",
"endCaptures": {
"1": {
"name": "punctuation.definition.parameters.end.erlang"
},
"2": {
"name": "punctuation.section.directive.end.erlang"
}
},
"name": "meta.directive.record.erlang",
"patterns": [
{
"include": "#internal-record-body"
},
{
"include": "#comment"
}
]
},
"record-usage": {
"patterns": [
{
"captures": {
"1": {
"name": "keyword.operator.record.erlang"
},
"2": {
"name": "entity.name.type.class.record.erlang"
},
"3": {
"name": "punctuation.separator.record-field.erlang"
},
"4": {
"name": "variable.other.field.erlang"
}
},
"match": "(#)\\s*+([a-z][@-Z_a-z\\d]*+|'[^']*+')\\s*+(\\.)\\s*+([a-z][@-Z_a-z\\d]*+|'[^']*+')",
"name": "meta.record-usage.erlang"
},
{
"begin": "(#)\\s*+([a-z][@-Z_a-z\\d]*+|'[^']*+')",
"beginCaptures": {
"1": {
"name": "keyword.operator.record.erlang"
},
"2": {
"name": "entity.name.type.class.record.erlang"
}
},
"end": "(?<=})",
"name": "meta.record-usage.erlang",
"patterns": [
{
"include": "#internal-record-body"
}
]
}
]
},
"sigil-docstring": {
"begin": "(~[bs])((\"{3,})\\s*)(\\S.*)?$",
"beginCaptures": {
"1": {
"name": "storage.type.string.erlang"
},
"2": {
"name": "meta.string.quoted.triple.begin.erlang"
},
"3": {
"name": "punctuation.definition.string.begin.erlang"
},
"4": {
"name": "invalid.illegal.string.erlang"
}
},
"end": "^(\\s*(\\3))(?!\")",
"endCaptures": {
"1": {
"name": "meta.string.quoted.triple.end.erlang"
},
"2": {
"name": "punctuation.definition.string.end.erlang"
}
},
"name": "string.quoted.tripple.sigil.erlang",
"pa