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

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