// This is a TextMate grammar distributed by `starry-night`. // This grammar is developed at // // and licensed `mit`. // See for more info. /** * @import {Grammar} from '@wooorm/starry-night' */ /** @type {Grammar} */ const grammar = { extensions: ['.toit'], names: ['toit'], patterns: [ {include: '#comment'}, {include: '#import-section'}, {include: '#export-section'}, {include: '#class-section'}, {include: '#toplevel-section'} ], repository: { character: { patterns: [ { match: "\\'[^'\\\\]'|'\\\\[0abfnrtv$\\\\\\\"'nr]'|'\\\\x[a-fA-F0-9]{2}'|'\\\\u[a-fA-F0-9]{4}'", name: 'constant.numeric.character.toit' }, {match: "\\'\\\\?..+\\'", name: 'invalid.illegal.character.toit'} ] }, 'class-section': { begin: '^(?:(abstract)[ ]+)?(class|interface|mixin|monitor)(?!-)\\b', beginCaptures: { 1: {name: 'keyword.control.toit'}, 2: {name: 'keyword.control.toit'} }, end: '^(?=[^\\s/]|/[^/*])', name: 'meta.class.toit', patterns: [ {include: '#comment'}, { begin: '^(?=\\s\\s[^\\s])', end: '^(?=[^\\s/]|/[^/*])', name: 'meta.class.members', patterns: [{include: '#comment'}, {include: '#member-section'}] }, { begin: '(\\b(?>>|>>|<=|>=|<|>|\\+|-|\\*|/|%|\\^|&|\\||\\[\\]\\=|\\[\\]|\\[\\.\\.\\])', beginCaptures: { 1: {name: 'keyword.control.toit'}, 2: {name: 'storage.type.function'}, 3: {name: 'storage.type.function'} }, end: '(?=\\:(?![\\p{L}_])|^\\s{0,4}(?:[^\\s/]|/[^/*]))', name: 'meta.member.signature', patterns: [{include: '#signature-part2'}] }, {include: '#type-annotation'}, { begin: '(:=|::=)|(:)|^\\s{4}(?=[^\\s/])', beginCaptures: {1: {name: 'keyword.control.toit'}}, end: '(?=^\\s{0,2}([^\\s/]|/[^/*]))', name: 'meta.member.body', patterns: [{include: '#expressions'}] } ] }, 'multi-line-comment': { patterns: [ { begin: '\\s*(/\\*)(?!\\*)', beginCaptures: {0: {name: 'punctuation.definition.comment.toit'}}, end: '(\\*/)', endCaptures: {0: {name: 'punctuation.definition.comment.toit'}}, name: 'comment.block.toit', patterns: [{include: '#multi-line-comment'}] }, { captures: {0: {name: 'punctuation.definition.comment.toit'}}, match: '\\s*(/\\*\\*/)', name: 'comment.block.toit' }, { begin: '\\s*(/\\*\\*)(?!/)', beginCaptures: {0: {name: 'punctuation.definition.comment.toit'}}, end: '(\\*/)', endCaptures: {0: {name: 'punctuation.definition.comment.toit'}}, name: 'comment.block.documentation.toit', patterns: [{include: '#multi-line-comment'}] } ] }, 'multi-line-string': { begin: '"""', end: '"""(?!")|"""""', name: 'string.quoted.double.toit', patterns: [ {match: '\\\\.', name: 'constant.character.escape.toit'}, {include: '#interpolated'} ] }, 'named-arg': { patterns: [ { match: '--no-[\\p{L}_][\\w-]*', name: 'variable.language.special.named.toit' }, { match: '--[\\p{L}_][\\w-]*', name: 'variable.language.special.named.toit' } ] }, number: { name: 'constant.numeric.toit', patterns: [{include: '#number-double'}, {include: '#number-decimal'}] }, 'number-decimal': { patterns: [ { match: '(?=|<=|<|>|\\*|\\+|-|%|//|/|<<|>>>|>>|&|\\||\\^|~|[.][.])', name: 'keyword.control.toit' } ] }, 'operator-assignment': { patterns: [ { match: '(=|<<=|>>>=|>>=|//=|\\+=|-=|/=|\\*=|%=|~=|\\^=|&=)', name: 'keyword.control.toit' } ] }, primitive: { patterns: [ {match: '\\#primitive(?!-)\\b', name: 'support.function.builtin.toit'} ] }, 'signature-part2': { name: 'meta.member.signature.part2.toit', patterns: [ {include: '#type-annotation'}, {include: '#comment'}, { captures: { 1: {name: 'variable.parameter.named.setting.toit'}, 2: {patterns: [{include: '#special-variable'}]}, 3: { name: 'variable.parameter.named.setting.toit', patterns: [{include: '#invalid_non_expression'}] } }, match: '(--)?(this)?\\.([\\p{L}_][\\w-]*)', name: 'meta.parameter.setting.toit' }, { captures: { 2: {name: 'keyword.control.block_marker.toit'}, 3: {patterns: [{include: '#invalid_non_expression'}]} }, match: '(--)?(:)?([\\p{L}_][\\w-]*)', name: 'variable.parameter.toit' }, { begin: '(=)\\s*', beginCaptures: {1: {name: 'keyword.control.toit'}}, end: '^|\\s|:', name: 'meta.parameter.default_value.toit', patterns: [ {include: '#comment'}, {include: '#character'}, {include: '#number'}, {include: '#constant'}, {include: '#string'}, {include: '#type-name'}, {include: '#delimited'}, {include: '#keyword'} ] } ] }, 'single-line-comment': { patterns: [ { begin: '\\s*(//)', beginCaptures: {1: {name: 'comment.line.double-slash.toit'}}, contentName: 'comment.line.double-slash.toit', end: '(?=^)' } ] }, 'single-line-string': { begin: '"(?!")', end: '"', name: 'string.quoted.double.toit', patterns: [ {match: '\\\\.', name: 'constant.character.escape.toit'}, {include: '#interpolated'} ] }, 'special-variable': { patterns: [ { match: '\\b(?) *(?=[\\p{L}_])', beginCaptures: {1: {name: 'keyword.control.return_type.toit'}}, end: '(?=[^\\w\\-.?])', name: 'entity.name.type.annotation.toit' } ] }, 'type-name': { patterns: [ { match: '\\b(?