Inline adapters

pull/2779/head
Alex Dima 3 years ago
parent 8f57069f86
commit a33b7cee5a
No known key found for this signature in database
GPG Key ID: 39563C1504FDD0C9

@ -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<CSSWorker> => {
const worker: languageFeatures.WorkerAccessor<CSSWorker> = (
...uris: Uri[]
): Promise<CSSWorker> => {
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)
)
);
}

@ -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<CSSWorker>;
}
export class CSSDiagnosticsAdapter extends DiagnosticsAdapter<CSSWorker> {
constructor(languageId: string, worker: WorkerAccessor, defaults: LanguageServiceDefaults) {
super(languageId, worker, defaults.onDidChange);
}
}
export class CSSCompletionAdapter extends CompletionAdapter<CSSWorker> {
constructor(worker: WorkerAccessor) {
super(worker, ['/', '-', ':']);
}
}
export class CSSHoverAdapter extends HoverAdapter<CSSWorker> {}
export class CSSDocumentHighlightAdapter extends DocumentHighlightAdapter<CSSWorker> {}
export class CSSDefinitionAdapter extends DefinitionAdapter<CSSWorker> {}
export class CSSReferenceAdapter extends ReferenceAdapter<CSSWorker> {}
export class CSSRenameAdapter extends RenameAdapter<CSSWorker> {}
export class CSSDocumentSymbolAdapter extends DocumentSymbolAdapter<CSSWorker> {}
export class CSSDocumentColorAdapter extends DocumentColorAdapter<CSSWorker> {}
export class CSSFoldingRangeAdapter extends FoldingRangeAdapter<CSSWorker> {}
export class CSSSelectionRangeAdapter extends SelectionRangeAdapter<CSSWorker> {}

@ -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<HTMLWorker> {
constructor(worker: languageFeatures.WorkerAccessor<HTMLWorker>) {
super(worker, ['.', ':', '<', '"', '=', '/']);
}
}
export function setupMode1(defaults: LanguageServiceDefaults): void {
const client = new WorkerManager(defaults);
const worker: languageFeatures.WorkerAccessor = (...uris: Uri[]): Promise<HTMLWorker> => {
const worker: languageFeatures.WorkerAccessor<HTMLWorker> = (
...uris: Uri[]
): Promise<HTMLWorker> => {
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<HTMLWorker> => {
const worker: languageFeatures.WorkerAccessor<HTMLWorker> = (
...uris: Uri[]
): Promise<HTMLWorker> => {
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)
)
);
}

@ -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<HTMLWorker>;
}
export class HTMLCompletionAdapter extends CompletionAdapter<HTMLWorker> {
constructor(worker: WorkerAccessor) {
super(worker, ['.', ':', '<', '"', '=', '/']);
}
}
export class HTMLHoverAdapter extends HoverAdapter<HTMLWorker> {}
export class HTMLDocumentHighlightAdapter extends DocumentHighlightAdapter<HTMLWorker> {}
export class HTMLRenameAdapter extends RenameAdapter<HTMLWorker> {}
export class HTMLDocumentSymbolAdapter extends DocumentSymbolAdapter<HTMLWorker> {}
export class HTMLDocumentLinkAdapter extends DocumentLinkAdapter<HTMLWorker> {}
export class HTMLDocumentFormattingEditProvider extends DocumentFormattingEditProvider<HTMLWorker> {}
export class HTMLDocumentRangeFormattingEditProvider extends DocumentRangeFormattingEditProvider<HTMLWorker> {}
export class HTMLFoldingRangeAdapter extends FoldingRangeAdapter<HTMLWorker> {}
export class HTMLSelectionRangeAdapter extends SelectionRangeAdapter<HTMLWorker> {}

@ -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<JSONWorker> {
constructor(
languageId: string,
worker: languageFeatures.WorkerAccessor<JSONWorker>,
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<JSONWorker> => {
const worker: languageFeatures.WorkerAccessor<JSONWorker> = (
...uris: Uri[]
): Promise<JSONWorker> => {
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)
)
);
}

@ -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<JSONWorker>;
}
export class JSONDiagnosticsAdapter extends DiagnosticsAdapter<JSONWorker> {
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<JSONWorker> {
constructor(worker: WorkerAccessor) {
super(worker, [' ', ':', '"']);
}
}
export class JSONHoverAdapter extends HoverAdapter<JSONWorker> {}
export class JSONDocumentSymbolAdapter extends DocumentSymbolAdapter<JSONWorker> {}
export class JSONDocumentFormattingEditProvider extends DocumentFormattingEditProvider<JSONWorker> {}
export class JSONDocumentRangeFormattingEditProvider extends DocumentRangeFormattingEditProvider<JSONWorker> {}
export class JSONDocumentColorAdapter extends DocumentColorAdapter<JSONWorker> {}
export class JSONFoldingRangeAdapter extends FoldingRangeAdapter<JSONWorker> {}
export class JSONSelectionRangeAdapter extends SelectionRangeAdapter<JSONWorker> {}
Loading…
Cancel
Save