UNPKG

monaco-editor

Version:
127 lines (124 loc) 4.13 kB
import { WorkerManager } from './workerManager.js'; import { CompletionAdapter, HoverAdapter, DocumentHighlightAdapter, DefinitionAdapter, ReferenceAdapter, DocumentSymbolAdapter, RenameAdapter, DocumentColorAdapter, FoldingRangeAdapter, DiagnosticsAdapter, SelectionRangeAdapter, DocumentFormattingEditProvider, DocumentRangeFormattingEditProvider } from '../common/lspLanguageFeatures.js'; export { DocumentLinkAdapter, fromPosition, fromRange, toRange, toTextEdit } from '../common/lspLanguageFeatures.js'; import { languages } from '../../../editor/editor.api.js'; function setupMode(defaults) { const disposables = []; const providers = []; const client = new WorkerManager(defaults); disposables.push(client); const worker = (...uris) => { return client.getLanguageServiceWorker(...uris); }; function registerProviders() { const { languageId, modeConfiguration } = defaults; disposeAll(providers); if (modeConfiguration.completionItems) { providers.push( languages.registerCompletionItemProvider( languageId, new CompletionAdapter(worker, ["/", "-", ":"]) ) ); } if (modeConfiguration.hovers) { providers.push( languages.registerHoverProvider(languageId, new HoverAdapter(worker)) ); } if (modeConfiguration.documentHighlights) { providers.push( languages.registerDocumentHighlightProvider( languageId, new DocumentHighlightAdapter(worker) ) ); } if (modeConfiguration.definitions) { providers.push( languages.registerDefinitionProvider( languageId, new DefinitionAdapter(worker) ) ); } if (modeConfiguration.references) { providers.push( languages.registerReferenceProvider( languageId, new ReferenceAdapter(worker) ) ); } if (modeConfiguration.documentSymbols) { providers.push( languages.registerDocumentSymbolProvider( languageId, new DocumentSymbolAdapter(worker) ) ); } if (modeConfiguration.rename) { providers.push( languages.registerRenameProvider(languageId, new RenameAdapter(worker)) ); } if (modeConfiguration.colors) { providers.push( languages.registerColorProvider( languageId, new DocumentColorAdapter(worker) ) ); } if (modeConfiguration.foldingRanges) { providers.push( languages.registerFoldingRangeProvider( languageId, new FoldingRangeAdapter(worker) ) ); } if (modeConfiguration.diagnostics) { providers.push( new DiagnosticsAdapter(languageId, worker, defaults.onDidChange) ); } if (modeConfiguration.selectionRanges) { providers.push( languages.registerSelectionRangeProvider( languageId, new SelectionRangeAdapter(worker) ) ); } if (modeConfiguration.documentFormattingEdits) { providers.push( languages.registerDocumentFormattingEditProvider( languageId, new DocumentFormattingEditProvider(worker) ) ); } if (modeConfiguration.documentRangeFormattingEdits) { providers.push( languages.registerDocumentRangeFormattingEditProvider( languageId, new DocumentRangeFormattingEditProvider(worker) ) ); } } registerProviders(); disposables.push(asDisposable(providers)); return asDisposable(disposables); } function asDisposable(disposables) { return { dispose: () => disposeAll(disposables) }; } function disposeAll(disposables) { while (disposables.length) { disposables.pop().dispose(); } } export { CompletionAdapter, DefinitionAdapter, DiagnosticsAdapter, DocumentColorAdapter, DocumentFormattingEditProvider, DocumentHighlightAdapter, DocumentRangeFormattingEditProvider, DocumentSymbolAdapter, FoldingRangeAdapter, HoverAdapter, ReferenceAdapter, RenameAdapter, SelectionRangeAdapter, WorkerManager, setupMode };