Files
grafana/public/app/plugins/datasource/cloudwatch/monarch/register.ts
Erik Sundell 467e375fe6 Cloudwatch: Dynamic labels autocomplete (#49794)
* 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
2022-06-02 10:54:51 +02:00

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));
});
};