UNPKG

@wooorm/starry-night

Version:
808 lines (805 loc) 28.3 kB
// This is a TextMate grammar distributed by `starry-night`. // This grammar is developed at // <https://github.com/bytecodealliance/vscode-wit> // and licensed `apache-2.0`. // See <https://github.com/wooorm/starry-night> for more info. /** * @import {Grammar} from '@wooorm/starry-night' */ /** @type {Grammar} */ const grammar = { extensions: ['.wit'], names: ['webassembly-interface-type', 'wit'], patterns: [ {include: '#comment'}, {include: '#package'}, {include: '#toplevel-use'}, {include: '#world'}, {include: '#interface'}, {include: '#whitespace'} ], repository: { 'block-comments': { patterns: [ {match: '/\\*\\*/', name: 'comment.block.empty.wit'}, { applyEndPatternLast: true, begin: '/\\*\\*', end: '\\*/', name: 'comment.block.documentation.wit', patterns: [ {include: '#block-comments'}, {include: '#markdown'}, {include: '#whitespace'} ] }, { applyEndPatternLast: true, begin: '/\\*(?!\\*)', end: '\\*/', name: 'comment.block.wit', patterns: [{include: '#block-comments'}, {include: '#whitespace'}] } ] }, boolean: {match: '\\b(bool)\\b', name: 'entity.name.type.boolean.wit'}, comment: { patterns: [ {include: '#block-comments'}, {include: '#doc-comment'}, {include: '#line-comment'} ] }, container: { name: 'meta.container.ty.wit', patterns: [ {include: '#tuple'}, {include: '#list'}, {include: '#option'}, {include: '#result'}, {include: '#handle'} ] }, 'doc-comment': { begin: '^\\s*///', end: '$', name: 'comment.line.documentation.wit', patterns: [{include: '#markdown'}] }, enum: { applyEndPatternLast: true, begin: '\\b(enum)\\b\\s+%?((?<![\\-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)(([\\-])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\s*(\\{)', beginCaptures: { 1: {name: 'keyword.other.enum.enum-items.wit'}, 2: {name: 'entity.name.type.id.enum-items.wit'}, 7: {name: 'punctuation.brackets.curly.begin.wit'} }, end: '(\\})', endCaptures: {1: {name: 'punctuation.brackets.curly.end.wit'}}, name: 'meta.enum-items.wit', patterns: [ {include: '#comment'}, {include: '#enum-cases'}, {include: '#whitespace'} ] }, 'enum-cases': { name: 'meta.enum-cases.wit', patterns: [ {include: '#comment'}, { match: '\\b%?((?<![\\-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)(([\\-])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\b', name: 'variable.other.enummember.id.enum-cases.wit' }, {match: '(\\,)', name: 'punctuation.comma.wit'}, {include: '#whitespace'} ] }, extern: { name: 'meta.extern-type.wit', patterns: [ { name: 'meta.interface-type.wit', patterns: [ { applyEndPatternLast: true, begin: '\\b(interface)\\b\\s*(\\{)', beginCaptures: { 1: {name: 'keyword.other.interface.interface-type.wit'}, 2: {name: 'ppunctuation.brackets.curly.begin.wit'} }, end: '(\\})', endCaptures: {1: {name: 'punctuation.brackets.curly.end.wit'}}, patterns: [ {include: '#comment'}, {include: '#interface-items'}, {include: '#whitespace'} ] } ] }, {include: '#function-definition'}, {include: '#use-path'} ] }, flags: { applyEndPatternLast: true, begin: '\\b(flags)\\s+%?((?<![\\-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)(([\\-])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\s*(\\{)', beginCaptures: { 1: {name: 'keyword.other.flags.flags-items.wit'}, 2: {name: 'entity.name.type.id.flags-items.wit'}, 7: {name: 'punctuation.brackets.curly.begin.wit'} }, end: '(\\})', endCaptures: {1: {name: 'punctuation.brackets.curly.end.wit'}}, name: 'meta.flags-items.wit', patterns: [ {include: '#comment'}, {include: '#flags-fields'}, {include: '#whitespace'} ] }, 'flags-fields': { name: 'meta.flags-fields.wit', patterns: [ {include: '#comment'}, { match: '\\b%?((?<![\\-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)(([\\-])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\b', name: 'variable.other.enummember.id.flags-fields.wit' }, {match: '(\\,)', name: 'punctuation.comma.wit'}, {include: '#whitespace'} ] }, function: { applyEndPatternLast: true, begin: '\\b%?((?<![\\-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)(([\\-])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\s*(\\:)', beginCaptures: { 1: {name: 'entity.name.function.id.func-item.wit'}, 2: {name: 'meta.word.wit'}, 4: {name: 'meta.word-separator.wit'}, 5: {name: 'meta.word.wit'}, 6: {name: 'keyword.operator.key-value.wit'} }, end: '((?<=\\n)|(?=\\}))', name: 'meta.func-item.wit', patterns: [{include: '#function-definition'}, {include: '#whitespace'}] }, 'function-definition': { name: 'meta.func-type.wit', patterns: [ { applyEndPatternLast: true, begin: '\\b(static\\s+)?(func)\\b', beginCaptures: { 1: {name: 'storage.modifier.static.func-item.wit'}, 2: {name: 'keyword.other.func.func-type.wit'} }, end: '((?<=\\n)|(?=\\}))', name: 'meta.function.wit', patterns: [ {include: '#comment'}, {include: '#parameter-list'}, {include: '#result-list'}, {include: '#whitespace'} ] } ] }, handle: { captures: { 1: {name: 'entity.name.type.borrow.handle.wit'}, 2: {name: 'punctuation.brackets.angle.begin.wit'}, 3: {name: 'entity.name.type.id.handle.wit'}, 8: {name: 'punctuation.brackets.angle.end.wit'} }, match: '\\b(borrow)\\b(\\<)\\s*%?((?<![\\-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)(([\\-])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\s*(\\>)', name: 'meta.handle.ty.wit' }, identifier: { match: '\\b%?((?<![\\-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)(([\\-])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\b', name: 'entity.name.type.id.wit' }, interface: { applyEndPatternLast: true, begin: '^\\b(default\\s+)?(interface)\\s+%?((?<![\\-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)(([\\-])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\s*(\\{)', beginCaptures: { 1: {name: 'storage.modifier.default.interface-item.wit'}, 2: { name: 'keyword.declaration.interface.interface-item.wit storage.type.wit' }, 3: {name: 'entity.name.type.id.interface-item.wit'}, 8: {name: 'punctuation.brackets.curly.begin.wit'} }, end: '(\\})', endCaptures: {1: {name: 'punctuation.brackets.curly.end.wit'}}, name: 'meta.interface-item.wit', patterns: [ {include: '#comment'}, {include: '#interface-items'}, {include: '#whitespace'} ] }, 'interface-items': { name: 'meta.interface-items.wit', patterns: [ {include: '#typedef-item'}, {include: '#use'}, {include: '#function'} ] }, 'line-comment': {match: '\\s*//.*', name: 'comment.line.double-slash.wit'}, list: { applyEndPatternLast: true, begin: '\\b(list)\\b(\\<)', beginCaptures: { 1: {name: 'entity.name.type.list.wit'}, 2: {name: 'punctuation.brackets.angle.begin.wit'} }, end: '(\\>)', endCaptures: {1: {name: 'punctuation.brackets.angle.end.wit'}}, name: 'meta.list.ty.wit', patterns: [ {include: '#comment'}, {include: '#types', name: 'meta.types.list.wit'}, {include: '#whitespace'} ] }, markdown: { patterns: [ { captures: {1: {name: 'markup.heading.markdown'}}, match: '\\G\\s*(#+.*)$' }, { captures: {2: {name: 'punctuation.definition.quote.begin.markdown'}}, match: '\\G\\s*((\\>)\\s+)+' }, { captures: {1: {name: 'punctuation.definition.list.begin.markdown'}}, match: '\\G\\s*(\\-)\\s+' }, { captures: { 1: {name: 'markup.list.numbered.markdown'}, 2: {name: 'punctuation.definition.list.begin.markdown'} }, match: '\\G\\s*(([0-9]+\\.)\\s+)' }, {captures: {1: {name: 'markup.italic.markdown'}}, match: '(`.*?`)'}, {captures: {1: {name: 'markup.bold.markdown'}}, match: '\\b(__.*?__)'}, {captures: {1: {name: 'markup.italic.markdown'}}, match: '\\b(_.*?_)'}, { captures: {1: {name: 'markup.bold.markdown'}}, match: '(\\*\\*.*?\\*\\*)' }, {captures: {1: {name: 'markup.italic.markdown'}}, match: '(\\*.*?\\*)'} ] }, 'named-type-list': { applyEndPatternLast: true, begin: '\\b%?((?<![\\-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)(([\\-])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\b\\s*(\\:)', beginCaptures: { 1: {name: 'variable.parameter.id.named-type.wit'}, 6: {name: 'keyword.operator.key-value.wit'} }, end: '((\\,)|(?=\\))|(?=\\n))', endCaptures: {2: {name: 'punctuation.comma.wit'}}, name: 'meta.named-type-list.wit', patterns: [ {include: '#comment'}, {include: '#types'}, {include: '#whitespace'} ] }, numeric: { match: '\\b(u8|u16|u32|u64|s8|s16|s32|s64|float32|float64)\\b', name: 'entity.name.type.numeric.wit' }, operator: { patterns: [ {match: '\\=', name: 'punctuation.equal.wit'}, {match: '\\,', name: 'punctuation.comma.wit'}, {match: '\\:', name: 'keyword.operator.key-value.wit'}, {match: '\\;', name: 'punctuation.semicolon.wit'}, {match: '\\(', name: 'punctuation.brackets.round.begin.wit'}, {match: '\\)', name: 'punctuation.brackets.round.end.wit'}, {match: '\\{', name: 'punctuation.brackets.curly.begin.wit'}, {match: '\\}', name: 'punctuation.brackets.curly.end.wit'}, {match: '\\<', name: 'punctuation.brackets.angle.begin.wit'}, {match: '\\>', name: 'punctuation.brackets.angle.end.wit'}, {match: '\\*', name: 'keyword.operator.star.wit'}, {match: '\\-\\>', name: 'keyword.operator.arrow.skinny.wit'} ] }, option: { applyEndPatternLast: true, begin: '\\b(option)\\b(\\<)', beginCaptures: { 1: {name: 'entity.name.type.option.wit'}, 2: {name: 'punctuation.brackets.angle.begin.wit'} }, end: '(\\>)', endCaptures: {1: {name: 'punctuation.brackets.angle.end.wit'}}, name: 'meta.option.ty.wit', patterns: [ {include: '#comment'}, {include: '#types', name: 'meta.types.option.wit'}, {include: '#whitespace'} ] }, package: { captures: { 1: {name: 'storage.modifier.package-decl.wit'}, 2: { name: 'meta.id.package-decl.wit', patterns: [ { captures: { 1: { name: 'entity.name.namespace.package-identifier.wit', patterns: [{include: '#identifier'}] }, 2: {name: 'keyword.operator.namespace.package-identifier.wit'}, 3: { name: 'entity.name.type.package-identifier.wit', patterns: [{include: '#identifier'}] }, 5: {name: 'keyword.operator.versioning.package-identifier.wit'}, 6: {name: 'constant.numeric.versioning.package-identifier.wit'} }, match: '([^\\:]+)(\\:)([^\\@]+)((\\@)([^\\s]+))?', name: 'meta.package-identifier.wit' } ] } }, match: '^(package)\\s+([^\\s]+)\\s*', name: 'meta.package-decl.wit' }, 'parameter-list': { applyEndPatternLast: true, begin: '(\\()', beginCaptures: {1: {name: 'punctuation.brackets.round.begin.wit'}}, end: '(\\))', endCaptures: {1: {name: 'punctuation.brackets.round.end.wit'}}, name: 'meta.param-list.wit', patterns: [ {include: '#comment'}, {include: '#named-type-list'}, {include: '#whitespace'} ] }, primitive: { name: 'meta.primitive.ty.wit', patterns: [ {include: '#numeric'}, {include: '#boolean'}, {include: '#string'} ] }, record: { applyEndPatternLast: true, begin: '\\b(record)\\b\\s+%?((?<![\\-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)(([\\-])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\s*(\\{)', beginCaptures: { 1: {name: 'keyword.declaration.record.record-item.wit'}, 2: {name: 'entity.name.type.id.record-item.wit'}, 7: {name: 'punctuation.brackets.curly.begin.wit'} }, end: '(\\})', endCaptures: {1: {name: 'punctuation.brackets.curly.end.wit'}}, name: 'meta.record-item.wit', patterns: [ {include: '#comment'}, {include: '#record-fields'}, {include: '#whitespace'} ] }, 'record-fields': { applyEndPatternLast: true, begin: '\\b%?((?<![\\-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)(([\\-])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\b\\s*(\\:)', beginCaptures: { 1: {name: 'variable.declaration.id.record-fields.wit'}, 6: {name: 'keyword.operator.key-value.wit'} }, end: '((\\,)|(?=\\})|(?=\\n))', endCaptures: {2: {name: 'punctuation.comma.wit'}}, name: 'meta.record-fields.wit', patterns: [ {include: '#comment'}, {include: '#types', name: 'meta.types.record-fields.wit'}, {include: '#whitespace'} ] }, resource: { applyEndPatternLast: true, begin: '\\b(resource)\\b\\s+%?((?<![\\-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)(([\\-])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)', beginCaptures: { 1: {name: 'keyword.other.resource.wit'}, 2: {name: 'entity.name.type.id.resource.wit'} }, end: '((?<=\\n)|(?=\\}))', name: 'meta.resource-item.wit', patterns: [ {include: '#comment'}, {include: '#resource-methods'}, {include: '#whitespace'} ] }, 'resource-methods': { applyEndPatternLast: true, begin: '(\\{)', beginCaptures: {1: {name: 'punctuation.brackets.curly.begin.wit'}}, end: '(\\})', endCaptures: {1: {name: 'punctuation.brackets.curly.end.wit'}}, name: 'meta.resource-methods.wit', patterns: [ {include: '#comment'}, { applyEndPatternLast: true, begin: '\\b(constructor)\\b', beginCaptures: { 1: {name: 'keyword.other.constructor.constructor-type.wit'}, 2: {name: 'punctuation.brackets.round.begin.wit'} }, end: '((?<=\\n)|(?=\\}))', name: 'meta.constructor-type.wit', patterns: [ {include: '#comment'}, {include: '#parameter-list'}, {include: '#whitespace'} ] }, {include: '#function'}, {include: '#whitespace'} ] }, result: { applyEndPatternLast: true, begin: '\\b(result)\\b', beginCaptures: { 1: {name: 'entity.name.type.result.wit'}, 2: {name: 'punctuation.brackets.angle.begin.wit'} }, end: '((?<=\\n)|(?=\\,)|(?=\\}))', name: 'meta.result.ty.wit', patterns: [ {include: '#comment'}, { applyEndPatternLast: true, begin: '(\\<)', beginCaptures: {1: {name: 'punctuation.brackets.angle.begin.wit'}}, end: '(\\>)', endCaptures: {1: {name: 'punctuation.brackets.angle.end.wit'}}, name: 'meta.inner.result.wit', patterns: [ {include: '#comment'}, { match: '(?<!\\w)(\\_)(?!\\w)', name: 'variable.other.inferred-type.result.wit' }, {include: '#types', name: 'meta.types.result.wit'}, {match: '(?<!result)\\s*(\\,)', name: 'punctuation.comma.wit'}, {include: '#whitespace'} ] }, {include: '#whitespace'} ] }, 'result-list': { applyEndPatternLast: true, begin: '(\\-\\>)', beginCaptures: {1: {name: 'keyword.operator.arrow.skinny.wit'}}, end: '((?<=\\n)|(?=\\}))', name: 'meta.result-list.wit', patterns: [ {include: '#comment'}, {include: '#types'}, {include: '#parameter-list'}, {include: '#whitespace'} ] }, string: {match: '\\b(string|char)\\b', name: 'entity.name.type.string.wit'}, 'toplevel-use': { captures: { 1: {name: 'keyword.other.use.toplevel-use-item.wit'}, 2: { name: 'meta.interface.toplevel-use-item.wit', patterns: [ { match: '\\b%?((?<![\\-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)(([\\-])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\b', name: 'entity.name.type.declaration.interface.toplevel-use-item.wit' }, { captures: { 1: { name: 'keyword.operator.versioning.interface.toplevel-use-item.wit' }, 2: { name: 'constant.numeric.versioning.interface.toplevel-use-item.wit' } }, match: '(\\@)((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)', name: 'meta.versioning.interface.toplevel-use-item.wit' } ] }, 4: {name: 'keyword.control.as.toplevel-use-item.wit'}, 5: {name: 'entity.name.type.toplevel-use-item.wit'} }, match: '^(use)\\s+([^\\s]+)(\\s+(as)\\s+([^\\s]+))?\\s*', name: 'meta.toplevel-use-item.wit' }, tuple: { applyEndPatternLast: true, begin: '\\b(tuple)\\b(\\<)', beginCaptures: { 1: {name: 'entity.name.type.tuple.wit'}, 2: {name: 'punctuation.brackets.angle.begin.wit'} }, end: '(\\>)', endCaptures: {1: {name: 'punctuation.brackets.angle.end.wit'}}, name: 'meta.tuple.ty.wit', patterns: [ {include: '#comment'}, {include: '#types', name: 'meta.types.tuple.wit'}, {match: '(\\,)', name: 'punctuation.comma.wit'}, {include: '#whitespace'} ] }, 'type-definition': { applyEndPatternLast: true, begin: '\\b(type)\\b\\s+%?((?<![\\-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)(([\\-])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\s*(\\=)', beginCaptures: { 1: {name: 'keyword.declaration.type.type-item.wit storage.type.wit'}, 2: {name: 'entity.name.type.id.type-item.wit'}, 7: {name: 'punctuation.equal.wit'} }, end: '(?<=\\n)', name: 'meta.type-item.wit', patterns: [ {include: '#types', name: 'meta.types.type-item.wit'}, {include: '#whitespace'} ] }, 'typedef-item': { name: 'meta.typedef-item.wit', patterns: [ {include: '#resource'}, {include: '#variant'}, {include: '#record'}, {include: '#flags'}, {include: '#enum'}, {include: '#type-definition'} ] }, types: { name: 'meta.ty.wit', patterns: [ {include: '#primitive'}, {include: '#container'}, {include: '#identifier'} ] }, use: { applyEndPatternLast: true, begin: '\\b(use)\\b\\s+([^\\s]+)(\\.)(\\{)', beginCaptures: { 1: {name: 'keyword.other.use.use-item.wit'}, 2: {patterns: [{include: '#use-path'}, {include: '#whitespace'}]}, 3: {name: 'keyword.operator.namespace-separator.use-item.wit'}, 4: {name: 'punctuation.brackets.curly.begin.wit'} }, end: '(\\})', endCaptures: {1: {name: 'punctuation.brackets.curly.end.wit'}}, name: 'meta.use-item.wit', patterns: [ {include: '#comment'}, { match: '\\b%?((?<![\\-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)(([\\-])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\b', name: 'entity.name.type.declaration.use-names-item.use-item.wit' }, {match: '(\\,)', name: 'punctuation.comma.wit'}, {include: '#whitespace'} ] }, 'use-path': { name: 'meta.use-path.wit', patterns: [ { match: '\\b%?((?<![\\-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)(([\\-])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\b', name: 'entity.name.namespace.id.use-path.wit' }, { captures: { 1: {name: 'keyword.operator.versioning.id.use-path.wit'}, 2: {name: 'constant.numeric.versioning.id.use-path.wit'} }, match: '(\\@)((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)', name: 'meta.versioning.id.use-path.wit' }, { match: '\\.', name: 'keyword.operator.namespace-separator.use-path.wit' } ] }, variant: { applyEndPatternLast: true, begin: '\\b(variant)\\s+%?((?<![\\-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)(([\\-])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\s*(\\{)', beginCaptures: { 1: {name: 'keyword.other.variant.wit'}, 2: {name: 'entity.name.type.id.variant.wit'}, 7: {name: 'punctuation.brackets.curly.begin.wit'} }, end: '(\\})', endCaptures: {1: {name: 'punctuation.brackets.curly.end.wit'}}, name: 'meta.variant.wit', patterns: [ {include: '#comment'}, {include: '#variant-cases'}, {include: '#enum-cases'}, {include: '#whitespace'} ] }, 'variant-cases': { applyEndPatternLast: true, begin: '\\b%?((?<![\\-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)(([\\-])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\b\\s*(\\()', beginCaptures: { 1: {name: 'variable.other.enummember.id.variant-cases.wit'}, 6: {name: 'punctuation.brackets.round.begin.wit'} }, end: '(\\))\\s*(\\,)?', endCaptures: { 1: {name: 'punctuation.brackets.round.end.wit'}, 2: {name: 'punctuation.comma.wit'} }, name: 'meta.variant-cases.wit', patterns: [ {include: '#types', name: 'meta.types.variant-cases.wit'}, {include: '#whitespace'} ] }, whitespace: {match: '\\s+', name: 'meta.whitespace.wit'}, world: { applyEndPatternLast: true, begin: '^\\b(default\\s+)?(world)\\s+%?((?<![\\-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)(([\\-])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\s*(\\{)', beginCaptures: { 1: {name: 'storage.modifier.default.world-item.wit'}, 2: {name: 'keyword.declaration.world.world-item.wit storage.type.wit'}, 3: {name: 'entity.name.type.id.world-item.wit'}, 8: {name: 'punctuation.brackets.curly.begin.wit'} }, end: '(\\})', endCaptures: {1: {name: 'punctuation.brackets.curly.end.wit'}}, name: 'meta.world-item.wit', patterns: [ {include: '#comment'}, { applyEndPatternLast: true, begin: '\\b(export)\\b\\s+([^\\s]+)', beginCaptures: { 1: {name: 'keyword.control.export.export-item.wit'}, 2: { name: 'meta.id.export-item.wit', patterns: [ { match: '\\b%?((?<![\\-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)(([\\-])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\b', name: 'variable.other.constant.id.export-item.wit' }, { captures: { 1: {name: 'keyword.operator.versioning.id.export-item.wit'}, 2: {name: 'constant.numeric.versioning.id.export-item.wit'} }, match: '(\\@)((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)', name: 'meta.versioning.id.export-item.wit' } ] } }, end: '((?<=\\n)|(?=\\}))', name: 'meta.export-item.wit', patterns: [{include: '#extern'}, {include: '#whitespace'}] }, { applyEndPatternLast: true, begin: '\\b(import)\\s+([^\\s]+)', beginCaptures: { 1: {name: 'keyword.control.import.import-item.wit'}, 2: { name: 'meta.id.import-item.wit', patterns: [ { match: '\\b%?((?<![\\-\\w])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*)(([\\-])([a-z][0-9a-z]*|[A-Z][0-9A-Z]*))*)\\b', name: 'variable.other.id.import-item.wit' }, { captures: { 1: {name: 'keyword.operator.versioning.id.import-item.wit'}, 2: {name: 'constant.numeric.versioning.id.import-item.wit'} }, match: '(\\@)((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)', name: 'meta.versioning.id.import-item.wit' } ] } }, end: '((?<=\\n)|(?=\\}))', name: 'meta.import-item.wit', patterns: [{include: '#extern'}, {include: '#whitespace'}] }, { applyEndPatternLast: true, begin: '\\b(include)\\s+([^\\s]+)\\s*', beginCaptures: { 1: {name: 'keyword.control.include.include-item.wit'}, 2: { name: 'meta.use-path.include-item.wit', patterns: [{include: '#use-path'}] } }, end: '(?<=\\n)', name: 'meta.include-item.wit', patterns: [ { applyEndPatternLast: true, begin: '\\b(with)\\b\\s+(\\{)', beginCaptures: { 1: {name: 'keyword.control.with.include-item.wit'}, 2: {name: 'punctuation.brackets.curly.begin.wit'} }, end: '(\\})', endCaptures: {1: {name: 'punctuation.brackets.curly.end.wit'}}, name: 'meta.with.include-item.wit', patterns: [ {include: '#comment'}, { captures: { 1: {name: 'variable.other.id.include-names-item.wit'}, 2: {name: 'keyword.control.as.include-names-item.wit'}, 3: {name: 'entity.name.type.include-names-item.wit'} }, match: '([^\\s]+)\\s+(as)\\s+([^\\s\\,]+)', name: 'meta.include-names-item.wit' }, {match: '(\\,)', name: 'punctuation.comma.wit'}, {include: '#whitespace'} ] } ] }, {include: '#use'}, {include: '#typedef-item'}, {include: '#whitespace'} ] } }, scopeName: 'source.wit' } export default grammar