in amoro-web/src/utils/editor.ts [26:124]
function registerSql() {
// SQL keyword hints
monaco.languages.registerCompletionItemProvider('sql', {
provideCompletionItems: (model, position) => {
const textUntilPosition = model.getValueInRange({
startLineNumber: position.lineNumber,
startColumn: 1,
endLineNumber: position.lineNumber,
endColumn: position.column,
})
const match = textUntilPosition.match(/(\S+)$/)
const suggestions: monaco.languages.CompletionItem[] = []
if (match) {
const matchStr = match[0].toUpperCase()
sqlLanguage.keywords.forEach((item: string) => {
if (item.startsWith(matchStr)) {
suggestions.push({
label: item,
kind: monaco.languages.CompletionItemKind.Keyword,
insertText: item,
} as monaco.languages.CompletionItem)
}
})
sqlLanguage.operators.forEach((item: string) => {
if (item.startsWith(matchStr)) {
suggestions.push({
label: item,
kind: monaco.languages.CompletionItemKind.Operator,
insertText: item,
} as monaco.languages.CompletionItem)
}
})
sqlLanguage.builtinFunctions.forEach((item: string) => {
if (item.startsWith(matchStr)) {
suggestions.push({
label: item,
kind: monaco.languages.CompletionItemKind.Function,
insertText: item,
} as monaco.languages.CompletionItem)
}
})
}
return {
suggestions: Array.from(new Set(suggestions)),
}
},
})
// format SQL
monaco.languages.registerDocumentFormattingEditProvider('sql', {
provideDocumentFormattingEdits(model) {
const formatted = sqlFormatter.format(model.getValue())
return [{
range: model.getFullModelRange(),
text: formatted.replace(/\s-\s/g, '-'),
}]
},
})
const themeData: any = {
base: 'vs',
inherit: !1,
colors: {
'editorHoverWidget.background': '#FAFAFA',
'editorHoverWidget.border': '#DEDEDE',
'editor.lineHighlightBackground': '#EFF8FF',
'editor.selectionBackground': '#D5D5EF',
'editorLineNumber.foreground': '#999999',
'editorSuggestWidget.background': '#FFFFFF',
'editorSuggestWidget.selectedBackground': '#EFF8FF',
},
rules: [{
token: 'comment',
foreground: '8E908C',
}, {
token: 'comments',
foreground: '8E908C',
}, {
token: 'keyword',
foreground: '8959A8',
}, {
token: 'predefined',
foreground: '11B7BE',
}, {
token: 'doubleString',
foreground: 'AB1010',
}, {
token: 'singleString',
foreground: 'AB1010',
}, {
token: 'number',
foreground: 'AB1010',
}, {
token: 'string.sql',
foreground: '718C00',
}],
}
monaco.editor.defineTheme('arcticSql', themeData)
}