8000 Create editor groups from `ViewColumn` as needed (refs #123270) (#157… · microsoft/vscode-python@dced70b · GitHub
[go: up one dir, main page]

Skip to content

Commit dced70b

Browse files
authored
Create editor groups from ViewColumn as needed (refs #123270) (#157640)
* make `createTextEditor` async and create editor groups (refs #123270) * API docs update
1 parent 0eac052 commit dced70b

File tree

15 files changed

+79
-61
lines changed
  • textfile/common
  • 15 files changed

    +79
    -61
    lines changed

    src/vs/workbench/api/browser/mainThreadDocumentsAndEditors.ts

    Lines changed: 3 additions & 3 deletions
    Original file line numberDiff line numberDiff line change
    @@ -31,7 +31,7 @@ import { IPathService } from 'vs/workbench/services/path/common/pathService';
    3131
    import { diffSets, diffMaps } from 'vs/base/common/collections';
    3232
    import { IPaneCompositePartService } from 'vs/workbench/services/panecomposite/browser/panecomposite';
    3333
    import { ViewContainerLocation } from 'vs/workbench/common/views';
    34-
    import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
    34+
    import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
    3535

    3636

    3737
    class TextEditorSnapshot {
    @@ -296,14 +296,14 @@ export class MainThreadDocumentsAndEditors {
    296296
    @IUriIdentityService uriIdentityService: IUriIdentityService,
    297297
    @IClipboardService private readonly _clipboardService: IClipboardService,
    298298
    @IPathService pathService: IPathService,
    299-
    @IInstantiationService instantiationService: IInstantiationService
    299+
    @IConfigurationService configurationService: IConfigurationService
    300300
    ) {
    301301
    this._proxy = extHostContext.getProxy(ExtHostContext.ExtHostDocumentsAndEditors);
    302302

    303303
    this._mainThreadDocuments = this._toDispose.add(new MainThreadDocuments(extHostContext, this._modelService, this._textFileService, fileService, textModelResolverService, environmentService, uriIdentityService, workingCopyFileService, pathService));
    304304
    extHostContext.set(MainContext.MainThreadDocuments, this._mainThreadDocuments);
    305305

    306-
    this._mainThreadEditors = this._toDispose.add(new MainThreadTextEditors(this, extHostContext, codeEditorService, this._editorService, this._editorGroupService));
    306+
    this._mainThreadEditors = this._toDispose.add(new MainThreadTextEditors(this, extHostContext, codeEditorService, this._editorService, this._editorGroupService, configurationService));
    307307
    extHostContext.set(MainContext.MainThreadTextEditors, this._mainThreadEditors);
    308308

    309309
    // It is expected that the ctor of the state computer calls our `_onDelta`.

    src/vs/workbench/api/browser/mainThreadEditorTabs.ts

    Lines changed: 1 addition & 1 deletion
    Original file line numberDiff line numberDiff line change
    @@ -548,7 +548,7 @@ export class MainThreadEditorTabs implements MainThreadEditorTabsShape {
    548548
    }
    549549
    //#region Messages received from Ext Host
    550550
    $moveTab(tabId: string, index: number, viewColumn: EditorGroupColumn, preserveFocus?: boolean): void {
    551-
    const groupId = columnToEditorGroup(this._editorGroupsService, viewColumn);
    551+
    const groupId = columnToEditorGroup(this._editorGroupsService, this._configurationService, viewColumn);
    552552
    const tabInfo = this._tabInfoLookup.get(tabId);
    553553
    const tab = tabInfo?.tab;
    554554
    if (!tab) {

    src/vs/workbench/api/browser/mainThreadEditors.ts

    Lines changed: 7 additions & 5 deletions
    Original file line numberDiff line numberDiff line change
    @@ -13,7 +13,7 @@ import { ISelection } from 'vs/editor/common/core/selection';
    1313
    import { IDecorationOptions, IDecorationRenderOptions } from 'vs/editor/common/editorCommon';
    1414
    import { ISingleEditOperation } from 'vs/editor/common/core/editOperation';
    1515
    import { CommandsRegistry } from 'vs/platform/commands/common/commands';
    16-
    import { ITextEditorOptions, IResourceEditorInput, EditorActivation, EditorResolution } from 'vs/platform/editor/common/editor';
    16+
    import { ITextEditorOptions, IResourceEditorInput, EditorActivation } from 'vs/platform/editor/common/editor';
    1717
    import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
    1818
    import { MainThreadTextEditor } from 'vs/workbench/api/browser/mainThreadEditor';
    1919
    import { ExtHostContext, ExtHostEditorsShape, IApplyEditsOptions, ITextDocumentShowOptions, ITextEditorConfigurationUpdate, ITextEditorPositionData, IUndoStopOptions, MainThreadTextEditorsShape, TextEditorRevealType } from 'vs/workbench/api/common/extHost.protocol';
    @@ -25,8 +25,9 @@ import { IWorkingCopyService } from 'vs/workbench/services/workingCopy/common/wo
    2525
    import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions';
    2626
    import { ILineChange } from 'vs/editor/common/diff/smartLinesDiffComputer';
    2727
    import { IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers';
    28-
    import { IEditorControl } from 'vs/workbench/common/editor';
    28+
    import { DEFAULT_EDITOR_ASSOCIATION, IEditorControl } from 'vs/workbench/common/editor';
    2929
    import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
    30+
    import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
    3031

    3132
    export interface IMainThreadEditorLocator {
    3233
    getEditor(id: string): MainThreadTextEditor | undefined;
    @@ -51,6 +52,7 @@ export class MainThreadTextEditors implements MainThreadTextEditorsShape {
    5152
    @ICodeEditorService private readonly _codeEditorService: ICodeEditorService,
    5253
    @IEditorService private readonly _editorService: IEditorService,
    5354
    @IEditorGroupsService private readonly _editorGroupService: IEditorGroupsService,
    55+
    @IConfigurationService private readonly _configurationService: IConfigurationService
    5456
    ) {
    5557
    this._instanceId = String(++MainThreadTextEditors.INSTANCE_COUNT);
    5658
    this._proxy = extHostContext.getProxy(ExtHostContext.ExtHostEditors);
    @@ -125,15 +127,15 @@ export class MainThreadTextEditors implements MainThreadTextEditorsShape {
    125127
    // preserve pre 1.38 behaviour to not make group active when preserveFocus: true
    126128
    // but make sure to restore the editor to fix https://github.com/microsoft/vscode/issues/79633
    127129
    activation: options.preserveFocus ? EditorActivation.RESTORE : undefined,
    128-
    override: EditorResolution.DISABLED
    130+
    override: DEFAULT_EDITOR_ASSOCIATION.id
    129131
    };
    130132

    131133
    const input: IResourceEditorInput = {
    132134
    resource: uri,
    133135
    options: editorOptions
    134136
    };
    135137

    136-
    const editor = await this._editorService.openEditor(input, columnToEditorGroup(this._editorGroupService, options.position));
    138+
    const editor = await this._editorService.openEditor(input, columnToEditorGroup(this._editorGroupService, this._configurationService, options.position));
    137139
    if (!editor) {
    138140
    return undefined;
    139141
    }
    @@ -147,7 +149,7 @@ export class MainThreadTextEditors implements MainThreadTextEditorsShape {
    147149
    await this._editorService.openEditor({
    148150
    resource: model.uri,
    149151
    options: { preserveFocus: false }
    150-
    }, columnToEditorGroup(this._editorGroupService, position));
    152+
    }, columnToEditorGroup(this._editorGroupService, this._configurationService, position));
    151153
    return;
    152154
    }
    153155
    }

    src/vs/workbench/api/browser/mainThreadNotebookEditors.ts

    Lines changed: 4 additions & 2 deletions
    Original file line numberDiff line numberDiff line change
    @@ -17,6 +17,7 @@ import { columnToEditorGroup, editorGroupToColumn } from 'vs/workbench/services/
    1717
    import { equals } from 'vs/base/common/objects';
    1818
    import { NotebookDto } from 'vs/workbench/api/browser/mainThreadNotebookDto';
    1919
    import { IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers';
    20+
    import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
    2021

    2122
    class MainThreadNotebook {
    2223

    @@ -44,7 +45,8 @@ export class MainThreadNotebookEditors implements MainThreadNotebookEditorsShape
    4445
    @IEditorService private readonly _editorService: IEditorService,
    4546
    @ILogService private readonly _logService: ILogService,
    4647
    @INotebookEditorService private readonly _notebookEditorService: INotebookEditorService,
    47-
    @IEditorGroupsService private readonly _editorGroupService: IEditorGroupsService
    48+
    @IEditorGroupsService private readonly _editorGroupService: IEditorGroupsService,
    49+
    @IConfigurationService private readonly _configurationService: IConfigurationService
    4850
    ) {
    4951
    this._proxy = extHostContext.getProxy(ExtHostContext.ExtHostNotebookEditors);
    5052

    @@ -126,7 +128,7 @@ export class MainThreadNotebookEditors implements MainThreadNotebookEditorsShape
    126128
    override: viewType
    127129
    };
    128130

    129-
    const editorPane = await this._editorService.openEditor({ resource: URI.revive(resource), options: editorOptions }, columnToEditorGroup(this._editorGroupService, options.position));
    131+
    const editorPane = await this._editorService.openEditor({ resource: URI.revive(resource), options: editorOptions }, columnToEditorGroup(this._editorGroupService, this._configurationService, options.position));
    130132
    const notebookEditor = getNotebookEditorFromEditorPane(editorPane);
    131133

    132134
    if (notebookEditor) {

    src/vs/workbench/api/test/browser/mainThreadDocumentsAndEditors.test.ts

    Lines changed: 1 addition & 2 deletions
    Original file line numberDiff line numberDiff line change
    @@ -34,7 +34,6 @@ import { LanguageService } from 'vs/editor/common/services/languageService';
    3434
    import { DisposableStore } from 'vs/base/common/lifecycle';
    3535
    import { LanguageFeatureDebounceService } from 'vs/editor/common/services/languageFeatureDebounce';
    3636
    import { LanguageFeaturesService } from 'vs/editor/common/services/languageFeaturesService';
    37-
    import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock';
    3837

    3938
    suite('MainThreadDocumentsAndEditors', () => {
    4039

    @@ -121,7 +120,7 @@ suite('MainThreadDocumentsAndEditors', () => {
    121120
    }
    122121
    },
    123122
    new TestPathService(),
    124-
    new TestInstantiationService(),
    123+
    new TestConfigurationService(),
    125124
    );
    126125
    });
    127126

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

    Lines changed: 7 additions & 18 deletions
    Original file line numberDiff line numberDiff line change
    @@ -7,11 +7,11 @@ import { localize } from 'vs/nls';
    77
    import { isObject, isString, isUndefined, isNumber, withNullAsUndefined } from 'vs/base/common/types';
    88
    import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
    99
    import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';
    10-
    import { IEditorIdentifier, IEditorCommandsContext, CloseDirection, IVisibleEditorPane, EditorsOrder, EditorInputCapabilities, isEditorIdentifier, GroupIdentifier, isEditorInputWithOptionsAndGroup, IUntitledTextResourceEditorInput } from 'vs/workbench/common/editor';
    10+
    import { IEditorIdentifier, IEditorCommandsContext, CloseDirection, IVisibleEditorPane, EditorsOrder, EditorInputCapabilities, isEditorIdentifier, isEditorInputWithOptionsAndGroup, IUntitledTextResourceEditorInput } from 'vs/workbench/common/editor';
    1111
    import { TextCompareEditorVisibleContext, ActiveEditorGroupEmptyContext, MultipleEditorGroupsContext, ActiveEditorStickyContext, ActiveEditorGroupLockedContext, ActiveEditorCanSplitInGroupContext, TextCompareEditorActiveContext, SideBySideEditorActiveContext } from 'vs/workbench/common/contextkeys';
    1212
    import { EditorInput } from 'vs/workbench/common/editor/editorInput';
    1313
    import { EditorGroupColumn, columnToEditorGroup } from 'vs/workbench/services/editor/common/editorGroupColumn';
    14-
    import { ACTIVE_GROUP_TYPE, IEditorService, SIDE_GROUP, SIDE_GROUP_TYPE } from 'vs/workbench/services/editor/common/editorService';
    14+
    import { IEditorService, SIDE_GROUP } from 'vs/workbench/services/editor/common/editorService';
    1515
    import { EditorContextKeys } from 'vs/editor/common/editorContextKeys';
    1616
    import { TextDiffEditor } from 'vs/workbench/browser/parts/editor/textDiffEditor';
    1717
    import { KeyMod, KeyCode, KeyChord } from 'vs/base/common/keyCodes';
    @@ -499,6 +499,7 @@ function registerOpenEditorAPICommands(): void {
    499499
    const editorGroupService = accessor.get(IEditorGroupsService);
    500500
    const openerService = accessor.get(IOpenerService);
    501501
    const pathService = accessor.get(IPathService);
    502+
    const configurationService = accessor.get(IConfigurationService);
    502503

    503504
    const resourceOrString = typeof resourceArg === 'string' ? resourceArg : URI.revive(resourceArg);
    504505
    const [columnArg, optionsArg] = columnAndOptions ?? [];
    @@ -523,7 +524,7 @@ function registerOpenEditorAPICommands(): void {
    523524
    input = { resource, options, label };
    524525
    }
    525526

    526-
    await editorService.openEditor(input, columnToEditorGroup(editorGroupService, column));
    527+
    await editorService.openEditor(input, columnToEditorGroup(editorGroupService, configurationService, column));
    527528
    }
    528529

    529530
    // do not allow to execute commands from here
    @@ -557,6 +558,7 @@ function registerOpenEditorAPICommands(): void {
    557558
    CommandsRegistry.registerCommand(API_OPEN_DIFF_EDITOR_COMMAND_ID, async function (accessor: ServicesAccessor, originalResource: UriComponents, modifiedResource: UriComponents, labelAndOrDescription?: string | { label: string; description: string }, columnAndOptions?: [EditorGroupColumn?, ITextEditorOptions?], context?: IOpenEvent<unknown>) {
    558559
    const editorService = accessor.get(IEditorService);
    559560
    const editorGroupService = accessor.get(IEditorGroupsService);
    561+
    const configurationService = accessor.get(IConfigurationService);
    560562

    561563
    const [columnArg, optionsArg] = columnAndOptions ?? [];
    562564
    const [options, column] = mixinContext(context, optionsArg, columnArg);
    @@ -576,7 +578,7 @@ function registerOpenEditorAPICommands(): void {
    576578
    label,
    577579
    description,
    578580
    options
    579-
    }, columnToEditorGroup(editorGroupService, column));
    581+
    }, columnToEditorGroup(editorGroupService, configurationService, column));
    580582
    });
    581583

    582584
    CommandsRegistry.registerCommand(API_OPEN_WITH_EDITOR_COMMAND_ID, (accessor: ServicesAccessor, resource: UriComponents, id: string, columnAndOptions?: [EditorGroupColumn?, ITextEditorOptions?]) => {
    @@ -585,21 +587,8 @@ function registerOpenEditorAPICommands(): void {
    585587
    const configurationService = accessor.get(IConfigurationService);
    586588

    587589
    const [columnArg, optionsArg] = columnAndOptions ?? [];
    588-
    let group: IEditorGroup | GroupIdentifier | ACTIVE_GROUP_TYPE | SIDE_GROUP_TYPE | undefined = undefined;
    589-
    590-
    if (columnArg === SIDE_GROUP) {
    591-
    const direction = preferredSideBySideGroupDirection(configurationService);
    592-
    593-
    let neighbourGroup = editorGroupsService.findGroup({ direction });
    594-
    if (!neighbourGroup) {
    595-
    neighbourGroup = editorGroupsService.addGroup(editorGroupsService.activeGroup, direction);
    596-
    }
    597-
    group = neighbourGroup;
    598-
    } else {
    599-
    group = columnToEditorGroup(editorGroupsService, columnArg);
    600-
    }
    601590

    602-
    return editorService.openEditor({ resource: URI.revive(resource), options: { ...optionsArg, pinned: true, override: id } }, group);
    591+
    return editorService.openEditor({ resource: URI.revive(resource), options: { ...optionsArg, pinned: true, override: id } }, columnToEditorGroup(editorGroupsService, configurationService, columnArg));
    603592
    });
    604593
    }
    605594

    src/vs/workbench/contrib/files/test/browser/fileEditorInput.test.ts

    Lines changed: 4 additions & 0 deletions
    Original file line numberDiff line numberDiff line change
    @@ -37,6 +37,10 @@ suite('Files - FileEditorInput', () => {
    3737
    override createTextEditor(input: IResourceEditorInput) {
    3838
    return createFileInput(input.resource);
    3939
    }
    40+
    41+
    override async resolveTextEditor(input: IResourceEditorInput) {
    42+
    return createFileInput(input.resource);
    43+
    }
    4044
    }
    4145

    4246
    setup(() => {

    src/vs/workbench/contrib/files/test/browser/textFileEditorTracker.test.ts

    Lines changed: 2 additions & 2 deletions
    Original file line numberDiff line numberDiff line change
    @@ -157,7 +157,7 @@ suite('Files - TextFileEditorTracker', () => {
    157157
    test('dirty untitled text file model opens as editor', async function () {
    158158
    const accessor = await createTracker();
    159159

    160-
    const untitledTextEditor = accessor.textEditorService.createTextEditor({ resource: undefined, forceUntitled: true }) as UntitledTextEditorInput;
    160+
    const untitledTextEditor = await accessor.textEditorService.resolveTextEditor({ resource: undefined, forceUntitled: true }) as UntitledTextEditorInput;
    161161
    const model = disposables.add(await untitledTextEditor.resolve());
    162162

    163163
    assert.ok(!accessor.editorService.isOpened(untitledTextEditor));
    @@ -177,7 +177,7 @@ suite('Files - TextFileEditorTracker', () => {
    177177

    178178
    const resource = toResource.call(this, '/path/index.txt');
    179179

    180-
    await accessor.editorService.openEditor(accessor.textEditorService.createTextEditor({ resource, options: { override: DEFAULT_EDITOR_ASSOCIATION.id } }));
    180+
    await accessor.editorService.openEditor(await accessor.textEditorService.resolveTextEditor({ resource, options: { override: DEFAULT_EDITOR_ASSOCIATION.id } }));
    181181

    182182
    accessor.hostService.setFocus(false);
    183183
    accessor.hostService.setFocus(true);

    src/vs/workbench/contrib/interactive/browser/interactive.contribution.ts

    Lines changed: 2 additions & 1 deletion
    Original file line numberDiff line numberDiff line change
    @@ -378,7 +378,8 @@ registerAction2(class extends Action2 {
    378378
    const historyService = accessor.get(IInteractiveHistoryService);
    379379
    const kernelService = accessor.get(INotebookKernelService);
    380380
    const logService = accessor.get(ILogService);
    381-
    const group = columnToEditorGroup(editorGroupService, typeof showOptions === 'number' ? showOptions : showOptions?.viewColumn);
    381+
    const configurationService = accessor.get(IConfigurationService);
    382+
    const group = columnToEditorGroup(editorGroupService, configurationService, typeof showOptions === 'number' ? showOptions : showOptions?.viewColumn);
    382383
    const editorOptions = {
    383384
    activation: EditorActivation.PRESERVE,
    384385
    preserveFocus: typeof showOptions !== 'number' ? (showOptions?.preserveFocus ?? false) : false

    src/vs/workbench/contrib/notebook/browser/diff/notebookDiffActions.ts

    Lines changed: 1 addition & 4 deletions
    Original file line numberDiff line numberDiff line change
    @@ -10,13 +10,11 @@ import { IConfigurationService } from 'vs/platform/configuration/common/configur
    1010
    import { ContextKeyExpr, ContextKeyExpression } from 'vs/platform/contextkey/common/contextkey';
    1111
    import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
    1212
    import { ActiveEditorContext } from 'vs/workbench/common/contextkeys';
    13-
    import { columnToEditorGroup } from 'vs/workbench/services/editor/common/editorGroupColumn';
    1413
    import { DiffElementViewModelBase } from 'vs/workbench/contrib/notebook/browser/diff/diffElementViewModel';
    1514
    import { NOTEBOOK_DIFF_CELL_INPUT, NOTEBOOK_DIFF_CELL_PROPERTY, NOTEBOOK_DIFF_CELL_PROPERTY_EXPANDED } from 'vs/workbench/contrib/notebook/browser/diff/notebookDiffEditorBrowser';
    1615
    import { NotebookTextDiffEditor } from 'vs/workbench/contrib/notebook/browser/diff/notebookTextDiffEditor';
    1716
    import { NotebookDiffEditorInput } from 'vs/workbench/contrib/notebook/browser/notebookDiffEditorInput';
    1817
    import { openAsTextIcon, renderOutputIcon, revertIcon } from 'vs/workbench/contrib/notebook/browser/notebookIcons';
    19-
    import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService';
    2018
    import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
    2119
    import { Registry } from 'vs/platform/registry/common/platform';
    2220
    import { IConfigurationRegistry, Extensions as ConfigurationExtensions } from 'vs/platform/configuration/common/configurationRegistry';
    @@ -42,7 +40,6 @@ registerAction2(class extends Action2 {
    4240

    4341
    async run(accessor: ServicesAccessor): Promise<void> {
    4442
    const editorService = accessor.get(IEditorService);
    45-
    const editorGroupService = accessor.get(IEditorGroupsService);
    4643

    4744
    const activeEditor = editorService.activeEditorPane;
    4845
    if (activeEditor && activeEditor instanceof NotebookTextDiffEditor) {
    @@ -57,7 +54,7 @@ registerAction2(class extends Action2 {
    5754
    preserveFocus: false,
    5855
    override: EditorResolution.DISABLED
    5956
    }
    60-
    }, columnToEditorGroup(editorGroupService, undefined));
    57+
    });
    6158
    }
    6259
    }
    6360
    });

    0 commit comments

    Comments
     (0)
    0