$ the-wire · showcase
eslint-plugin-vue moves 26 rules to TypeScript in one day
By RepoJournal · Filed · About Vue.js · Composed from the cited sources · methodology
Five batches of the eslint-plugin-vue TypeScript migration landed together, converting 26 rules from JSDoc-typed JavaScript to TypeScript source without changing rule behavior.
refactor: migrate remaining `valid-v-*` rules to TypeScript vuejs/eslint-plugin-vue
The larger directive validators, `bind-sync`, `for`, `memo`, `model`, `on` and `slot`, now carry real TypeScript annotations instead of JSDoc types, and the `VSlotVForVariables` typedef became an interface. Each shares the same shape, a template visitor plus a few local helpers depending only on `utils`, which is why they migrated in one review.
refactor: migrate HTML markup rules to TypeScript vuejs/eslint-plugin-vue
Nine markup rules, including `html-button-has-type`, `html-closing-bracket-spacing`, `max-attributes-per-line` and `mustache-interpolation-spacing`, moved over together since each inspects start tags, attributes or mustaches through the template token store. Rule source links in the docs were updated to point at the new files.
refactor: migrate computed and watch rules to TypeScript vuejs/eslint-plugin-vue
`no-async-in-computed-properties`, `return-in-computed-property`, `no-arrow-functions-in-watch` and three siblings went in a single batch, all of them reading `computed`/`watch` definitions through the same `utils` helpers. The PR author describes the work as mechanical, listing "ESM imports and exports" as the bulk of it.
refactor: migrate directive rules to TypeScript vuejs/eslint-plugin-vue
Ten template directive rules, from `no-v-html` and `no-v-text` through `no-useless-v-bind` and `no-template-shadow`, converted next. They regroup cleanly because each is a `defineTemplateBodyVisitor` over attributes or elements with no dependents elsewhere in the package.
refactor: migrate `comment-directive` to TypeScript vuejs/eslint-plugin-vue
`comment-directive` migrated alone: it lints nothing and only reports markers that `lib/processor.ts` turns into enable/disable ranges for `<template>`, so the processor keeps matching it by rule id and needed no changes. Elsewhere, router bumped pnpm, vitepress re-triggered a site rebuild, and awesome-vue added CyteEditor to its rich text editing list.