Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
import { test } from 'vitest';
test('application', () => {});
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
import { defineConfig } from 'vite';
export default defineConfig({});
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{ "name": "lint-import-overrides", "private": true, "type": "module", "devDependencies": { "vite-plus": "latest" } }
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[[case]]
name = "lint_vite_plus_imports_overrides"
vp = "local"
comment = "Existing lint.overrides can disable only the import rule in templates and examples, with no migrate configuration. Other lint rules remain active."
steps = [
{ argv = ["vp", "lint", "--threads=1", "--fix", "app.test.ts", "templates/starter.test.ts", "examples/vite.config.ts"], continue-on-failure = true },
{ argv = ["vpt", "print-file", "app.test.ts"], continue-on-failure = true },
{ argv = ["vpt", "print-file", "templates/starter.test.ts"] },
{ argv = ["vpt", "print-file", "examples/vite.config.ts"] },
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# lint_vite_plus_imports_overrides

Existing lint.overrides can disable only the import rule in templates and examples, with no migrate configuration. Other lint rules remain active.

## `vp lint --threads=1 --fix app.test.ts templates/starter.test.ts examples/vite.config.ts`

**Exit code:** 1

```

× eslint(no-debugger): `debugger` statement is not allowed
╭─[templates/starter.test.ts:2:1]
1 │ import { test } from 'vitest';
2 │ debugger;
· ─────────
3 │ test('template', () => {});
╰────
help: Remove the debugger statement

Found 0 warnings and 1 error.
Finished in <duration> on 3 files with <n> rules using <n> threads.
```

## `vpt print-file app.test.ts`

```
import { test } from 'vite-plus/test';
test('application', () => {});
```

## `vpt print-file templates/starter.test.ts`

```
import { test } from 'vitest';
debugger;
test('template', () => {});
```

## `vpt print-file examples/vite.config.ts`

```
import { defineConfig } from 'vite';
export default defineConfig({});
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { test } from 'vitest';
debugger;
test('template', () => {});
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { defineConfig } from 'vite-plus';
export default defineConfig({
lint: {
jsPlugins: [{ name: 'vite-plus', specifier: 'vite-plus/oxlint-plugin' }],
rules: { 'vite-plus/prefer-vite-plus-imports': 'error', 'no-debugger': 'error' },
overrides: [
{
files: ['templates/**', 'examples/**'],
rules: { 'vite-plus/prefer-vite-plus-imports': 'off' },
},
],
},
});
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{ "name": "standalone-template", "private": true, "type": "module", "devDependencies": { "vite": "^8.0.0", "vitest": "^4.1.11" } }
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
import { expect, test } from 'vitest';
test('outside-workspace', () => expect(1).toBe(1));
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"name": "migration-import-rule",
"private": true,
"type": "module",
"devDependencies": { "vite-plus": "catalog:" },
"devEngines": { "packageManager": { "name": "pnpm", "version": "10.33.0", "onFail": "download" } }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"name": "app", "private": true, "type": "module",
"scripts": { "build": "vite build", "test": "vitest run" },
"devDependencies": { "vite": "catalog:", "vitest": "catalog:legacy", "@vitest/coverage-v8": "catalog:legacy" }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
import { expect, test } from 'vitest';
test('application', () => expect(1).toBe(1));
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
import { defineConfig } from 'vite';
export default defineConfig({});
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
packages:
- packages/*
- templates/*
catalog:
vite-plus: latest
vite: ^8.0.0
catalogs:
legacy:
vitest: ^4.1.11
'@vitest/coverage-v8': ^4.1.11
overrides:
unrelated-package: 1.0.0
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
[[case]]
name = "migration_import_rule_upgrade"
vp = "local"
comment = "Existing Vite+ migration honors ordered lint overrides while still migrating scripts, dependencies, catalogs and overrides."
steps = [
{ argv = ["vp", "migrate", "--no-interactive", "--no-hooks", "--no-agent", "--no-editor"] },
{ argv = ["vpt", "print-file", "templates/starter/vite.config.ts"] },
{ argv = ["vpt", "print-file", "templates/starter/unit.test.ts"] },
{ argv = ["vpt", "print-file", "templates/managed/unit.test.ts"] },
{ argv = ["vpt", "print-file", "examples/standalone/unit.test.ts"] },
{ argv = ["vpt", "print-file", "packages/app/unit.test.ts"] },
{ argv = ["vpt", "print-file", "templates/starter/package.json"] },
{ argv = ["vpt", "print-file", "pnpm-workspace.yaml"] },
{ argv = ["vp", "migrate", "--no-interactive", "--no-hooks", "--no-agent", "--no-editor"] },
{ argv = ["vpt", "write-file", "packages/app/unit.test.ts", "import { test } from 'vitest';\ntest('autofix', () => {});\n"] },
{ argv = ["vp", "lint", "--threads=1", "--fix", "templates/starter/unit.test.ts", "packages/app/unit.test.ts"], continue-on-failure = true },
{ argv = ["vpt", "print-file", "templates/starter/unit.test.ts"], continue-on-failure = true },
{ argv = ["vpt", "print-file", "packages/app/unit.test.ts"] },
]

[[case]]
name = "migration_import_rule_fresh"
vp = "local"
comment = "Initial migration respects the same import rule configuration."
steps = [
{ argv = ["vpt", "json-edit", "package.json", "devDependencies", "{}"] },
{ argv = ["vp", "migrate", "--no-interactive", "--no-hooks", "--no-agent", "--no-editor"] },
{ argv = ["vpt", "print-file", "templates/starter/vite.config.ts"] },
{ argv = ["vpt", "print-file", "templates/starter/unit.test.ts"] },
{ argv = ["vpt", "print-file", "templates/managed/unit.test.ts"] },
{ argv = ["vpt", "print-file", "examples/standalone/unit.test.ts"] },
{ argv = ["vpt", "print-file", "packages/app/unit.test.ts"] },
{ argv = ["vpt", "print-file", "templates/starter/package.json"] },
{ argv = ["vpt", "print-file", "pnpm-workspace.yaml"] },
]

[[case]]
name = "migration_import_rule_full"
vp = "local"
comment = "Full migration and check autofix share the import rule; other lint rules remain active."
steps = [
{ argv = ["vp", "migrate", "--no-interactive", "--no-hooks", "--no-agent", "--no-editor", "--full"] },
{ argv = ["vpt", "print-file", "templates/starter/vite.config.ts"] },
{ argv = ["vpt", "print-file", "templates/starter/unit.test.ts"] },
{ argv = ["vpt", "print-file", "templates/managed/unit.test.ts"] },
{ argv = ["vpt", "print-file", "examples/standalone/unit.test.ts"] },
{ argv = ["vpt", "print-file", "packages/app/unit.test.ts"] },
{ argv = ["vpt", "print-file", "templates/starter/package.json"] },
{ argv = ["vpt", "print-file", "pnpm-workspace.yaml"] },
{ argv = ["vpt", "write-file", "packages/app/unit.test.ts", "import { test } from 'vitest';\ntest('autofix', () => {});\n"] },
{ argv = ["vp", "check", "--no-fmt", "--fix", "templates/starter/unit.test.ts", "packages/app/unit.test.ts"], continue-on-failure = true },
{ argv = ["vpt", "print-file", "templates/starter/unit.test.ts"], continue-on-failure = true },
{ argv = ["vpt", "print-file", "packages/app/unit.test.ts"] },
]

[[case]]
name = "migration_import_rule_global_off"
vp = "local"
comment = "A global numeric off setting applies unless a matching override re-enables imports."
steps = [
{ argv = ["vpt", "write-file", "vite.config.ts", "export default { lint: { rules: { 'vite-plus/prefer-vite-plus-imports': [0] }, overrides: [{ files: ['packages/**'], rules: { 'vite-plus/prefer-vite-plus-imports': [1] } }] } };\n"] },
{ argv = ["vp", "migrate", "--no-interactive", "--no-hooks", "--no-agent", "--no-editor"] },
{ argv = ["vpt", "print-file", "templates/starter/vite.config.ts"] },
{ argv = ["vpt", "print-file", "templates/starter/unit.test.ts"] },
{ argv = ["vpt", "print-file", "templates/managed/unit.test.ts"] },
{ argv = ["vpt", "print-file", "examples/standalone/unit.test.ts"] },
{ argv = ["vpt", "print-file", "packages/app/unit.test.ts"] },
]

[[case]]
name = "migration_import_rule_runtime"
vp = "local"
comment = "Dynamic lint configuration uses normal config resolution."
steps = [
{ argv = ["vpt", "write-file", "vite.config.ts", "const files = ['templates/**', 'examples/**'];\nexport default () => ({ lint: { overrides: [{ files, excludeFiles: ['templates/managed/**'], rules: { 'vite-plus/prefer-vite-plus-imports': 'off' } }] } });\n"] },
{ argv = ["vp", "migrate", "--no-interactive", "--no-hooks", "--no-agent", "--no-editor"] },
{ argv = ["vpt", "print-file", "templates/starter/vite.config.ts"] },
{ argv = ["vpt", "print-file", "templates/starter/unit.test.ts"] },
{ argv = ["vpt", "print-file", "templates/managed/unit.test.ts"] },
{ argv = ["vpt", "print-file", "examples/standalone/unit.test.ts"] },
{ argv = ["vpt", "print-file", "packages/app/unit.test.ts"] },
]

[[case]]
name = "migration_import_rule_extends"
vp = "local"
comment = "Inherited overrides apply before local overrides; bare patterns match at any depth."
steps = [
{ argv = ["vpt", "write-file", "vite.config.ts", "export default { lint: { extends: [{ overrides: [{ files: ['*.ts'], rules: { 'vite-plus/prefer-vite-plus-imports': 'off' } }] }], overrides: [{ files: ['packages/**', './templates/managed/**'], rules: { 'vite-plus/prefer-vite-plus-imports': ['error'] } }] } };\n"] },
{ argv = ["vp", "migrate", "--no-interactive", "--no-hooks", "--no-agent", "--no-editor"] },
{ argv = ["vpt", "print-file", "templates/starter/vite.config.ts"] },
{ argv = ["vpt", "print-file", "templates/starter/unit.test.ts"] },
{ argv = ["vpt", "print-file", "templates/managed/unit.test.ts"] },
{ argv = ["vpt", "print-file", "examples/standalone/unit.test.ts"] },
{ argv = ["vpt", "print-file", "packages/app/unit.test.ts"] },
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# migration_import_rule_extends

Inherited overrides apply before local overrides; bare patterns match at any depth.

## `vpt write-file vite.config.ts 'export default { lint: { extends: [{ overrides: [{ files: ['\''*.ts'\''], rules: { '\''vite-plus/prefer-vite-plus-imports'\'': '\''off'\'' } }] }], overrides: [{ files: ['\''packages/**'\'', '\''./templates/managed/**'\''], rules: { '\''vite-plus/prefer-vite-plus-imports'\'': ['\''error'\''] } }] } };
'`

```
```

## `vp migrate --no-interactive --no-hooks --no-agent --no-editor`

```
VITE+ - The Unified Toolchain for the Web

◇ Updated . to Vite+ <version>
• Node <version> pnpm <version>
• Dependencies:
vite-plus latest → <version>
vite → <version>
• 3 files had imports rewritten
• Package manager settings configured
```

## `vpt print-file templates/starter/vite.config.ts`

```
import { defineConfig } from 'vite';
export default defineConfig({test: {
// Vitest v4 compatibility: preserve mock call history.
// Remove after tests no longer rely on calls from setup or earlier tests.
// https://viteplus.dev/guide/vitest-v5#remove-unneeded-compatibility-settings
// https://vitest.dev/guide/migration/#clearmocks-is-enabled-by-default
clearMocks: false,
poolOptions: {threads: {singleThread: true}}}});
```

## `vpt print-file templates/starter/unit.test.ts`

```
import { expect, test } from 'vitest';
debugger;
test('template', () => expect(1).toBe(1));
```

## `vpt print-file templates/managed/unit.test.ts`

```
import { expect, test } from 'vite-plus/test';
test('included', () => expect(1).toBe(1));
```

## `vpt print-file examples/standalone/unit.test.ts`

```
import { expect, test } from 'vitest';
test('outside-workspace', () => expect(1).toBe(1));
```

## `vpt print-file packages/app/unit.test.ts`

```
import { expect, test } from 'vite-plus/test';
test('application', () => expect(1).toBe(1));
```
Loading
Loading