Files
SpacetimeDB/crates/cli/tools/sublime/SpacetimeDBSQL.sublime-syntax
John Detter d67c1db901 Cleanup SpacetimeDB name usages (#744)
* Small naming fix

* Fixed all instances of misspelled SpacetimeDB

---------

Co-authored-by: John Detter <no-reply@boppygames.gg>
2024-01-23 18:21:10 +00:00

178 lines
4.8 KiB
YAML

%YAML 1.2
---
name: SQL (SpacetimeDB)
file_extensions:
- sql
- stsql
scope: source.sql
variables:
ws: '[ \t]*'
wsnl: '([ \t\n])*'
int_literal: '[0-9](?:[0-9_])*'
# 00-23
time_hour: '[0-2][0-9]'
# 00-59
time_minute: '[0-5][0-9]'
# 00-58, 00-59, 00-60 (leap second rules)
time_second: '[0-6][0-9]'
# ( "+" / "-" ) time-hour ":" time-minute
time_numoffset: '[+-] {{time_hour}} : {{time_minute}}'
# time-hour ":" time-minute ":" time-second
partial_time: '{{time_hour}} : {{time_minute}} : {{time_second}}'
# partial-time time-offset
full_time: '{{partial_time}} {{time_numoffset}}'
# 2000
date_fullyear: '[0-9]{4}'
# 01-12
date_month: '[0-1][0-9]'
# 01-28, 01-29, 01-30, 01-31 based on month/year
date_mday: '[0-3][0-9]'
# date-fullyear "-" date-month "-" date-mday
full_date: '{{date_fullyear}} - {{date_month}} - {{date_mday}}'
# full-date T|%20 full-time
offset_date_time: '{{full_date}} [T ] {{full_time}}'
# full-date T|%20 partial-time
local_date_time: '{{full_date}} [T ] {{partial_time}}'
date_time: '{{offset_date_time}} | {{local_date_time}} | {{full_date}} | {{partial_time}}'
contexts:
# The prototype context is prepended to all contexts but those setting
# meta_include_prototype: false.
prototype:
- include: comments
main:
# The main context is the initial starting point of our syntax.
# Include other contexts from here (or specify them directly).
- include: keywords
- include: parens
- include: booleans
- include: numbers
- include: date-time
- include: strings
- include: ident
- match: '{{ws}}$'
# Don't show an incomplete line as invalid to avoid frequent red
# highlighting while typing.
pop: true
- match: '\w+|.'
scope: invalid.illegal.value.sql
pop: true
ident:
- name: variable.parameter.sql
match: \b([a-zA-Z0-9_]+)\b
keywords:
- name: keyword.operator.point.pgsql
match: \.
- name: keyword.operator.comma.pgsql
match: \,
- name: keyword.operator.semicolon.pgsql
match: \;
- name: keyword.operator.star.pgsql
match: \*
- match: '(?i)\b(select|from|insert|into|join|values|update|delete|create|where|order by)\b'
scope: keyword.control.sql
- match: '[!<>]?=|<>|<|>'
scope: keyword.operator.comparison.sql
- match: \+|\-|\*|/|\^
scope: keyword.operator.arithmetic.sql
- match: \b(and|in|not|or)\b
comment: keyword operators that evaluate to true or false
scope: keyword.operator.logical.sql
booleans:
- match: (?i)\b(true|false|null)\b
scope: constant.language.source.sql
numbers:
# Binary Float
- match: '\b({{int_literal}}(?:\.{{int_literal}})?)f\b'
scope: constant.numeric.source.sql
- match: '\b({{int_literal}}(?:\.{{int_literal}})?)\b'
scope: constant.numeric.source.sql
strings:
# Strings begin and end with quotes, and use backslashes as an escape
# character
- match: '"'
scope: punctuation.definition.string.begin.source.sql
push: double_quoted_string
- match: "'"
scope: punctuation.definition.string.begin.source.sql
push: single_quoted_string
double_quoted_string:
- meta_scope: string.quoted.double.source.sql
- match: '\\.'
scope: constant.character.escape.source.sql
- match: '"'
scope: punctuation.definition.string.end.source.sql
pop: true
single_quoted_string:
- meta_scope: string.quoted.double.source.sql
- match: '\\.'
scope: constant.character.escape.source.sql
- match: "'"
scope: punctuation.definition.string.end.source.sql
pop: true
date-time:
- match: "(d|t|dt)'"
scope: constant.other.datetime.begin.source.sql
push: single_quoted_date
- match: '(d|t|dt)"'
scope: constant.other.datetime.begin.source.sql
push: double_quoted_date
double_quoted_date:
- meta_scope: string.quoted.double.source.sql
- match: '(?x) {{date_time}}'
scope: constant.character.escape.source.sql
- match: '"'
scope: constant.other.datetime.end.source.sql
pop: true
single_quoted_date:
- meta_scope: string.quoted.double.source.sql
- match: '(?x) {{date_time}}'
scope: constant.character.escape.source.sql
- match: "'"
scope: constant.other.datetime.end.source.sql
pop: true
parens:
- match: \(
push: brackets
- match: \)
scope: invalid.illegal.stray-bracket-end
brackets:
- match: \)
pop: true
- include: parens
comments:
# Comments begin with a '--' and finish at the end of the line.
- match: '--'
scope: punctuation.definition.comment.source.sql
push:
# This is an anonymous context push for brevity.
- meta_scope: comment.line.double-slash.source.sql
- match: $\n?
pop: true