mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
98 lines
2.6 KiB
TypeScript
98 lines
2.6 KiB
TypeScript
|
import type { languages } from 'monaco-editor';
|
||
|
|
||
|
export const languageConfiguration: languages.LanguageConfiguration = {
|
||
|
// the default separators except `@$`
|
||
|
wordPattern: /(-?\d*\.\d\w*)|([^`~!#%^&*()\-=+\[{\]}\\|;:'",.<>\/?\s]+)/g,
|
||
|
brackets: [['{', '}']],
|
||
|
autoClosingPairs: [
|
||
|
{ open: '{', close: '}' },
|
||
|
{ open: '"', close: '"' },
|
||
|
{ open: "'", close: "'" },
|
||
|
],
|
||
|
surroundingPairs: [
|
||
|
{ open: '{', close: '}' },
|
||
|
{ open: '"', close: '"' },
|
||
|
{ open: "'", close: "'" },
|
||
|
],
|
||
|
folding: {},
|
||
|
};
|
||
|
|
||
|
export const language: languages.IMonarchLanguage = {
|
||
|
ignoreCase: false,
|
||
|
defaultToken: '',
|
||
|
tokenPostfix: '.fireql',
|
||
|
|
||
|
keywords: [],
|
||
|
operators: [],
|
||
|
|
||
|
// we include these common regular expressions
|
||
|
symbols: /[=><!~?:&|+\-*\/^%]+/,
|
||
|
escapes: /\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,
|
||
|
digits: /\d+(_+\d+)*/,
|
||
|
octaldigits: /[0-7]+(_+[0-7]+)*/,
|
||
|
binarydigits: /[0-1]+(_+[0-1]+)*/,
|
||
|
hexdigits: /[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,
|
||
|
integersuffix: /(ll|LL|u|U|l|L)?(ll|LL|u|U|l|L)?/,
|
||
|
floatsuffix: /[fFlL]?/,
|
||
|
|
||
|
tokenizer: {
|
||
|
root: [
|
||
|
// labels
|
||
|
[/[a-z_]\w*(?=\s*(=|!=|=~|!~))/, 'tag'],
|
||
|
|
||
|
// strings
|
||
|
[/"([^"\\]|\\.)*$/, 'string.invalid'], // non-teminated string
|
||
|
[/'([^'\\]|\\.)*$/, 'string.invalid'], // non-teminated string
|
||
|
[/"/, 'string', '@string_double'],
|
||
|
[/'/, 'string', '@string_single'],
|
||
|
|
||
|
// whitespace
|
||
|
{ include: '@whitespace' },
|
||
|
|
||
|
// delimiters and operators
|
||
|
[/[{}()\[\]]/, '@brackets'],
|
||
|
[/[<>](?!@symbols)/, '@brackets'],
|
||
|
[
|
||
|
/@symbols/,
|
||
|
{
|
||
|
cases: {
|
||
|
'@operators': 'delimiter',
|
||
|
'@default': '',
|
||
|
},
|
||
|
},
|
||
|
],
|
||
|
|
||
|
// numbers
|
||
|
[/\d+/, 'number'],
|
||
|
[/\d*\d+[eE]([\-+]?\d+)?(@floatsuffix)/, 'number.float'],
|
||
|
[/\d*\.\d+([eE][\-+]?\d+)?(@floatsuffix)/, 'number.float'],
|
||
|
[/0[xX][0-9a-fA-F']*[0-9a-fA-F](@integersuffix)/, 'number.hex'],
|
||
|
[/0[0-7']*[0-7](@integersuffix)/, 'number.octal'],
|
||
|
[/0[bB][0-1']*[0-1](@integersuffix)/, 'number.binary'],
|
||
|
[/\d[\d']*\d(@integersuffix)/, 'number'],
|
||
|
[/\d(@integersuffix)/, 'number'],
|
||
|
],
|
||
|
|
||
|
string_double: [
|
||
|
[/[^\\"]+/, 'string'],
|
||
|
[/@escapes/, 'string.escape'],
|
||
|
[/\\./, 'string.escape.invalid'],
|
||
|
[/"/, 'string', '@pop'],
|
||
|
],
|
||
|
|
||
|
string_single: [
|
||
|
[/[^\\']+/, 'string'],
|
||
|
[/@escapes/, 'string.escape'],
|
||
|
[/\\./, 'string.escape.invalid'],
|
||
|
[/'/, 'string', '@pop'],
|
||
|
],
|
||
|
|
||
|
clauses: [
|
||
|
[/[^(,)]/, 'tag'],
|
||
|
[/\)/, 'identifier', '@pop'],
|
||
|
],
|
||
|
|
||
|
whitespace: [[/[ \t\r\n]+/, 'white']],
|
||
|
},
|
||
|
};
|