Skip to content

Commit b1c54c1

Browse files
author
Benjamin Pasero
committed
editors - introduce methods to get canonical vs original URIs and adopt
1 parent 6bbb3ca commit b1c54c1

33 files changed

Lines changed: 258 additions & 162 deletions

File tree

src/vs/workbench/browser/parts/editor/breadcrumbsControl.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ import { ResourceLabel } from 'vs/workbench/browser/labels';
3838
import { BreadcrumbsConfig, IBreadcrumbsService } from 'vs/workbench/browser/parts/editor/breadcrumbs';
3939
import { BreadcrumbElement, EditorBreadcrumbsModel, FileElement } from 'vs/workbench/browser/parts/editor/breadcrumbsModel';
4040
import { BreadcrumbsPicker, createBreadcrumbsPicker } from 'vs/workbench/browser/parts/editor/breadcrumbsPicker';
41-
import { IEditorPartOptions, toResource, SideBySideEditor } from 'vs/workbench/common/editor';
41+
import { IEditorPartOptions, EditorResourceAccessor, SideBySideEditor } from 'vs/workbench/common/editor';
4242
import { ACTIVE_GROUP, ACTIVE_GROUP_TYPE, IEditorService, SIDE_GROUP, SIDE_GROUP_TYPE } from 'vs/workbench/services/editor/common/editorService';
4343
import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService';
4444
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
@@ -235,7 +235,7 @@ export class BreadcrumbsControl {
235235
this._breadcrumbsDisposables.clear();
236236

237237
// honor diff editors and such
238-
const uri = toResource(this._editorGroup.activeEditor, { supportSideBySide: SideBySideEditor.PRIMARY });
238+
const uri = EditorResourceAccessor.getCanonicalUri(this._editorGroup.activeEditor, { supportSideBySide: SideBySideEditor.PRIMARY });
239239

240240
if (!uri || !this._fileService.canHandleResource(uri)) {
241241
// cleanup and return when there is no input or when
@@ -250,7 +250,7 @@ export class BreadcrumbsControl {
250250
}
251251

252252
// display uri which can be derived from certain inputs
253-
const fileInfoUri = toResource(this._editorGroup.activeEditor, { supportSideBySide: SideBySideEditor.PRIMARY, usePreferredResource: true });
253+
const fileInfoUri = EditorResourceAccessor.getOriginalUri(this._editorGroup.activeEditor, { supportSideBySide: SideBySideEditor.PRIMARY });
254254

255255
this.domNode.classList.toggle('hidden', false);
256256
this._ckBreadcrumbsVisible.set(true);

src/vs/workbench/browser/parts/editor/editorGroupView.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import 'vs/css!./media/editorgroupview';
77
import { EditorGroup, IEditorOpenOptions, EditorCloseEvent, ISerializedEditorGroup, isSerializedEditorGroup } from 'vs/workbench/common/editor/editorGroup';
8-
import { EditorInput, EditorOptions, GroupIdentifier, SideBySideEditorInput, CloseDirection, IEditorCloseEvent, ActiveEditorDirtyContext, IEditorPane, EditorGroupEditorsCountContext, SaveReason, IEditorPartOptionsChangeEvent, EditorsOrder, IVisibleEditorPane, ActiveEditorStickyContext, ActiveEditorPinnedContext, Deprecated_EditorPinnedContext, Deprecated_EditorDirtyContext, toResource } from 'vs/workbench/common/editor';
8+
import { EditorInput, EditorOptions, GroupIdentifier, SideBySideEditorInput, CloseDirection, IEditorCloseEvent, ActiveEditorDirtyContext, IEditorPane, EditorGroupEditorsCountContext, SaveReason, IEditorPartOptionsChangeEvent, EditorsOrder, IVisibleEditorPane, ActiveEditorStickyContext, ActiveEditorPinnedContext, Deprecated_EditorPinnedContext, Deprecated_EditorDirtyContext, EditorResourceAccessor } from 'vs/workbench/common/editor';
99
import { Event, Emitter, Relay } from 'vs/base/common/event';
1010
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
1111
import { Dimension, trackFocus, addDisposableListener, EventType, EventHelper, findParentWithClass, clearNode, isAncestor } from 'vs/base/browser/dom';
@@ -575,7 +575,7 @@ export class EditorGroupView extends Themable implements IEditorGroupView {
575575
private toEditorTelemetryDescriptor(editor: EditorInput): object {
576576
const descriptor = editor.getTelemetryDescriptor();
577577

578-
const resource = toResource(editor, { usePreferredResource: true });
578+
const resource = EditorResourceAccessor.getOriginalUri(editor);
579579
const path = resource ? resource.scheme === Schemas.file ? resource.fsPath : resource.path : undefined;
580580
if (resource && path) {
581581
descriptor['resource'] = { mimeType: guessMimeTypes(resource).join(', '), scheme: resource.scheme, ext: extname(resource), path: hash(path) };

src/vs/workbench/browser/parts/editor/editorQuickAccess.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { localize } from 'vs/nls';
88
import { IQuickPickSeparator, quickPickItemScorerAccessor, IQuickPickItemWithResource, IQuickPick } from 'vs/platform/quickinput/common/quickInput';
99
import { PickerQuickAccessProvider, IPickerQuickAccessItem, TriggerAction } from 'vs/platform/quickinput/browser/pickerQuickAccess';
1010
import { IEditorGroupsService, GroupsOrder } from 'vs/workbench/services/editor/common/editorGroupsService';
11-
import { EditorsOrder, IEditorIdentifier, toResource, SideBySideEditor, GroupIdentifier } from 'vs/workbench/common/editor';
11+
import { EditorsOrder, IEditorIdentifier, EditorResourceAccessor, SideBySideEditor, GroupIdentifier } from 'vs/workbench/common/editor';
1212
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
1313
import { IModelService } from 'vs/editor/common/services/modelService';
1414
import { IModeService } from 'vs/editor/common/services/modeService';
@@ -137,7 +137,7 @@ export abstract class BaseEditorQuickAccessProvider extends PickerQuickAccessPro
137137
}
138138

139139
return this.doGetEditors().map(({ editor, groupId }): IEditorQuickPickItem => {
140-
const resource = toResource(editor, { supportSideBySide: SideBySideEditor.PRIMARY, usePreferredResource: true });
140+
const resource = EditorResourceAccessor.getOriginalUri(editor, { supportSideBySide: SideBySideEditor.PRIMARY });
141141
const isDirty = editor.isDirty() && !editor.isSaving();
142142
const description = editor.getDescription();
143143
const nameAndDescription = description ? `${editor.getName()} ${description}` : editor.getName();

src/vs/workbench/browser/parts/editor/editorStatus.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { URI } from 'vs/base/common/uri';
1313
import { Action } from 'vs/base/common/actions';
1414
import { Language } from 'vs/base/common/platform';
1515
import { UntitledTextEditorInput } from 'vs/workbench/services/untitled/common/untitledTextEditorInput';
16-
import { IFileEditorInput, EncodingMode, IEncodingSupport, toResource, SideBySideEditorInput, IEditorPane, IEditorInput, SideBySideEditor, IModeSupport } from 'vs/workbench/common/editor';
16+
import { IFileEditorInput, EncodingMode, IEncodingSupport, EditorResourceAccessor, SideBySideEditorInput, IEditorPane, IEditorInput, SideBySideEditor, IModeSupport } from 'vs/workbench/common/editor';
1717
import { Disposable, MutableDisposable, DisposableStore } from 'vs/base/common/lifecycle';
1818
import { IEditorAction } from 'vs/editor/common/editorCommon';
1919
import { EndOfLineSequence } from 'vs/editor/common/model';
@@ -867,7 +867,7 @@ export class EditorStatus extends Disposable implements IWorkbenchContribution {
867867
private onResourceEncodingChange(resource: URI): void {
868868
const activeEditorPane = this.editorService.activeEditorPane;
869869
if (activeEditorPane) {
870-
const activeResource = toResource(activeEditorPane.input, { supportSideBySide: SideBySideEditor.PRIMARY });
870+
const activeResource = EditorResourceAccessor.getCanonicalUri(activeEditorPane.input, { supportSideBySide: SideBySideEditor.PRIMARY });
871871
if (activeResource && isEqual(activeResource, resource)) {
872872
const activeCodeEditor = withNullAsUndefined(getCodeEditor(activeEditorPane.getControl()));
873873

@@ -1059,7 +1059,7 @@ export class ChangeModeAction extends Action {
10591059
}
10601060

10611061
const textModel = activeTextEditorControl.getModel();
1062-
const resource = this.editorService.activeEditor ? toResource(this.editorService.activeEditor, { supportSideBySide: SideBySideEditor.PRIMARY, usePreferredResource: true }) : null;
1062+
const resource = EditorResourceAccessor.getOriginalUri(this.editorService.activeEditor, { supportSideBySide: SideBySideEditor.PRIMARY });
10631063

10641064
let hasLanguageSupport = !!resource;
10651065
if (resource?.scheme === Schemas.untitled && !this.textFileService.untitled.get(resource)?.hasAssociatedFilePath) {
@@ -1157,7 +1157,7 @@ export class ChangeModeAction extends Action {
11571157
let languageSelection: ILanguageSelection | undefined;
11581158
if (pick === autoDetectMode) {
11591159
if (textModel) {
1160-
const resource = toResource(activeEditor, { supportSideBySide: SideBySideEditor.PRIMARY, usePreferredResource: true });
1160+
const resource = EditorResourceAccessor.getOriginalUri(activeEditor, { supportSideBySide: SideBySideEditor.PRIMARY });
11611161
if (resource) {
11621162
languageSelection = this.modeService.createByFilepathOrFirstLine(resource, textModel.getLineContent(1));
11631163
}
@@ -1336,7 +1336,7 @@ export class ChangeEncodingAction extends Action {
13361336

13371337
await timeout(50); // quick input is sensitive to being opened so soon after another
13381338

1339-
const resource = toResource(activeEditorPane.input, { supportSideBySide: SideBySideEditor.PRIMARY, usePreferredResource: true });
1339+
const resource = EditorResourceAccessor.getOriginalUri(activeEditorPane.input, { supportSideBySide: SideBySideEditor.PRIMARY });
13401340
if (!resource || (!this.fileService.canHandleResource(resource) && resource.scheme !== Schemas.untitled)) {
13411341
return; // encoding detection only possible for resources the file service can handle or that are untitled
13421342
}

src/vs/workbench/browser/parts/editor/editorsObserver.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import { IEditorInput, IEditorInputFactoryRegistry, IEditorIdentifier, GroupIdentifier, Extensions, IEditorPartOptionsChangeEvent, EditorsOrder, toResource, SideBySideEditor } from 'vs/workbench/common/editor';
6+
import { IEditorInput, IEditorInputFactoryRegistry, IEditorIdentifier, GroupIdentifier, Extensions, IEditorPartOptionsChangeEvent, EditorsOrder, EditorResourceAccessor, SideBySideEditor } from 'vs/workbench/common/editor';
77
import { dispose, Disposable, DisposableStore } from 'vs/base/common/lifecycle';
88
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
99
import { Registry } from 'vs/platform/registry/common/platform';
@@ -185,7 +185,7 @@ export class EditorsObserver extends Disposable {
185185
}
186186

187187
private updateEditorResourcesMap(editor: IEditorInput, add: boolean): void {
188-
const resource = toResource(editor, { supportSideBySide: SideBySideEditor.PRIMARY });
188+
const resource = EditorResourceAccessor.getCanonicalUri(editor, { supportSideBySide: SideBySideEditor.PRIMARY });
189189
if (!resource) {
190190
return; // require a resource
191191
}

src/vs/workbench/browser/parts/editor/noTabsTitleControl.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import 'vs/css!./media/notabstitlecontrol';
7-
import { toResource, Verbosity, IEditorInput, IEditorPartOptions, SideBySideEditor } from 'vs/workbench/common/editor';
7+
import { EditorResourceAccessor, Verbosity, IEditorInput, IEditorPartOptions, SideBySideEditor } from 'vs/workbench/common/editor';
88
import { TitleControl, IToolbarActions } from 'vs/workbench/browser/parts/editor/titleControl';
99
import { ResourceLabel, IResourceLabel } from 'vs/workbench/browser/labels';
1010
import { TAB_ACTIVE_FOREGROUND, TAB_UNFOCUSED_ACTIVE_FOREGROUND } from 'vs/workbench/common/theme';
@@ -274,7 +274,7 @@ export class NoTabsTitleControl extends TitleControl {
274274

275275
editorLabel.setResource(
276276
{
277-
resource: toResource(editor, { supportSideBySide: SideBySideEditor.BOTH, usePreferredResource: true }),
277+
resource: EditorResourceAccessor.getOriginalUri(editor, { supportSideBySide: SideBySideEditor.BOTH }),
278278
name: editor.getName(),
279279
description
280280
},

src/vs/workbench/browser/parts/editor/tabsTitleControl.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import 'vs/css!./media/tabstitlecontrol';
77
import { isMacintosh, isWindows } from 'vs/base/common/platform';
88
import { shorten } from 'vs/base/common/labels';
9-
import { toResource, GroupIdentifier, IEditorInput, Verbosity, EditorCommandsContextActionRunner, IEditorPartOptions, SideBySideEditor, computeEditorAriaLabel } from 'vs/workbench/common/editor';
9+
import { EditorResourceAccessor, GroupIdentifier, IEditorInput, Verbosity, EditorCommandsContextActionRunner, IEditorPartOptions, SideBySideEditor, computeEditorAriaLabel } from 'vs/workbench/common/editor';
1010
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
1111
import { EventType as TouchEventType, GestureEvent, Gesture } from 'vs/base/browser/touch';
1212
import { KeyCode } from 'vs/base/common/keyCodes';
@@ -1114,12 +1114,12 @@ export class TabsTitleControl extends TitleControl {
11141114

11151115
// Label
11161116
tabLabelWidget.setResource(
1117-
{ name, description, resource: toResource(editor, { supportSideBySide: SideBySideEditor.BOTH, usePreferredResource: true }) },
1117+
{ name, description, resource: EditorResourceAccessor.getOriginalUri(editor, { supportSideBySide: SideBySideEditor.BOTH }) },
11181118
{ title, extraClasses: ['tab-label'], italic: !this.group.isPinned(editor), forceLabel }
11191119
);
11201120

11211121
// Tests helper
1122-
const resource = toResource(editor, { supportSideBySide: SideBySideEditor.PRIMARY, usePreferredResource: true });
1122+
const resource = EditorResourceAccessor.getOriginalUri(editor, { supportSideBySide: SideBySideEditor.PRIMARY });
11231123
if (resource) {
11241124
tabContainer.setAttribute('data-resource-name', basenameOrAuthority(resource));
11251125
} else {

src/vs/workbench/browser/parts/editor/textEditor.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { Event } from 'vs/base/common/event';
1010
import { isObject, assertIsDefined, withNullAsUndefined, isFunction } from 'vs/base/common/types';
1111
import { Dimension } from 'vs/base/browser/dom';
1212
import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditorWidget';
13-
import { EditorInput, EditorOptions, IEditorMemento, ITextEditorPane, TextEditorOptions, IEditorCloseEvent, IEditorInput, computeEditorAriaLabel, IEditorOpenContext, toResource, SideBySideEditor } from 'vs/workbench/common/editor';
13+
import { EditorInput, EditorOptions, IEditorMemento, ITextEditorPane, TextEditorOptions, IEditorCloseEvent, IEditorInput, computeEditorAriaLabel, IEditorOpenContext, EditorResourceAccessor, SideBySideEditor } from 'vs/workbench/common/editor';
1414
import { EditorPane } from 'vs/workbench/browser/parts/editor/editorPane';
1515
import { IEditorViewState, IEditor, ScrollType } from 'vs/editor/common/editorCommon';
1616
import { IStorageService } from 'vs/platform/storage/common/storage';
@@ -236,7 +236,7 @@ export abstract class BaseTextEditor extends EditorPane implements ITextEditorPa
236236

237237
// new editor: check with workbench.editor.restoreViewState setting
238238
if (context?.newInGroup) {
239-
return this.textResourceConfigurationService.getValue<boolean>(toResource(editor, { supportSideBySide: SideBySideEditor.PRIMARY }), 'workbench.editor.restoreViewState') === false ? false : true /* restore by default */;
239+
return this.textResourceConfigurationService.getValue<boolean>(EditorResourceAccessor.getCanonicalUri(editor, { supportSideBySide: SideBySideEditor.PRIMARY }), 'workbench.editor.restoreViewState') === false ? false : true /* restore by default */;
240240
}
241241

242242
// existing editor: always restore viewstate

src/vs/workbench/browser/parts/editor/titleControl.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import { EditorPane } from 'vs/workbench/browser/parts/editor/editorPane';
3232
import { BreadcrumbsConfig } from 'vs/workbench/browser/parts/editor/breadcrumbs';
3333
import { BreadcrumbsControl, IBreadcrumbsControlOptions } from 'vs/workbench/browser/parts/editor/breadcrumbsControl';
3434
import { IEditorGroupsAccessor, IEditorGroupTitleDimensions, IEditorGroupView } from 'vs/workbench/browser/parts/editor/editor';
35-
import { EditorCommandsContextActionRunner, IEditorCommandsContext, IEditorInput, toResource, IEditorPartOptions, SideBySideEditor, ActiveEditorPinnedContext, ActiveEditorStickyContext } from 'vs/workbench/common/editor';
35+
import { EditorCommandsContextActionRunner, IEditorCommandsContext, IEditorInput, EditorResourceAccessor, IEditorPartOptions, SideBySideEditor, ActiveEditorPinnedContext, ActiveEditorStickyContext } from 'vs/workbench/common/editor';
3636
import { ResourceContextKey } from 'vs/workbench/common/resources';
3737
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
3838
import { AnchorAlignment } from 'vs/base/browser/ui/contextview/contextview';
@@ -229,7 +229,7 @@ export abstract class TitleControl extends Themable {
229229

230230
// Update contexts
231231
this.contextKeyService.bufferChangeEvents(() => {
232-
this.resourceContext.set(this.group.activeEditor ? withUndefinedAsNull(toResource(this.group.activeEditor, { supportSideBySide: SideBySideEditor.PRIMARY, usePreferredResource: true })) : null);
232+
this.resourceContext.set(this.group.activeEditor ? withUndefinedAsNull(EditorResourceAccessor.getOriginalUri(this.group.activeEditor, { supportSideBySide: SideBySideEditor.PRIMARY })) : null);
233233
this.editorPinnedContext.set(this.group.activeEditor ? this.group.isPinned(this.group.activeEditor) : false);
234234
this.editorStickyContext.set(this.group.activeEditor ? this.group.isSticky(this.group.activeEditor) : false);
235235
});
@@ -304,7 +304,7 @@ export abstract class TitleControl extends Themable {
304304
}
305305

306306
protected doFillResourceDataTransfers(editor: IEditorInput, e: DragEvent): boolean {
307-
const resource = toResource(editor, { supportSideBySide: SideBySideEditor.PRIMARY, usePreferredResource: true });
307+
const resource = EditorResourceAccessor.getOriginalUri(editor, { supportSideBySide: SideBySideEditor.PRIMARY });
308308
if (!resource) {
309309
return false;
310310
}
@@ -332,7 +332,7 @@ export abstract class TitleControl extends Themable {
332332

333333
// Update contexts based on editor picked and remember previous to restore
334334
const currentResourceContext = this.resourceContext.get();
335-
this.resourceContext.set(withUndefinedAsNull(toResource(editor, { supportSideBySide: SideBySideEditor.PRIMARY, usePreferredResource: true })));
335+
this.resourceContext.set(withUndefinedAsNull(EditorResourceAccessor.getOriginalUri(editor, { supportSideBySide: SideBySideEditor.PRIMARY })));
336336
const currentPinnedContext = !!this.editorPinnedContext.get();
337337
this.editorPinnedContext.set(this.group.isPinned(editor));
338338
const currentStickyContext = !!this.editorStickyContext.get();

src/vs/workbench/browser/parts/titlebar/titlebarPart.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { IConfigurationService, IConfigurationChangeEvent } from 'vs/platform/co
1616
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
1717
import { DisposableStore, dispose } from 'vs/base/common/lifecycle';
1818
import * as nls from 'vs/nls';
19-
import { toResource, Verbosity, SideBySideEditor } from 'vs/workbench/common/editor';
19+
import { EditorResourceAccessor, Verbosity, SideBySideEditor } from 'vs/workbench/common/editor';
2020
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
2121
import { IWorkspaceContextService, WorkbenchState, IWorkspaceFolder } from 'vs/platform/workspace/common/workspace';
2222
import { IThemeService, registerThemingParticipant, IColorTheme, ICssStyleCollector } from 'vs/platform/theme/common/themeService';
@@ -259,7 +259,7 @@ export class TitlebarPart extends Part implements ITitleService {
259259
}
260260

261261
// Compute active editor folder
262-
const editorResource = toResource(editor, { supportSideBySide: SideBySideEditor.PRIMARY, usePreferredResource: true });
262+
const editorResource = EditorResourceAccessor.getOriginalUri(editor, { supportSideBySide: SideBySideEditor.PRIMARY });
263263
let editorFolderResource = editorResource ? dirname(editorResource) : undefined;
264264
if (editorFolderResource?.path === '.') {
265265
editorFolderResource = undefined;

0 commit comments

Comments
 (0)