@wooorm/starry-night
Version:
Syntax highlighting, like GitHub
824 lines (821 loc) • 28.7 kB
JavaScript
// This is a TextMate grammar distributed by `starry-night`.
// This grammar is developed at
// <https://github.com/surrealdb/surrealql-grammar>
// 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: ['.surql'],
names: ['surrealql', 'surql'],
patterns: [
{include: '#comment'},
{include: '#js-function'},
{include: '#function'},
{include: '#keywords'},
{include: '#operators'},
{include: '#value'}
],
repository: {
array: {begin: '\\[', end: '\\]', patterns: [{include: '#array-content'}]},
'array-content': {
patterns: [
{include: '$self'},
{match: ',', name: 'punctuation.separator.array'}
]
},
block: {
begin: '\\{',
end: '\\}',
name: 'surrealql.block',
patterns: [{include: '#block-content'}]
},
'block-content': {
patterns: [
{include: '#string'},
{include: '#object-key'},
{include: '$self'}
]
},
boolean: {
match: '\\b(true|TRUE|false|FALSE|True|False)\\b',
name: 'constant.language.bool'
},
comment: {
patterns: [
{include: '#comment.line.dash'},
{include: '#comment.line.slash'},
{include: '#comment.line.hash'},
{include: '#comment.block'}
]
},
'comment.block': {
begin: '/\\*',
end: '\\*/',
name: 'comment.block.surrealql'
},
'comment.line.dash': {
begin: '--',
end: '\\n',
name: 'comment.line.double-dash'
},
'comment.line.hash': {
begin: '#',
end: '\\n',
name: 'comment.line.number-sign'
},
'comment.line.slash': {
begin: '//',
end: '\\n',
name: 'comment.line.double-slash'
},
duration: {match: '(\\d+(ns|µs|ms|s|m|h|d|w|y))+', name: 'constant.other'},
function: {
begin: '(?=((?:\\b\\w+(?:::\\b\\w+)+)|count|rand)\\s*\\()',
beginCaptures: {1: {name: 'support.function'}},
end: '(?<=\\))',
patterns: [
{include: '#comment'},
{
begin: '\\(',
end: '\\)',
name: 'meta.function.arguments',
patterns: [{include: '#value'}]
}
]
},
ident: {
patterns: [
{begin: '`', end: '(?<!\\\\)`', name: 'support.type.property-name'},
{begin: '⟨', end: '(?<!\\\\)⟩', name: 'support.type.property-name'}
]
},
'js-function': {
begin: '(?=(\\bfunction\\b))',
beginCaptures: {1: {name: 'support.function.js'}},
end: '(?<=})',
patterns: [
{include: '#comment'},
{
begin: '\\(',
end: '\\)',
name: 'meta.function.arguments',
patterns: [{include: '#value'}]
},
{
begin: '{',
end: '}',
name: 'meta.embedded.block.javascript',
patterns: [{include: 'source.js'}]
}
]
},
keywords: {
patterns: [
{
match: '\\b(ACCESS|access)\\b',
name: 'keyword.control.access.surrealql'
},
{
match: '\\b(ALGORITHM|algorithm)\\b',
name: 'keyword.control.algorithm.surrealql'
},
{match: '\\b(ALL|all)\\b', name: 'keyword.control.all.surrealql'},
{match: '\\b(ALTER|alter)\\b', name: 'keyword.control.alter.surrealql'},
{
match: '\\b(ALWAYS|always)\\b',
name: 'keyword.control.always.surrealql'
},
{
match: '\\b(ANALYZER|analyzer)\\b',
name: 'keyword.control.analyzer.surrealql'
},
{match: '\\b(AND|and)\\b', name: 'keyword.control.and.surrealql'},
{match: '\\b(ANY|any)\\b', name: 'keyword.control.any.surrealql'},
{match: '\\b(API|api)\\b', name: 'keyword.control.api.surrealql'},
{match: '\\b(AS|as)\\b', name: 'keyword.control.as.surrealql'},
{match: '\\b(ASC|asc)\\b', name: 'keyword.control.asc.surrealql'},
{
match: '\\b(ASSERT|assert)\\b',
name: 'keyword.control.assert.surrealql'
},
{match: '\\b(AT|at)\\b', name: 'keyword.control.at.surrealql'},
{
match: '\\b(AUTHENTICATE|authenticate)\\b',
name: 'keyword.control.authenticate.surrealql'
},
{match: '\\b(AUTO|auto)\\b', name: 'keyword.control.auto.surrealql'},
{
match: '\\b(BACKEND|backend)\\b',
name: 'keyword.control.backend.surrealql'
},
{match: '\\b(BEGIN|begin)\\b', name: 'keyword.control.begin.surrealql'},
{match: '\\b(BM25|bm25)\\b', name: 'keyword.control.bm25.surrealql'},
{match: '\\b(BREAK|break)\\b', name: 'keyword.control.break.surrealql'},
{
match: '\\b(BUCKET|bucket)\\b',
name: 'keyword.control.bucket.surrealql'
},
{match: '\\b(BY|by)\\b', name: 'keyword.control.by.surrealql'},
{
match: '\\b(CANCEL|cancel)\\b',
name: 'keyword.control.cancel.surrealql'
},
{
match: '\\b(CAPACITY|capacity)\\b',
name: 'keyword.control.capacity.surrealql'
},
{
match: '\\b(CASCADE|cascade)\\b',
name: 'keyword.control.cascade.surrealql'
},
{
match: '\\b(CHANGEFEED|changefeed)\\b',
name: 'keyword.control.changefeed.surrealql'
},
{
match: '\\b(CHANGES|changes)\\b',
name: 'keyword.control.changes.surrealql'
},
{
match: '\\b(COLLATE|collate)\\b',
name: 'keyword.control.collate.surrealql'
},
{
match: '\\b(COLUMNS|columns)\\b',
name: 'keyword.control.columns.surrealql'
},
{
match: '\\b(COMMENT|comment)\\b',
name: 'keyword.control.comment.surrealql'
},
{
match: '\\b(COMMIT|commit)\\b',
name: 'keyword.control.commit.surrealql'
},
{
match: '\\b(COMPUTED|computed)\\b',
name: 'keyword.control.computed.surrealql'
},
{
match: '\\b(CONCURRENTLY|concurrently)\\b',
name: 'keyword.control.concurrently.surrealql'
},
{
match: '\\b(CONFIG|config)\\b',
name: 'keyword.control.config.surrealql'
},
{
match: '\\b(CONTENT|content)\\b',
name: 'keyword.control.content.surrealql'
},
{
match: '\\b(CONTINUE|continue)\\b',
name: 'keyword.control.continue.surrealql'
},
{
match: '\\b(CREATE|create)\\b',
name: 'keyword.control.create.surrealql'
},
{
match: '\\b(DATABASE|database)\\b',
name: 'keyword.control.database.surrealql'
},
{match: '\\b(DB|db)\\b', name: 'keyword.control.db.surrealql'},
{
match: '\\b(DEFAULT|default)\\b',
name: 'keyword.control.default.surrealql'
},
{match: '\\b(DEFER|defer)\\b', name: 'keyword.control.defer.surrealql'},
{
match: '\\b(DEFINE|define)\\b',
name: 'keyword.control.define.surrealql'
},
{
match: '\\b(DELETE|delete)\\b',
name: 'keyword.control.delete.surrealql'
},
{match: '\\b(DESC|desc)\\b', name: 'keyword.control.desc.surrealql'},
{
match: '\\b(DIMENSION|dimension)\\b',
name: 'keyword.control.dimension.surrealql'
},
{match: '\\b(DIST|dist)\\b', name: 'keyword.control.dist.surrealql'},
{
match: '\\b(DOC_IDS_CACHE|doc_ids_cache)\\b',
name: 'keyword.control.doc_ids_cache.surrealql'
},
{
match: '\\b(DOC_IDS_ORDER|doc_ids_order)\\b',
name: 'keyword.control.doc_ids_order.surrealql'
},
{
match: '\\b(DOC_LENGTHS_CACHE|doc_lengths_cache)\\b',
name: 'keyword.control.doc_lengths_cache.surrealql'
},
{
match: '\\b(DOC_LENGTHS_ORDER|doc_lengths_order)\\b',
name: 'keyword.control.doc_lengths_order.surrealql'
},
{match: '\\b(DROP|drop)\\b', name: 'keyword.control.drop.surrealql'},
{
match: '\\b(DUPLICATE|duplicate)\\b',
name: 'keyword.control.duplicate.surrealql'
},
{
match: '\\b(DURATION|duration)\\b',
name: 'keyword.control.duration.surrealql'
},
{match: '\\b(EFC|efc)\\b', name: 'keyword.control.efc.surrealql'},
{match: '\\b(ELSE|else)\\b', name: 'keyword.control.else.surrealql'},
{match: '\\b(END|end)\\b', name: 'keyword.control.end.surrealql'},
{
match: '\\b(ENFORCED|enforced)\\b',
name: 'keyword.control.enforced.surrealql'
},
{match: '\\b(EVENT|event)\\b', name: 'keyword.control.event.surrealql'},
{
match: '\\b(EXCLUDE|exclude)\\b',
name: 'keyword.control.exclude.surrealql'
},
{
match: '\\b(EXISTS|exists)\\b',
name: 'keyword.control.exists.surrealql'
},
{
match: '\\b(EXPLAIN|explain)\\b',
name: 'keyword.control.explain.surrealql'
},
{
match: '\\b(EXPUNGE|expunge)\\b',
name: 'keyword.control.expunge.surrealql'
},
{
match: '\\b(EXTEND_CANDIDATES|extend_candidates)\\b',
name: 'keyword.control.extend_candidates.surrealql'
},
{match: '\\b(FETCH|fetch)\\b', name: 'keyword.control.fetch.surrealql'},
{match: '\\b(FIELD|field)\\b', name: 'keyword.control.field.surrealql'},
{
match: '\\b(FIELDS|fields)\\b',
name: 'keyword.control.fields.surrealql'
},
{
match: '\\b(FILTERS|filters)\\b',
name: 'keyword.control.filters.surrealql'
},
{
match: '\\b(FLEXIBLE|flexible)\\b',
name: 'keyword.control.flexible.surrealql'
},
{match: '\\b(FOR|for)\\b', name: 'keyword.control.for.surrealql'},
{match: '\\b(FROM|from)\\b', name: 'keyword.control.from.surrealql'},
{
match: '\\b(FUNCTION|function)\\b',
name: 'keyword.control.function.surrealql'
},
{
match: '\\b(FUNCTIONS|functions)\\b',
name: 'keyword.control.functions.surrealql'
},
{match: '\\b(GET|get)\\b', name: 'keyword.control.get.surrealql'},
{
match: '\\b(GRAPHQL|graphql)\\b',
name: 'keyword.control.graphql.surrealql'
},
{match: '\\b(GROUP|group)\\b', name: 'keyword.control.group.surrealql'},
{
match: '\\b(HIGHLIGHTS|highlights)\\b',
name: 'keyword.control.highlights.surrealql'
},
{match: '\\b(HNSW|hnsw)\\b', name: 'keyword.control.hnsw.surrealql'},
{match: '\\b(IF|if)\\b', name: 'keyword.control.if.surrealql'},
{
match: '\\b(IGNORE|ignore)\\b',
name: 'keyword.control.ignore.surrealql'
},
{match: '\\b(IN|in)\\b', name: 'keyword.control.in.surrealql'},
{
match: '\\b(INCLUDE|include)\\b',
name: 'keyword.control.include.surrealql'
},
{match: '\\b(INDEX|index)\\b', name: 'keyword.control.index.surrealql'},
{match: '\\b(INFO|info)\\b', name: 'keyword.control.info.surrealql'},
{
match: '\\b(INSERT|insert)\\b',
name: 'keyword.control.insert.surrealql'
},
{match: '\\b(INTO|into)\\b', name: 'keyword.control.into.surrealql'},
{
match: '\\b(ISSUER|issuer)\\b',
name: 'keyword.control.issuer.surrealql'
},
{match: '\\b(JWT|jwt)\\b', name: 'keyword.control.jwt.surrealql'},
{
match: '\\b(KEEP_PRUNED_CONNECTIONS|keep_pruned_connections)\\b',
name: 'keyword.control.keep_pruned_connections.surrealql'
},
{match: '\\b(KEY|key)\\b', name: 'keyword.control.key.surrealql'},
{match: '\\b(KILL|kill)\\b', name: 'keyword.control.kill.surrealql'},
{match: '\\b(LET|let)\\b', name: 'keyword.control.let.surrealql'},
{match: '\\b(LIMIT|limit)\\b', name: 'keyword.control.limit.surrealql'},
{match: '\\b(LIVE|live)\\b', name: 'keyword.control.live.surrealql'},
{match: '\\b(LM|lm)\\b', name: 'keyword.control.lm.surrealql'},
{match: '\\b(M|m)\\b', name: 'keyword.control.m.surrealql'},
{match: '\\b(M0|m0)\\b', name: 'keyword.control.m0.surrealql'},
{match: '\\b(MERGE|merge)\\b', name: 'keyword.control.merge.surrealql'},
{
match: '\\b(MIDDLEWARE|middleware)\\b',
name: 'keyword.control.middleware.surrealql'
},
{match: '\\b(MTREE|mtree)\\b', name: 'keyword.control.mtree.surrealql'},
{
match: '\\b(MTREE_CACHE|mtree_cache)\\b',
name: 'keyword.control.mtree_cache.surrealql'
},
{
match: '\\b(NAMESPACE|namespace)\\b',
name: 'keyword.control.namespace.surrealql'
},
{
match: '\\b(NOINDEX|noindex)\\b',
name: 'keyword.control.noindex.surrealql'
},
{
match: '\\b(NORMAL|normal)\\b',
name: 'keyword.control.normal.surrealql'
},
{match: '\\b(NOT|not)\\b', name: 'keyword.control.not.surrealql'},
{match: '\\b(NS|ns)\\b', name: 'keyword.control.ns.surrealql'},
{
match: '\\b(NUMERIC|numeric)\\b',
name: 'keyword.control.numeric.surrealql'
},
{match: '\\b(OMIT|omit)\\b', name: 'keyword.control.omit.surrealql'},
{match: '\\b(ON|on)\\b', name: 'keyword.control.on.surrealql'},
{match: '\\b(ONLY|only)\\b', name: 'keyword.control.only.surrealql'},
{
match: '\\b(OPTION|option)\\b',
name: 'keyword.control.option.surrealql'
},
{match: '\\b(ORDER|order)\\b', name: 'keyword.control.order.surrealql'},
{match: '\\b(OUT|out)\\b', name: 'keyword.control.out.surrealql'},
{
match: '\\b(OVERWRITE|overwrite)\\b',
name: 'keyword.control.overwrite.surrealql'
},
{
match: '\\b(PARALLEL|parallel)\\b',
name: 'keyword.control.parallel.surrealql'
},
{match: '\\b(PARAM|param)\\b', name: 'keyword.control.param.surrealql'},
{
match: '\\b(PASSHASH|passhash)\\b',
name: 'keyword.control.passhash.surrealql'
},
{
match: '\\b(PASSWORD|password)\\b',
name: 'keyword.control.password.surrealql'
},
{match: '\\b(PATCH|patch)\\b', name: 'keyword.control.patch.surrealql'},
{
match: '\\b(PERMISSIONS|permissions)\\b',
name: 'keyword.control.permissions.surrealql'
},
{match: '\\b(POST|post)\\b', name: 'keyword.control.post.surrealql'},
{
match: '\\b(POSTINGS_CACHE|postings_cache)\\b',
name: 'keyword.control.postings_cache.surrealql'
},
{
match: '\\b(POSTINGS_ORDER|postings_order)\\b',
name: 'keyword.control.postings_order.surrealql'
},
{match: '\\b(PUT|put)\\b', name: 'keyword.control.put.surrealql'},
{
match: '\\b(READONLY|readonly)\\b',
name: 'keyword.control.readonly.surrealql'
},
{
match: '\\b(REBUILD|rebuild)\\b',
name: 'keyword.control.rebuild.surrealql'
},
{
match: '\\b(RECORD|record)\\b',
name: 'keyword.control.record.surrealql'
},
{
match: '\\b(REFERENCE|reference)\\b',
name: 'keyword.control.reference.surrealql'
},
{
match: '\\b(REJECT|reject)\\b',
name: 'keyword.control.reject.surrealql'
},
{
match: '\\b(RELATE|relate)\\b',
name: 'keyword.control.relate.surrealql'
},
{
match: '\\b(RELATION|relation)\\b',
name: 'keyword.control.relation.surrealql'
},
{
match: '\\b(REMOVE|remove)\\b',
name: 'keyword.control.remove.surrealql'
},
{
match: '\\b(REPLACE|replace)\\b',
name: 'keyword.control.replace.surrealql'
},
{
match: '\\b(RETURN|return)\\b',
name: 'keyword.control.return.surrealql'
},
{match: '\\b(ROLES|roles)\\b', name: 'keyword.control.roles.surrealql'},
{match: '\\b(ROOT|root)\\b', name: 'keyword.control.root.surrealql'},
{match: '\\b(SC|sc)\\b', name: 'keyword.control.sc.surrealql'},
{
match: '\\b(SCHEMAFULL|schemafull)\\b',
name: 'keyword.control.schemafull.surrealql'
},
{
match: '\\b(SCHEMALESS|schemaless)\\b',
name: 'keyword.control.schemaless.surrealql'
},
{match: '\\b(SCOPE|scope)\\b', name: 'keyword.control.scope.surrealql'},
{
match: '\\b(SEARCH|search)\\b',
name: 'keyword.control.search.surrealql'
},
{
match: '\\b(SELECT|select)\\b',
name: 'keyword.control.select.surrealql'
},
{
match: '\\b(SESSION|session)\\b',
name: 'keyword.control.session.surrealql'
},
{match: '\\b(SET|set)\\b', name: 'keyword.control.set.surrealql'},
{match: '\\b(SHOW|show)\\b', name: 'keyword.control.show.surrealql'},
{
match: '\\b(SIGNIN|signin)\\b',
name: 'keyword.control.signin.surrealql'
},
{
match: '\\b(SIGNUP|signup)\\b',
name: 'keyword.control.signup.surrealql'
},
{match: '\\b(SINCE|since)\\b', name: 'keyword.control.since.surrealql'},
{match: '\\b(SLEEP|sleep)\\b', name: 'keyword.control.sleep.surrealql'},
{match: '\\b(SPLIT|split)\\b', name: 'keyword.control.split.surrealql'},
{match: '\\b(START|start)\\b', name: 'keyword.control.start.surrealql'},
{
match: '\\b(STRUCTURE|structure)\\b',
name: 'keyword.control.structure.surrealql'
},
{match: '\\b(TABLE|table)\\b', name: 'keyword.control.table.surrealql'},
{
match: '\\b(TABLES|tables)\\b',
name: 'keyword.control.tables.surrealql'
},
{match: '\\b(TB|tb)\\b', name: 'keyword.control.tb.surrealql'},
{
match: '\\b(TEMPFILES|tempfiles)\\b',
name: 'keyword.control.tempfiles.surrealql'
},
{
match: '\\b(TERMS_CACHE|terms_cache)\\b',
name: 'keyword.control.terms_cache.surrealql'
},
{
match: '\\b(TERMS_ORDER|terms_order)\\b',
name: 'keyword.control.terms_order.surrealql'
},
{match: '\\b(THEN|then)\\b', name: 'keyword.control.then.surrealql'},
{match: '\\b(THROW|throw)\\b', name: 'keyword.control.throw.surrealql'},
{
match: '\\b(TIMEOUT|timeout)\\b',
name: 'keyword.control.timeout.surrealql'
},
{match: '\\b(TO|to)\\b', name: 'keyword.control.to.surrealql'},
{match: '\\b(TOKEN|token)\\b', name: 'keyword.control.token.surrealql'},
{
match: '\\b(TOKENIZERS|tokenizers)\\b',
name: 'keyword.control.tokenizers.surrealql'
},
{match: '\\b(TRACE|trace)\\b', name: 'keyword.control.trace.surrealql'},
{
match: '\\b(TRANSACTION|transaction)\\b',
name: 'keyword.control.transaction.surrealql'
},
{match: '\\b(TYPE|type)\\b', name: 'keyword.control.type.surrealql'},
{
match: '\\b(UNIQUE|unique)\\b',
name: 'keyword.control.unique.surrealql'
},
{match: '\\b(UNSET|unset)\\b', name: 'keyword.control.unset.surrealql'},
{
match: '\\b(UPDATE|update)\\b',
name: 'keyword.control.update.surrealql'
},
{
match: '\\b(UPSERT|upsert)\\b',
name: 'keyword.control.upsert.surrealql'
},
{match: '\\b(URL|url)\\b', name: 'keyword.control.url.surrealql'},
{match: '\\b(USE|use)\\b', name: 'keyword.control.use.surrealql'},
{match: '\\b(USER|user)\\b', name: 'keyword.control.user.surrealql'},
{match: '\\b(VALUE|value)\\b', name: 'keyword.control.value.surrealql'},
{
match: '\\b(VALUES|values)\\b',
name: 'keyword.control.values.surrealql'
},
{
match: '\\b(VERSION|version)\\b',
name: 'keyword.control.version.surrealql'
},
{match: '\\b(WHEN|when)\\b', name: 'keyword.control.when.surrealql'},
{match: '\\b(WHERE|where)\\b', name: 'keyword.control.where.surrealql'},
{match: '\\b(WITH|with)\\b', name: 'keyword.control.with.surrealql'}
]
},
number: {
patterns: [
{
match: '\\b\\d+\\.\\d+(?:f|dec)?\\b',
name: 'constant.numeric.decimal'
},
{match: '\\b\\d+(?:f|dec)?\\b', name: 'constant.numeric.int'}
]
},
'object-key': {
patterns: [
{
captures: {1: {name: 'string.quoted.double'}},
match: '(?:^|{|,)[ \t]*("[^(?:\\")]+")(?=:(?!:))'
},
{
captures: {1: {name: 'string.quoted.single'}},
match: "(?:^|{|,)[ \t]*('[^(?:\\')]+')(?=:(?!:))"
},
{
captures: {2: {name: 'meta.object-literal.key'}},
match: '(^|\\{|\\,)[ \t]*([a-zA-Z_0-9]+)(?=:(?!:))'
}
]
},
operators: {
patterns: [
{match: '<->|->|<-|<~', name: 'keyword.operator.arrow.surrealql'},
{match: '\\b(AND|and)\\b|&&', name: 'keyword.operator.and.surrealql'},
{match: '\\b(OR|or)\\b|\\|\\|', name: 'keyword.operator.or.surrealql'},
{
match: '\\b(IS NOT|is not)\\b|!=',
name: 'keyword.operator.is-not.surrealql'
},
{match: '\\b(IS|is)\\b|=', name: 'keyword.operator.is.surrealql'},
{
match: '\\b(CONTAINSALL|containsall)\\b|⊇',
name: 'keyword.operator.containsall.surrealql'
},
{
match: '\\b(CONTAINSANY|containsany)\\b|⊃',
name: 'keyword.operator.containsany.surrealql'
},
{
match: '\\b(CONTAINSNONE|containsnone)\\b|⊅',
name: 'keyword.operator.containsnone.surrealql'
},
{
match: '\\b(CONTAINSSOME|containssome)\\b',
name: 'keyword.operator.containssome.surrealql'
},
{
match: '\\b(CONTAINSNOT|containsnot)\\b|∌',
name: 'keyword.operator.containsnot.surrealql'
},
{
match: '\\b(CONTAINS|contains)\\b|∋',
name: 'keyword.operator.contains.surrealql'
},
{
match: '\\b(ALLINSIDE|allinside)\\b|⊆',
name: 'keyword.operator.allinside.surrealql'
},
{
match: '\\b(ANYINSIDE|anyinside)\\b|⊂',
name: 'keyword.operator.anyinside.surrealql'
},
{
match: '\\b(NONEINSIDE|noneinside)\\b|⊄',
name: 'keyword.operator.noneinside.surrealql'
},
{
match: '\\b(SOMEINSIDE|someinside)\\b',
name: 'keyword.operator.someinside.surrealql'
},
{
match: '\\b(NOTINSIDE|notinside|NOT IN|not in)\\b|∉',
name: 'keyword.operator.notinside.surrealql'
},
{
match: '\\b(INSIDE|inside)\\b|∈',
name: 'keyword.operator.inside.surrealql'
},
{
match: '\\b(OUTSIDE|outside)\\b',
name: 'keyword.operator.outside.surrealql'
},
{
match: '\\b(INTERSECTS|intersects)\\b',
name: 'keyword.operator.intersects.surrealql'
},
{match: '==', name: 'keyword.operator.equal.surrealql'},
{match: '\\*=', name: 'keyword.operator.all-equal.surrealql'},
{match: '\\?=', name: 'keyword.operator.any-equal.surrealql'},
{match: '!~', name: 'keyword.operator.fuzzy-inequal.surrealql'},
{match: '\\*~', name: 'keyword.operator.fuzzy-all-equal.surrealql'},
{match: '\\?~', name: 'keyword.operator.fuzzy-any-equal.surrealql'},
{match: '~', name: 'keyword.operator.fuzzy-equal.surrealql'},
{match: '<=', name: 'keyword.operator.less-or-equal.surrealql'},
{match: '<(?!-|[a-z]+[^:])', name: 'keyword.operator.less.surrealql'},
{match: '>=', name: 'keyword.operator.more-or-equal.surrealql'},
{match: '(?<!-)>', name: 'keyword.operator.more.surrealql'},
{match: '\\+', name: 'keyword.operator.add.surrealql'},
{match: '-', name: 'keyword.operator.subtract.surrealql'},
{match: '\\*|×|∙', name: 'keyword.operator.multiply.surrealql'},
{match: '\\/|÷', name: 'keyword.operator.devide.surrealql'},
{
captures: {1: {name: 'constant.numeric.int'}},
match: '@([0-9]+)?@',
name: 'keyword.operator.matches.surrealql'
},
{match: '\\?:', name: 'keyword.operator.either.surrealql'},
{match: '\\?\\?', name: 'keyword.operator.truthy.surrealql'},
{
match: '\\<\\|([a-zA-Z|\\d|,])+\\|\\>',
name: 'keyword.operator.knn.surrealql'
}
]
},
positional: {
match: '\\b(AFTER|after|BEFORE|before)\\b',
name: 'constant.language.positional'
},
query: {patterns: [{include: '$self'}]},
record: {
patterns: [
{
captures: {
1: {name: 'entity.name.class'},
2: {name: 'entity.name.class'}
},
match: '(\\b\\w+\\b):⟨([^⟩]+)⟩'
},
{
captures: {
1: {name: 'entity.name.class'},
2: {name: 'entity.name.class'}
},
match: '(\\b\\w+\\b):`([^`]+)`'
},
{
begin: '(\\b\\w+\\b):(?=(\\b[\\w:]+\\b)\\s*\\()',
beginCaptures: {
1: {name: 'entity.name.class'},
2: {name: 'support.function'}
},
end: '(?<=\\))',
patterns: [
{include: '#comment'},
{
begin: '\\(',
end: '\\)',
name: 'meta.function.arguments',
patterns: [{include: '#value'}]
}
]
},
{
captures: {
1: {name: 'entity.name.class'},
2: {name: 'entity.name.class'}
},
match: '(\\b\\w+\\b):(\\b\\w+\\b)'
},
{
begin: '(\\b\\w+\\b):\\[',
captures: {1: {name: 'entity.name.class'}},
end: '\\]',
patterns: [{include: '#array-content'}]
},
{
begin: '(\\b\\w+\\b):(?=\\{)',
captures: {1: {name: 'entity.name.class'}},
end: '\\}',
patterns: [{include: '#block-content'}]
}
]
},
string: {
patterns: [
{begin: '[a-z]?"', end: '(?<!\\\\)"', name: 'string.quoted.double'},
{begin: "[a-z]?'", end: "(?<!\\\\)'", name: 'string.quoted.single'}
]
},
subquery: {
begin: '\\(',
end: '\\)',
patterns: [{include: '#query'}, {include: '#value'}]
},
type: {
captures: {
0: {
patterns: [
{match: '<|>', name: 'entity.name.type.surrealql'},
{include: '#number'},
{include: '#void-type'}
]
}
},
match: '[a-z]*<[a-zA-Z][a-zA-Z0-9<>|, _]+[a-zA-Z0-9>]+>',
name: 'test'
},
value: {
patterns: [
{include: '#comment'},
{include: '#js-function'},
{include: '#function'},
{include: '#block'},
{include: '#array'},
{include: '#var-name'},
{include: '#boolean'},
{include: '#string'},
{include: '#ident'},
{include: '#void-type'},
{include: '#positional'},
{include: '#number'},
{include: '#duration'},
{include: '#record'},
{include: '#subquery'},
{include: '#type'}
]
},
'var-name': {
patterns: [
{match: '\\$\\w+', name: 'variable.name'},
{match: '\\$`\\w+`', name: 'variable.name'},
{match: '\\$⟨\\w+⟩', name: 'variable.name'}
]
},
'void-type': {
match: '\\b(null|NULL|none|NONE)\\b',
name: 'constant.language.void'
}
},
scopeName: 'source.surrealql'
}
export default grammar