summaryrefslogtreecommitdiff
path: root/packages/cli/src/config/settings.ts
diff options
context:
space:
mode:
authorJacob Richman <[email protected]>2025-06-06 09:56:45 -0700
committerGitHub <[email protected]>2025-06-06 09:56:45 -0700
commit89aca349cfd46cb242ba32533aee9bc49db89d94 (patch)
treeecf14ec14357b3d6d19ef3b6089ea0180714e8de /packages/cli/src/config/settings.ts
parentb4a6b16227bd94bae99401b2effac8a24c3f92ff (diff)
Exit with an error message if parsing settings.json fails. (#747)
Diffstat (limited to 'packages/cli/src/config/settings.ts')
-rw-r--r--packages/cli/src/config/settings.ts41
1 files changed, 33 insertions, 8 deletions
diff --git a/packages/cli/src/config/settings.ts b/packages/cli/src/config/settings.ts
index 427fb898..d3a4dacb 100644
--- a/packages/cli/src/config/settings.ts
+++ b/packages/cli/src/config/settings.ts
@@ -7,7 +7,7 @@
import * as fs from 'fs';
import * as path from 'path';
import { homedir } from 'os';
-import { MCPServerConfig } from '@gemini-code/core';
+import { MCPServerConfig, getErrorMessage } from '@gemini-code/core';
import stripJsonComments from 'strip-json-comments';
import { DefaultLight } from '../ui/themes/default-light.js';
import { DefaultDark } from '../ui/themes/default.js';
@@ -47,19 +47,30 @@ export interface Settings {
// Add other settings here.
}
+export interface SettingsError {
+ message: string;
+ path: string;
+}
+
export interface SettingsFile {
settings: Settings;
path: string;
}
export class LoadedSettings {
- constructor(user: SettingsFile, workspace: SettingsFile) {
+ constructor(
+ user: SettingsFile,
+ workspace: SettingsFile,
+ errors: SettingsError[],
+ ) {
this.user = user;
this.workspace = workspace;
+ this.errors = errors;
this._merged = this.computeMergedSettings();
}
readonly user: SettingsFile;
readonly workspace: SettingsFile;
+ readonly errors: SettingsError[];
private _merged: Settings;
@@ -147,6 +158,7 @@ function resolveEnvVarsInObject<T>(obj: T): T {
export function loadSettings(workspaceDir: string): LoadedSettings {
let userSettings: Settings = {};
let workspaceSettings: Settings = {};
+ const settingsErrors: SettingsError[] = [];
// Load user settings
try {
@@ -163,8 +175,11 @@ export function loadSettings(workspaceDir: string): LoadedSettings {
userSettings.theme = DefaultDark.name;
}
}
- } catch (error) {
- console.error('Error reading user settings file:', error);
+ } catch (error: unknown) {
+ settingsErrors.push({
+ message: getErrorMessage(error),
+ path: USER_SETTINGS_PATH,
+ });
}
const workspaceSettingsPath = path.join(
@@ -190,13 +205,23 @@ export function loadSettings(workspaceDir: string): LoadedSettings {
workspaceSettings.theme = DefaultDark.name;
}
}
- } catch (error) {
- console.error('Error reading workspace settings file:', error);
+ } catch (error: unknown) {
+ settingsErrors.push({
+ message: getErrorMessage(error),
+ path: workspaceSettingsPath,
+ });
}
return new LoadedSettings(
- { path: USER_SETTINGS_PATH, settings: userSettings },
- { path: workspaceSettingsPath, settings: workspaceSettings },
+ {
+ path: USER_SETTINGS_PATH,
+ settings: userSettings,
+ },
+ {
+ path: workspaceSettingsPath,
+ settings: workspaceSettings,
+ },
+ settingsErrors,
);
}