diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_zed_settings/package.json b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_zed_settings/package.json new file mode 100644 index 0000000000..9f02109d28 --- /dev/null +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_zed_settings/package.json @@ -0,0 +1,9 @@ +{ + "name": "migration-zed-settings", + "private": true, + "type": "module", + "packageManager": "pnpm@12.11.2", + "devDependencies": { + "vite": "^7.0.0" + } +} diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_zed_settings/snapshots.toml b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_zed_settings/snapshots.toml new file mode 100644 index 0000000000..1a7aba5efc --- /dev/null +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_zed_settings/snapshots.toml @@ -0,0 +1,12 @@ +[[case]] +name = "migration_zed_settings" +vp = "global" +steps = [ + { argv = ["vp", "migrate", "--no-interactive", "--no-hooks", "--no-agent", "--editor", "zed"], snapshot = false }, + { argv = ["vpt", "print-file", "vite.config.ts"], comment = "Migration preserves the project's lint options." }, + { argv = ["node", "--input-type=module", "-e", "import fs from 'node:fs'; const settings = JSON.parse(fs.readFileSync('.zed/settings.json', 'utf8')); console.log(JSON.stringify(settings.lsp, null, 2));"], comment = "Generated Zed settings leave typeAware and unusedDisableDirectives unset so Oxlint uses the project config." }, + { argv = ["vpt", "json-edit", ".zed/settings.json", "lsp.oxlint.initialization_options.settings.typeAware", "true"], snapshot = false }, + { argv = ["vpt", "json-edit", ".zed/settings.json", "lsp.oxlint.initialization_options.settings.unusedDisableDirectives", "deny"], snapshot = false }, + { argv = ["vp", "migrate", "--full", "--no-interactive", "--no-hooks", "--no-agent", "--editor", "zed"], snapshot = false }, + { argv = ["node", "--input-type=module", "-e", "import fs from 'node:fs'; const settings = JSON.parse(fs.readFileSync('.zed/settings.json', 'utf8')); console.log(JSON.stringify(settings.lsp.oxlint, null, 2));"], comment = "A later migration preserves explicit editor overrides." }, +] diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_zed_settings/snapshots/migration_zed_settings.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_zed_settings/snapshots/migration_zed_settings.md new file mode 100644 index 0000000000..7b25f0763d --- /dev/null +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_zed_settings/snapshots/migration_zed_settings.md @@ -0,0 +1,74 @@ +# migration_zed_settings + +## `vp migrate --no-interactive --no-hooks --no-agent --editor zed` + + +## `vpt print-file vite.config.ts` + +Migration preserves the project's lint options. + +``` +import { defineConfig } from 'vite-plus'; + +export default defineConfig({ + fmt: {}, + lint: { + options: { + typeAware: false, + typeCheck: false, + reportUnusedDisableDirectives: 'warn', + }, + }, +}); +``` + +## `node --input-type=module -e 'import fs from '\''node:fs'\''; const settings = JSON.parse(fs.readFileSync('\''.zed/settings.json'\'', '\''utf8'\'')); console.log(JSON.stringify(settings.lsp, null, 2));'` + +Generated Zed settings leave typeAware and unusedDisableDirectives unset so Oxlint uses the project config. + +``` +{ + "oxlint": { + "initialization_options": { + "settings": { + "run": "onType", + "fixKind": "safe_fix" + } + } + }, + "oxfmt": { + "initialization_options": { + "settings": { + "fmt.configPath": "./vite.config.ts", + "run": "onSave" + } + } + } +} +``` + +## `vpt json-edit .zed/settings.json lsp.oxlint.initialization_options.settings.typeAware true` + + +## `vpt json-edit .zed/settings.json lsp.oxlint.initialization_options.settings.unusedDisableDirectives deny` + + +## `vp migrate --full --no-interactive --no-hooks --no-agent --editor zed` + + +## `node --input-type=module -e 'import fs from '\''node:fs'\''; const settings = JSON.parse(fs.readFileSync('\''.zed/settings.json'\'', '\''utf8'\'')); console.log(JSON.stringify(settings.lsp.oxlint, null, 2));'` + +A later migration preserves explicit editor overrides. + +``` +{ + "initialization_options": { + "settings": { + "fixKind": "safe_fix", + "run": "onType", + "typeAware": true, + "unusedDisableDirectives": "deny" + } + } +} +``` diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_zed_settings/vite.config.ts b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_zed_settings/vite.config.ts new file mode 100644 index 0000000000..acaccb8a0e --- /dev/null +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/migration_zed_settings/vite.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from 'vite'; + +export default defineConfig({ + lint: { + options: { + typeAware: false, + typeCheck: false, + reportUnusedDisableDirectives: 'warn', + }, + }, +}); diff --git a/docs/guide/ide-integration.md b/docs/guide/ide-integration.md index 65001cd2fb..9d0626fac0 100644 --- a/docs/guide/ide-integration.md +++ b/docs/guide/ide-integration.md @@ -63,9 +63,7 @@ You can also manually set up the Zed config: "initialization_options": { "settings": { "run": "onType", - "fixKind": "safe_fix", - "typeAware": true, - "unusedDisableDirectives": "deny" + "fixKind": "safe_fix" } } }, diff --git a/packages/cli/src/utils/__tests__/editor.spec.ts b/packages/cli/src/utils/__tests__/editor.spec.ts index ba4812e431..7ee8edbe76 100644 --- a/packages/cli/src/utils/__tests__/editor.spec.ts +++ b/packages/cli/src/utils/__tests__/editor.spec.ts @@ -556,7 +556,7 @@ describe('writeEditorConfigs', () => { expect(settings['npm.scriptRunner']).toBe('npm'); }); - it('writes zed settings that align formatter config with vite.config.ts', async () => { + it('writes zed settings that use the lint and formatter config from vite.config.ts', async () => { const projectRoot = createTempDir(); await writeEditorConfigs({ @@ -570,6 +570,11 @@ describe('writeEditorConfigs', () => { fs.readFileSync(path.join(projectRoot, '.zed', 'settings.json'), 'utf8'), ) as { lsp?: { + oxlint?: { + initialization_options?: { + settings?: Record; + }; + }; oxfmt?: { initialization_options?: { settings?: { @@ -580,6 +585,10 @@ describe('writeEditorConfigs', () => { }; }; + const lintSettings = settings.lsp?.oxlint?.initialization_options?.settings; + expect(lintSettings).toBeDefined(); + expect(lintSettings).not.toHaveProperty('typeAware'); + expect(lintSettings).not.toHaveProperty('unusedDisableDirectives'); expect(settings.lsp?.oxfmt?.initialization_options?.settings?.['fmt.configPath']).toBe( './vite.config.ts', ); diff --git a/packages/cli/src/utils/editor.ts b/packages/cli/src/utils/editor.ts index 6c3604b500..f986fb847f 100644 --- a/packages/cli/src/utils/editor.ts +++ b/packages/cli/src/utils/editor.ts @@ -49,8 +49,6 @@ const ZED_SETTINGS = { settings: { run: 'onType', fixKind: 'safe_fix', - typeAware: true, - unusedDisableDirectives: 'deny', }, }, },