// 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 = { dependencies: ['source.js'], extensions: ['.gjs'], injections: { 'L:source.gjs -comment -(string -meta.embedded)': { patterns: [{include: '#main'}] } }, names: ['glimmer-js', 'gjs'], patterns: [{include: '#main'}, {include: 'source.js'}], repository: { 'as-keyword': {match: '\\s\\b(as)\\b(?=\\s\\|)', name: 'keyword.control'}, 'as-params': { begin: '(?)', endCaptures: { 1: {name: 'punctuation.definition.tag'}, 2: {name: 'punctuation.definition.tag'} }, name: 'meta.tag.any.ember-handlebars', patterns: [{include: '#tag-like-content'}] }, digit: { captures: { 0: {name: 'constant.numeric'}, 1: {name: 'constant.numeric'}, 2: {name: 'constant.numeric'} }, match: '\\d*(\\.)?\\d+' }, entities: { patterns: [ { captures: { 1: {name: 'punctuation.definition.entity.html.ember-handlebars'}, 3: {name: 'punctuation.definition.entity.html.ember-handlebars'} }, match: '(&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)', name: 'constant.character.entity.html.ember-handlebars' }, { match: '&', name: 'invalid.illegal.bad-ampersand.html.ember-handlebars' } ] }, 'glimmer-argument': { captures: { 1: { name: 'entity.other.attribute-name.ember-handlebars.argument', patterns: [{match: '(@)', name: 'markup.italic'}] }, 2: {name: 'punctuation.separator.key-value.html.ember-handlebars'} }, match: '\\s(@[a-zA-Z0-9:_.-]+)(=)?' }, 'glimmer-as-stuff': { patterns: [{include: '#as-keyword'}, {include: '#as-params'}] }, 'glimmer-block': { begin: '({{~?)(#|/)(([@\\$a-zA-Z0-9_/.-]+))', captures: { 1: {name: 'punctuation.definition.tag'}, 2: {name: 'punctuation.definition.tag'}, 3: { name: 'keyword.control', patterns: [ {include: '#glimmer-component-path'}, {match: '(\\/)+', name: 'punctuation.definition.tag'}, {match: '(\\.)+', name: 'punctuation.definition.tag'} ] } }, end: '(~?}})', name: 'entity.expression.ember-handlebars', patterns: [ {include: '#glimmer-as-stuff'}, {include: '#glimmer-supexp-content'} ] }, 'glimmer-bools': { captures: { 0: {name: 'keyword.operator'}, 1: {name: 'keyword.operator'}, 2: {name: 'string.regexp'}, 3: {name: 'string.regexp'}, 4: {name: 'keyword.operator'} }, match: '({{~?)(true|false|null|undefined|\\d*(\\.)?\\d+)(~?}})', name: 'entity.expression.ember-handlebars' }, 'glimmer-comment-block': { begin: '{{!--', captures: {0: {name: 'punctuation.definition.block.comment.glimmer'}}, end: '--}}', name: 'comment.block.glimmer', patterns: [{include: '#script'}, {include: '#attention'}] }, 'glimmer-comment-inline': { begin: '{{!', captures: {0: {name: 'punctuation.definition.block.comment.glimmer'}}, end: '}}', name: 'comment.inline.glimmer', patterns: [{include: '#script'}, {include: '#attention'}] }, 'glimmer-component-path': { captures: {1: {name: 'punctuation.definition.tag'}}, match: '(::|_|\\$|\\.)' }, 'glimmer-control-expression': { begin: '({{~?)(([-a-zA-Z_0-9/]+)\\s)', captures: { 1: {name: 'keyword.operator'}, 2: {name: 'keyword.operator'}, 3: {name: 'keyword.control'} }, end: '(~?}})', name: 'entity.expression.ember-handlebars', patterns: [{include: '#glimmer-supexp-content'}] }, 'glimmer-else-block': { captures: { 0: {name: 'punctuation.definition.tag'}, 1: {name: 'punctuation.definition.tag'}, 2: {name: 'keyword.control'}, 3: { name: 'keyword.control', patterns: [ {include: '#glimmer-subexp'}, {include: '#string-single-quoted-handlebars'}, {include: '#string-double-quoted-handlebars'}, {include: '#boolean'}, {include: '#digit'}, {include: '#param'}, {include: '#glimmer-parameter-name'}, {include: '#glimmer-parameter-value'} ] }, 4: {name: 'punctuation.definition.tag'} }, match: '({{~?)(else\\s[a-z]+\\s|else)([()@a-zA-Z0-9\\.\\s\\b]+)?(~?}})', name: 'entity.expression.ember-handlebars' }, 'glimmer-expression': { begin: '({{~?)(([()\\s@a-zA-Z0-9_.-]+))', captures: { 1: {name: 'keyword.operator'}, 2: {name: 'keyword.operator'}, 3: { name: 'support.function', patterns: [ {match: '[(]+', name: 'string.regexp'}, {match: '[)]+', name: 'string.regexp'}, {match: '(\\.)+', name: 'punctuation.definition.tag'}, {include: '#glimmer-supexp-content'} ] } }, end: '(~?}})', name: 'entity.expression.ember-handlebars', patterns: [{include: '#glimmer-supexp-content'}] }, 'glimmer-expression-property': { begin: '({{~?)((@|this.)([a-zA-Z0-9_.-]+))', captures: { 1: {name: 'keyword.operator'}, 2: {name: 'keyword.operator'}, 3: { name: 'support.function', patterns: [ {match: '(@|this)', name: 'variable.language'}, {match: '(\\.)+', name: 'punctuation.definition.tag'} ] }, 4: { name: 'support.function', patterns: [{match: '(\\.)+', name: 'punctuation.definition.tag'}] } }, end: '(~?}})', name: 'entity.expression.ember-handlebars', patterns: [{include: '#glimmer-supexp-content'}] }, 'glimmer-parameter-name': { captures: { 1: {name: 'variable.parameter.name.ember-handlebars'}, 2: {name: 'punctuation.definition.expression.ember-handlebars'} }, match: '\\b([a-zA-Z0-9_-]+)(\\s?=)' }, 'glimmer-parameter-value': { captures: { 1: { name: 'support.function', patterns: [{match: '(\\.)+', name: 'punctuation.definition.tag'}] } }, match: '\\b([a-zA-Z0-9:_.-]+)\\b(?!=)' }, 'glimmer-special-block': { captures: { 0: {name: 'keyword.operator'}, 1: {name: 'keyword.operator'}, 2: {name: 'keyword.control'}, 3: {name: 'keyword.operator'} }, match: '({{~?)(yield|outlet)(~?}})', name: 'entity.expression.ember-handlebars' }, 'glimmer-subexp': { begin: '(\\()([@a-zA-Z0-9.-]+)', captures: {1: {name: 'keyword.other'}, 2: {name: 'keyword.control'}}, end: '(\\))', name: 'entity.subexpression.ember-handlebars', patterns: [{include: '#glimmer-supexp-content'}] }, 'glimmer-supexp-content': { patterns: [ {include: '#glimmer-subexp'}, {include: '#string-single-quoted-handlebars'}, {include: '#string-double-quoted-handlebars'}, {include: '#boolean'}, {include: '#digit'}, {include: '#param'}, {include: '#glimmer-parameter-name'}, {include: '#glimmer-parameter-value'} ] }, 'glimmer-unescaped-expression': { begin: '{{{', captures: {0: {name: 'keyword.operator'}}, end: '}}}', name: 'entity.unescaped.expression.ember-handlebars', patterns: [ {include: '#string-single-quoted-handlebars'}, {include: '#string-double-quoted-handlebars'}, {include: '#glimmer-subexp'}, {include: '#param'} ] }, 'html-attribute': { captures: { 1: { name: 'entity.other.attribute-name.ember-handlebars', patterns: [{match: '(\\.\\.\\.attributes)', name: 'markup.bold'}] }, 2: {name: 'punctuation.separator.key-value.html.ember-handlebars'} }, match: '\\s([a-zA-Z0-9:_.-]+)(=)?' }, 'html-comment': { begin: '