export function setupMode()

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