mirror of
https://github.com/microsoft/monaco-editor.git
synced 2025-12-22 22:02:55 +01:00
Extract a common RenameAdapter
This commit is contained in:
parent
4b2441bf66
commit
6e986e8f96
5 changed files with 66 additions and 93 deletions
|
|
@ -589,3 +589,60 @@ export class ReferenceAdapter<T extends ILanguageWorkerWithReferences>
|
||||||
}
|
}
|
||||||
|
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
|
//#region RenameAdapter
|
||||||
|
|
||||||
|
export interface ILanguageWorkerWithRename {
|
||||||
|
doRename(
|
||||||
|
uri: string,
|
||||||
|
position: lsTypes.Position,
|
||||||
|
newName: string
|
||||||
|
): Promise<lsTypes.WorkspaceEdit>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class RenameAdapter<T extends ILanguageWorkerWithRename>
|
||||||
|
implements languages.RenameProvider
|
||||||
|
{
|
||||||
|
constructor(private readonly _worker: WorkerAccessor<T>) {}
|
||||||
|
|
||||||
|
provideRenameEdits(
|
||||||
|
model: editor.IReadOnlyModel,
|
||||||
|
position: Position,
|
||||||
|
newName: string,
|
||||||
|
token: CancellationToken
|
||||||
|
): Promise<languages.WorkspaceEdit> {
|
||||||
|
const resource = model.uri;
|
||||||
|
|
||||||
|
return this._worker(resource)
|
||||||
|
.then((worker) => {
|
||||||
|
return worker.doRename(resource.toString(), fromPosition(position), newName);
|
||||||
|
})
|
||||||
|
.then((edit) => {
|
||||||
|
return toWorkspaceEdit(edit);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function toWorkspaceEdit(edit: lsTypes.WorkspaceEdit): languages.WorkspaceEdit {
|
||||||
|
if (!edit || !edit.changes) {
|
||||||
|
return void 0;
|
||||||
|
}
|
||||||
|
let resourceEdits: languages.WorkspaceTextEdit[] = [];
|
||||||
|
for (let uri in edit.changes) {
|
||||||
|
const _uri = Uri.parse(uri);
|
||||||
|
for (let e of edit.changes[uri]) {
|
||||||
|
resourceEdits.push({
|
||||||
|
resource: _uri,
|
||||||
|
edit: {
|
||||||
|
range: toRange(e.range),
|
||||||
|
text: e.newText
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
edits: resourceEdits
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
//#endregion
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
||||||
}
|
}
|
||||||
if (modeConfiguration.rename) {
|
if (modeConfiguration.rename) {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerRenameProvider(languageId, new languageFeatures.RenameAdapter(worker))
|
languages.registerRenameProvider(languageId, new languageFeatures.CSSRenameAdapter(worker))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (modeConfiguration.colors) {
|
if (modeConfiguration.colors) {
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,8 @@ import {
|
||||||
HoverAdapter,
|
HoverAdapter,
|
||||||
DocumentHighlightAdapter,
|
DocumentHighlightAdapter,
|
||||||
DefinitionAdapter,
|
DefinitionAdapter,
|
||||||
ReferenceAdapter
|
ReferenceAdapter,
|
||||||
|
RenameAdapter
|
||||||
} from '../common/lspLanguageFeatures';
|
} from '../common/lspLanguageFeatures';
|
||||||
|
|
||||||
export interface WorkerAccessor {
|
export interface WorkerAccessor {
|
||||||
|
|
@ -44,50 +45,7 @@ export class CSSDefinitionAdapter extends DefinitionAdapter<CSSWorker> {}
|
||||||
|
|
||||||
export class CSSReferenceAdapter extends ReferenceAdapter<CSSWorker> {}
|
export class CSSReferenceAdapter extends ReferenceAdapter<CSSWorker> {}
|
||||||
|
|
||||||
// --- rename ------
|
export class CSSRenameAdapter extends RenameAdapter<CSSWorker> {}
|
||||||
|
|
||||||
function toWorkspaceEdit(edit: lsTypes.WorkspaceEdit): languages.WorkspaceEdit {
|
|
||||||
if (!edit || !edit.changes) {
|
|
||||||
return void 0;
|
|
||||||
}
|
|
||||||
let resourceEdits: languages.WorkspaceTextEdit[] = [];
|
|
||||||
for (let uri in edit.changes) {
|
|
||||||
const _uri = Uri.parse(uri);
|
|
||||||
for (let e of edit.changes[uri]) {
|
|
||||||
resourceEdits.push({
|
|
||||||
resource: _uri,
|
|
||||||
edit: {
|
|
||||||
range: toRange(e.range),
|
|
||||||
text: e.newText
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
edits: resourceEdits
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export class RenameAdapter implements languages.RenameProvider {
|
|
||||||
constructor(private _worker: WorkerAccessor) {}
|
|
||||||
|
|
||||||
provideRenameEdits(
|
|
||||||
model: editor.IReadOnlyModel,
|
|
||||||
position: Position,
|
|
||||||
newName: string,
|
|
||||||
token: CancellationToken
|
|
||||||
): Promise<languages.WorkspaceEdit> {
|
|
||||||
const resource = model.uri;
|
|
||||||
|
|
||||||
return this._worker(resource)
|
|
||||||
.then((worker) => {
|
|
||||||
return worker.doRename(resource.toString(), fromPosition(position), newName);
|
|
||||||
})
|
|
||||||
.then((edit) => {
|
|
||||||
return toWorkspaceEdit(edit);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- document symbols ------
|
// --- document symbols ------
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ export function setupMode1(defaults: LanguageServiceDefaults): void {
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.SelectionRangeAdapter(worker)
|
new languageFeatures.SelectionRangeAdapter(worker)
|
||||||
);
|
);
|
||||||
languages.registerRenameProvider(languageId, new languageFeatures.RenameAdapter(worker));
|
languages.registerRenameProvider(languageId, new languageFeatures.HTMLRenameAdapter(worker));
|
||||||
|
|
||||||
// only html
|
// only html
|
||||||
if (languageId === 'html') {
|
if (languageId === 'html') {
|
||||||
|
|
@ -109,7 +109,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
||||||
}
|
}
|
||||||
if (modeConfiguration.rename) {
|
if (modeConfiguration.rename) {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerRenameProvider(languageId, new languageFeatures.RenameAdapter(worker))
|
languages.registerRenameProvider(languageId, new languageFeatures.HTMLRenameAdapter(worker))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (modeConfiguration.foldingRanges) {
|
if (modeConfiguration.foldingRanges) {
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,8 @@ import {
|
||||||
fromRange,
|
fromRange,
|
||||||
CompletionAdapter,
|
CompletionAdapter,
|
||||||
HoverAdapter,
|
HoverAdapter,
|
||||||
DocumentHighlightAdapter
|
DocumentHighlightAdapter,
|
||||||
|
RenameAdapter
|
||||||
} from '../common/lspLanguageFeatures';
|
} from '../common/lspLanguageFeatures';
|
||||||
|
|
||||||
export interface WorkerAccessor {
|
export interface WorkerAccessor {
|
||||||
|
|
@ -35,52 +36,9 @@ export class HTMLCompletionAdapter extends CompletionAdapter<HTMLWorker> {
|
||||||
|
|
||||||
export class HTMLHoverAdapter extends HoverAdapter<HTMLWorker> {}
|
export class HTMLHoverAdapter extends HoverAdapter<HTMLWorker> {}
|
||||||
|
|
||||||
// --- document highlights ------
|
|
||||||
|
|
||||||
export class HTMLDocumentHighlightAdapter extends DocumentHighlightAdapter<HTMLWorker> {}
|
export class HTMLDocumentHighlightAdapter extends DocumentHighlightAdapter<HTMLWorker> {}
|
||||||
|
|
||||||
function toWorkspaceEdit(edit: lsTypes.WorkspaceEdit): languages.WorkspaceEdit {
|
export class HTMLRenameAdapter extends RenameAdapter<HTMLWorker> {}
|
||||||
if (!edit || !edit.changes) {
|
|
||||||
return void 0;
|
|
||||||
}
|
|
||||||
let resourceEdits: languages.WorkspaceTextEdit[] = [];
|
|
||||||
for (let uri in edit.changes) {
|
|
||||||
const _uri = Uri.parse(uri);
|
|
||||||
for (let e of edit.changes[uri]) {
|
|
||||||
resourceEdits.push({
|
|
||||||
resource: _uri,
|
|
||||||
edit: {
|
|
||||||
range: toRange(e.range),
|
|
||||||
text: e.newText
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
edits: resourceEdits
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export class RenameAdapter implements languages.RenameProvider {
|
|
||||||
constructor(private _worker: WorkerAccessor) {}
|
|
||||||
|
|
||||||
provideRenameEdits(
|
|
||||||
model: editor.IReadOnlyModel,
|
|
||||||
position: Position,
|
|
||||||
newName: string,
|
|
||||||
token: CancellationToken
|
|
||||||
): Promise<languages.WorkspaceEdit> {
|
|
||||||
const resource = model.uri;
|
|
||||||
|
|
||||||
return this._worker(resource)
|
|
||||||
.then((worker) => {
|
|
||||||
return worker.doRename(resource.toString(), fromPosition(position), newName);
|
|
||||||
})
|
|
||||||
.then((edit) => {
|
|
||||||
return toWorkspaceEdit(edit);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- document symbols ------
|
// --- document symbols ------
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue