From a33b7cee5abd8cad9e67d5cfc51757e698348269 Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Wed, 17 Nov 2021 15:04:27 +0100 Subject: [PATCH] Inline adapters --- src/css/cssMode.ts | 30 +++++++++------- src/css/languageFeatures.ts | 55 ------------------------------ src/html/htmlMode.ts | 65 ++++++++++++++++++----------------- src/html/languageFeatures.ts | 47 ------------------------- src/json/jsonMode.ts | 53 ++++++++++++++++++++++------- src/json/languageFeatures.ts | 66 ------------------------------------ 6 files changed, 91 insertions(+), 225 deletions(-) delete mode 100644 src/css/languageFeatures.ts delete mode 100644 src/html/languageFeatures.ts delete mode 100644 src/json/languageFeatures.ts diff --git a/src/css/cssMode.ts b/src/css/cssMode.ts index f881cecc..5d15f9d9 100644 --- a/src/css/cssMode.ts +++ b/src/css/cssMode.ts @@ -6,7 +6,7 @@ import { WorkerManager } from './workerManager'; import type { CSSWorker } from './cssWorker'; import { LanguageServiceDefaults } from './monaco.contribution'; -import * as languageFeatures from './languageFeatures'; +import * as languageFeatures from '../common/lspLanguageFeatures'; import { Uri, IDisposable, languages } from '../fillers/monaco-editor-core'; export function setupMode(defaults: LanguageServiceDefaults): IDisposable { @@ -16,7 +16,9 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable { const client = new WorkerManager(defaults); disposables.push(client); - const worker: languageFeatures.WorkerAccessor = (...uris: Uri[]): Promise => { + const worker: languageFeatures.WorkerAccessor = ( + ...uris: Uri[] + ): Promise => { return client.getLanguageServiceWorker(...uris); }; @@ -29,20 +31,20 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable { providers.push( languages.registerCompletionItemProvider( languageId, - new languageFeatures.CSSCompletionAdapter(worker) + new languageFeatures.CompletionAdapter(worker, ['/', '-', ':']) ) ); } if (modeConfiguration.hovers) { providers.push( - languages.registerHoverProvider(languageId, new languageFeatures.CSSHoverAdapter(worker)) + languages.registerHoverProvider(languageId, new languageFeatures.HoverAdapter(worker)) ); } if (modeConfiguration.documentHighlights) { providers.push( languages.registerDocumentHighlightProvider( languageId, - new languageFeatures.CSSDocumentHighlightAdapter(worker) + new languageFeatures.DocumentHighlightAdapter(worker) ) ); } @@ -50,7 +52,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable { providers.push( languages.registerDefinitionProvider( languageId, - new languageFeatures.CSSDefinitionAdapter(worker) + new languageFeatures.DefinitionAdapter(worker) ) ); } @@ -58,7 +60,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable { providers.push( languages.registerReferenceProvider( languageId, - new languageFeatures.CSSReferenceAdapter(worker) + new languageFeatures.ReferenceAdapter(worker) ) ); } @@ -66,20 +68,20 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable { providers.push( languages.registerDocumentSymbolProvider( languageId, - new languageFeatures.CSSDocumentSymbolAdapter(worker) + new languageFeatures.DocumentSymbolAdapter(worker) ) ); } if (modeConfiguration.rename) { providers.push( - languages.registerRenameProvider(languageId, new languageFeatures.CSSRenameAdapter(worker)) + languages.registerRenameProvider(languageId, new languageFeatures.RenameAdapter(worker)) ); } if (modeConfiguration.colors) { providers.push( languages.registerColorProvider( languageId, - new languageFeatures.CSSDocumentColorAdapter(worker) + new languageFeatures.DocumentColorAdapter(worker) ) ); } @@ -87,18 +89,20 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable { providers.push( languages.registerFoldingRangeProvider( languageId, - new languageFeatures.CSSFoldingRangeAdapter(worker) + new languageFeatures.FoldingRangeAdapter(worker) ) ); } if (modeConfiguration.diagnostics) { - providers.push(new languageFeatures.CSSDiagnosticsAdapter(languageId, worker, defaults)); + providers.push( + new languageFeatures.DiagnosticsAdapter(languageId, worker, defaults.onDidChange) + ); } if (modeConfiguration.selectionRanges) { providers.push( languages.registerSelectionRangeProvider( languageId, - new languageFeatures.CSSSelectionRangeAdapter(worker) + new languageFeatures.SelectionRangeAdapter(worker) ) ); } diff --git a/src/css/languageFeatures.ts b/src/css/languageFeatures.ts deleted file mode 100644 index fed724c5..00000000 --- a/src/css/languageFeatures.ts +++ /dev/null @@ -1,55 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { LanguageServiceDefaults } from './monaco.contribution'; -import type { CSSWorker } from './cssWorker'; -import { Uri } from '../fillers/monaco-editor-core'; -import { - DiagnosticsAdapter, - CompletionAdapter, - HoverAdapter, - DocumentHighlightAdapter, - DefinitionAdapter, - ReferenceAdapter, - RenameAdapter, - DocumentSymbolAdapter, - DocumentColorAdapter, - FoldingRangeAdapter, - SelectionRangeAdapter -} from '../common/lspLanguageFeatures'; - -export interface WorkerAccessor { - (first: Uri, ...more: Uri[]): Promise; -} - -export class CSSDiagnosticsAdapter extends DiagnosticsAdapter { - constructor(languageId: string, worker: WorkerAccessor, defaults: LanguageServiceDefaults) { - super(languageId, worker, defaults.onDidChange); - } -} - -export class CSSCompletionAdapter extends CompletionAdapter { - constructor(worker: WorkerAccessor) { - super(worker, ['/', '-', ':']); - } -} - -export class CSSHoverAdapter extends HoverAdapter {} - -export class CSSDocumentHighlightAdapter extends DocumentHighlightAdapter {} - -export class CSSDefinitionAdapter extends DefinitionAdapter {} - -export class CSSReferenceAdapter extends ReferenceAdapter {} - -export class CSSRenameAdapter extends RenameAdapter {} - -export class CSSDocumentSymbolAdapter extends DocumentSymbolAdapter {} - -export class CSSDocumentColorAdapter extends DocumentColorAdapter {} - -export class CSSFoldingRangeAdapter extends FoldingRangeAdapter {} - -export class CSSSelectionRangeAdapter extends SelectionRangeAdapter {} diff --git a/src/html/htmlMode.ts b/src/html/htmlMode.ts index 9c9853a5..779c5edf 100644 --- a/src/html/htmlMode.ts +++ b/src/html/htmlMode.ts @@ -6,53 +6,58 @@ import { WorkerManager } from './workerManager'; import type { HTMLWorker } from './htmlWorker'; import { LanguageServiceDefaults } from './monaco.contribution'; -import * as languageFeatures from './languageFeatures'; +import * as languageFeatures from '../common/lspLanguageFeatures'; import { Uri, IDisposable, languages } from '../fillers/monaco-editor-core'; +class HTMLCompletionAdapter extends languageFeatures.CompletionAdapter { + constructor(worker: languageFeatures.WorkerAccessor) { + super(worker, ['.', ':', '<', '"', '=', '/']); + } +} + export function setupMode1(defaults: LanguageServiceDefaults): void { const client = new WorkerManager(defaults); - const worker: languageFeatures.WorkerAccessor = (...uris: Uri[]): Promise => { + const worker: languageFeatures.WorkerAccessor = ( + ...uris: Uri[] + ): Promise => { return client.getLanguageServiceWorker(...uris); }; let languageId = defaults.languageId; // all modes - languages.registerCompletionItemProvider( - languageId, - new languageFeatures.HTMLCompletionAdapter(worker) - ); - languages.registerHoverProvider(languageId, new languageFeatures.HTMLHoverAdapter(worker)); + languages.registerCompletionItemProvider(languageId, new HTMLCompletionAdapter(worker)); + languages.registerHoverProvider(languageId, new languageFeatures.HoverAdapter(worker)); languages.registerDocumentHighlightProvider( languageId, - new languageFeatures.HTMLDocumentHighlightAdapter(worker) + new languageFeatures.DocumentHighlightAdapter(worker) ); - languages.registerLinkProvider(languageId, new languageFeatures.HTMLDocumentLinkAdapter(worker)); + languages.registerLinkProvider(languageId, new languageFeatures.DocumentLinkAdapter(worker)); languages.registerFoldingRangeProvider( languageId, - new languageFeatures.HTMLFoldingRangeAdapter(worker) + new languageFeatures.FoldingRangeAdapter(worker) ); languages.registerDocumentSymbolProvider( languageId, - new languageFeatures.HTMLDocumentSymbolAdapter(worker) + new languageFeatures.DocumentSymbolAdapter(worker) ); languages.registerSelectionRangeProvider( languageId, - new languageFeatures.HTMLSelectionRangeAdapter(worker) + new languageFeatures.SelectionRangeAdapter(worker) ); - languages.registerRenameProvider(languageId, new languageFeatures.HTMLRenameAdapter(worker)); + languages.registerRenameProvider(languageId, new languageFeatures.RenameAdapter(worker)); // only html if (languageId === 'html') { languages.registerDocumentFormattingEditProvider( languageId, - new languageFeatures.HTMLDocumentFormattingEditProvider(worker) + new languageFeatures.DocumentFormattingEditProvider(worker) ); languages.registerDocumentRangeFormattingEditProvider( languageId, - new languageFeatures.HTMLDocumentRangeFormattingEditProvider(worker) + new languageFeatures.DocumentRangeFormattingEditProvider(worker) ); } } @@ -64,7 +69,9 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable { const client = new WorkerManager(defaults); disposables.push(client); - const worker: languageFeatures.WorkerAccessor = (...uris: Uri[]): Promise => { + const worker: languageFeatures.WorkerAccessor = ( + ...uris: Uri[] + ): Promise => { return client.getLanguageServiceWorker(...uris); }; @@ -75,51 +82,45 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable { if (modeConfiguration.completionItems) { providers.push( - languages.registerCompletionItemProvider( - languageId, - new languageFeatures.HTMLCompletionAdapter(worker) - ) + languages.registerCompletionItemProvider(languageId, new HTMLCompletionAdapter(worker)) ); } if (modeConfiguration.hovers) { providers.push( - languages.registerHoverProvider(languageId, new languageFeatures.HTMLHoverAdapter(worker)) + languages.registerHoverProvider(languageId, new languageFeatures.HoverAdapter(worker)) ); } if (modeConfiguration.documentHighlights) { providers.push( languages.registerDocumentHighlightProvider( languageId, - new languageFeatures.HTMLDocumentHighlightAdapter(worker) + new languageFeatures.DocumentHighlightAdapter(worker) ) ); } if (modeConfiguration.links) { providers.push( - languages.registerLinkProvider( - languageId, - new languageFeatures.HTMLDocumentLinkAdapter(worker) - ) + languages.registerLinkProvider(languageId, new languageFeatures.DocumentLinkAdapter(worker)) ); } if (modeConfiguration.documentSymbols) { providers.push( languages.registerDocumentSymbolProvider( languageId, - new languageFeatures.HTMLDocumentSymbolAdapter(worker) + new languageFeatures.DocumentSymbolAdapter(worker) ) ); } if (modeConfiguration.rename) { providers.push( - languages.registerRenameProvider(languageId, new languageFeatures.HTMLRenameAdapter(worker)) + languages.registerRenameProvider(languageId, new languageFeatures.RenameAdapter(worker)) ); } if (modeConfiguration.foldingRanges) { providers.push( languages.registerFoldingRangeProvider( languageId, - new languageFeatures.HTMLFoldingRangeAdapter(worker) + new languageFeatures.FoldingRangeAdapter(worker) ) ); } @@ -127,7 +128,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable { providers.push( languages.registerSelectionRangeProvider( languageId, - new languageFeatures.HTMLSelectionRangeAdapter(worker) + new languageFeatures.SelectionRangeAdapter(worker) ) ); } @@ -135,7 +136,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable { providers.push( languages.registerDocumentFormattingEditProvider( languageId, - new languageFeatures.HTMLDocumentFormattingEditProvider(worker) + new languageFeatures.DocumentFormattingEditProvider(worker) ) ); } @@ -143,7 +144,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable { providers.push( languages.registerDocumentRangeFormattingEditProvider( languageId, - new languageFeatures.HTMLDocumentRangeFormattingEditProvider(worker) + new languageFeatures.DocumentRangeFormattingEditProvider(worker) ) ); } diff --git a/src/html/languageFeatures.ts b/src/html/languageFeatures.ts deleted file mode 100644 index 432c1d04..00000000 --- a/src/html/languageFeatures.ts +++ /dev/null @@ -1,47 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import type { HTMLWorker } from './htmlWorker'; -import { Uri } from '../fillers/monaco-editor-core'; -import { - CompletionAdapter, - HoverAdapter, - DocumentHighlightAdapter, - RenameAdapter, - DocumentSymbolAdapter, - DocumentLinkAdapter, - DocumentFormattingEditProvider, - DocumentRangeFormattingEditProvider, - FoldingRangeAdapter, - SelectionRangeAdapter -} from '../common/lspLanguageFeatures'; - -export interface WorkerAccessor { - (...more: Uri[]): Promise; -} - -export class HTMLCompletionAdapter extends CompletionAdapter { - constructor(worker: WorkerAccessor) { - super(worker, ['.', ':', '<', '"', '=', '/']); - } -} - -export class HTMLHoverAdapter extends HoverAdapter {} - -export class HTMLDocumentHighlightAdapter extends DocumentHighlightAdapter {} - -export class HTMLRenameAdapter extends RenameAdapter {} - -export class HTMLDocumentSymbolAdapter extends DocumentSymbolAdapter {} - -export class HTMLDocumentLinkAdapter extends DocumentLinkAdapter {} - -export class HTMLDocumentFormattingEditProvider extends DocumentFormattingEditProvider {} - -export class HTMLDocumentRangeFormattingEditProvider extends DocumentRangeFormattingEditProvider {} - -export class HTMLFoldingRangeAdapter extends FoldingRangeAdapter {} - -export class HTMLSelectionRangeAdapter extends SelectionRangeAdapter {} diff --git a/src/json/jsonMode.ts b/src/json/jsonMode.ts index c59137b5..3d4995f4 100644 --- a/src/json/jsonMode.ts +++ b/src/json/jsonMode.ts @@ -6,9 +6,36 @@ import { WorkerManager } from './workerManager'; import type { JSONWorker } from './jsonWorker'; import { LanguageServiceDefaults } from './monaco.contribution'; -import * as languageFeatures from './languageFeatures'; +import * as languageFeatures from '../common/lspLanguageFeatures'; import { createTokenizationSupport } from './tokenization'; -import { Uri, IDisposable, languages } from '../fillers/monaco-editor-core'; +import { Uri, IDisposable, languages, editor } from '../fillers/monaco-editor-core'; + +class JSONDiagnosticsAdapter extends languageFeatures.DiagnosticsAdapter { + constructor( + languageId: string, + worker: languageFeatures.WorkerAccessor, + defaults: LanguageServiceDefaults + ) { + super(languageId, worker, defaults.onDidChange); + + this._disposables.push( + editor.onWillDisposeModel((model) => { + this._resetSchema(model.uri); + }) + ); + this._disposables.push( + editor.onDidChangeModelLanguage((event) => { + this._resetSchema(event.model.uri); + }) + ); + } + + private _resetSchema(resource: Uri): void { + this._worker().then((worker) => { + worker.resetSchema(resource.toString()); + }); + } +} export function setupMode(defaults: LanguageServiceDefaults): IDisposable { const disposables: IDisposable[] = []; @@ -17,7 +44,9 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable { const client = new WorkerManager(defaults); disposables.push(client); - const worker: languageFeatures.WorkerAccessor = (...uris: Uri[]): Promise => { + const worker: languageFeatures.WorkerAccessor = ( + ...uris: Uri[] + ): Promise => { return client.getLanguageServiceWorker(...uris); }; @@ -30,7 +59,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable { providers.push( languages.registerDocumentFormattingEditProvider( languageId, - new languageFeatures.JSONDocumentFormattingEditProvider(worker) + new languageFeatures.DocumentFormattingEditProvider(worker) ) ); } @@ -38,7 +67,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable { providers.push( languages.registerDocumentRangeFormattingEditProvider( languageId, - new languageFeatures.JSONDocumentRangeFormattingEditProvider(worker) + new languageFeatures.DocumentRangeFormattingEditProvider(worker) ) ); } @@ -46,20 +75,20 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable { providers.push( languages.registerCompletionItemProvider( languageId, - new languageFeatures.JSONCompletionAdapter(worker) + new languageFeatures.CompletionAdapter(worker, [' ', ':', '"']) ) ); } if (modeConfiguration.hovers) { providers.push( - languages.registerHoverProvider(languageId, new languageFeatures.JSONHoverAdapter(worker)) + languages.registerHoverProvider(languageId, new languageFeatures.HoverAdapter(worker)) ); } if (modeConfiguration.documentSymbols) { providers.push( languages.registerDocumentSymbolProvider( languageId, - new languageFeatures.JSONDocumentSymbolAdapter(worker) + new languageFeatures.DocumentSymbolAdapter(worker) ) ); } @@ -70,7 +99,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable { providers.push( languages.registerColorProvider( languageId, - new languageFeatures.JSONDocumentColorAdapter(worker) + new languageFeatures.DocumentColorAdapter(worker) ) ); } @@ -78,18 +107,18 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable { providers.push( languages.registerFoldingRangeProvider( languageId, - new languageFeatures.JSONFoldingRangeAdapter(worker) + new languageFeatures.FoldingRangeAdapter(worker) ) ); } if (modeConfiguration.diagnostics) { - providers.push(new languageFeatures.JSONDiagnosticsAdapter(languageId, worker, defaults)); + providers.push(new JSONDiagnosticsAdapter(languageId, worker, defaults)); } if (modeConfiguration.selectionRanges) { providers.push( languages.registerSelectionRangeProvider( languageId, - new languageFeatures.JSONSelectionRangeAdapter(worker) + new languageFeatures.SelectionRangeAdapter(worker) ) ); } diff --git a/src/json/languageFeatures.ts b/src/json/languageFeatures.ts deleted file mode 100644 index 7a7887f9..00000000 --- a/src/json/languageFeatures.ts +++ /dev/null @@ -1,66 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { LanguageServiceDefaults } from './monaco.contribution'; -import type { JSONWorker } from './jsonWorker'; -import { editor, Uri } from '../fillers/monaco-editor-core'; -import { - DiagnosticsAdapter, - CompletionAdapter, - HoverAdapter, - DocumentSymbolAdapter, - DocumentFormattingEditProvider, - DocumentRangeFormattingEditProvider, - DocumentColorAdapter, - FoldingRangeAdapter, - SelectionRangeAdapter -} from '../common/lspLanguageFeatures'; - -export interface WorkerAccessor { - (...more: Uri[]): Promise; -} - -export class JSONDiagnosticsAdapter extends DiagnosticsAdapter { - constructor(languageId: string, worker: WorkerAccessor, defaults: LanguageServiceDefaults) { - super(languageId, worker, defaults.onDidChange); - - this._disposables.push( - editor.onWillDisposeModel((model) => { - this._resetSchema(model.uri); - }) - ); - this._disposables.push( - editor.onDidChangeModelLanguage((event) => { - this._resetSchema(event.model.uri); - }) - ); - } - - private _resetSchema(resource: Uri): void { - this._worker().then((worker) => { - worker.resetSchema(resource.toString()); - }); - } -} - -export class JSONCompletionAdapter extends CompletionAdapter { - constructor(worker: WorkerAccessor) { - super(worker, [' ', ':', '"']); - } -} - -export class JSONHoverAdapter extends HoverAdapter {} - -export class JSONDocumentSymbolAdapter extends DocumentSymbolAdapter {} - -export class JSONDocumentFormattingEditProvider extends DocumentFormattingEditProvider {} - -export class JSONDocumentRangeFormattingEditProvider extends DocumentRangeFormattingEditProvider {} - -export class JSONDocumentColorAdapter extends DocumentColorAdapter {} - -export class JSONFoldingRangeAdapter extends FoldingRangeAdapter {} - -export class JSONSelectionRangeAdapter extends SelectionRangeAdapter {}