// 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: ['.das'], names: ['daslang'], patterns: [ {include: '#comments'}, {include: '#annotations'}, {include: '#struct_declaration'}, {include: '#function'}, {include: '#variable_declaration'}, {include: '#keywords'}, {include: '#strings'}, {include: '#literals'}, {include: '#builtin_types'}, {include: '#builtin_functions_call'}, {include: '#function_call'}, {include: '#member_access'}, {include: '#operators'}, {include: '#identifiers'} ], repository: { annotations: { patterns: [ { begin: '((?|\\s*\\n(?![[:space:]]))', patterns: [ { begin: '\\(', beginCaptures: { 0: {name: 'punctuation.definition.parameters.begin.daslang'} }, end: '\\)', endCaptures: { 0: {name: 'punctuation.definition.parameters.end.daslang'} }, name: 'meta.function.parameters.daslang', patterns: [ { begin: '\\b(var|let)\\b', beginCaptures: {0: {name: 'storage.modifier.daslang'}}, end: '(?=,|;|\\))', patterns: [ { match: '\\b([[:alpha:]_][[:alnum:]_]*)\\b', name: 'variable.parameter.function.daslang' }, { match: ':', name: 'punctuation.separator.annotation.daslang' }, {include: '#builtin_types'}, {include: '#user_defined_types'}, {include: '#expression'} ] }, { match: '\\b([[:alpha:]_][[:alnum:]_]*)\\b', name: 'variable.parameter.function.daslang' }, { match: ':', name: 'punctuation.separator.annotation.daslang' }, {include: '#builtin_types'}, {include: '#user_defined_types'}, {include: '#expression'}, { match: ',|;', name: 'punctuation.separator.parameters.daslang' } ] }, {match: ':', name: 'punctuation.separator.return-type.daslang'}, {include: '#builtin_types'}, {include: '#user_defined_types'} ] }, {include: '#annotations'} ] }, { begin: '\\{', beginCaptures: { 0: {name: 'punctuation.definition.block.begin.daslang'} }, end: '\\}', endCaptures: {0: {name: 'punctuation.definition.block.end.daslang'}}, name: 'meta.block.curly.daslang', patterns: [ {include: '$self'}, {match: ';', name: 'punctuation.terminator.statement.daslang'} ] }, { begin: '\\n(?=\\s)', end: '(?=\\n[^\\s])|\\s*$', name: 'meta.block.pythonic.daslang', patterns: [{include: '$self'}] }, { begin: '@', beginCaptures: {0: {name: 'keyword.operator.lambda-decl.daslang'}}, end: '(?=;|$)', name: 'meta.lambda-expression.daslang', patterns: [ { begin: '<\\|', beginCaptures: {0: {name: 'keyword.operator.pipe.daslang'}}, end: '(?=\\n|\\s*$)', patterns: [ { begin: '\\(', beginCaptures: { 0: {name: 'punctuation.definition.parameters.begin.daslang'} }, end: '\\)', endCaptures: { 0: {name: 'punctuation.definition.parameters.end.daslang'} }, patterns: [{include: '#function_arguments'}] }, { begin: '(?=\\{|=>|\\n)', end: '(?=\\n[^\\s])|\\s*$', patterns: [{include: '#expression'}, {include: '#blocks'}] } ] } ] }, { begin: '%([[:alpha:]_][[:alnum:]_]*)~', beginCaptures: { 0: {name: 'keyword.operator.reader-macro.daslang'}, 1: {name: 'entity.name.function.reader-macro.daslang'} }, end: '([[:alpha:]_][[:alnum:]_]*)%', endCaptures: { 0: {name: 'keyword.operator.reader-macro-terminator.daslang'}, 1: {name: 'entity.name.function.reader-macro.daslang'} }, name: 'meta.reader-macro.daslang', patterns: [{include: '$self'}] }, { begin: '\\$', beginCaptures: {0: {name: 'keyword.operator.block-decl.daslang'}}, end: '(?=;|$)', name: 'meta.block-expression.daslang', patterns: [ { begin: '<\\|', beginCaptures: {0: {name: 'keyword.operator.pipe.daslang'}}, end: '(?=\\n|\\s*$)', patterns: [ { begin: '\\(', beginCaptures: { 0: {name: 'punctuation.definition.parameters.begin.daslang'} }, end: '\\)', endCaptures: { 0: {name: 'punctuation.definition.parameters.end.daslang'} }, patterns: [{include: '#function_arguments'}] }, { begin: '(?=\\{|=>|\\n)', end: '(?=\\n[^\\s])|\\s*$', patterns: [{include: '#expression'}, {include: '#blocks'}] } ] } ] } ] }, function_arguments: { patterns: [ { match: '\\b([[:alpha:]_][[:alnum:]_]*)\\b(?=\\s*=)', name: 'variable.parameter.function.daslang' }, {include: '#expression'}, {match: ',|;', name: 'punctuation.separator.arguments.daslang'} ] }, function_call: { begin: '(?\\s*', name: 'keyword.operator.map.daslang'}, { match: '\\b(where|for|in)\\b', name: 'keyword.control.comprehension.daslang' }, {match: '\\|\\|', name: 'keyword.operator.or.daslang'}, { match: '\\b(struct|class|tuple|variant|enum|bitfield)\\b', name: 'storage.type.declaration.daslang' }, {include: '#variable_declaration'}, { match: '\\b(typeinfo|type|auto)\\b', name: 'keyword.other.type-query.daslang' } ] }, keywords: { patterns: [ { match: '\\b(if|else|elif|while|for|break|continue|return|yield|try|recover|panic|finally|in|is|as)\\b', name: 'keyword.control.daslang' }, { match: '\\b(operator)\\b', name: 'keyword.control.operator-overload.daslang' }, { match: '\\b(struct|class|enum|variant|tuple|bitfield|typedef|def)\\b', name: 'storage.type.declaration.daslang' }, { match: '\\b(let|var|static|public|private|shared|inscope|explicit|implicit|abstract|override|sealed|const)\\b', name: 'storage.modifier.daslang' }, { match: '\\b(new|typeinfo|type|addr|deref|reinterpret|assume|with|cast|pass|goto|label|aka)\\b', name: 'keyword.other.daslang' }, {match: '\\b(options)\\b', name: 'keyword.control.options.daslang'}, {match: '\\b(require)\\b', name: 'keyword.control.module.daslang'}, {match: '\\b(module)\\b', name: 'keyword.declaration.module.daslang'}, { match: '\\b(match|match_expr|static_match|multi_match|match_type)\\b', name: 'keyword.control.pattern-matching.daslang' } ] }, literals: { patterns: [ {match: '\\b(true|false|null)\\b', name: 'constant.language.daslang'}, {match: "'[[:print:]]'", name: 'constant.character.daslang'}, { match: '\\b0x[\\dA-Fa-f]+u\\b', name: 'constant.numeric.integer.hexadecimal.unsigned.daslang' }, { match: '\\b0x[\\dA-Fa-f]+L\\b', name: 'constant.numeric.integer.hexadecimal.long.daslang' }, { match: '\\b0x[\\dA-Fa-f]+\\b', name: 'constant.numeric.integer.hexadecimal.daslang' }, { match: '\\b0[0-7]+u\\b', name: 'constant.numeric.integer.octal.unsigned.daslang' }, { match: '\\b0[0-7]+L\\b', name: 'constant.numeric.integer.octal.long.daslang' }, { match: '\\b0[0-7]+\\b', name: 'constant.numeric.integer.octal.daslang' }, { match: '\\b\\d+u\\b', name: 'constant.numeric.integer.decimal.unsigned.daslang' }, { match: '\\b\\d+L\\b', name: 'constant.numeric.integer.decimal.long.daslang' }, { match: '\\b\\d+\\.\\d*([eE][\\+\\-]?\\d+)?d\\b', name: 'constant.numeric.float.double.daslang' }, { match: '\\b\\d+([eE][\\+\\-]?\\d+)?d\\b', name: 'constant.numeric.float.double.daslang' }, { match: '\\b\\.\\d+([eE][\\+\\-]?\\d+)?d\\b', name: 'constant.numeric.float.double.daslang' }, { match: '\\b\\d+\\.\\d*([eE][\\+\\-]?\\d+)?f\\b', name: 'constant.numeric.float.daslang' }, { match: '\\b\\d+([eE][\\+\\-]?\\d+)?f\\b', name: 'constant.numeric.float.daslang' }, { match: '\\b\\.\\d+([eE][\\+\\-]?\\d+)?f\\b', name: 'constant.numeric.float.daslang' }, { match: '\\b\\d+\\.\\d*([eE][\\+\\-]?\\d+)?\\b', name: 'constant.numeric.float.daslang' }, {match: '\\b\\d+\\b', name: 'constant.numeric.integer.decimal.daslang'} ] }, member_access: { patterns: [ { match: '\\.(?=[[:alpha:]_])', name: 'punctuation.separator.member.daslang' }, { match: '\\?\\.(?=[[:alpha:]_])', name: 'punctuation.separator.safe-member.daslang' }, { match: '\\.\\.(?=[[:alpha:]_])', name: 'punctuation.separator.direct-member.daslang' }, {match: '->', name: 'punctuation.separator.pointer-member.daslang'}, {match: '::', name: 'punctuation.separator.scope.daslang'} ] }, operators: { patterns: [ { match: '(\\+\\+|\\-\\-)', name: 'keyword.operator.arithmetic.increment-decrement.daslang' }, {match: '(\\+|-|\\*|/|%)', name: 'keyword.operator.arithmetic.daslang'}, { match: '(&&|\\|\\||\\^\\^|!)', name: 'keyword.operator.logical.daslang' }, { match: '(&|\\||\\^|~|<<|>>|<<<|>>>)', name: 'keyword.operator.bitwise.daslang' }, { match: '(==|!=|<|<=|>|>=)', name: 'keyword.operator.comparison.daslang' }, { match: '(=|:=|<-|\\+=|\\-=|\\*=|/=|%=|&=|\\|=|^=|<<=|>>=|<<<=|>>>=|&&=|\\|\\|=|\\^\\^=)', name: 'keyword.operator.assignment.daslang' }, {match: '(\\.\\.)', name: 'keyword.operator.range.daslang'}, {match: '(\\?\\?)', name: 'keyword.operator.null-coalescing.daslang'}, {match: '(\\?:)', name: 'keyword.operator.conditional.daslang'}, {match: '(<\\||\\|>)', name: 'keyword.operator.pipe.daslang'}, {match: '@\\s*<\\|', name: 'keyword.operator.lambda-decl.daslang'}, {match: '\\$', name: 'keyword.operator.block-decl.daslang'}, {match: '%', name: 'keyword.operator.reader-macro.daslang'}, {match: '=', name: 'keyword.operator.assignment.daslang'}, { match: '\\s*=>\\s*', name: 'keyword.operator.lambda-expression.daslang' } ] }, strings: { patterns: [ { begin: '"', end: '"', name: 'string.quoted.double.daslang', patterns: [ {match: '\\\\.', name: 'constant.character.escape.daslang'}, { begin: '\\{', beginCaptures: { 0: { name: 'punctuation.definition.string.interpolation.begin.daslang' } }, end: '\\}', endCaptures: { 0: { name: 'punctuation.definition.string.interpolation.end.daslang' } }, patterns: [{include: '$self'}] } ] }, { begin: '@"', end: '"', name: 'string.quoted.verbatim.daslang', patterns: [ {match: '\\\\.', name: 'constant.character.escape.daslang'} ] } ] }, struct_declaration: { patterns: [ { begin: '\\b(struct|class)\\b\\s*((?:private|public|sealed)\\s+)?([[:alpha:]_][[:alnum:]_]*)(?:\\s*:\\s*([[:alpha:]_][[:alnum:]_:]*))?\\s*(\\{)?', beginCaptures: { 1: {name: 'storage.type.class.daslang'}, 2: {name: 'storage.modifier.daslang'}, 3: {name: 'entity.name.type.class.daslang'}, 4: {name: 'entity.other.inherited-class.daslang'}, 5: {name: 'punctuation.definition.block.begin.daslang'} }, end: '\\}', endCaptures: {0: {name: 'punctuation.definition.block.end.daslang'}}, name: 'meta.struct.declaration.daslang', patterns: [ {include: '#variable_declaration'}, {include: '#function'}, {include: '#comments'}, {include: '#annotations'}, {match: ';', name: 'punctuation.terminator.statement.daslang'} ] } ] }, user_defined_types: { match: '\\b([[:alpha:]_][[:alnum:]_:]*)\\b', name: 'entity.name.type.daslang' }, variable_access: { patterns: [ { match: '\\b([[:alpha:]_][[:alnum:]_:]*)\\b', name: 'variable.other.daslang' }, { begin: '\\[', beginCaptures: { 0: {name: 'punctuation.definition.array.begin.daslang'} }, end: '\\]', endCaptures: {0: {name: 'punctuation.definition.array.end.daslang'}}, patterns: [{include: '#expression'}] } ] }, variable_declaration: { patterns: [ { begin: '\\b(let|var)\\b\\s*((?:private|public|shared|inscope)\\s+)?([[:alpha:]_][[:alnum:]_]*)(?=\\s*[:=<-]|\\s*\\[\\[|\\s*\\[\\{|\\s*\\{\\{|\\s*\\n(?![[:space:]]))', beginCaptures: { 1: {name: 'storage.type.daslang'}, 2: {name: 'storage.modifier.daslang'}, 3: {name: 'entity.name.variable.daslang'} }, end: '(?=;|$)', name: 'meta.variable.declaration.daslang', patterns: [ {match: ':', name: 'punctuation.separator.type-annotation.daslang'}, {include: '#builtin_types'}, {include: '#user_defined_types'}, {include: '#initializers'}, {include: '#expression'}, {include: '#blocks'} ] } ] } }, scopeName: 'source.daslang' } export default grammar