Extract a common RenameAdapter

This commit is contained in:
Alex Dima 2021-11-17 13:53:29 +01:00
parent 4b2441bf66
commit 6e986e8f96
No known key found for this signature in database
GPG key ID: 39563C1504FDD0C9
5 changed files with 66 additions and 93 deletions

View file

@ -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