mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* add completeable interface * add basic labels language * render monaco editor for label field * align styling in math expression field * add unit tests * fix broken test * remove unused import * use theme * remove comment * pr feedback * fix broken imports * improve test * make it possible to override code editor styles * use input styles and align border styles
37 lines
1.0 KiB
TypeScript
37 lines
1.0 KiB
TypeScript
import type * as monacoType from 'monaco-editor/esm/vs/editor/editor.api';
|
|
|
|
import { Monaco } from '@grafana/ui';
|
|
|
|
import { Completeable } from './types';
|
|
|
|
export type LanguageDefinition = {
|
|
id: string;
|
|
extensions: string[];
|
|
aliases: string[];
|
|
mimetypes: string[];
|
|
loader: () => Promise<{
|
|
language: monacoType.languages.IMonarchLanguage;
|
|
conf: monacoType.languages.LanguageConfiguration;
|
|
}>;
|
|
};
|
|
|
|
export const registerLanguage = (
|
|
monaco: Monaco,
|
|
language: LanguageDefinition,
|
|
completionItemProvider: Completeable
|
|
) => {
|
|
const { id, loader } = language;
|
|
|
|
const languages = monaco.languages.getLanguages();
|
|
if (languages.find((l) => l.id === id)) {
|
|
return;
|
|
}
|
|
|
|
monaco.languages.register({ id });
|
|
loader().then((monarch) => {
|
|
monaco.languages.setMonarchTokensProvider(id, monarch.language);
|
|
monaco.languages.setLanguageConfiguration(id, monarch.conf);
|
|
monaco.languages.registerCompletionItemProvider(id, completionItemProvider.getCompletionProvider(monaco, language));
|
|
});
|
|
};
|