in package/src/kustoMode.ts [34:121]
export function setupMode(defaults: LanguageServiceDefaults, monacoInstance: typeof globalThis.monaco) {
const onSchemaChange = new monaco.Emitter<Schema>();
const semanticTokensProviderRegistrar = semanticTokensProviderRegistrarCreator();
const client = new WorkerManager(monacoInstance, defaults);
const workerAccessor: AugmentedWorkerAccessor = (first, ...more) => {
const augmentedSetSchema = async (schema: Schema, worker: KustoWorker) => {
const workerPromise = worker.setSchema(schema);
await workerPromise.then(() => {
onSchemaChange.fire(schema);
});
semanticTokensProviderRegistrar(monacoInstance, workerAccessor);
};
const worker = client.getLanguageServiceWorker(...[first].concat(more));
return worker.then(
(worker): AugmentedWorker => ({
...worker,
setSchema: (schema) => augmentedSetSchema(schema, worker),
async setSchemaFromShowSchema(
schema,
connection,
database,
globalScalarParameters,
globalTabularParameters
) {
await worker.normalizeSchema(schema, connection, database).then((schema) => {
if (globalScalarParameters || globalTabularParameters) {
schema = { ...schema, globalScalarParameters, globalTabularParameters };
}
augmentedSetSchema(schema, worker);
});
},
})
);
};
monacoInstance.languages.registerCompletionItemProvider(
LANGUAGE_ID,
new languageFeatures.CompletionAdapter(workerAccessor, defaults.languageSettings)
);
monacoInstance.languages.setMonarchTokensProvider(LANGUAGE_ID, kustoLanguageDefinition);
new languageFeatures.DiagnosticsAdapter(
monacoInstance,
LANGUAGE_ID,
workerAccessor,
defaults,
onSchemaChange.event
);
monacoInstance.languages.registerDocumentRangeFormattingEditProvider(
LANGUAGE_ID,
new languageFeatures.FormatAdapter(workerAccessor)
);
monacoInstance.languages.registerFoldingRangeProvider(
LANGUAGE_ID,
new languageFeatures.FoldingAdapter(workerAccessor)
);
monacoInstance.languages.registerDefinitionProvider(
LANGUAGE_ID,
new languageFeatures.DefinitionAdapter(workerAccessor)
);
monacoInstance.languages.registerRenameProvider(LANGUAGE_ID, new languageFeatures.RenameAdapter(workerAccessor));
monacoInstance.languages.registerReferenceProvider(
LANGUAGE_ID,
new languageFeatures.ReferenceAdapter(workerAccessor)
);
if (defaults.languageSettings.enableHover) {
monacoInstance.languages.registerHoverProvider(LANGUAGE_ID, new languageFeatures.HoverAdapter(workerAccessor));
}
monacoInstance.languages.registerDocumentFormattingEditProvider(
LANGUAGE_ID,
new languageFeatures.DocumentFormatAdapter(workerAccessor)
);
kustoWorker = workerAccessor;
resolveWorker(workerAccessor);
monacoInstance.languages.setLanguageConfiguration(LANGUAGE_ID, languageConfiguration);
}