Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

vp migrate crashes with "Undefined meta var" when a migrated config string contains `$`

Aberta
#3,045 0 comentários 0 reações 1 responsável Ver no GitHub

Mantenedores costumam responder em até 1 dia

@BenjyLimmy já está trabalhando nisso.

Desde 14/10/2026.

  • #3046 de @BenjyLimmy — aberto

Avaliação

Esta issue ainda não foi avaliada.

Descrição

bug
Describe the bug

vp migrate crashes when a config value it merges into vite.config.ts contains $ followed by uppercase letters or digits, for example $200 or $FOO.

■  Fail to parse yaml as Rule.
Error: Fail to parse yaml as Rule.
  cause: Error: Undefined meta var `200` used in `fix`.

The crash happens after migration has already deleted eslint.config.mjs and written .oxlintrc.json, so the project is left half-migrated.

It looks like generate_merge_rule in crates/vp_migration/src/vite_config.rs pastes the JSON config text into the ast-grep fix: template, where $NAME and $<digits> are metavariable syntax. Any string value with that shape breaks the rule, for example an ESLint message, an i18n ignore list or a URL with $ in it.

Expected: string values are inserted literally.

I intend to submit a PR for this.

Reproduction

Inline below. It needs three files and no repo.

Steps to reproduce

package.json

{
  "name": "vp-migrate-dollar-repro",
  "private": true,
  "type": "module",
  "packageManager": "[email protected]",
  "devDependencies": {
    "vite": "8.2.2",
    "eslint": "10.8.1"
  }
}

eslint.config.mjs

export default [
  {
    rules: {
      'no-restricted-imports': ['error', {
        paths: [{ name: 'moment', message: 'Use date-fns. moment costs $200 of bundle budget.' }],
      }],
    },
  },
];

vite.config.ts

import { defineConfig } from 'vite';

export default defineConfig({});
git init && git add -A && git commit -m init
pnpm install
pnpm dlx [email protected] vp migrate --no-interactive
git status --porcelain

Result: exit code 1 with the error above. git status shows eslint.config.mjs deleted and .oxlintrc.json untracked. Changing $200 to 200 dollars makes the migration succeed.

System Info
# vp env current: not available, the global vp CLI is not installed (ran through pnpm dlx)
$ pnpm dlx [email protected] vp -V
vp v1.1.0

Local vite-plus:
  vite-plus  v1.1.0

Tools:
  vite             v8.3.3
  rolldown         v1.2.12
  vitest           v5.0.3
  oxfmt            v0.72.0
  oxlint           v1.87.0
  oxlint-tsgolint  v7.0.2003

macOS 26.6.2 arm64, Node v22.23.2, pnpm 10.14.0
Used Package Manager

pnpm

Logs
■  Fail to parse yaml as Rule.
Error: Fail to parse yaml as Rule.
    at mergeAndRemoveJsonConfig (vite-plus/dist/editor-B8tkz7nL.js:9238:17)
  code: 'GenericFailure',
  cause: Error: Undefined meta var `200` used in `fix`.
      at mergeAndRemoveJsonConfig (vite-plus/dist/editor-B8tkz7nL.js:9238:17)
      at mergeViteConfigFiles (vite-plus/dist/editor-B8tkz7nL.js:9184:3)
      at rewriteMonorepoProject (vite-plus/dist/editor-B8tkz7nL.js:9988:2)
      at rewriteRootWorkspacePackageJson (vite-plus/dist/editor-B8tkz7nL.js:7947:2)
      at rewriteMonorepo (vite-plus/dist/editor-B8tkz7nL.js:9949:2)
      at executeMigrationPlan (vite-plus/dist/migration/bin.js:3860:32)
Validations
  • Read the Contributing Guidelines.
  • Check that there isn't already an issue for the same bug.
  • Confirm this is a Vite+ issue and not an upstream issue (Vite, Vitest, tsdown, Rolldown, or Oxc).
  • The provided reproduction is a minimal reproducible example.
Linguagem predominante
Rust
Estrelas
6k
Forks
274
Merge médio
1d 11h
PRs com merge (30d)
206

Preparar o ambiente

Abrir no Codespaces

Inicia o contêiner de desenvolvimento do projeto no navegador, com a sua própria conta do GitHub.

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de voidzero-dev/vite-plus

Todas as issues de voidzero-dev/vite-plus

Issues semelhantes

Mais issues de Rust

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.