Skip to content

Commit

Permalink
add WorkspaceEditMetadata and use it for applyEdit, (#160996)
Browse files Browse the repository at this point in the history
* add `WorkspaceEditMetadata` and use it for `applyEdit`,

#112109

* fix compilo in tests

* workspace edits from updating paths are marked as refactoring fyi @mjbvz
  • Loading branch information
jrieken committed Sep 16, 2022
1 parent ec56ddd commit 77309b3
Show file tree
Hide file tree
Showing 7 changed files with 24 additions and 13 deletions.
3 changes: 2 additions & 1 deletion extensions/typescript-language-features/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
"aiKey": "0c6ae279ed8443289764825290e4f9e2-1a736e7c-1324-4338-be46-fc2a58ae4d14-7255",
"enabledApiProposals": [
"resolvers",
"workspaceTrust"
"workspaceTrust",
"workspaceEditIsRefactoring"
],
"capabilities": {
"virtualWorkspaces": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ class UpdateImportsOnFileRenameHandler extends Disposable {

if (edits.size) {
if (await this.confirmActionWithUser(resourcesBeingRenamed)) {
await vscode.workspace.applyEdit(edits);
await vscode.workspace.applyEdit(edits, { isRefactoring: true });
}
}
}
Expand Down
1 change: 1 addition & 0 deletions extensions/typescript-language-features/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
"src/**/*",
"../../src/vscode-dts/vscode.d.ts",
"../../src/vscode-dts/vscode.proposed.inlayHints.d.ts",
"../../src/vscode-dts/vscode.proposed.workspaceEditIsRefactoring.d.ts",
"../../src/vscode-dts/vscode.proposed.languageStatus.d.ts",
"../../src/vscode-dts/vscode.proposed.resolvers.d.ts",
"../../src/vscode-dts/vscode.proposed.workspaceTrust.d.ts",
Expand Down
4 changes: 2 additions & 2 deletions src/vs/workbench/api/common/extHost.api.impl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -865,8 +865,8 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
saveAll: (includeUntitled?) => {
return extHostWorkspace.saveAll(includeUntitled);
},
applyEdit(edit: vscode.WorkspaceEdit, isRefactoring?: boolean): Thenable<boolean> {
return extHostBulkEdits.applyWorkspaceEdit(edit, extension, isRefactoring);
applyEdit(edit: vscode.WorkspaceEdit, metadata?: vscode.WorkspaceEditMetadata): Thenable<boolean> {
return extHostBulkEdits.applyWorkspaceEdit(edit, extension, metadata);
},
createFileSystemWatcher: (pattern, ignoreCreate, ignoreChange, ignoreDelete): vscode.FileSystemWatcher => {
return extHostFileSystemEvent.createFileSystemWatcher(extHostWorkspace, extension, pattern, ignoreCreate, ignoreChange, ignoreDelete);
Expand Down
8 changes: 4 additions & 4 deletions src/vs/workbench/api/common/extHostBulkEdits.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,13 @@ export class ExtHostBulkEdits {
};
}

applyWorkspaceEdit(edit: vscode.WorkspaceEdit, extension: IExtensionDescription, isRefactoring?: boolean): Promise<boolean> {
applyWorkspaceEdit(edit: vscode.WorkspaceEdit, extension: IExtensionDescription, metadata: vscode.WorkspaceEditMetadata | undefined): Promise<boolean> {
const allowIsRefactoring = isProposedApiEnabled(extension, 'workspaceEditIsRefactoring');
if (isRefactoring && !allowIsRefactoring) {
if (metadata && !allowIsRefactoring) {
console.warn(`Extension '${extension.identifier.value}' uses a proposed API 'workspaceEditIsRefactoring' which is NOT enabled for it`);
isRefactoring = undefined;
metadata = undefined;
}
const dto = WorkspaceEdit.from(edit, this._versionInformationProvider);
return this._proxy.$tryApplyWorkspaceEdit(dto, undefined, isRefactoring);
return this._proxy.$tryApplyWorkspaceEdit(dto, undefined, metadata?.isRefactoring ?? false);
}
}
4 changes: 2 additions & 2 deletions src/vs/workbench/api/test/browser/extHostBulkEdits.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ suite('ExtHostBulkEdits.applyWorkspaceEdit', () => {
test('uses version id if document available', async () => {
const edit = new extHostTypes.WorkspaceEdit();
edit.replace(resource, new extHostTypes.Range(0, 0, 0, 0), 'hello');
await bulkEdits.applyWorkspaceEdit(edit, nullExtensionDescription);
await bulkEdits.applyWorkspaceEdit(edit, nullExtensionDescription, undefined);
assert.strictEqual(workspaceResourceEdits.edits.length, 1);
const [first] = workspaceResourceEdits.edits;
assert.strictEqual((<IWorkspaceTextEditDto>first).versionId, 1337);
Expand All @@ -55,7 +55,7 @@ suite('ExtHostBulkEdits.applyWorkspaceEdit', () => {
test('does not use version id if document is not available', async () => {
const edit = new extHostTypes.WorkspaceEdit();
edit.replace(URI.parse('foo:bar2'), new extHostTypes.Range(0, 0, 0, 0), 'hello');
await bulkEdits.applyWorkspaceEdit(edit, nullExtensionDescription);
await bulkEdits.applyWorkspaceEdit(edit, nullExtensionDescription, undefined);
assert.strictEqual(workspaceResourceEdits.edits.length, 1);
const [first] = workspaceResourceEdits.edits;
assert.ok(typeof (<IWorkspaceTextEditDto>first).versionId === 'undefined');
Expand Down
15 changes: 12 additions & 3 deletions src/vscode-dts/vscode.proposed.workspaceEditIsRefactoring.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,21 @@ declare module 'vscode' {

// https://github.com/microsoft/vscode/issues/112109

/**
* Additional data about a workspace edit.
*/
export interface WorkspaceEditMetadata {
/**
* Signal to the editor that this edit is a refactoring.
*/
isRefactoring?: boolean;
}

export namespace workspace {

/**
*
* @param isRefactoring Signal to the editor that this edit is a refactoring.
* @param metadata Optional {@link WorkspaceEditMetadata metadata} for the edit.
*/
export function applyEdit(edit: WorkspaceEdit, isRefactoring?: boolean): Thenable<boolean>;
export function applyEdit(edit: WorkspaceEdit, metadata?: WorkspaceEditMetadata): Thenable<boolean>;
}
}

0 comments on commit 77309b3

Please sign in to comment.