From 13d8d9477cdc560050ba4405a47646ddb56b26f0 Mon Sep 17 00:00:00 2001 From: Abhi <43648792+abhipatel12@users.noreply.github.com> Date: Wed, 12 Nov 2025 23:02:53 -0500 Subject: [PATCH] fix(editor): ensure preferred editor setting updates immediately (#12981) --- packages/cli/src/config/settingPaths.ts | 11 +++++++++++ packages/cli/src/config/settings.ts | 3 ++- packages/cli/src/ui/hooks/useEditorSettings.test.tsx | 10 ++++++---- packages/cli/src/ui/hooks/useEditorSettings.ts | 8 +++++++- 4 files changed, 26 insertions(+), 6 deletions(-) create mode 100644 packages/cli/src/config/settingPaths.ts diff --git a/packages/cli/src/config/settingPaths.ts b/packages/cli/src/config/settingPaths.ts new file mode 100644 index 0000000000..9ba046d9ff --- /dev/null +++ b/packages/cli/src/config/settingPaths.ts @@ -0,0 +1,11 @@ +/** + * @license + * Copyright 2025 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +export const SettingPaths = { + General: { + PreferredEditor: 'general.preferredEditor', + }, +} as const; diff --git a/packages/cli/src/config/settings.ts b/packages/cli/src/config/settings.ts index 3a3295becc..947a234bcf 100644 --- a/packages/cli/src/config/settings.ts +++ b/packages/cli/src/config/settings.ts @@ -33,6 +33,7 @@ import { resolveEnvVarsInObject } from '../utils/envVarResolver.js'; import { customDeepMerge, type MergeableObject } from '../utils/deepMerge.js'; import { updateSettingsFilePreservingFormat } from '../utils/commentJson.js'; import type { ExtensionManager } from './extension-manager.js'; +import { SettingPaths } from './settingPaths.js'; function getMergeStrategyForPath(path: string[]): MergeStrategy | undefined { let current: SettingDefinition | undefined = undefined; @@ -108,7 +109,7 @@ const MIGRATION_MAP: Record = { memoryImportFormat: 'context.importFormat', memoryDiscoveryMaxDirs: 'context.discoveryMaxDirs', model: 'model.name', - preferredEditor: 'general.preferredEditor', + preferredEditor: SettingPaths.General.PreferredEditor, retryFetchErrors: 'general.retryFetchErrors', sandbox: 'tools.sandbox', selectedAuthType: 'security.auth.selectedType', diff --git a/packages/cli/src/ui/hooks/useEditorSettings.test.tsx b/packages/cli/src/ui/hooks/useEditorSettings.test.tsx index db46856c7d..da532c4d01 100644 --- a/packages/cli/src/ui/hooks/useEditorSettings.test.tsx +++ b/packages/cli/src/ui/hooks/useEditorSettings.test.tsx @@ -28,6 +28,8 @@ import { allowEditorTypeInSandbox, } from '@google/gemini-cli-core'; +import { SettingPaths } from '../../config/settingPaths.js'; + vi.mock('@google/gemini-cli-core', async () => { const actual = await vi.importActual('@google/gemini-cli-core'); return { @@ -114,7 +116,7 @@ describe('useEditorSettings', () => { expect(mockLoadedSettings.setValue).toHaveBeenCalledWith( scope, - 'preferredEditor', + SettingPaths.General.PreferredEditor, editorType, ); @@ -142,7 +144,7 @@ describe('useEditorSettings', () => { expect(mockLoadedSettings.setValue).toHaveBeenCalledWith( scope, - 'preferredEditor', + SettingPaths.General.PreferredEditor, undefined, ); @@ -171,7 +173,7 @@ describe('useEditorSettings', () => { expect(mockLoadedSettings.setValue).toHaveBeenCalledWith( scope, - 'preferredEditor', + SettingPaths.General.PreferredEditor, editorType, ); @@ -201,7 +203,7 @@ describe('useEditorSettings', () => { expect(mockLoadedSettings.setValue).toHaveBeenCalledWith( scope, - 'preferredEditor', + SettingPaths.General.PreferredEditor, editorType, ); diff --git a/packages/cli/src/ui/hooks/useEditorSettings.ts b/packages/cli/src/ui/hooks/useEditorSettings.ts index 075de1bc71..aebe9fe642 100644 --- a/packages/cli/src/ui/hooks/useEditorSettings.ts +++ b/packages/cli/src/ui/hooks/useEditorSettings.ts @@ -16,6 +16,8 @@ import { checkHasEditorType, } from '@google/gemini-cli-core'; +import { SettingPaths } from '../../config/settingPaths.js'; + interface UseEditorSettingsReturn { isEditorDialogOpen: boolean; openEditorDialog: () => void; @@ -48,7 +50,11 @@ export const useEditorSettings = ( } try { - loadedSettings.setValue(scope, 'preferredEditor', editorType); + loadedSettings.setValue( + scope, + SettingPaths.General.PreferredEditor, + editorType, + ); addItem( { type: MessageType.INFO,