#11440·oxc

☂️ 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