Skip to content

Commit 7e46f23

Browse files
authored
fix: clean up PreferencesActionContribution (microsoft#186952)
1 parent 6bbb128 commit 7e46f23

File tree

4 files changed

+45
-125
lines changed

4 files changed

+45
-125
lines changed

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

Lines changed: 43 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import { ConfigureLanguageBasedSettingsAction } from 'vs/workbench/contrib/prefe
3434
import { SettingsEditorContribution } from 'vs/workbench/contrib/preferences/browser/preferencesEditor';
3535
import { preferencesOpenSettingsIcon } from 'vs/workbench/contrib/preferences/browser/preferencesIcons';
3636
import { SettingsEditor2, SettingsFocusContext } from 'vs/workbench/contrib/preferences/browser/settingsEditor2';
37-
import { CONTEXT_KEYBINDINGS_EDITOR, CONTEXT_KEYBINDINGS_SEARCH_FOCUS, CONTEXT_KEYBINDING_FOCUS, CONTEXT_SETTINGS_EDITOR, CONTEXT_SETTINGS_EDITOR_IN_USER_TAB, CONTEXT_SETTINGS_JSON_EDITOR, CONTEXT_SETTINGS_ROW_FOCUS, CONTEXT_SETTINGS_SEARCH_FOCUS, CONTEXT_TOC_ROW_FOCUS, CONTEXT_WHEN_FOCUS, KEYBINDINGS_EDITOR_COMMAND_ACCEPT_WHEN, KEYBINDINGS_EDITOR_COMMAND_ADD, KEYBINDINGS_EDITOR_COMMAND_CLEAR_SEARCH_HISTORY, KEYBINDINGS_EDITOR_COMMAND_CLEAR_SEARCH_RESULTS, KEYBINDINGS_EDITOR_COMMAND_COPY, KEYBINDINGS_EDITOR_COMMAND_COPY_COMMAND, KEYBINDINGS_EDITOR_COMMAND_COPY_COMMAND_TITLE, KEYBINDINGS_EDITOR_COMMAND_DEFINE, KEYBINDINGS_EDITOR_COMMAND_DEFINE_WHEN, KEYBINDINGS_EDITOR_COMMAND_FOCUS_KEYBINDINGS, KEYBINDINGS_EDITOR_COMMAND_RECORD_SEARCH_KEYS, KEYBINDINGS_EDITOR_COMMAND_REJECT_WHEN, KEYBINDINGS_EDITOR_COMMAND_REMOVE, KEYBINDINGS_EDITOR_COMMAND_RESET, KEYBINDINGS_EDITOR_COMMAND_SEARCH, KEYBINDINGS_EDITOR_COMMAND_SHOW_SIMILAR, KEYBINDINGS_EDITOR_COMMAND_SORTBY_PRECEDENCE, KEYBINDINGS_EDITOR_SHOW_DEFAULT_KEYBINDINGS, KEYBINDINGS_EDITOR_SHOW_EXTENSION_KEYBINDINGS, KEYBINDINGS_EDITOR_SHOW_USER_KEYBINDINGS, REQUIRE_TRUSTED_WORKSPACE_SETTING_TAG, SETTINGS_EDITOR_COMMAND_CLEAR_SEARCH_RESULTS, SETTINGS_EDITOR_COMMAND_SHOW_CONTEXT_MENU } from 'vs/workbench/contrib/preferences/common/preferences';
37+
import { CONTEXT_KEYBINDINGS_EDITOR, CONTEXT_KEYBINDINGS_SEARCH_FOCUS, CONTEXT_KEYBINDING_FOCUS, CONTEXT_SETTINGS_EDITOR, CONTEXT_SETTINGS_JSON_EDITOR, CONTEXT_SETTINGS_ROW_FOCUS, CONTEXT_SETTINGS_SEARCH_FOCUS, CONTEXT_TOC_ROW_FOCUS, CONTEXT_WHEN_FOCUS, KEYBINDINGS_EDITOR_COMMAND_ACCEPT_WHEN, KEYBINDINGS_EDITOR_COMMAND_ADD, KEYBINDINGS_EDITOR_COMMAND_CLEAR_SEARCH_HISTORY, KEYBINDINGS_EDITOR_COMMAND_CLEAR_SEARCH_RESULTS, KEYBINDINGS_EDITOR_COMMAND_COPY, KEYBINDINGS_EDITOR_COMMAND_COPY_COMMAND, KEYBINDINGS_EDITOR_COMMAND_COPY_COMMAND_TITLE, KEYBINDINGS_EDITOR_COMMAND_DEFINE, KEYBINDINGS_EDITOR_COMMAND_DEFINE_WHEN, KEYBINDINGS_EDITOR_COMMAND_FOCUS_KEYBINDINGS, KEYBINDINGS_EDITOR_COMMAND_RECORD_SEARCH_KEYS, KEYBINDINGS_EDITOR_COMMAND_REJECT_WHEN, KEYBINDINGS_EDITOR_COMMAND_REMOVE, KEYBINDINGS_EDITOR_COMMAND_RESET, KEYBINDINGS_EDITOR_COMMAND_SEARCH, KEYBINDINGS_EDITOR_COMMAND_SHOW_SIMILAR, KEYBINDINGS_EDITOR_COMMAND_SORTBY_PRECEDENCE, KEYBINDINGS_EDITOR_SHOW_DEFAULT_KEYBINDINGS, KEYBINDINGS_EDITOR_SHOW_EXTENSION_KEYBINDINGS, KEYBINDINGS_EDITOR_SHOW_USER_KEYBINDINGS, REQUIRE_TRUSTED_WORKSPACE_SETTING_TAG, SETTINGS_EDITOR_COMMAND_CLEAR_SEARCH_RESULTS, SETTINGS_EDITOR_COMMAND_SHOW_CONTEXT_MENU } from 'vs/workbench/contrib/preferences/common/preferences';
3838
import { PreferencesContribution } from 'vs/workbench/contrib/preferences/common/preferencesContribution';
3939
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
4040
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
@@ -57,8 +57,6 @@ const SETTINGS_EDITOR_COMMAND_FOCUS_CONTROL = 'settings.action.focusSettingContr
5757
const SETTINGS_EDITOR_COMMAND_FOCUS_UP = 'settings.action.focusLevelUp';
5858

5959
const SETTINGS_EDITOR_COMMAND_SWITCH_TO_JSON = 'settings.switchToJSON';
60-
const SETTINGS_EDITOR_COMMAND_SWITCH_TO_APPLICATION_JSON = 'settings.switchToApplicationJSON';
61-
const SETTINGS_EDITOR_COMMAND_SWITCH_TO_CURRENT_PROFILE_JSON = 'settings.switchToCurrentProfileJSON';
6260
const SETTINGS_EDITOR_COMMAND_FILTER_ONLINE = 'settings.filterByOnline';
6361
const SETTINGS_EDITOR_COMMAND_FILTER_UNTRUSTED = 'settings.filterUntrusted';
6462

@@ -122,7 +120,7 @@ Registry.as<IEditorFactoryRegistry>(EditorExtensions.EditorFactory).registerEdit
122120

123121
const OPEN_USER_SETTINGS_UI_TITLE = { value: nls.localize('openSettings2', "Open Settings (UI)"), original: 'Open Settings (UI)' };
124122
const OPEN_USER_SETTINGS_JSON_TITLE = { value: nls.localize('openUserSettingsJson', "Open User Settings (JSON)"), original: 'Open User Settings (JSON)' };
125-
const OPEN_CURRENT_PROFILE_SETTINGS_JSON_TITLE = { value: nls.localize('openCurrentProfileSettingsJson', "Open Current Profile Settings (JSON)"), original: 'Open Current Profile Settings (JSON)' };
123+
const OPEN_APPLICATION_SETTINGS_JSON_TITLE = { value: nls.localize('openApplicationSettingsJson', "Open Application Settings (JSON)"), original: 'Open Application Settings (JSON)' };
126124
const category = { value: nls.localize('preferences', "Preferences"), original: 'Preferences' };
127125

128126
interface IOpenSettingsActionOptions {
@@ -209,30 +207,27 @@ class PreferencesActionsContribution extends Disposable implements IWorkbenchCon
209207
}
210208
});
211209

212-
const that = this;
213-
const registerOpenSettingsJsonCommandDisposable = this._register(new MutableDisposable());
214-
const registerOpenSettingsJsonCommand = () => {
215-
registerOpenSettingsJsonCommandDisposable.value = registerAction2(class extends Action2 {
216-
constructor() {
217-
super({
218-
id: 'workbench.action.openSettingsJson',
219-
title: that.userDataProfileService.currentProfile.isDefault ? OPEN_USER_SETTINGS_JSON_TITLE : OPEN_CURRENT_PROFILE_SETTINGS_JSON_TITLE,
220-
category,
221-
f1: true,
222-
});
223-
}
224-
run(accessor: ServicesAccessor, args: IOpenSettingsActionOptions) {
225-
args = sanitizeOpenSettingsArgs(args);
226-
return accessor.get(IPreferencesService).openSettings({ jsonEditor: true, ...args });
227-
}
228-
});
229-
};
210+
registerAction2(class extends Action2 {
211+
constructor() {
212+
super({
213+
id: 'workbench.action.openSettingsJson',
214+
title: OPEN_USER_SETTINGS_JSON_TITLE,
215+
category,
216+
f1: true,
217+
});
218+
}
219+
run(accessor: ServicesAccessor, args: IOpenSettingsActionOptions) {
220+
args = sanitizeOpenSettingsArgs(args);
221+
return accessor.get(IPreferencesService).openSettings({ jsonEditor: true, ...args });
222+
}
223+
});
230224

225+
const that = this;
231226
registerAction2(class extends Action2 {
232227
constructor() {
233228
super({
234229
id: 'workbench.action.openApplicationSettingsJson',
235-
title: OPEN_USER_SETTINGS_JSON_TITLE,
230+
title: OPEN_APPLICATION_SETTINGS_JSON_TITLE,
236231
category,
237232
menu: {
238233
id: MenuId.CommandPalette,
@@ -276,13 +271,11 @@ class PreferencesActionsContribution extends Disposable implements IWorkbenchCon
276271
});
277272

278273
const registerOpenUserSettingsEditorFromJsonActionDisposable = this._register(new MutableDisposable());
274+
const openUserSettingsEditorWhen = ContextKeyExpr.and(
275+
ContextKeyExpr.or(ResourceContextKey.Resource.isEqualTo(this.userDataProfileService.currentProfile.settingsResource.toString()),
276+
ResourceContextKey.Resource.isEqualTo(this.userDataProfilesService.defaultProfile.settingsResource.toString())),
277+
ContextKeyExpr.not('isInDiffEditor'));
279278
const registerOpenUserSettingsEditorFromJsonAction = () => {
280-
let when = ContextKeyExpr.and(ResourceContextKey.Resource.isEqualTo(this.userDataProfileService.currentProfile.settingsResource.toString()), ContextKeyExpr.not('isInDiffEditor'));
281-
if (!this.userDataProfileService.currentProfile.isDefault) {
282-
// If the default profile is not active, also show the action when we're in the
283-
// default profile JSON file, which contains the application-scoped settings.
284-
when = ContextKeyExpr.or(when, ContextKeyExpr.and(ResourceContextKey.Resource.isEqualTo(this.userDataProfilesService.defaultProfile.settingsResource.toString()), ContextKeyExpr.not('isInDiffEditor')));
285-
}
286279
registerOpenUserSettingsEditorFromJsonActionDisposable.value = registerAction2(class extends Action2 {
287280
constructor() {
288281
super({
@@ -291,7 +284,7 @@ class PreferencesActionsContribution extends Disposable implements IWorkbenchCon
291284
icon: preferencesOpenSettingsIcon,
292285
menu: [{
293286
id: MenuId.EditorTitle,
294-
when,
287+
when: openUserSettingsEditorWhen,
295288
group: 'navigation',
296289
order: 1
297290
}]
@@ -304,93 +297,35 @@ class PreferencesActionsContribution extends Disposable implements IWorkbenchCon
304297
});
305298
};
306299

307-
const openJsonFromSettingsEditorDisposableStore = this._register(new DisposableStore());
308-
const registerOpenJsonFromSettingsEditorAction = () => {
309-
openJsonFromSettingsEditorDisposableStore.clear();
310-
if (!this.userDataProfileService.currentProfile.isDefault) {
311-
// When the default profile is not active, the action for the User tab needs a dropdown
312-
// because User tab settings in that case are actually saved in two separate files.
313-
const submenuId = MenuId.for('PreferencesSubMenu');
314-
openJsonFromSettingsEditorDisposableStore.add(registerAction2(class extends Action2 {
315-
constructor() {
316-
super({
317-
id: SETTINGS_EDITOR_COMMAND_SWITCH_TO_CURRENT_PROFILE_JSON,
318-
title: OPEN_CURRENT_PROFILE_SETTINGS_JSON_TITLE,
319-
menu: [{ id: submenuId, order: 1 }]
320-
});
321-
}
322-
run(accessor: ServicesAccessor) {
323-
const editorPane = accessor.get(IEditorService).activeEditorPane;
324-
if (editorPane instanceof SettingsEditor2) {
325-
return editorPane.switchToSettingsFile();
326-
}
327-
return null;
328-
}
329-
}));
330-
openJsonFromSettingsEditorDisposableStore.add(registerAction2(class extends Action2 {
331-
constructor() {
332-
super({
333-
id: SETTINGS_EDITOR_COMMAND_SWITCH_TO_APPLICATION_JSON,
334-
title: OPEN_USER_SETTINGS_JSON_TITLE,
335-
menu: [{ id: submenuId, order: 2 }]
336-
});
337-
}
338-
run(accessor: ServicesAccessor) {
339-
const editorPane = accessor.get(IEditorService).activeEditorPane;
340-
if (editorPane instanceof SettingsEditor2) {
341-
return editorPane.switchToApplicationSettingsFile();
342-
}
343-
return null;
344-
}
345-
}));
346-
openJsonFromSettingsEditorDisposableStore.add(MenuRegistry.appendMenuItem(MenuId.EditorTitle, {
300+
const openSettingsJsonWhen = ContextKeyExpr.and(CONTEXT_SETTINGS_EDITOR, CONTEXT_SETTINGS_JSON_EDITOR.toNegated());
301+
registerAction2(class extends Action2 {
302+
constructor() {
303+
super({
304+
id: SETTINGS_EDITOR_COMMAND_SWITCH_TO_JSON,
347305
title: { value: nls.localize('openSettingsJson', "Open Settings (JSON)"), original: 'Open Settings (JSON)' },
348-
submenu: submenuId,
349306
icon: preferencesOpenSettingsIcon,
350-
when: ContextKeyExpr.and(CONTEXT_SETTINGS_EDITOR, CONTEXT_SETTINGS_EDITOR_IN_USER_TAB, CONTEXT_SETTINGS_JSON_EDITOR.toNegated()),
351-
group: 'navigation',
352-
order: 1
353-
}));
354-
}
355-
356-
let openSettingsJsonWhen = ContextKeyExpr.and(CONTEXT_SETTINGS_EDITOR, CONTEXT_SETTINGS_JSON_EDITOR.toNegated());
357-
if (!this.userDataProfileService.currentProfile.isDefault) {
358-
// If we're not in the default profile, we already created the action for the User tab above,
359-
// so we want to make sure the user is not in the User tab for this more general action.
360-
openSettingsJsonWhen = ContextKeyExpr.and(openSettingsJsonWhen, CONTEXT_SETTINGS_EDITOR_IN_USER_TAB.toNegated());
307+
menu: [{
308+
id: MenuId.EditorTitle,
309+
when: openSettingsJsonWhen,
310+
group: 'navigation',
311+
order: 1
312+
}]
313+
});
361314
}
362-
openJsonFromSettingsEditorDisposableStore.add(registerAction2(class extends Action2 {
363-
constructor() {
364-
super({
365-
id: SETTINGS_EDITOR_COMMAND_SWITCH_TO_JSON,
366-
title: { value: nls.localize('openSettingsJson', "Open Settings (JSON)"), original: 'Open Settings (JSON)' },
367-
icon: preferencesOpenSettingsIcon,
368-
menu: [{
369-
id: MenuId.EditorTitle,
370-
when: openSettingsJsonWhen,
371-
group: 'navigation',
372-
order: 1
373-
}]
374-
});
375-
}
376-
run(accessor: ServicesAccessor) {
377-
const editorPane = accessor.get(IEditorService).activeEditorPane;
378-
if (editorPane instanceof SettingsEditor2) {
379-
return editorPane.switchToSettingsFile();
380-
}
381-
return null;
315+
run(accessor: ServicesAccessor) {
316+
const editorPane = accessor.get(IEditorService).activeEditorPane;
317+
if (editorPane instanceof SettingsEditor2) {
318+
return editorPane.switchToSettingsFile();
382319
}
383-
}));
384-
};
320+
return null;
321+
}
322+
});
385323

386324
registerOpenUserSettingsEditorFromJsonAction();
387-
registerOpenJsonFromSettingsEditorAction();
388-
registerOpenSettingsJsonCommand();
389325

390326
this._register(this.userDataProfileService.onDidChangeCurrentProfile(() => {
327+
// Force the action to check the context again.
391328
registerOpenUserSettingsEditorFromJsonAction();
392-
registerOpenJsonFromSettingsEditorAction();
393-
registerOpenSettingsJsonCommand();
394329
}));
395330

396331
registerAction2(class extends Action2 {

src/vs/workbench/contrib/preferences/browser/preferencesWidgets.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,6 @@ import { isWorkspaceFolder, IWorkspaceContextService, IWorkspaceFolder, Workbenc
3434
import { settingsEditIcon, settingsScopeDropDownIcon } from 'vs/workbench/contrib/preferences/browser/preferencesIcons';
3535
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
3636
import { ILanguageService } from 'vs/editor/common/languages/language';
37-
import { CONTEXT_SETTINGS_EDITOR_IN_USER_TAB } from 'vs/workbench/contrib/preferences/common/preferences';
38-
3937
export class FolderSettingsActionViewItem extends BaseActionViewItem {
4038

4139
private _folder: IWorkspaceFolder | null;
@@ -217,7 +215,6 @@ export class SettingsTargetsWidget extends Widget {
217215
private folderSettingsAction!: Action;
218216
private folderSettings!: FolderSettingsActionViewItem;
219217
private options: ISettingsTargetsWidgetOptions;
220-
private inUserTab: IContextKey<boolean>;
221218

222219
private _settingsTarget: SettingsTarget | null = null;
223220

@@ -231,15 +228,13 @@ export class SettingsTargetsWidget extends Widget {
231228
@IInstantiationService private readonly instantiationService: IInstantiationService,
232229
@IWorkbenchEnvironmentService private readonly environmentService: IWorkbenchEnvironmentService,
233230
@ILabelService private readonly labelService: ILabelService,
234-
@ILanguageService private readonly languageService: ILanguageService,
235-
@IContextKeyService contextKeyService: IContextKeyService,
231+
@ILanguageService private readonly languageService: ILanguageService
236232
) {
237233
super();
238234
this.options = options ?? {};
239235
this.create(parent);
240236
this._register(this.contextService.onDidChangeWorkbenchState(() => this.onWorkbenchStateChanged()));
241237
this._register(this.contextService.onDidChangeWorkspaceFolders(() => this.update()));
242-
this.inUserTab = CONTEXT_SETTINGS_EDITOR_IN_USER_TAB.bindTo(contextKeyService);
243238
}
244239

245240
private resetLabels() {
@@ -297,7 +292,6 @@ export class SettingsTargetsWidget extends Widget {
297292
} else {
298293
this.folderSettings.action.checked = false;
299294
}
300-
this.inUserTab.set(this.userLocalSettings.checked);
301295
}
302296

303297
setResultCount(settingsTarget: SettingsTarget, count: number): void {

src/vs/workbench/contrib/preferences/browser/settingsEditor2.ts

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -707,17 +707,12 @@ export class SettingsEditor2 extends EditorPane {
707707
}
708708
}
709709

710-
switchToApplicationSettingsFile(): Promise<IEditorPane | undefined> {
711-
const query = parseQuery(this.searchWidget.getValue()).query;
712-
return this.openSettingsFile({ query }, true);
713-
}
714-
715710
switchToSettingsFile(): Promise<IEditorPane | undefined> {
716711
const query = parseQuery(this.searchWidget.getValue()).query;
717712
return this.openSettingsFile({ query });
718713
}
719714

720-
private async openSettingsFile(options?: ISettingsEditorOptions, forceOpenApplicationSettings?: boolean): Promise<IEditorPane | undefined> {
715+
private async openSettingsFile(options?: ISettingsEditorOptions): Promise<IEditorPane | undefined> {
721716
const currentSettingsTarget = this.settingsTargetsWidget.settingsTarget;
722717

723718
const openOptions: IOpenSettingsOptions = { jsonEditor: true, ...options };
@@ -729,9 +724,6 @@ export class SettingsEditor2 extends EditorPane {
729724
return this.preferencesService.openApplicationSettings(openOptions);
730725
}
731726
}
732-
if (forceOpenApplicationSettings) {
733-
return this.preferencesService.openApplicationSettings(openOptions);
734-
}
735727
return this.preferencesService.openUserSettings(openOptions);
736728
} else if (currentSettingsTarget === ConfigurationTarget.USER_REMOTE) {
737729
return this.preferencesService.openRemoteSettings(openOptions);

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ export const CONTEXT_KEYBINDINGS_EDITOR = new RawContextKey<boolean>('inKeybindi
5858
export const CONTEXT_KEYBINDINGS_SEARCH_FOCUS = new RawContextKey<boolean>('inKeybindingsSearch', false);
5959
export const CONTEXT_KEYBINDING_FOCUS = new RawContextKey<boolean>('keybindingFocus', false);
6060
export const CONTEXT_WHEN_FOCUS = new RawContextKey<boolean>('whenFocus', false);
61-
export const CONTEXT_SETTINGS_EDITOR_IN_USER_TAB = new RawContextKey<boolean>('inSettingsEditorUserTab', false);
6261

6362
export const KEYBINDINGS_EDITOR_COMMAND_SEARCH = 'keybindings.editor.searchKeybindings';
6463
export const KEYBINDINGS_EDITOR_COMMAND_CLEAR_SEARCH_RESULTS = 'keybindings.editor.clearSearchResults';

0 commit comments

Comments
 (0)