mirror of
https://github.com/microsoft/monaco-editor.git
synced 2025-12-22 17:25:39 +01:00
Extract a common SelectionRangeAdapter
This commit is contained in:
parent
b49f8ffd5f
commit
8f57069f86
7 changed files with 59 additions and 115 deletions
|
|
@ -956,3 +956,46 @@ function toFoldingRangeKind(
|
||||||
}
|
}
|
||||||
|
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
|
//#region SelectionRangeAdapter
|
||||||
|
|
||||||
|
export interface ILanguageWorkerWithSelectionRanges {
|
||||||
|
getSelectionRanges(uri: string, positions: lsTypes.Position[]): Promise<lsTypes.SelectionRange[]>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class SelectionRangeAdapter<T extends ILanguageWorkerWithSelectionRanges>
|
||||||
|
implements languages.SelectionRangeProvider
|
||||||
|
{
|
||||||
|
constructor(private _worker: WorkerAccessor<T>) {}
|
||||||
|
|
||||||
|
public provideSelectionRanges(
|
||||||
|
model: editor.IReadOnlyModel,
|
||||||
|
positions: Position[],
|
||||||
|
token: CancellationToken
|
||||||
|
): Promise<languages.SelectionRange[][] | undefined> {
|
||||||
|
const resource = model.uri;
|
||||||
|
|
||||||
|
return this._worker(resource)
|
||||||
|
.then((worker) =>
|
||||||
|
worker.getSelectionRanges(
|
||||||
|
resource.toString(),
|
||||||
|
positions.map<lsTypes.Position>(fromPosition)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.then((selectionRanges) => {
|
||||||
|
if (!selectionRanges) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return selectionRanges.map((selectionRange: lsTypes.SelectionRange | undefined) => {
|
||||||
|
const result: languages.SelectionRange[] = [];
|
||||||
|
while (selectionRange) {
|
||||||
|
result.push({ range: toRange(selectionRange.range) });
|
||||||
|
selectionRange = selectionRange.parent;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//#endregion
|
||||||
|
|
|
||||||
|
|
@ -98,7 +98,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerSelectionRangeProvider(
|
languages.registerSelectionRangeProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.SelectionRangeAdapter(worker)
|
new languageFeatures.CSSSelectionRangeAdapter(worker)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,12 +5,9 @@
|
||||||
|
|
||||||
import { LanguageServiceDefaults } from './monaco.contribution';
|
import { LanguageServiceDefaults } from './monaco.contribution';
|
||||||
import type { CSSWorker } from './cssWorker';
|
import type { CSSWorker } from './cssWorker';
|
||||||
import * as lsTypes from 'vscode-languageserver-types';
|
import { Uri } from '../fillers/monaco-editor-core';
|
||||||
import { languages, editor, Uri, Position, CancellationToken } from '../fillers/monaco-editor-core';
|
|
||||||
import {
|
import {
|
||||||
DiagnosticsAdapter,
|
DiagnosticsAdapter,
|
||||||
fromPosition,
|
|
||||||
toRange,
|
|
||||||
CompletionAdapter,
|
CompletionAdapter,
|
||||||
HoverAdapter,
|
HoverAdapter,
|
||||||
DocumentHighlightAdapter,
|
DocumentHighlightAdapter,
|
||||||
|
|
@ -19,7 +16,8 @@ import {
|
||||||
RenameAdapter,
|
RenameAdapter,
|
||||||
DocumentSymbolAdapter,
|
DocumentSymbolAdapter,
|
||||||
DocumentColorAdapter,
|
DocumentColorAdapter,
|
||||||
FoldingRangeAdapter
|
FoldingRangeAdapter,
|
||||||
|
SelectionRangeAdapter
|
||||||
} from '../common/lspLanguageFeatures';
|
} from '../common/lspLanguageFeatures';
|
||||||
|
|
||||||
export interface WorkerAccessor {
|
export interface WorkerAccessor {
|
||||||
|
|
@ -54,35 +52,4 @@ export class CSSDocumentColorAdapter extends DocumentColorAdapter<CSSWorker> {}
|
||||||
|
|
||||||
export class CSSFoldingRangeAdapter extends FoldingRangeAdapter<CSSWorker> {}
|
export class CSSFoldingRangeAdapter extends FoldingRangeAdapter<CSSWorker> {}
|
||||||
|
|
||||||
export class SelectionRangeAdapter implements languages.SelectionRangeProvider {
|
export class CSSSelectionRangeAdapter extends SelectionRangeAdapter<CSSWorker> {}
|
||||||
constructor(private _worker: WorkerAccessor) {}
|
|
||||||
|
|
||||||
public provideSelectionRanges(
|
|
||||||
model: editor.IReadOnlyModel,
|
|
||||||
positions: Position[],
|
|
||||||
token: CancellationToken
|
|
||||||
): Promise<languages.SelectionRange[][] | undefined> {
|
|
||||||
const resource = model.uri;
|
|
||||||
|
|
||||||
return this._worker(resource)
|
|
||||||
.then((worker) =>
|
|
||||||
worker.getSelectionRanges(
|
|
||||||
resource.toString(),
|
|
||||||
positions.map<lsTypes.Position>(fromPosition)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.then((selectionRanges) => {
|
|
||||||
if (!selectionRanges) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
return selectionRanges.map((selectionRange: lsTypes.SelectionRange | undefined) => {
|
|
||||||
const result: languages.SelectionRange[] = [];
|
|
||||||
while (selectionRange) {
|
|
||||||
result.push({ range: toRange(selectionRange.range) });
|
|
||||||
selectionRange = selectionRange.parent;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ export function setupMode1(defaults: LanguageServiceDefaults): void {
|
||||||
);
|
);
|
||||||
languages.registerSelectionRangeProvider(
|
languages.registerSelectionRangeProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.SelectionRangeAdapter(worker)
|
new languageFeatures.HTMLSelectionRangeAdapter(worker)
|
||||||
);
|
);
|
||||||
languages.registerRenameProvider(languageId, new languageFeatures.HTMLRenameAdapter(worker));
|
languages.registerRenameProvider(languageId, new languageFeatures.HTMLRenameAdapter(worker));
|
||||||
|
|
||||||
|
|
@ -127,7 +127,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerSelectionRangeProvider(
|
languages.registerSelectionRangeProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.SelectionRangeAdapter(worker)
|
new languageFeatures.HTMLSelectionRangeAdapter(worker)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,8 @@
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
import type { HTMLWorker } from './htmlWorker';
|
import type { HTMLWorker } from './htmlWorker';
|
||||||
import * as lsTypes from 'vscode-languageserver-types';
|
import { Uri } from '../fillers/monaco-editor-core';
|
||||||
import { languages, editor, Uri, Position, CancellationToken } from '../fillers/monaco-editor-core';
|
|
||||||
import {
|
import {
|
||||||
fromPosition,
|
|
||||||
toRange,
|
|
||||||
CompletionAdapter,
|
CompletionAdapter,
|
||||||
HoverAdapter,
|
HoverAdapter,
|
||||||
DocumentHighlightAdapter,
|
DocumentHighlightAdapter,
|
||||||
|
|
@ -17,7 +14,8 @@ import {
|
||||||
DocumentLinkAdapter,
|
DocumentLinkAdapter,
|
||||||
DocumentFormattingEditProvider,
|
DocumentFormattingEditProvider,
|
||||||
DocumentRangeFormattingEditProvider,
|
DocumentRangeFormattingEditProvider,
|
||||||
FoldingRangeAdapter
|
FoldingRangeAdapter,
|
||||||
|
SelectionRangeAdapter
|
||||||
} from '../common/lspLanguageFeatures';
|
} from '../common/lspLanguageFeatures';
|
||||||
|
|
||||||
export interface WorkerAccessor {
|
export interface WorkerAccessor {
|
||||||
|
|
@ -46,35 +44,4 @@ export class HTMLDocumentRangeFormattingEditProvider extends DocumentRangeFormat
|
||||||
|
|
||||||
export class HTMLFoldingRangeAdapter extends FoldingRangeAdapter<HTMLWorker> {}
|
export class HTMLFoldingRangeAdapter extends FoldingRangeAdapter<HTMLWorker> {}
|
||||||
|
|
||||||
export class SelectionRangeAdapter implements languages.SelectionRangeProvider {
|
export class HTMLSelectionRangeAdapter extends SelectionRangeAdapter<HTMLWorker> {}
|
||||||
constructor(private _worker: WorkerAccessor) {}
|
|
||||||
|
|
||||||
public provideSelectionRanges(
|
|
||||||
model: editor.IReadOnlyModel,
|
|
||||||
positions: Position[],
|
|
||||||
token: CancellationToken
|
|
||||||
): Promise<languages.SelectionRange[][] | undefined> {
|
|
||||||
const resource = model.uri;
|
|
||||||
|
|
||||||
return this._worker(resource)
|
|
||||||
.then((worker) =>
|
|
||||||
worker.getSelectionRanges(
|
|
||||||
resource.toString(),
|
|
||||||
positions.map<lsTypes.Position>(fromPosition)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.then((selectionRanges) => {
|
|
||||||
if (!selectionRanges) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
return selectionRanges.map((selectionRange: lsTypes.SelectionRange | undefined) => {
|
|
||||||
const result: languages.SelectionRange[] = [];
|
|
||||||
while (selectionRange) {
|
|
||||||
result.push({ range: toRange(selectionRange.range) });
|
|
||||||
selectionRange = selectionRange.parent;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerSelectionRangeProvider(
|
languages.registerSelectionRangeProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.SelectionRangeAdapter(worker)
|
new languageFeatures.JSONSelectionRangeAdapter(worker)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,19 +5,17 @@
|
||||||
|
|
||||||
import { LanguageServiceDefaults } from './monaco.contribution';
|
import { LanguageServiceDefaults } from './monaco.contribution';
|
||||||
import type { JSONWorker } from './jsonWorker';
|
import type { JSONWorker } from './jsonWorker';
|
||||||
import * as lsTypes from 'vscode-languageserver-types';
|
import { editor, Uri } from '../fillers/monaco-editor-core';
|
||||||
import { languages, editor, Uri, Position, CancellationToken } from '../fillers/monaco-editor-core';
|
|
||||||
import {
|
import {
|
||||||
DiagnosticsAdapter,
|
DiagnosticsAdapter,
|
||||||
fromPosition,
|
|
||||||
toRange,
|
|
||||||
CompletionAdapter,
|
CompletionAdapter,
|
||||||
HoverAdapter,
|
HoverAdapter,
|
||||||
DocumentSymbolAdapter,
|
DocumentSymbolAdapter,
|
||||||
DocumentFormattingEditProvider,
|
DocumentFormattingEditProvider,
|
||||||
DocumentRangeFormattingEditProvider,
|
DocumentRangeFormattingEditProvider,
|
||||||
DocumentColorAdapter,
|
DocumentColorAdapter,
|
||||||
FoldingRangeAdapter
|
FoldingRangeAdapter,
|
||||||
|
SelectionRangeAdapter
|
||||||
} from '../common/lspLanguageFeatures';
|
} from '../common/lspLanguageFeatures';
|
||||||
|
|
||||||
export interface WorkerAccessor {
|
export interface WorkerAccessor {
|
||||||
|
|
@ -65,35 +63,4 @@ export class JSONDocumentColorAdapter extends DocumentColorAdapter<JSONWorker> {
|
||||||
|
|
||||||
export class JSONFoldingRangeAdapter extends FoldingRangeAdapter<JSONWorker> {}
|
export class JSONFoldingRangeAdapter extends FoldingRangeAdapter<JSONWorker> {}
|
||||||
|
|
||||||
export class SelectionRangeAdapter implements languages.SelectionRangeProvider {
|
export class JSONSelectionRangeAdapter extends SelectionRangeAdapter<JSONWorker> {}
|
||||||
constructor(private _worker: WorkerAccessor) {}
|
|
||||||
|
|
||||||
public provideSelectionRanges(
|
|
||||||
model: editor.IReadOnlyModel,
|
|
||||||
positions: Position[],
|
|
||||||
token: CancellationToken
|
|
||||||
): Promise<languages.SelectionRange[][] | undefined> {
|
|
||||||
const resource = model.uri;
|
|
||||||
|
|
||||||
return this._worker(resource)
|
|
||||||
.then((worker) =>
|
|
||||||
worker.getSelectionRanges(
|
|
||||||
resource.toString(),
|
|
||||||
positions.map<lsTypes.Position>(fromPosition)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.then((selectionRanges) => {
|
|
||||||
if (!selectionRanges) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
return selectionRanges.map((selectionRange: lsTypes.SelectionRange | undefined) => {
|
|
||||||
const result: languages.SelectionRange[] = [];
|
|
||||||
while (selectionRange) {
|
|
||||||
result.push({ range: toRange(selectionRange.range) });
|
|
||||||
selectionRange = selectionRange.parent;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue