Fix file move for custom editors (#93059)

* Fix rename on custom editors

* - Return disposable for register call
- Use `regsiterWorkingCopyProvider` to implement basic working copy provider
- Adding test

* Update src/vs/workbench/services/workingCopy/common/workingCopyFileService.ts

Co-Authored-By: Benjamin Pasero <benjamin.pasero@gmail.com>

* Update src/vs/workbench/services/workingCopy/common/workingCopyFileService.ts

Co-Authored-By: Benjamin Pasero <benjamin.pasero@gmail.com>

* Update src/vs/workbench/services/workingCopy/common/workingCopyFileService.ts

Co-Authored-By: Benjamin Pasero <benjamin.pasero@gmail.com>

Co-authored-by: Benjamin Pasero <benjamin.pasero@gmail.com>
This commit is contained in:
Matt Bierner
2020-03-27 13:01:04 -07:00
committed by GitHub
parent f2a33672aa
commit c456674fb8
4 changed files with 140 additions and 60 deletions

View File

@@ -11,7 +11,7 @@ import { Disposable, DisposableStore, dispose, IDisposable, IReference } from 'v
import { Schemas } from 'vs/base/common/network';
import { basename } from 'vs/base/common/path';
import { isWeb } from 'vs/base/common/platform';
import { isEqual } from 'vs/base/common/resources';
import { isEqual, isEqualOrParent } from 'vs/base/common/resources';
import { escape } from 'vs/base/common/strings';
import { URI, UriComponents } from 'vs/base/common/uri';
import * as modes from 'vs/editor/common/modes';
@@ -38,6 +38,7 @@ import { ICreateWebViewShowOptions, IWebviewWorkbenchService, WebviewInputOption
import { IEditorGroup, IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService';
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
import { IWorkingCopyFileService } from 'vs/workbench/services/workingCopy/common/workingCopyFileService';
import { IWorkingCopy, IWorkingCopyBackup, IWorkingCopyService, WorkingCopyCapabilities } from 'vs/workbench/services/workingCopy/common/workingCopyService';
import { extHostNamedCustomer } from '../common/extHostCustomers';
@@ -121,6 +122,8 @@ export class MainThreadWebviews extends Disposable implements extHostProtocol.Ma
constructor(
context: extHostProtocol.IExtHostContext,
@IExtensionService extensionService: IExtensionService,
@IWorkingCopyService workingCopyService: IWorkingCopyService,
@IWorkingCopyFileService workingCopyFileService: IWorkingCopyFileService,
@ICustomEditorService private readonly _customEditorService: ICustomEditorService,
@IEditorGroupsService private readonly _editorGroupService: IEditorGroupsService,
@IEditorService private readonly _editorService: IEditorService,
@@ -164,6 +167,20 @@ export class MainThreadWebviews extends Disposable implements extHostProtocol.Ma
},
resolveWebview: () => { throw new Error('not implemented'); }
}));
workingCopyFileService.registerWorkingCopyProvider((editorResource) => {
const matchedWorkingCopies: IWorkingCopy[] = [];
for (const workingCopy of workingCopyService.workingCopies) {
if (workingCopy instanceof MainThreadCustomEditorModel) {
if (isEqualOrParent(editorResource, workingCopy.editorResource)) {
matchedWorkingCopies.push(workingCopy);
}
}
}
return matchedWorkingCopies;
});
}
public $createWebviewPanel(
@@ -595,6 +612,10 @@ class MainThreadCustomEditorModel extends Disposable implements ICustomEditorMod
}
}
get editorResource() {
return this._editorResource;
}
dispose() {
if (this._editable) {
this._undoService.removeElements(this._editorResource);