// This is a TextMate grammar distributed by `starry-night`. // This grammar is developed at // // and licensed `apache-2.0`. // See for more info. /** * @import {Grammar} from '@wooorm/starry-night' */ /** @type {Grammar} */ const grammar = { extensions: [ '.erl', '.app', '.app.src', '.es', '.escript', '.hrl', '.xrl', '.yrl' ], names: ['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[\\da-fA-F]{2})', name: 'constant.other.symbol.escape.erlang' }, {match: '\\\\\\^?.?', name: 'invalid.illegal.atom.erlang'} ] }, { match: '[a-z][a-zA-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][a-zA-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[\\da-fA-F]{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*+([a-zA-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*+[a-zA-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*+([a-zA-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][a-zA-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][a-zA-Z\\d@_]*+)\\s*+(\\.)', name: 'meta.directive.erlang' } ] }, 'doc-directive': { begin: '^\\s*+(-)\\s*+((module)?doc)\\s*([(]\\s*)?(~[bBsS]?)?((["]{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.md'}] }, docstring: { begin: '(?)|(;)|(,)' }, '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][a-zA-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][a-zA-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[\\da-fA-F]{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++|(\\*))?((\\.)((\\*)|.))?)?[tlkK]*[~cfegswpWPBX#bx\\+ni]', name: 'constant.character.format.placeholder.other.erlang' }, { captures: {1: {name: 'punctuation.definition.placeholder.erlang'}}, match: '(~)(\\*)?(\\d++)?(t)?[~du\\-#fsacl]', 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)|(signed|unsigned)|(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*+([a-zA-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*+([a-zA-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*+([a-zA-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*+([a-zA-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][a-zA-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(#)([0-1]++_)*[0-1]++', name: 'constant.numeric.integer.binary.erlang' }, { captures: {1: {name: 'punctuation.separator.base-integer.erlang'}}, match: '3(#)([0-2]++_)*[0-2]++', 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(#)([\\daA]++_)*[\\daA]++', name: 'constant.numeric.integer.base-11.erlang' }, { captures: {1: {name: 'punctuation.separator.base-integer.erlang'}}, match: '12(#)([\\da-bA-B]++_)*[\\da-bA-B]++', name: 'constant.numeric.integer.base-12.erlang' }, { captures: {1: {name: 'punctuation.separator.base-integer.erlang'}}, match: '13(#)([\\da-cA-C]++_)*[\\da-cA-C]++', name: 'constant.numeric.integer.base-13.erlang' }, { captures: {1: {name: 'punctuation.separator.base-integer.erlang'}}, match: '14(#)([\\da-dA-D]++_)*[\\da-dA-D]++', name: 'constant.numeric.integer.base-14.erlang' }, { captures: {1: {name: 'punctuation.separator.base-integer.erlang'}}, match: '15(#)([\\da-eA-E]++_)*[\\da-eA-E]++', name: 'constant.numeric.integer.base-15.erlang' }, { captures: {1: {name: 'punctuation.separator.base-integer.erlang'}}, match: '16(#)([\\da-fA-F]++_)*[\\da-fA-F]++', name: 'constant.numeric.integer.hexadecimal.erlang' }, { captures: {1: {name: 'punctuation.separator.base-integer.erlang'}}, match: '17(#)([\\da-gA-G]++_)*[\\da-gA-G]++', name: 'constant.numeric.integer.base-17.erlang' }, { captures: {1: {name: 'punctuation.separator.base-integer.erlang'}}, match: '18(#)([\\da-hA-H]++_)*[\\da-hA-H]++', name: 'constant.numeric.integer.base-18.erlang' }, { captures: {1: {name: 'punctuation.separator.base-integer.erlang'}}, match: '19(#)([\\da-iA-I]++_)*[\\da-iA-I]++', name: 'constant.numeric.integer.base-19.erlang' }, { captures: {1: {name: 'punctuation.separator.base-integer.erlang'}}, match: '20(#)([\\da-jA-J]++_)*[\\da-jA-J]++', name: 'constant.numeric.integer.base-20.erlang' }, { captures: {1: {name: 'punctuation.separator.base-integer.erlang'}}, match: '21(#)([\\da-kA-K]++_)*[\\da-kA-K]++', name: 'constant.numeric.integer.base-21.erlang' }, { captures: {1: {name: 'punctuation.separator.base-integer.erlang'}}, match: '22(#)([\\da-lA-L]++_)*[\\da-lA-L]++', name: 'constant.numeric.integer.base-22.erlang' }, { captures: {1: {name: 'punctuation.separator.base-integer.erlang'}}, match: '23(#)([\\da-mA-M]++_)*[\\da-mA-M]++', name: 'constant.numeric.integer.base-23.erlang' }, { captures: {1: {name: 'punctuation.separator.base-integer.erlang'}}, match: '24(#)([\\da-nA-N]++_)*[\\da-nA-N]++', name: 'constant.numeric.integer.base-24.erlang' }, { captures: {1: {name: 'punctuation.separator.base-integer.erlang'}}, match: '25(#)([\\da-oA-O]++_)*[\\da-oA-O]++', name: 'constant.numeric.integer.base-25.erlang' }, { captures: {1: {name: 'punctuation.separator.base-integer.erlang'}}, match: '26(#)([\\da-pA-P]++_)*[\\da-pA-P]++', name: 'constant.numeric.integer.base-26.erlang' }, { captures: {1: {name: 'punctuation.separator.base-integer.erlang'}}, match: '27(#)([\\da-qA-Q]++_)*[\\da-qA-Q]++', name: 'constant.numeric.integer.base-27.erlang' }, { captures: {1: {name: 'punctuation.separator.base-integer.erlang'}}, match: '28(#)([\\da-rA-R]++_)*[\\da-rA-R]++', name: 'constant.numeric.integer.base-28.erlang' }, { captures: {1: {name: 'punctuation.separator.base-integer.erlang'}}, match: '29(#)([\\da-sA-S]++_)*[\\da-sA-S]++', name: 'constant.numeric.integer.base-29.erlang' }, { captures: {1: {name: 'punctuation.separator.base-integer.erlang'}}, match: '30(#)([\\da-tA-T]++_)*[\\da-tA-T]++', name: 'constant.numeric.integer.base-30.erlang' }, { captures: {1: {name: 'punctuation.separator.base-integer.erlang'}}, match: '31(#)([\\da-uA-U]++_)*[\\da-uA-U]++', name: 'constant.numeric.integer.base-31.erlang' }, { captures: {1: {name: 'punctuation.separator.base-integer.erlang'}}, match: '32(#)([\\da-vA-V]++_)*[\\da-vA-V]++', name: 'constant.numeric.integer.base-32.erlang' }, { captures: {1: {name: 'punctuation.separator.base-integer.erlang'}}, match: '33(#)([\\da-wA-W]++_)*[\\da-wA-W]++', name: 'constant.numeric.integer.base-33.erlang' }, { captures: {1: {name: 'punctuation.separator.base-integer.erlang'}}, match: '34(#)([\\da-xA-X]++_)*[\\da-xA-X]++', name: 'constant.numeric.integer.base-34.erlang' }, { captures: {1: {name: 'punctuation.separator.base-integer.erlang'}}, match: '35(#)([\\da-yA-Y]++_)*[\\da-yA-Y]++', name: 'constant.numeric.integer.base-35.erlang' }, { captures: {1: {name: 'punctuation.separator.base-integer.erlang'}}, match: '36(#)([\\da-zA-Z]++_)*[\\da-zA-Z]++', name: 'constant.numeric.integer.base-36.erlang' }, { match: '\\d++#([\\da-zA-Z]++_)*[\\da-zA-Z]++', 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][a-zA-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][a-zA-Z\\d@_]*+|'[^']*+')\\s*+(\\.)\\s*+([a-z][a-zA-Z\\d@_]*+|'[^']*+')", name: 'meta.record-usage.erlang' }, { begin: "(#)\\s*+([a-z][a-zA-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', patterns: [{include: '#internal-string-body'}] }, 'sigil-docstring-verbatim': { 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', patterns: [{include: '#internal-string-body-verbatim'}] }, 'sigil-string': { patterns: [ {include: '#sigil-string-parenthesis'}, {include: '#sigil-string-parenthesis-verbatim'}, {include: '#sigil-string-curly-brackets'}, {include: '#sigil-string-curly-brackets-verbatim'}, {include: '#sigil-string-square-brackets'}, {include: '#sigil-string-square-brackets-verbatim'}, {include: '#sigil-string-less-greater'}, {include: '#sigil-string-less-greater-verbatim'}, {include: '#sigil-string-single-character'}, {include: '#sigil-string-single-character-verbatim'}, {include: '#sigil-string-single-quote'}, {include: '#sigil-string-single-quote-verbatim'}, {include: '#sigil-string-double-quote'}, {include: '#sigil-string-double-quote-verbatim'} ] }, 'sigil-string-curly-brackets': { begin: '(~[bs]?)([{])', beginCaptures: { 1: {name: 'storage.type.string.erlang'}, 2: {name: 'punctuation.definition.string.begin.erlang'} }, end: '([}])', endCaptures: {1: {name: 'punctuation.definition.string.end.erlang'}}, name: 'string.quoted.curly-brackets.sigil.erlang', patterns: [{include: '#internal-string-body'}] }, 'sigil-string-curly-brackets-verbatim': { begin: '(~[BS])([{])', beginCaptures: { 1: {name: 'storage.type.string.erlang'}, 2: {name: 'punctuation.definition.string.begin.erlang'} }, end: '([}])', endCaptures: {1: {name: 'punctuation.definition.string.end.erlang'}}, name: 'string.quoted.curly-brackets.sigil.erlang', patterns: [{include: '#internal-string-body-verbatim'}] }, 'sigil-string-double-quote': { begin: '(~[bs]?)(")', beginCaptures: { 1: {name: 'storage.type.string.erlang'}, 2: {name: 'punctuation.definition.string.begin.erlang'} }, end: '(\\2)', endCaptures: {1: {name: 'punctuation.definition.string.end.erlang'}}, name: 'string.quoted.double.sigil.erlang', patterns: [{include: '#internal-string-body'}] }, 'sigil-string-double-quote-verbatim': { begin: '(~[BS])(")', beginCaptures: { 1: {name: 'storage.type.string.erlang'}, 2: {name: 'punctuation.definition.string.begin.erlang'} }, end: '(\\2)', endCaptures: {1: {name: 'punctuation.definition.string.end.erlang'}}, name: 'string.quoted.double.sigil.erlang', patterns: [{include: '#internal-string-body-verbatim'}] }, 'sigil-string-less-greater': { begin: '(~[bs]?)(<)', beginCaptures: { 1: {name: 'storage.type.string.erlang'}, 2: {name: 'punctuation.definition.string.begin.erlang'} }, end: '(>)', endCaptures: {1: {name: 'punctuation.definition.string.end.erlang'}}, name: 'string.quoted.less-greater.sigil.erlang', patterns: [{include: '#internal-string-body'}] }, 'sigil-string-less-greater-verbatim': { begin: '(~[BS])(<)', beginCaptures: { 1: {name: 'storage.type.string.erlang'}, 2: {name: 'punctuation.definition.string.begin.erlang'} }, end: '(>)', endCaptures: {1: {name: 'punctuation.definition.string.end.erlang'}}, name: 'string.quoted.less-greater.sigil.erlang', patterns: [{include: '#internal-string-body-verbatim'}] }, 'sigil-string-parenthesis': { begin: '(~[bs]?)([(])', beginCaptures: { 1: {name: 'storage.type.string.erlang'}, 2: {name: 'punctuation.definition.string.begin.erlang'} }, end: '([)])', endCaptures: {1: {name: 'punctuation.definition.string.end.erlang'}}, name: 'string.quoted.parenthesis.sigil.erlang', patterns: [{include: '#internal-string-body'}] }, 'sigil-string-parenthesis-verbatim': { begin: '(~[BS])([(])', beginCaptures: { 1: {name: 'storage.type.string.erlang'}, 2: {name: 'punctuation.definition.string.begin.erlang'} }, end: '([)])', endCaptures: {1: {name: 'punctuation.definition.string.end.erlang'}}, name: 'string.quoted.parenthesis.sigil.erlang', patterns: [{include: '#internal-string-body-verbatim'}] }, 'sigil-string-single-character': { begin: '(~[bs]?)([/\\|`#])', beginCaptures: { 1: {name: 'storage.type.string.erlang'}, 2: {name: 'punctuation.definition.string.begin.erlang'} }, end: '(\\2)', endCaptures: {1: {name: 'punctuation.definition.string.end.erlang'}}, name: 'string.quoted.other.sigil.erlang', patterns: [{include: '#internal-string-body'}] }, 'sigil-string-single-character-verbatim': { begin: '(~[BS])([/\\|`#])', beginCaptures: { 1: {name: 'storage.type.string.erlang'}, 2: {name: 'punctuation.definition.string.begin.erlang'} }, end: '(\\2)', endCaptures: {1: {name: 'punctuation.definition.string.end.erlang'}}, name: 'string.quoted.other.sigil.erlang', patterns: [{include: '#internal-string-body-verbatim'}] }, 'sigil-string-single-quote': { begin: "(~[bs]?)(')", beginCaptures: { 1: {name: 'storage.type.string.erlang'}, 2: {name: 'punctuation.definition.string.begin.erlang'} }, end: '(\\2)', endCaptures: {1: {name: 'punctuation.definition.string.end.erlang'}}, name: 'string.quoted.single.sigil.erlang', patterns: [{include: '#internal-string-body'}] }, 'sigil-string-single-quote-verbatim': { begin: "(~[BS])(')", beginCaptures: { 1: {name: 'storage.type.string.erlang'}, 2: {name: 'punctuation.definition.string.begin.erlang'} }, end: '(\\2)', endCaptures: {1: {name: 'punctuation.definition.string.end.erlang'}}, name: 'string.quoted.single.sigil.erlang', patterns: [{include: '#internal-string-body-verbatim'}] }, 'sigil-string-square-brackets': { begin: '(~[bs]?)([\\[])', beginCaptures: { 1: {name: 'storage.type.string.erlang'}, 2: {name: 'punctuation.definition.string.begin.erlang'} }, end: '([\\]])', endCaptures: {1: {name: 'punctuation.definition.string.end.erlang'}}, name: 'string.quoted.square-brackets.sigil.erlang', patterns: [{include: '#internal-string-body'}] }, 'sigil-string-square-brackets-verbatim': { begin: '(~[BS])([\\[])', beginCaptures: { 1: {name: 'storage.type.string.erlang'}, 2: {name: 'punctuation.definition.string.begin.erlang'} }, end: '([\\]])', endCaptures: {1: {name: 'punctuation.definition.string.end.erlang'}}, name: 'string.quoted.square-brackets.sigil.erlang', patterns: [{include: '#internal-string-body-verbatim'}] }, string: { begin: '(")', beginCaptures: {1: {name: 'punctuation.definition.string.begin.erlang'}}, end: '(")', endCaptures: {1: {name: 'punctuation.definition.string.end.erlang'}}, name: 'string.quoted.double.erlang', patterns: [{include: '#internal-string-body'}] }, 'symbolic-operator': { match: '\\+\\+|\\+|--|-|\\*|/=|/|=/=|=:=|==|=<|=|<-|<|>=|>|!|::|\\?=', name: 'keyword.operator.symbolic.erlang' }, 'textual-operator': { match: '\\b(andalso|band|and|bxor|xor|bor|orelse|or|bnot|not|bsl|bsr|div|rem)\\b', name: 'keyword.operator.textual.erlang' }, tuple: { begin: '(\\{)', beginCaptures: {1: {name: 'punctuation.definition.tuple.begin.erlang'}}, end: '(\\})', endCaptures: {1: {name: 'punctuation.definition.tuple.end.erlang'}}, name: 'meta.structure.tuple.erlang', patterns: [ {match: ',', name: 'punctuation.separator.tuple.erlang'}, {include: '#everything-else'} ] }, variable: { captures: { 1: {name: 'variable.other.erlang'}, 2: {name: 'variable.language.omitted.erlang'} }, match: '(_[a-zA-Z\\d@_]++|[A-Z][a-zA-Z\\d@_]*+)|(_)' } }, scopeName: 'source.erlang' } export default grammar