Skip to content

Commit 7aff0c4

Browse files
committed
First cut at showing webview editors in diff views
microsoft#80740
1 parent 8678266 commit 7aff0c4

2 files changed

Lines changed: 42 additions & 2 deletions

File tree

src/vs/workbench/contrib/customEditor/browser/customEditors.ts

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti
1717
import { IQuickInputService, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput';
1818
import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
1919
import { EditorOptions, IEditor, IEditorInput } from 'vs/workbench/common/editor';
20+
import { DiffEditorInput } from 'vs/workbench/common/editor/diffEditorInput';
2021
import { webviewEditorsExtensionPoint } from 'vs/workbench/contrib/customEditor/browser/extensionPoint';
2122
import { CustomEditorDiscretion, CustomEditorInfo, CustomEditorSelector, ICustomEditorService } from 'vs/workbench/contrib/customEditor/common/customEditor';
2223
import { FileEditorInput } from 'vs/workbench/contrib/files/common/editors/fileEditorInput';
@@ -109,13 +110,22 @@ export class CustomEditorService implements ICustomEditorService {
109110
return this.promptOpenWith(resource, options, group);
110111
}
111112

113+
const input = this.createInput(resource, viewType, group);
114+
return this.openEditorForResource(resource, input, options, group);
115+
}
116+
117+
public createInput(
118+
resource: URI,
119+
viewType: string,
120+
group: IEditorGroup | undefined
121+
): CustomFileEditorInput {
112122
const id = generateUuid();
113123
const webview = this.webviewService.createWebviewEditorOverlay(id, {}, {});
114124
const input = this.instantiationService.createInstance(CustomFileEditorInput, resource, viewType, id, new UnownedDisposable(webview));
115125
if (group) {
116126
input.updateGroup(group!.id);
117127
}
118-
return this.openEditorForResource(resource, input, options, group);
128+
return input;
119129
}
120130

121131
private async openEditorForResource(
@@ -159,6 +169,34 @@ export class CustomEditorContribution implements IWorkbenchContribution {
159169
return;
160170
}
161171

172+
if (editor instanceof DiffEditorInput) {
173+
if (editor.modifiedInput instanceof CustomFileEditorInput) {
174+
return;
175+
}
176+
const resource = editor.modifiedInput.getResource();
177+
if (!resource) {
178+
return;
179+
}
180+
181+
const customEditors = distinct([
182+
...this.customEditorService.getUserConfiguredCustomEditors(resource),
183+
...this.customEditorService.getContributedCustomEditors(resource),
184+
], editor => editor.id);
185+
186+
// Always prefer the first editor in the diff editor case
187+
if (customEditors.length > 0) {
188+
return {
189+
override: (async () => {
190+
const newModified = this.customEditorService.createInput(resource, customEditors[0].id, group);
191+
const input = new DiffEditorInput(editor.getName(), editor.getDescription(), editor.originalInput, newModified);
192+
return this.editorService.openEditor(input, { ...options, ignoreOverrides: true }, group);
193+
})(),
194+
};
195+
}
196+
197+
return undefined;
198+
}
199+
162200
const resource = editor.getResource();
163201
if (!resource) {
164202
return;

src/vs/workbench/contrib/customEditor/common/customEditor.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import { URI } from 'vs/base/common/uri';
77
import { ITextEditorOptions } from 'vs/platform/editor/common/editor';
88
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
9-
import { IEditor } from 'vs/workbench/common/editor';
9+
import { EditorInput, IEditor } from 'vs/workbench/common/editor';
1010
import { IEditorGroup } from 'vs/workbench/services/editor/common/editorGroupsService';
1111

1212

@@ -18,6 +18,8 @@ export interface ICustomEditorService {
1818
getContributedCustomEditors(resource: URI): readonly CustomEditorInfo[];
1919
getUserConfiguredCustomEditors(resource: URI): readonly CustomEditorInfo[];
2020

21+
createInput(resource: URI, viewType: string, group: IEditorGroup | undefined): EditorInput;
22+
2123
openWith(resource: URI, customEditorViewType: string, options?: ITextEditorOptions, group?: IEditorGroup): Promise<IEditor | undefined>;
2224
promptOpenWith(resource: URI, options?: ITextEditorOptions, group?: IEditorGroup): Promise<IEditor | undefined>;
2325
}

0 commit comments

Comments
 (0)