mirror of
https://github.com/microsoft/monaco-editor.git
synced 2025-12-22 23:13:02 +01:00
Inline adapters
This commit is contained in:
parent
8f57069f86
commit
a33b7cee5a
6 changed files with 91 additions and 225 deletions
|
|
@ -6,7 +6,7 @@
|
||||||
import { WorkerManager } from './workerManager';
|
import { WorkerManager } from './workerManager';
|
||||||
import type { CSSWorker } from './cssWorker';
|
import type { CSSWorker } from './cssWorker';
|
||||||
import { LanguageServiceDefaults } from './monaco.contribution';
|
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';
|
import { Uri, IDisposable, languages } from '../fillers/monaco-editor-core';
|
||||||
|
|
||||||
export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
||||||
|
|
@ -16,7 +16,9 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
||||||
const client = new WorkerManager(defaults);
|
const client = new WorkerManager(defaults);
|
||||||
disposables.push(client);
|
disposables.push(client);
|
||||||
|
|
||||||
const worker: languageFeatures.WorkerAccessor = (...uris: Uri[]): Promise<CSSWorker> => {
|
const worker: languageFeatures.WorkerAccessor<CSSWorker> = (
|
||||||
|
...uris: Uri[]
|
||||||
|
): Promise<CSSWorker> => {
|
||||||
return client.getLanguageServiceWorker(...uris);
|
return client.getLanguageServiceWorker(...uris);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -29,20 +31,20 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerCompletionItemProvider(
|
languages.registerCompletionItemProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.CSSCompletionAdapter(worker)
|
new languageFeatures.CompletionAdapter(worker, ['/', '-', ':'])
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (modeConfiguration.hovers) {
|
if (modeConfiguration.hovers) {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerHoverProvider(languageId, new languageFeatures.CSSHoverAdapter(worker))
|
languages.registerHoverProvider(languageId, new languageFeatures.HoverAdapter(worker))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (modeConfiguration.documentHighlights) {
|
if (modeConfiguration.documentHighlights) {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerDocumentHighlightProvider(
|
languages.registerDocumentHighlightProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.CSSDocumentHighlightAdapter(worker)
|
new languageFeatures.DocumentHighlightAdapter(worker)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -50,7 +52,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerDefinitionProvider(
|
languages.registerDefinitionProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.CSSDefinitionAdapter(worker)
|
new languageFeatures.DefinitionAdapter(worker)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -58,7 +60,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerReferenceProvider(
|
languages.registerReferenceProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.CSSReferenceAdapter(worker)
|
new languageFeatures.ReferenceAdapter(worker)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -66,20 +68,20 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerDocumentSymbolProvider(
|
languages.registerDocumentSymbolProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.CSSDocumentSymbolAdapter(worker)
|
new languageFeatures.DocumentSymbolAdapter(worker)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (modeConfiguration.rename) {
|
if (modeConfiguration.rename) {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerRenameProvider(languageId, new languageFeatures.CSSRenameAdapter(worker))
|
languages.registerRenameProvider(languageId, new languageFeatures.RenameAdapter(worker))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (modeConfiguration.colors) {
|
if (modeConfiguration.colors) {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerColorProvider(
|
languages.registerColorProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.CSSDocumentColorAdapter(worker)
|
new languageFeatures.DocumentColorAdapter(worker)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -87,18 +89,20 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerFoldingRangeProvider(
|
languages.registerFoldingRangeProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.CSSFoldingRangeAdapter(worker)
|
new languageFeatures.FoldingRangeAdapter(worker)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (modeConfiguration.diagnostics) {
|
if (modeConfiguration.diagnostics) {
|
||||||
providers.push(new languageFeatures.CSSDiagnosticsAdapter(languageId, worker, defaults));
|
providers.push(
|
||||||
|
new languageFeatures.DiagnosticsAdapter(languageId, worker, defaults.onDidChange)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
if (modeConfiguration.selectionRanges) {
|
if (modeConfiguration.selectionRanges) {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerSelectionRangeProvider(
|
languages.registerSelectionRangeProvider(
|
||||||
languageId,
|
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 { WorkerManager } from './workerManager';
|
||||||
import type { HTMLWorker } from './htmlWorker';
|
import type { HTMLWorker } from './htmlWorker';
|
||||||
import { LanguageServiceDefaults } from './monaco.contribution';
|
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';
|
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 {
|
export function setupMode1(defaults: LanguageServiceDefaults): void {
|
||||||
const client = new WorkerManager(defaults);
|
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);
|
return client.getLanguageServiceWorker(...uris);
|
||||||
};
|
};
|
||||||
|
|
||||||
let languageId = defaults.languageId;
|
let languageId = defaults.languageId;
|
||||||
|
|
||||||
// all modes
|
// all modes
|
||||||
languages.registerCompletionItemProvider(
|
languages.registerCompletionItemProvider(languageId, new HTMLCompletionAdapter(worker));
|
||||||
languageId,
|
languages.registerHoverProvider(languageId, new languageFeatures.HoverAdapter(worker));
|
||||||
new languageFeatures.HTMLCompletionAdapter(worker)
|
|
||||||
);
|
|
||||||
languages.registerHoverProvider(languageId, new languageFeatures.HTMLHoverAdapter(worker));
|
|
||||||
|
|
||||||
languages.registerDocumentHighlightProvider(
|
languages.registerDocumentHighlightProvider(
|
||||||
languageId,
|
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(
|
languages.registerFoldingRangeProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.HTMLFoldingRangeAdapter(worker)
|
new languageFeatures.FoldingRangeAdapter(worker)
|
||||||
);
|
);
|
||||||
languages.registerDocumentSymbolProvider(
|
languages.registerDocumentSymbolProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.HTMLDocumentSymbolAdapter(worker)
|
new languageFeatures.DocumentSymbolAdapter(worker)
|
||||||
);
|
);
|
||||||
languages.registerSelectionRangeProvider(
|
languages.registerSelectionRangeProvider(
|
||||||
languageId,
|
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
|
// only html
|
||||||
if (languageId === 'html') {
|
if (languageId === 'html') {
|
||||||
languages.registerDocumentFormattingEditProvider(
|
languages.registerDocumentFormattingEditProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.HTMLDocumentFormattingEditProvider(worker)
|
new languageFeatures.DocumentFormattingEditProvider(worker)
|
||||||
);
|
);
|
||||||
languages.registerDocumentRangeFormattingEditProvider(
|
languages.registerDocumentRangeFormattingEditProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.HTMLDocumentRangeFormattingEditProvider(worker)
|
new languageFeatures.DocumentRangeFormattingEditProvider(worker)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -64,7 +69,9 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
||||||
const client = new WorkerManager(defaults);
|
const client = new WorkerManager(defaults);
|
||||||
disposables.push(client);
|
disposables.push(client);
|
||||||
|
|
||||||
const worker: languageFeatures.WorkerAccessor = (...uris: Uri[]): Promise<HTMLWorker> => {
|
const worker: languageFeatures.WorkerAccessor<HTMLWorker> = (
|
||||||
|
...uris: Uri[]
|
||||||
|
): Promise<HTMLWorker> => {
|
||||||
return client.getLanguageServiceWorker(...uris);
|
return client.getLanguageServiceWorker(...uris);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -75,51 +82,45 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
||||||
|
|
||||||
if (modeConfiguration.completionItems) {
|
if (modeConfiguration.completionItems) {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerCompletionItemProvider(
|
languages.registerCompletionItemProvider(languageId, new HTMLCompletionAdapter(worker))
|
||||||
languageId,
|
|
||||||
new languageFeatures.HTMLCompletionAdapter(worker)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (modeConfiguration.hovers) {
|
if (modeConfiguration.hovers) {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerHoverProvider(languageId, new languageFeatures.HTMLHoverAdapter(worker))
|
languages.registerHoverProvider(languageId, new languageFeatures.HoverAdapter(worker))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (modeConfiguration.documentHighlights) {
|
if (modeConfiguration.documentHighlights) {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerDocumentHighlightProvider(
|
languages.registerDocumentHighlightProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.HTMLDocumentHighlightAdapter(worker)
|
new languageFeatures.DocumentHighlightAdapter(worker)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (modeConfiguration.links) {
|
if (modeConfiguration.links) {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerLinkProvider(
|
languages.registerLinkProvider(languageId, new languageFeatures.DocumentLinkAdapter(worker))
|
||||||
languageId,
|
|
||||||
new languageFeatures.HTMLDocumentLinkAdapter(worker)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (modeConfiguration.documentSymbols) {
|
if (modeConfiguration.documentSymbols) {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerDocumentSymbolProvider(
|
languages.registerDocumentSymbolProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.HTMLDocumentSymbolAdapter(worker)
|
new languageFeatures.DocumentSymbolAdapter(worker)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (modeConfiguration.rename) {
|
if (modeConfiguration.rename) {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerRenameProvider(languageId, new languageFeatures.HTMLRenameAdapter(worker))
|
languages.registerRenameProvider(languageId, new languageFeatures.RenameAdapter(worker))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (modeConfiguration.foldingRanges) {
|
if (modeConfiguration.foldingRanges) {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerFoldingRangeProvider(
|
languages.registerFoldingRangeProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.HTMLFoldingRangeAdapter(worker)
|
new languageFeatures.FoldingRangeAdapter(worker)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -127,7 +128,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerSelectionRangeProvider(
|
languages.registerSelectionRangeProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.HTMLSelectionRangeAdapter(worker)
|
new languageFeatures.SelectionRangeAdapter(worker)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -135,7 +136,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerDocumentFormattingEditProvider(
|
languages.registerDocumentFormattingEditProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.HTMLDocumentFormattingEditProvider(worker)
|
new languageFeatures.DocumentFormattingEditProvider(worker)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -143,7 +144,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerDocumentRangeFormattingEditProvider(
|
languages.registerDocumentRangeFormattingEditProvider(
|
||||||
languageId,
|
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 { WorkerManager } from './workerManager';
|
||||||
import type { JSONWorker } from './jsonWorker';
|
import type { JSONWorker } from './jsonWorker';
|
||||||
import { LanguageServiceDefaults } from './monaco.contribution';
|
import { LanguageServiceDefaults } from './monaco.contribution';
|
||||||
import * as languageFeatures from './languageFeatures';
|
import * as languageFeatures from '../common/lspLanguageFeatures';
|
||||||
import { createTokenizationSupport } from './tokenization';
|
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 {
|
export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
||||||
const disposables: IDisposable[] = [];
|
const disposables: IDisposable[] = [];
|
||||||
|
|
@ -17,7 +44,9 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
||||||
const client = new WorkerManager(defaults);
|
const client = new WorkerManager(defaults);
|
||||||
disposables.push(client);
|
disposables.push(client);
|
||||||
|
|
||||||
const worker: languageFeatures.WorkerAccessor = (...uris: Uri[]): Promise<JSONWorker> => {
|
const worker: languageFeatures.WorkerAccessor<JSONWorker> = (
|
||||||
|
...uris: Uri[]
|
||||||
|
): Promise<JSONWorker> => {
|
||||||
return client.getLanguageServiceWorker(...uris);
|
return client.getLanguageServiceWorker(...uris);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -30,7 +59,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerDocumentFormattingEditProvider(
|
languages.registerDocumentFormattingEditProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.JSONDocumentFormattingEditProvider(worker)
|
new languageFeatures.DocumentFormattingEditProvider(worker)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -38,7 +67,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerDocumentRangeFormattingEditProvider(
|
languages.registerDocumentRangeFormattingEditProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.JSONDocumentRangeFormattingEditProvider(worker)
|
new languageFeatures.DocumentRangeFormattingEditProvider(worker)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -46,20 +75,20 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerCompletionItemProvider(
|
languages.registerCompletionItemProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.JSONCompletionAdapter(worker)
|
new languageFeatures.CompletionAdapter(worker, [' ', ':', '"'])
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (modeConfiguration.hovers) {
|
if (modeConfiguration.hovers) {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerHoverProvider(languageId, new languageFeatures.JSONHoverAdapter(worker))
|
languages.registerHoverProvider(languageId, new languageFeatures.HoverAdapter(worker))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (modeConfiguration.documentSymbols) {
|
if (modeConfiguration.documentSymbols) {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerDocumentSymbolProvider(
|
languages.registerDocumentSymbolProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.JSONDocumentSymbolAdapter(worker)
|
new languageFeatures.DocumentSymbolAdapter(worker)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -70,7 +99,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerColorProvider(
|
languages.registerColorProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.JSONDocumentColorAdapter(worker)
|
new languageFeatures.DocumentColorAdapter(worker)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -78,18 +107,18 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerFoldingRangeProvider(
|
languages.registerFoldingRangeProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.JSONFoldingRangeAdapter(worker)
|
new languageFeatures.FoldingRangeAdapter(worker)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (modeConfiguration.diagnostics) {
|
if (modeConfiguration.diagnostics) {
|
||||||
providers.push(new languageFeatures.JSONDiagnosticsAdapter(languageId, worker, defaults));
|
providers.push(new JSONDiagnosticsAdapter(languageId, worker, defaults));
|
||||||
}
|
}
|
||||||
if (modeConfiguration.selectionRanges) {
|
if (modeConfiguration.selectionRanges) {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerSelectionRangeProvider(
|
languages.registerSelectionRangeProvider(
|
||||||
languageId,
|
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…
Add table
Add a link
Reference in a new issue