☂️ eslint-plugin-vue
Author: camc314Created Jun 2, 2025Updated Sep 17, 2026
LabelsC-enhancementE-Help WantedA-linter
[!WARNING] This comment is maintained by CI. Do not edit this comment directly. To update comment template, see https://github.com/oxc-project/oxc/tree/main/tasks/lint_rules
This is the tracking issue for eslint-plugin-vue.
There are 249(+ 4 deprecated) rules.
- 10/118 recommended rules are remaining as TODO
- 7 of which have pending fixes
- 27/131 not recommended rules are remaining as TODO
- 1 of which have pending fixes
To get started, run the following command:
just new-vue-rule <RULE_NAME>
Then implement the rule and get all the tests passing.
Recommended rules
✅: 36, : 72, ⏳: 7 / total: 118| Status | Name | Rationale |
|---|---|---|
| vue/attribute-hyphenation | Not currently possible, as it requires Vue template parsing. | |
| vue/attributes-order | Not currently possible, as it requires Vue template parsing. | |
| vue/block-order | Not currently possible, as it requires Vue template parsing. | |
| vue/comment-directive | Not currently possible, as it requires Vue template parsing. Also possibly unnecessary as its own rule, as oxlint directives should be implemented at the same time as Vue template parsing. | |
| ✅ | vue/component-definition-name-casing | |
| vue/first-attribute-linebreak | Stylistic rule. | |
| vue/html-closing-bracket-newline | Stylistic rule. | |
| vue/html-closing-bracket-spacing | Stylistic rule. | |
| vue/html-end-tags | Not currently possible, as it requires Vue template parsing. | |
| vue/html-indent | Stylistic rule. | |
| vue/html-quotes | Stylistic rule. | |
| vue/html-self-closing | Not currently possible, as it requires Vue template parsing. | |
| vue/jsx-uses-vars | ||
| vue/max-attributes-per-line | Stylistic rule. | |
| vue/multi-word-component-names | ||
| vue/multiline-html-element-content-newline | Not currently possible, as it requires Vue template parsing. | |
| vue/mustache-interpolation-spacing | Stylistic rule. | |
| ✅ | vue/no-arrow-functions-in-watch | |
| ✅ | vue/no-async-in-computed-properties | |
| vue/no-child-content | Not currently possible, as it requires Vue template parsing. | |
| ✅ | vue/no-computed-properties-in-data | |
| ✅⏳ | vue/no-deprecated-data-object-declaration | |
| ✅ | vue/no-deprecated-delete-set | |
| ✅ | vue/no-deprecated-destroyed-lifecycle | |
| vue/no-deprecated-dollar-listeners-api | ||
| vue/no-deprecated-dollar-scopedslots-api | ||
| ✅ | vue/no-deprecated-events-api | |
| vue/no-deprecated-filter | Not currently possible, as it requires Vue template parsing. | |
| vue/no-deprecated-functional-template | Not currently possible, as it requires Vue template parsing. | |
| vue/no-deprecated-html-element-is | Not currently possible, as it requires Vue template parsing. | |
| vue/no-deprecated-inline-template | Not currently possible, as it requires Vue template parsing. | |
| ✅⏳ | vue/no-deprecated-model-definition | |
| ✅⏳ | vue/no-deprecated-props-default-this | |
| vue/no-deprecated-router-link-tag-prop | Not currently possible, as it requires Vue template parsing. | |
| vue/no-deprecated-scope-attribute | Not currently possible, as it requires Vue template parsing. | |
| vue/no-deprecated-slot-attribute | Not currently possible, as it requires Vue template parsing. | |
| vue/no-deprecated-slot-scope-attribute | Not currently possible, as it requires Vue template parsing. | |
| vue/no-deprecated-v-bind-sync | Not currently possible, as it requires Vue template parsing. | |
| vue/no-deprecated-v-is | Not currently possible, as it requires Vue template parsing. | |
| vue/no-deprecated-v-on-native-modifier | Not currently possible, as it requires Vue template parsing. | |
| vue/no-deprecated-v-on-number-modifiers | Not currently possible, as it requires Vue template parsing. | |
| ✅ | vue/no-deprecated-vue-config-keycodes | |
| ✅ | vue/no-dupe-keys | |
| vue/no-dupe-v-else-if | Not currently possible, as it requires Vue template parsing. | |
| vue/no-duplicate-attributes | Not currently possible, as it requires Vue template parsing. | |
| ✅ | vue/no-export-in-script-setup | |
| ✅ | vue/no-expose-after-await | |
| ✅ | vue/no-lifecycle-after-await | |
| vue/no-lone-template | Not currently possible, as it requires Vue template parsing. | |
| vue/no-multi-spaces | Stylistic rule. | |
| ✅⏳ | vue/no-multiple-slot-args | |
| vue/no-mutating-props | ||
| vue/no-parsing-error | Not currently possible, as it requires Vue template parsing. | |
| vue/no-ref-as-operand | ||
| ✅ | vue/no-required-prop-with-default | |
| ✅ | vue/no-reserved-component-names | |
| ✅ | vue/no-reserved-keys | |
| ✅ | vue/no-reserved-props | |
| ✅⏳ | vue/no-shared-component-data | |
| ✅ | vue/no-side-effects-in-computed-properties | |
| vue/no-spaces-around-equal-signs-in-attribute | Stylistic rule. | |
| vue/no-template-key | Not currently possible, as it requires Vue template parsing. | |
| vue/no-template-shadow | Not currently possible, as it requires Vue template parsing. | |
| vue/no-textarea-mustache | Not currently possible, as it requires Vue template parsing. | |
| vue/no-unused-components | Not currently possible, as it requires Vue template parsing. | |
| vue/no-unused-vars | Not currently possible, as it requires Vue template parsing. May also prefer to cover this via the core no-unused-vars rule. | |
| vue/no-use-computed-property-like-method | ||
| vue/no-use-v-if-with-v-for | Not currently possible, as it requires Vue template parsing. | |
| vue/no-useless-template-attributes | Not currently possible, as it requires Vue template parsing. | |
| vue/no-v-for-template-key-on-child | Deprecated. | |
| vue/no-v-html | Not currently possible, as it requires Vue template parsing. | |
| vue/no-v-text-v-html-on-component | Not currently possible, as it requires Vue template parsing. | |
| ✅ | vue/no-watch-after-await | |
| vue/one-component-per-file | ||
| vue/order-in-components | ||
| ✅ | vue/prefer-import-from-vue | |
| ✅ | vue/prop-name-casing | |
| vue/require-component-is | Not currently possible, as it requires Vue template parsing. | |
| ✅ | vue/require-default-prop | |
| vue/require-explicit-emits | Not currently possible, as it requires Vue template parsing. | |
| ✅ | vue/require-prop-type-constructor | |
| ✅ | vue/require-prop-types | |
| ✅ | vue/require-render-return | |
| ✅ | vue/require-slots-as-functions | |
| vue/require-toggle-inside-transition | Not currently possible, as it requires Vue template parsing. | |
| vue/require-v-for-key | Not currently possible, as it requires Vue template parsing. | |
| vue/require-valid-default-prop | ||
| ✅ | vue/return-in-computed-property | |
| ✅ | vue/return-in-emits-validator | |
| vue/singleline-html-element-content-newline | Not currently possible, as it requires Vue template parsing. | |
| vue/this-in-template | Not currently possible, as it requires Vue template parsing. | |
| vue/use-v-on-exact | Not currently possible, as it requires Vue template parsing. | |
| vue/v-bind-style | Not currently possible, as it requires Vue template parsing. | |
| vue/v-on-event-hyphenation | Not currently possible, as it requires Vue template parsing. | |
| vue/v-on-style | Not currently possible, as it requires Vue template parsing. | |
| vue/v-slot-style | Not currently possible, as it requires Vue template parsing. | |
| vue/valid-attribute-name | Not currently possible, as it requires Vue template parsing. | |
| ✅⏳ | vue/valid-define-emits | |
| ✅ | vue/valid-define-options | |
| ✅⏳ | vue/valid-define-props | |
| ✅ | vue/valid-next-tick | |
| vue/valid-template-root | Not currently possible, as it requires Vue template parsing. | |
| vue/valid-v-bind | Not currently possible, as it requires Vue template parsing. | |
| vue/valid-v-cloak | Not currently possible, as it requires Vue template parsing. | |
| vue/valid-v-else | Not currently possible, as it requires Vue template parsing. | |
| vue/valid-v-else-if | Not currently possible, as it requires Vue template parsing. | |
| vue/valid-v-for | Not currently possible, as it requires Vue template parsing. | |
| vue/valid-v-html | Not currently possible, as it requires Vue template parsing. | |
| vue/valid-v-if | Not currently possible, as it requires Vue template parsing. | |
| vue/valid-v-is | Not currently possible, as it requires Vue template parsing. | |
| vue/valid-v-memo | Not currently possible, as it requires Vue template parsing. | |
| vue/valid-v-model | Not currently possible, as it requires Vue template parsing. | |
| vue/valid-v-on | Not currently possible, as it requires Vue template parsing. | |
| vue/valid-v-once | Not currently possible, as it requires Vue template parsing. | |
| vue/valid-v-pre | Not currently possible, as it requires Vue template parsing. | |
| vue/valid-v-show | Not currently possible, as it requires Vue template parsing. | |
| vue/valid-v-slot | Not currently possible, as it requires Vue template parsing. | |
| vue/valid-v-text | Not currently possible, as it requires Vue template parsing. |
✅ = Implemented, = Not intending to implement, ⏳ = Fix pending
Not recommended rules
✅: 10, : 94, ⏳: 1 / total: 131| Status | Name | Rationale |
|---|---|---|
| vue/array-bracket-newline | Stylistic rule. | |
| vue/array-bracket-spacing | Stylistic rule. | |
| vue/array-element-newline | Stylistic rule. | |
| vue/arrow-spacing | Stylistic rule. | |
| vue/block-lang | Not currently possible, as it requires Vue template parsing. | |
| vue/block-spacing | Stylistic rule. | |
| vue/block-tag-newline | Stylistic rule. | |
| vue/brace-style | Stylistic rule. | |
| vue/camelcase | Not currently possible, as it requires Vue template parsing. | |
| vue/comma-dangle | Stylistic rule. | |
| vue/comma-spacing | Stylistic rule. | |
| vue/comma-style | Stylistic rule. | |
| vue/component-api-style | ||
| vue/component-name-in-template-casing | Not currently possible, as it requires Vue template parsing. | |
| vue/component-options-name-casing | ||
| vue/custom-event-name-casing | Not currently possible, as it requires Vue template parsing. | |
| ✅⏳ | vue/define-emits-declaration | |
| vue/define-macros-order | Stylistic rule. | |
| ✅ | vue/define-props-declaration | |
| ✅ | vue/define-props-destructuring | |
| vue/dot-location | Not currently possible, as it requires Vue template parsing. | |
| vue/dot-notation | Not currently possible, as it requires Vue template parsing. | |
| vue/enforce-style-attribute | Not currently possible, as it requires Vue template parsing. | |
| vue/eqeqeq | Not currently possible, as it requires Vue template parsing. | |
| vue/func-call-spacing | Stylistic rule. | |
| vue/html-button-has-type | Not currently possible, as it requires Vue template parsing. | |
| vue/html-comment-content-newline | Stylistic rule. | |
| vue/html-comment-content-spacing | Stylis |
Source: oxc-project/oxc