From e07621e8e8089fafe16b54795221eb88b8aabdb7 Mon Sep 17 00:00:00 2001 From: Jason Dent Date: Sat, 9 Mar 2024 14:03:00 +0100 Subject: [PATCH] fix: Enable creating config files on remote servers --- .../src/settings/configFileReadWrite.ts | 2 +- .../client/src/settings/configReaderWriter.ts | 2 +- packages/client/src/settings/settings.ts | 20 ++++++++++++------- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/packages/client/src/settings/configFileReadWrite.ts b/packages/client/src/settings/configFileReadWrite.ts index 2600716e1..fe728ffae 100644 --- a/packages/client/src/settings/configFileReadWrite.ts +++ b/packages/client/src/settings/configFileReadWrite.ts @@ -54,7 +54,7 @@ export async function readConfigFile(uri: Uri, defaultValueIfNotFound?: CSpellSe } } -export function writeConfigFile(uri: Uri, cfg: CSpellSettings): Promise { +export function writeConfigFile(uri: Uri, cfg: Readonly): Promise { const rw = createConfigFileReaderWriter(uri); return rw.write(cfg); } diff --git a/packages/client/src/settings/configReaderWriter.ts b/packages/client/src/settings/configReaderWriter.ts index 7631a850b..d305a46f6 100644 --- a/packages/client/src/settings/configReaderWriter.ts +++ b/packages/client/src/settings/configReaderWriter.ts @@ -10,7 +10,7 @@ type ConfigKeys = keyof CSpellUserSettings; export interface ConfigReaderWriter { read(keys: readonly K[]): Promise>; - write(settings: CSpellUserSettings): Promise; + write(settings: Readonly): Promise; update(fn: ConfigUpdateFn, keys: readonly K[]): Promise; } diff --git a/packages/client/src/settings/settings.ts b/packages/client/src/settings/settings.ts index df335ee8e..97e33ff70 100644 --- a/packages/client/src/settings/settings.ts +++ b/packages/client/src/settings/settings.ts @@ -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'; @@ -92,11 +91,19 @@ const settingsFileTemplate: CSpellSettings = { }; export async function createConfigFile(fileUri: Uri, overwrite?: boolean): Promise { - 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; } } @@ -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);