mirror of
https://github.com/microsoft/monaco-editor.git
synced 2025-12-23 00:22:56 +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
|
||||
|
||||
//#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) {
|
||||
providers.push(
|
||||
languages.registerRenameProvider(languageId, new languageFeatures.RenameAdapter(worker))
|
||||
languages.registerRenameProvider(languageId, new languageFeatures.CSSRenameAdapter(worker))
|
||||
);
|
||||
}
|
||||
if (modeConfiguration.colors) {
|
||||
|
|
|
|||
|
|
@ -17,7 +17,8 @@ import {
|
|||
HoverAdapter,
|
||||
DocumentHighlightAdapter,
|
||||
DefinitionAdapter,
|
||||
ReferenceAdapter
|
||||
ReferenceAdapter,
|
||||
RenameAdapter
|
||||
} from '../common/lspLanguageFeatures';
|
||||
|
||||
export interface WorkerAccessor {
|
||||
|
|
@ -44,50 +45,7 @@ export class CSSDefinitionAdapter extends DefinitionAdapter<CSSWorker> {}
|
|||
|
||||
export class CSSReferenceAdapter extends ReferenceAdapter<CSSWorker> {}
|
||||
|
||||
// --- rename ------
|
||||
|
||||
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);
|
||||
});
|
||||
}
|
||||
}
|
||||
export class CSSRenameAdapter extends RenameAdapter<CSSWorker> {}
|
||||
|
||||
// --- document symbols ------
|
||||
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ export function setupMode1(defaults: LanguageServiceDefaults): void {
|
|||
languageId,
|
||||
new languageFeatures.SelectionRangeAdapter(worker)
|
||||
);
|
||||
languages.registerRenameProvider(languageId, new languageFeatures.RenameAdapter(worker));
|
||||
languages.registerRenameProvider(languageId, new languageFeatures.HTMLRenameAdapter(worker));
|
||||
|
||||
// only html
|
||||
if (languageId === 'html') {
|
||||
|
|
@ -109,7 +109,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
|||
}
|
||||
if (modeConfiguration.rename) {
|
||||
providers.push(
|
||||
languages.registerRenameProvider(languageId, new languageFeatures.RenameAdapter(worker))
|
||||
languages.registerRenameProvider(languageId, new languageFeatures.HTMLRenameAdapter(worker))
|
||||
);
|
||||
}
|
||||
if (modeConfiguration.foldingRanges) {
|
||||
|
|
|
|||
|
|
@ -20,7 +20,8 @@ import {
|
|||
fromRange,
|
||||
CompletionAdapter,
|
||||
HoverAdapter,
|
||||
DocumentHighlightAdapter
|
||||
DocumentHighlightAdapter,
|
||||
RenameAdapter
|
||||
} from '../common/lspLanguageFeatures';
|
||||
|
||||
export interface WorkerAccessor {
|
||||
|
|
@ -35,52 +36,9 @@ export class HTMLCompletionAdapter extends CompletionAdapter<HTMLWorker> {
|
|||
|
||||
export class HTMLHoverAdapter extends HoverAdapter<HTMLWorker> {}
|
||||
|
||||
// --- document highlights ------
|
||||
|
||||
export class HTMLDocumentHighlightAdapter extends DocumentHighlightAdapter<HTMLWorker> {}
|
||||
|
||||
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);
|
||||
});
|
||||
}
|
||||
}
|
||||
export class HTMLRenameAdapter extends RenameAdapter<HTMLWorker> {}
|
||||
|
||||
// --- document symbols ------
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue