// This is a TextMate grammar distributed by `starry-night`. // This grammar is licensed `mit`. // See for more info. /** * @import {Grammar} from '@wooorm/starry-night' */ /** @type {Grammar} */ const grammar = { extensions: ['.metta'], names: ['metta'], patterns: [ {include: '#comment'}, {include: '#string'}, {include: '#number'}, {include: '#variable'}, {include: '#space-atom'}, {include: '#operator'}, {include: '#keyword'}, {include: '#builtin-function'}, {include: '#arithmetic'}, {include: '#builtin-type'}, {include: '#boolean'}, {include: '#punctuation'}, {include: '#function-call'} ], repository: { arithmetic: { match: '(?<=[()\\s])(\\+|-|\\*|/|%|<|>|<=|>=|==)(?=[()\\s])', name: 'support.function.arithmetic.metta' }, boolean: { match: '(?<=[()\\s])(True|False)(?=[()\\s])', name: 'constant.language.boolean.metta' }, 'builtin-function': { match: '(?<=[()\\s])(get-type|get-metatype|collapse|superpose|assertEqual|assertEqualToResult|add-atom|remove-atom|get-atoms|new-space|car-atom|cdr-atom|cons-atom|nop|empty|Error|trace!|println!|sealed|apply|chain|unify)(?=[()\\s])', name: 'support.function.builtin.metta' }, 'builtin-type': { match: '(?<=[()\\s])(Type|Atom|Symbol|Expression|Variable|Grounded|Number|Bool|String|%Undefined%)(?=[()\\s])', name: 'support.type.builtin.metta' }, comment: {match: ';[^\n\r]*', name: 'comment.line.semicolon.metta'}, 'function-call': { match: '(?<=\\()[a-zA-Z_][a-zA-Z0-9_!?-]*', name: 'entity.name.function.metta' }, keyword: { match: '(?<=[()\\s])(match|let\\*?|if|case|import!|include|bind!|pragma!|function|return)(?=[()\\s])', name: 'keyword.control.metta' }, number: { match: '(?<=[()\\s]|^)-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?(?=[()\\s]|$)', name: 'constant.numeric.metta' }, operator: { patterns: [ { match: '(?<=[\\s(]|^)!(?=[\\s(])', name: 'keyword.operator.evaluation.metta' }, { match: '(?<=[\\s(])=(?=[\\s()])', name: 'keyword.operator.definition.metta' }, { match: '(?<=[\\s(]):(?=[\\s()])', name: 'keyword.operator.type-annotation.metta' }, {match: '->', name: 'keyword.operator.arrow.metta'} ] }, punctuation: { patterns: [ {match: '\\(', name: 'punctuation.definition.list.begin.metta'}, {match: '\\)', name: 'punctuation.definition.list.end.metta'} ] }, 'space-atom': { match: '&[a-zA-Z_][a-zA-Z0-9_-]*', name: 'variable.language.self.metta' }, string: { begin: '"', beginCaptures: {0: {name: 'punctuation.definition.string.begin.metta'}}, end: '"', endCaptures: {0: {name: 'punctuation.definition.string.end.metta'}}, name: 'string.quoted.double.metta', patterns: [{match: '\\\\.', name: 'constant.character.escape.metta'}] }, variable: {match: '\\$[^()\\s";]+', name: 'variable.other.metta'} }, scopeName: 'source.metta' } export default grammar