Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: Enable creating config files on remote servers #3102

Merged
merged 1 commit into from Mar 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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