mirror of
https://github.com/grafana/grafana.git
synced 2025-09-27 02:44:12 +08:00

* add support for code editor and builder * refactor cloudwatch migration * Add tooltip to editor field (#56) * add tooltip * add old tooltips * Bug bash feedback fixes (#58) * make ASC the default option * update sql preview whenever sql changes * don't allow queries without aggregation * set default value for aggregation * use new input field * cleanup * pr feedback * prevent unnecessary rerenders * use frame error instead of main error * remove not used snapshot * Use dimension filter in schema picker (#63) * use dimension key filter in group by and schema labels * add dimension filter also to code editor * add tests * fix build error * fix strict error * remove debug code * fix annotation editor (#64) * fix annotation editor * fix broken test * revert annotation backend change * PR feedback (#67) * pr feedback * removed dimension filter from group by * add spacing between common fields and rest * do not generate deep link for metric queries (#70) * update docs (#69) Co-authored-by: Erik Sundell <erik.sundell87@gmail.com> * fix lint problem caused by merge conflict Co-authored-by: achatterjee-grafana <70489351+achatterjee-grafana@users.noreply.github.com>
132 lines
3.5 KiB
TypeScript
132 lines
3.5 KiB
TypeScript
import type * as monacoType from 'monaco-editor/esm/vs/editor/editor.api';
|
|
|
|
interface CloudWatchLanguage extends monacoType.languages.IMonarchLanguage {
|
|
keywords: string[];
|
|
operators: string[];
|
|
builtinFunctions: string[];
|
|
}
|
|
|
|
export const SELECT = 'SELECT';
|
|
export const FROM = 'FROM';
|
|
export const WHERE = 'WHERE';
|
|
export const GROUP = 'GROUP';
|
|
export const ORDER = 'ORDER';
|
|
export const BY = 'BY';
|
|
export const DESC = 'DESC';
|
|
export const ASC = 'ASC';
|
|
export const LIMIT = 'LIMIT';
|
|
export const WITH = 'WITH';
|
|
export const SCHEMA = 'SCHEMA';
|
|
|
|
export const KEYWORDS = [SELECT, FROM, WHERE, GROUP, ORDER, BY, DESC, ASC, LIMIT, WITH, SCHEMA];
|
|
export const STATISTICS = ['AVG', 'COUNT', 'MAX', 'MIN', 'SUM'];
|
|
|
|
export const AND = 'AND';
|
|
export const LOGICAL_OPERATORS = [AND];
|
|
|
|
export const EQUALS = '=';
|
|
export const NOT_EQUALS = '!=';
|
|
export const COMPARISON_OPERATORS = [EQUALS, NOT_EQUALS];
|
|
|
|
export const language: CloudWatchLanguage = {
|
|
defaultToken: '',
|
|
tokenPostfix: '.sql',
|
|
ignoreCase: true,
|
|
brackets: [
|
|
{ open: '[', close: ']', token: 'delimiter.square' },
|
|
{ open: '(', close: ')', token: 'delimiter.parenthesis' },
|
|
],
|
|
keywords: KEYWORDS,
|
|
operators: LOGICAL_OPERATORS,
|
|
builtinFunctions: STATISTICS,
|
|
tokenizer: {
|
|
root: [
|
|
[/\$[a-zA-Z0-9-_]+/, 'variable'],
|
|
{ include: '@comments' },
|
|
{ include: '@whitespace' },
|
|
{ include: '@numbers' },
|
|
{ include: '@strings' },
|
|
{ include: '@complexIdentifiers' },
|
|
[/[;,.]/, 'delimiter'],
|
|
[/[()]/, '@brackets'],
|
|
[
|
|
/[\w@#$]+/,
|
|
{
|
|
cases: {
|
|
'@keywords': 'keyword',
|
|
'@operators': 'operator',
|
|
'@builtinFunctions': 'predefined',
|
|
'@default': 'identifier',
|
|
},
|
|
},
|
|
],
|
|
[/[=!%&+\-*/|~^]/, 'operator'], // TODO: strip these options
|
|
],
|
|
whitespace: [[/\s+/, 'white']],
|
|
comments: [[/--+.*/, 'comment']],
|
|
comment: [
|
|
[/[^*/]+/, 'comment'],
|
|
[/./, 'comment'],
|
|
],
|
|
numbers: [
|
|
[/0[xX][0-9a-fA-F]*/, 'number'],
|
|
[/[$][+-]*\d*(\.\d*)?/, 'number'],
|
|
[/((\d+(\.\d*)?)|(\.\d+))([eE][\-+]?\d+)?/, 'number'],
|
|
],
|
|
strings: [
|
|
[/N'/, { token: 'string', next: '@string' }],
|
|
[/'/, { token: 'string', next: '@string' }],
|
|
[/"/, { token: 'type', next: '@string_double' }],
|
|
],
|
|
string: [
|
|
[/[^']+/, 'string'],
|
|
[/''/, 'string'],
|
|
[/'/, { token: 'string', next: '@pop' }],
|
|
],
|
|
string_double: [
|
|
[/[^\\"]+/, 'type'],
|
|
[/"/, 'type', '@pop'],
|
|
],
|
|
complexIdentifiers: [
|
|
[/\[/, { token: 'identifier.quote', next: '@bracketedIdentifier' }],
|
|
[/"/, { token: 'identifier.quote', next: '@quotedIdentifier' }],
|
|
],
|
|
bracketedIdentifier: [
|
|
[/[^\]]+/, 'identifier'],
|
|
[/]]/, 'identifier'],
|
|
[/]/, { token: 'identifier.quote', next: '@pop' }],
|
|
],
|
|
quotedIdentifier: [
|
|
[/[^"]+/, 'identifier'],
|
|
[/""/, 'identifier'],
|
|
[/"/, { token: 'identifier.quote', next: '@pop' }],
|
|
],
|
|
},
|
|
};
|
|
|
|
export const conf: monacoType.languages.LanguageConfiguration = {
|
|
comments: {
|
|
lineComment: '--',
|
|
blockComment: ['/*', '*/'],
|
|
},
|
|
brackets: [
|
|
['{', '}'],
|
|
['[', ']'],
|
|
['(', ')'],
|
|
],
|
|
autoClosingPairs: [
|
|
{ open: '{', close: '}' },
|
|
{ open: '[', close: ']' },
|
|
{ open: '(', close: ')' },
|
|
{ open: '"', close: '"' },
|
|
{ open: "'", close: "'" },
|
|
],
|
|
surroundingPairs: [
|
|
{ open: '{', close: '}' },
|
|
{ open: '[', close: ']' },
|
|
{ open: '(', close: ')' },
|
|
{ open: '"', close: '"' },
|
|
{ open: "'", close: "'" },
|
|
],
|
|
};
|