Commit 1c693c2
committed
feat(create): auto-migrate ESLint/Prettier to oxlint/oxfmt (#1434)
Vite+ is opinionated about oxlint + oxfmt, but `vp create` previously
scaffolded templates (e.g. `create-vite --template react-ts`) and left
their ESLint flat config and Prettier configs untouched — forcing users
to run `vp migrate` as a second step. This wires the existing migration
helpers into `vp create` so freshly scaffolded projects are already on
the unified toolchain, with no confirmation prompt.
- Relocate the ESLint/Prettier prompt/warn/confirm helpers from
migration/bin.ts to migration/migrator.ts so create/bin.ts can reuse
them without triggering bin.ts's top-level `main()` side effect.
- In create/bin.ts, run `promptEslintMigration` and
`promptPrettierMigration` after `runViteInstall` (so `@oxlint/migrate`
can resolve the template's ESLint plugin imports) and before
`runViteFmt`. Always non-interactive — unlike `vp migrate`, the
scaffold has no prior user preferences to respect.
- Gate on `installSummary.status === 'installed'` so VP_SKIP_INSTALL
snap-test runs skip migration cleanly.
- Update rfcs/code-generator.md: flip the "does NOT migrate
ESLint/Prettier" bullets, update flow diagrams and example output,
and document why create skips the confirmation prompt.
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> **Medium Risk**
> Changes `vp create` post-scaffold flow to conditionally install-before-rewrite and run non-interactive ESLint/Prettier migrations, which can affect dependency installation order and generated configs across package managers (notably Yarn). CI coverage is added, but the behavior change is user-facing and tied to tooling resolution.
>
> **Overview**
> `vp create` now detects when a scaffolded template includes ESLint (flat config) and/or Prettier and **automatically migrates** them to oxlint/oxfmt *before* the usual Vite+ rewrite, so the generated `.oxlintrc.json`/`.oxfmtrc.json` get merged into `vite.config.ts` and scripts/deps are updated.
>
> To enable reuse without CLI side effects, the ESLint/Prettier prompt/warn/confirm helpers are moved from `migration/bin.ts` into `migration/migrator.ts` (and `setPackageManager` is exported), and `create/bin.ts` adds an install-first path (including forcing Yarn `node-modules` linker) gated on successful install.
>
> CI and snapshot coverage are expanded with a remote `create-vite react-ts` case and assertions that `eslint.config.js` is removed, no loose `.oxlintrc.json` remains, `vite.config.ts` has a `lint` section, and `package.json` drops `eslint` while using `vp lint`.
>
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 0f8b49b. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->1 parent eafe577 commit 1c693c2
7 files changed
Lines changed: 436 additions & 146 deletions
File tree
- .github/workflows
- packages/cli
- snap-tests-global/new-create-vite-migrates-eslint-prettier
- src
- create
- migration
- rfcs
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
123 | 123 | | |
124 | 124 | | |
125 | 125 | | |
| 126 | + | |
126 | 127 | | |
127 | 128 | | |
128 | 129 | | |
129 | 130 | | |
| 131 | + | |
130 | 132 | | |
131 | 133 | | |
132 | 134 | | |
133 | 135 | | |
134 | 136 | | |
135 | 137 | | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
136 | 149 | | |
137 | 150 | | |
138 | 151 | | |
| |||
253 | 266 | | |
254 | 267 | | |
255 | 268 | | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
256 | 304 | | |
257 | 305 | | |
258 | 306 | | |
| |||
Lines changed: 135 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
Lines changed: 16 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
1 | 2 | | |
2 | 3 | | |
3 | 4 | | |
| |||
7 | 8 | | |
8 | 9 | | |
9 | 10 | | |
| 11 | + | |
10 | 12 | | |
| 13 | + | |
11 | 14 | | |
12 | 15 | | |
| 16 | + | |
| 17 | + | |
13 | 18 | | |
14 | 19 | | |
15 | 20 | | |
| 21 | + | |
16 | 22 | | |
17 | 23 | | |
18 | 24 | | |
| |||
893 | 899 | | |
894 | 900 | | |
895 | 901 | | |
| 902 | + | |
| 903 | + | |
| 904 | + | |
| 905 | + | |
| 906 | + | |
| 907 | + | |
| 908 | + | |
| 909 | + | |
| 910 | + | |
896 | 911 | | |
| 912 | + | |
| 913 | + | |
| 914 | + | |
| 915 | + | |
| 916 | + | |
| 917 | + | |
| 918 | + | |
| 919 | + | |
| 920 | + | |
| 921 | + | |
| 922 | + | |
| 923 | + | |
| 924 | + | |
| 925 | + | |
| 926 | + | |
| 927 | + | |
| 928 | + | |
| 929 | + | |
| 930 | + | |
| 931 | + | |
| 932 | + | |
| 933 | + | |
| 934 | + | |
| 935 | + | |
| 936 | + | |
| 937 | + | |
| 938 | + | |
| 939 | + | |
| 940 | + | |
| 941 | + | |
897 | 942 | | |
898 | 943 | | |
899 | 944 | | |
900 | 945 | | |
901 | | - | |
902 | | - | |
903 | | - | |
904 | | - | |
905 | | - | |
906 | | - | |
907 | | - | |
908 | 946 | | |
909 | 947 | | |
910 | 948 | | |
| |||
965 | 1003 | | |
966 | 1004 | | |
967 | 1005 | | |
| 1006 | + | |
| 1007 | + | |
| 1008 | + | |
| 1009 | + | |
| 1010 | + | |
| 1011 | + | |
| 1012 | + | |
| 1013 | + | |
| 1014 | + | |
| 1015 | + | |
968 | 1016 | | |
969 | 1017 | | |
970 | 1018 | | |
| |||
974 | 1022 | | |
975 | 1023 | | |
976 | 1024 | | |
| 1025 | + | |
| 1026 | + | |
| 1027 | + | |
977 | 1028 | | |
978 | 1029 | | |
979 | 1030 | | |
| |||
0 commit comments