Skip to content

Commit

Permalink
fix: Enable creating config files on remote servers (#3102)
Browse files Browse the repository at this point in the history
  • Loading branch information
Jason3S committed Mar 9, 2024
1 parent 76e1583 commit 715ad29
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 9 deletions.
2 changes: 1 addition & 1 deletion packages/client/src/settings/configFileReadWrite.ts
Expand Up @@ -54,7 +54,7 @@ export async function readConfigFile(uri: Uri, defaultValueIfNotFound?: CSpellSe
}
}

export function writeConfigFile(uri: Uri, cfg: CSpellSettings): Promise<void> {
export function writeConfigFile(uri: Uri, cfg: Readonly<CSpellSettings>): Promise<void> {
const rw = createConfigFileReaderWriter(uri);
return rw.write(cfg);
}
Expand Down
2 changes: 1 addition & 1 deletion packages/client/src/settings/configReaderWriter.ts
Expand Up @@ -10,7 +10,7 @@ type ConfigKeys = keyof CSpellUserSettings;

export interface ConfigReaderWriter {
read<K extends ConfigKeys>(keys: readonly K[]): Promise<Pick<CSpellUserSettings, K>>;
write(settings: CSpellUserSettings): Promise<void>;
write(settings: Readonly<CSpellUserSettings>): Promise<void>;
update<K extends ConfigKeys>(fn: ConfigUpdateFn, keys: readonly K[]): Promise<void>;
}

Expand Down
20 changes: 13 additions & 7 deletions packages/client/src/settings/settings.ts
Expand Up @@ -5,9 +5,8 @@ import { Uri, workspace } from 'vscode';
import type { CSpellUserSettings } from '../client';
import { unique } from '../util';
import type { ClientConfigTarget } from './clientConfigTarget';
import { writeConfigFile } from './configFileReadWrite';
import { readConfigFile, writeConfigFile } from './configFileReadWrite';
import { normalizeWords, preferredConfigFiles } from './CSpellSettings';
import { vscodeFs as fs } from './fs';
import { setConfigFieldQuickPick } from './settings.base';

export { setEnableSpellChecking, toggleEnableSpellChecker } from './settings.enable';
Expand Down Expand Up @@ -92,11 +91,19 @@ const settingsFileTemplate: CSpellSettings = {
};

export async function createConfigFile(fileUri: Uri, overwrite?: boolean): Promise<Uri | undefined> {
if (!overwrite && (await fs.fileExists(fileUri))) {
const existing = await readConfigFile(fileUri);
if (!overwrite && existing && Object.keys(existing).length > 1) {
const overwrite = 'Overwrite';
const choice = await vscode.window.showWarningMessage('Configuration file already exists.', { modal: true }, overwrite);
if (choice !== overwrite) {
return undefined;
const open = 'Open';
const choice = await vscode.window.showWarningMessage('Configuration file already exists.', { modal: true }, overwrite, open);
switch (choice) {
case overwrite:
break;
case open:
await vscode.window.showTextDocument(fileUri);
return undefined;
default:
return undefined;
}
}

Expand Down Expand Up @@ -125,7 +132,6 @@ export async function createConfigFileRelativeToDocumentUri(referenceDocUri?: Ur
const folder = getDefaultWorkspaceConfigLocation(referenceDocUri);

if (!folder) throw new Error(msgNoPossibleConfigLocation);
if (folder.uri.scheme !== 'file') throw new Error(`Unsupported scheme: ${folder.uri.scheme}`);

const optionalFiles = new Set(preferredConfigFiles);

Expand Down

0 comments on commit 715ad29

Please sign in to comment.