oxc icon indicating copy to clipboard operation
oxc copied to clipboard

☂️ eslint-plugin-vue

Open camc314 opened this issue 6 months ago • 11 comments

[!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 tracking issue for eslint-plugin-vue.

There are 243(+ 4 deprecated) rules.

  • 1/8 recommended rules are remaining as TODO
  • 70/235 not recommended rules are remaining as TODO

To get started, run the following command:

just new-vue-rule <RULE_NAME>

Then register the rule in crates/oxc_linter/src/rules.rs and also declare_all_lint_rules at the bottom.

Recommended rules

✨: 2, 🚫: 5 / total: 8
Status Name Docs
🚫 vue/attributes-order https://eslint.vuejs.org/rules/attributes-order.html
🚫 vue/block-order https://eslint.vuejs.org/rules/block-order.html
🚫 vue/no-lone-template https://eslint.vuejs.org/rules/no-lone-template.html
vue/no-multiple-slot-args https://eslint.vuejs.org/rules/no-multiple-slot-args.html
vue/no-required-prop-with-default https://eslint.vuejs.org/rules/no-required-prop-with-default.html
🚫 vue/no-v-html https://eslint.vuejs.org/rules/no-v-html.html
vue/order-in-components https://eslint.vuejs.org/rules/order-in-components.html
🚫 vue/this-in-template https://eslint.vuejs.org/rules/this-in-template.html

✨ = Implemented, 🚫 = No need to implement

Not recommended rules

✨: 11, 🚫: 154 / total: 235
Status Name Docs
🚫 vue/array-bracket-newline https://eslint.vuejs.org/rules/array-bracket-newline.html
🚫 vue/array-bracket-spacing https://eslint.vuejs.org/rules/array-bracket-spacing.html
🚫 vue/array-element-newline https://eslint.vuejs.org/rules/array-element-newline.html
🚫 vue/arrow-spacing https://eslint.vuejs.org/rules/arrow-spacing.html
🚫 vue/attribute-hyphenation https://eslint.vuejs.org/rules/attribute-hyphenation.html
🚫 vue/block-lang https://eslint.vuejs.org/rules/block-lang.html
🚫 vue/block-spacing https://eslint.vuejs.org/rules/block-spacing.html
🚫 vue/block-tag-newline https://eslint.vuejs.org/rules/block-tag-newline.html
🚫 vue/brace-style https://eslint.vuejs.org/rules/brace-style.html
🚫 vue/camelcase https://eslint.vuejs.org/rules/camelcase.html
🚫 vue/comma-dangle https://eslint.vuejs.org/rules/comma-dangle.html
🚫 vue/comma-spacing https://eslint.vuejs.org/rules/comma-spacing.html
🚫 vue/comma-style https://eslint.vuejs.org/rules/comma-style.html
🚫 vue/comment-directive https://eslint.vuejs.org/rules/comment-directive.html
vue/component-api-style https://eslint.vuejs.org/rules/component-api-style.html
vue/component-definition-name-casing https://eslint.vuejs.org/rules/component-definition-name-casing.html
🚫 vue/component-name-in-template-casing https://eslint.vuejs.org/rules/component-name-in-template-casing.html
vue/component-options-name-casing https://eslint.vuejs.org/rules/component-options-name-casing.html
🚫 vue/custom-event-name-casing https://eslint.vuejs.org/rules/custom-event-name-casing.html
vue/define-emits-declaration https://eslint.vuejs.org/rules/define-emits-declaration.html
🚫 vue/define-macros-order https://eslint.vuejs.org/rules/define-macros-order.html
vue/define-props-declaration https://eslint.vuejs.org/rules/define-props-declaration.html
vue/define-props-destructuring https://eslint.vuejs.org/rules/define-props-destructuring.html
🚫 vue/dot-location https://eslint.vuejs.org/rules/dot-location.html
🚫 vue/dot-notation https://eslint.vuejs.org/rules/dot-notation.html
🚫 vue/enforce-style-attribute https://eslint.vuejs.org/rules/enforce-style-attribute.html
🚫 vue/eqeqeq https://eslint.vuejs.org/rules/eqeqeq.html
🚫 vue/first-attribute-linebreak https://eslint.vuejs.org/rules/first-attribute-linebreak.html
🚫 vue/func-call-spacing https://eslint.vuejs.org/rules/func-call-spacing.html
🚫 vue/html-button-has-type https://eslint.vuejs.org/rules/html-button-has-type.html
🚫 vue/html-closing-bracket-newline https://eslint.vuejs.org/rules/html-closing-bracket-newline.html
🚫 vue/html-closing-bracket-spacing https://eslint.vuejs.org/rules/html-closing-bracket-spacing.html
🚫 vue/html-comment-content-newline https://eslint.vuejs.org/rules/html-comment-content-newline.html
🚫 vue/html-comment-content-spacing https://eslint.vuejs.org/rules/html-comment-content-spacing.html
🚫 vue/html-comment-indent https://eslint.vuejs.org/rules/html-comment-indent.html
🚫 vue/html-end-tags https://eslint.vuejs.org/rules/html-end-tags.html
🚫 vue/html-indent https://eslint.vuejs.org/rules/html-indent.html
🚫 vue/html-quotes https://eslint.vuejs.org/rules/html-quotes.html
🚫 vue/html-self-closing https://eslint.vuejs.org/rules/html-self-closing.html
vue/jsx-uses-vars https://eslint.vuejs.org/rules/jsx-uses-vars.html
🚫 vue/key-spacing https://eslint.vuejs.org/rules/key-spacing.html
🚫 vue/keyword-spacing https://eslint.vuejs.org/rules/keyword-spacing.html
vue/match-component-file-name https://eslint.vuejs.org/rules/match-component-file-name.html
vue/match-component-import-name https://eslint.vuejs.org/rules/match-component-import-name.html
🚫 vue/max-attributes-per-line https://eslint.vuejs.org/rules/max-attributes-per-line.html
🚫 vue/max-len https://eslint.vuejs.org/rules/max-len.html
🚫 vue/max-lines-per-block https://eslint.vuejs.org/rules/max-lines-per-block.html
vue/max-props https://eslint.vuejs.org/rules/max-props.html
🚫 vue/max-template-depth https://eslint.vuejs.org/rules/max-template-depth.html
vue/multi-word-component-names https://eslint.vuejs.org/rules/multi-word-component-names.html
🚫 vue/multiline-html-element-content-newline https://eslint.vuejs.org/rules/multiline-html-element-content-newline.html
🚫 vue/multiline-ternary https://eslint.vuejs.org/rules/multiline-ternary.html
🚫 vue/mustache-interpolation-spacing https://eslint.vuejs.org/rules/mustache-interpolation-spacing.html
🚫 vue/new-line-between-multi-line-property https://eslint.vuejs.org/rules/new-line-between-multi-line-property.html
vue/next-tick-style https://eslint.vuejs.org/rules/next-tick-style.html
vue/no-arrow-functions-in-watch https://eslint.vuejs.org/rules/no-arrow-functions-in-watch.html
vue/no-async-in-computed-properties https://eslint.vuejs.org/rules/no-async-in-computed-properties.html
🚫 vue/no-bare-strings-in-template https://eslint.vuejs.org/rules/no-bare-strings-in-template.html
vue/no-boolean-default https://eslint.vuejs.org/rules/no-boolean-default.html
🚫 vue/no-child-content https://eslint.vuejs.org/rules/no-child-content.html
vue/no-computed-properties-in-data https://eslint.vuejs.org/rules/no-computed-properties-in-data.html
🚫 vue/no-console https://eslint.vuejs.org/rules/no-console.html
🚫 vue/no-constant-condition https://eslint.vuejs.org/rules/no-constant-condition.html
🚫 vue/no-custom-modifiers-on-v-model https://eslint.vuejs.org/rules/no-custom-modifiers-on-v-model.html
vue/no-deprecated-data-object-declaration https://eslint.vuejs.org/rules/no-deprecated-data-object-declaration.html
vue/no-deprecated-delete-set https://eslint.vuejs.org/rules/no-deprecated-delete-set.html
vue/no-deprecated-destroyed-lifecycle https://eslint.vuejs.org/rules/no-deprecated-destroyed-lifecycle.html
vue/no-deprecated-dollar-listeners-api https://eslint.vuejs.org/rules/no-deprecated-dollar-listeners-api.html
vue/no-deprecated-dollar-scopedslots-api https://eslint.vuejs.org/rules/no-deprecated-dollar-scopedslots-api.html
vue/no-deprecated-events-api https://eslint.vuejs.org/rules/no-deprecated-events-api.html
🚫 vue/no-deprecated-filter https://eslint.vuejs.org/rules/no-deprecated-filter.html
🚫 vue/no-deprecated-functional-template https://eslint.vuejs.org/rules/no-deprecated-functional-template.html
🚫 vue/no-deprecated-html-element-is https://eslint.vuejs.org/rules/no-deprecated-html-element-is.html
🚫 vue/no-deprecated-inline-template https://eslint.vuejs.org/rules/no-deprecated-inline-template.html
vue/no-deprecated-model-definition https://eslint.vuejs.org/rules/no-deprecated-model-definition.html
vue/no-deprecated-props-default-this https://eslint.vuejs.org/rules/no-deprecated-props-default-this.html
🚫 vue/no-deprecated-router-link-tag-prop https://eslint.vuejs.org/rules/no-deprecated-router-link-tag-prop.html
🚫 vue/no-deprecated-scope-attribute https://eslint.vuejs.org/rules/no-deprecated-scope-attribute.html
🚫 vue/no-deprecated-slot-attribute https://eslint.vuejs.org/rules/no-deprecated-slot-attribute.html
🚫 vue/no-deprecated-slot-scope-attribute https://eslint.vuejs.org/rules/no-deprecated-slot-scope-attribute.html
🚫 vue/no-deprecated-v-bind-sync https://eslint.vuejs.org/rules/no-deprecated-v-bind-sync.html
🚫 vue/no-deprecated-v-is https://eslint.vuejs.org/rules/no-deprecated-v-is.html
🚫 vue/no-deprecated-v-on-native-modifier https://eslint.vuejs.org/rules/no-deprecated-v-on-native-modifier.html
🚫 vue/no-deprecated-v-on-number-modifiers https://eslint.vuejs.org/rules/no-deprecated-v-on-number-modifiers.html
vue/no-deprecated-vue-config-keycodes https://eslint.vuejs.org/rules/no-deprecated-vue-config-keycodes.html
vue/no-dupe-keys https://eslint.vuejs.org/rules/no-dupe-keys.html
🚫 vue/no-dupe-v-else-if https://eslint.vuejs.org/rules/no-dupe-v-else-if.html
🚫 vue/no-duplicate-attr-inheritance https://eslint.vuejs.org/rules/no-duplicate-attr-inheritance.html
🚫 vue/no-duplicate-attributes https://eslint.vuejs.org/rules/no-duplicate-attributes.html
🚫 vue/no-empty-component-block https://eslint.vuejs.org/rules/no-empty-component-block.html
🚫 vue/no-empty-pattern https://eslint.vuejs.org/rules/no-empty-pattern.html
vue/no-export-in-script-setup https://eslint.vuejs.org/rules/no-export-in-script-setup.html
vue/no-expose-after-await https://eslint.vuejs.org/rules/no-expose-after-await.html
🚫 vue/no-extra-parens https://eslint.vuejs.org/rules/no-extra-parens.html
🚫 vue/no-implicit-coercion https://eslint.vuejs.org/rules/no-implicit-coercion.html
vue/no-import-compiler-macros https://eslint.vuejs.org/rules/no-import-compiler-macros.html
vue/no-irregular-whitespace https://eslint.vuejs.org/rules/no-irregular-whitespace.html
vue/no-lifecycle-after-await https://eslint.vuejs.org/rules/no-lifecycle-after-await.html
🚫 vue/no-loss-of-precision https://eslint.vuejs.org/rules/no-loss-of-precision.html
🚫 vue/no-multi-spaces https://eslint.vuejs.org/rules/no-multi-spaces.html
🚫 vue/no-multiple-objects-in-class https://eslint.vuejs.org/rules/no-multiple-objects-in-class.html
🚫 vue/no-multiple-template-root https://eslint.vuejs.org/rules/no-multiple-template-root.html
vue/no-mutating-props https://eslint.vuejs.org/rules/no-mutating-props.html
🚫 vue/no-negated-condition https://eslint.vuejs.org/rules/no-negated-condition.html
🚫 vue/no-negated-v-if-condition https://eslint.vuejs.org/rules/no-negated-v-if-condition.html
🚫 vue/no-parsing-error https://eslint.vuejs.org/rules/no-parsing-error.html
vue/no-potential-component-option-typo https://eslint.vuejs.org/rules/no-potential-component-option-typo.html
vue/no-ref-as-operand https://eslint.vuejs.org/rules/no-ref-as-operand.html
vue/no-ref-object-reactivity-loss https://eslint.vuejs.org/rules/no-ref-object-reactivity-loss.html
vue/no-reserved-component-names https://eslint.vuejs.org/rules/no-reserved-component-names.html
vue/no-reserved-keys https://eslint.vuejs.org/rules/no-reserved-keys.html
vue/no-reserved-props https://eslint.vuejs.org/rules/no-reserved-props.html
🚫 vue/no-restricted-block https://eslint.vuejs.org/rules/no-restricted-block.html
vue/no-restricted-call-after-await https://eslint.vuejs.org/rules/no-restricted-call-after-await.html
🚫 vue/no-restricted-class https://eslint.vuejs.org/rules/no-restricted-class.html
vue/no-restricted-component-names https://eslint.vuejs.org/rules/no-restricted-component-names.html
vue/no-restricted-component-options https://eslint.vuejs.org/rules/no-restricted-component-options.html
vue/no-restricted-custom-event https://eslint.vuejs.org/rules/no-restricted-custom-event.html
🚫 vue/no-restricted-html-elements https://eslint.vuejs.org/rules/no-restricted-html-elements.html
vue/no-restricted-props https://eslint.vuejs.org/rules/no-restricted-props.html
🚫 vue/no-restricted-static-attribute https://eslint.vuejs.org/rules/no-restricted-static-attribute.html
🚫 vue/no-restricted-syntax https://eslint.vuejs.org/rules/no-restricted-syntax.html
🚫 vue/no-restricted-v-bind https://eslint.vuejs.org/rules/no-restricted-v-bind.html
🚫 vue/no-restricted-v-on https://eslint.vuejs.org/rules/no-restricted-v-on.html
🚫 vue/no-root-v-if https://eslint.vuejs.org/rules/no-root-v-if.html
vue/no-setup-props-reactivity-loss https://eslint.vuejs.org/rules/no-setup-props-reactivity-loss.html
vue/no-shared-component-data https://eslint.vuejs.org/rules/no-shared-component-data.html
vue/no-side-effects-in-computed-properties https://eslint.vuejs.org/rules/no-side-effects-in-computed-properties.html
🚫 vue/no-spaces-around-equal-signs-in-attribute https://eslint.vuejs.org/rules/no-spaces-around-equal-signs-in-attribute.html
🚫 vue/no-sparse-arrays https://eslint.vuejs.org/rules/no-sparse-arrays.html
🚫 vue/no-static-inline-styles https://eslint.vuejs.org/rules/no-static-inline-styles.html
🚫 vue/no-template-key https://eslint.vuejs.org/rules/no-template-key.html
🚫 vue/no-template-shadow https://eslint.vuejs.org/rules/no-template-shadow.html
🚫 vue/no-template-target-blank https://eslint.vuejs.org/rules/no-template-target-blank.html
🚫 vue/no-textarea-mustache https://eslint.vuejs.org/rules/no-textarea-mustache.html
vue/no-this-in-before-route-enter https://eslint.vuejs.org/rules/no-this-in-before-route-enter.html
🚫 vue/no-undef-components https://eslint.vuejs.org/rules/no-undef-components.html
vue/no-undef-properties https://eslint.vuejs.org/rules/no-undef-properties.html
🚫 vue/no-unsupported-features https://eslint.vuejs.org/rules/no-unsupported-features.html
🚫 vue/no-unused-components https://eslint.vuejs.org/rules/no-unused-components.html
vue/no-unused-emit-declarations https://eslint.vuejs.org/rules/no-unused-emit-declarations.html
vue/no-unused-properties https://eslint.vuejs.org/rules/no-unused-properties.html
🚫 vue/no-unused-refs https://eslint.vuejs.org/rules/no-unused-refs.html
🚫 vue/no-unused-vars https://eslint.vuejs.org/rules/no-unused-vars.html
vue/no-use-computed-property-like-method https://eslint.vuejs.org/rules/no-use-computed-property-like-method.html
🚫 vue/no-use-v-else-with-v-for https://eslint.vuejs.org/rules/no-use-v-else-with-v-for.html
🚫 vue/no-use-v-if-with-v-for https://eslint.vuejs.org/rules/no-use-v-if-with-v-for.html
🚫 vue/no-useless-concat https://eslint.vuejs.org/rules/no-useless-concat.html
🚫 vue/no-useless-mustaches https://eslint.vuejs.org/rules/no-useless-mustaches.html
🚫 vue/no-useless-template-attributes https://eslint.vuejs.org/rules/no-useless-template-attributes.html
🚫 vue/no-useless-v-bind https://eslint.vuejs.org/rules/no-useless-v-bind.html
🚫 vue/no-v-for-template-key-on-child https://eslint.vuejs.org/rules/no-v-for-template-key-on-child.html
🚫 vue/no-v-text-v-html-on-component https://eslint.vuejs.org/rules/no-v-text-v-html-on-component.html
🚫 vue/no-v-text https://eslint.vuejs.org/rules/no-v-text.html
vue/no-watch-after-await https://eslint.vuejs.org/rules/no-watch-after-await.html
🚫 vue/object-curly-newline https://eslint.vuejs.org/rules/object-curly-newline.html
🚫 vue/object-curly-spacing https://eslint.vuejs.org/rules/object-curly-spacing.html
🚫 vue/object-property-newline https://eslint.vuejs.org/rules/object-property-newline.html
🚫 vue/object-shorthand https://eslint.vuejs.org/rules/object-shorthand.html
vue/one-component-per-file https://eslint.vuejs.org/rules/one-component-per-file.html
🚫 vue/operator-linebreak https://eslint.vuejs.org/rules/operator-linebreak.html
🚫 vue/padding-line-between-blocks https://eslint.vuejs.org/rules/padding-line-between-blocks.html
🚫 vue/padding-line-between-tags https://eslint.vuejs.org/rules/padding-line-between-tags.html
🚫 vue/padding-lines-in-component-definition https://eslint.vuejs.org/rules/padding-lines-in-component-definition.html
vue/prefer-define-options https://eslint.vuejs.org/rules/prefer-define-options.html
vue/prefer-import-from-vue https://eslint.vuejs.org/rules/prefer-import-from-vue.html
vue/prefer-prop-type-boolean-first https://eslint.vuejs.org/rules/prefer-prop-type-boolean-first.html
🚫 vue/prefer-separate-static-class https://eslint.vuejs.org/rules/prefer-separate-static-class.html
🚫 vue/prefer-template https://eslint.vuejs.org/rules/prefer-template.html
🚫 vue/prefer-true-attribute-shorthand https://eslint.vuejs.org/rules/prefer-true-attribute-shorthand.html
vue/prefer-use-template-ref https://eslint.vuejs.org/rules/prefer-use-template-ref.html
vue/prop-name-casing https://eslint.vuejs.org/rules/prop-name-casing.html
🚫 vue/quote-props https://eslint.vuejs.org/rules/quote-props.html
🚫 vue/require-component-is https://eslint.vuejs.org/rules/require-component-is.html
vue/require-default-export https://eslint.vuejs.org/rules/require-default-export.html
vue/require-default-prop https://eslint.vuejs.org/rules/require-default-prop.html
vue/require-direct-export https://eslint.vuejs.org/rules/require-direct-export.html
vue/require-emit-validator https://eslint.vuejs.org/rules/require-emit-validator.html
🚫 vue/require-explicit-emits https://eslint.vuejs.org/rules/require-explicit-emits.html
🚫 vue/require-explicit-slots https://eslint.vuejs.org/rules/require-explicit-slots.html
vue/require-expose https://eslint.vuejs.org/rules/require-expose.html
vue/require-macro-variable-name https://eslint.vuejs.org/rules/require-macro-variable-name.html
vue/require-name-property https://eslint.vuejs.org/rules/require-name-property.html
vue/require-prop-comment https://eslint.vuejs.org/rules/require-prop-comment.html
vue/require-prop-type-constructor https://eslint.vuejs.org/rules/require-prop-type-constructor.html
vue/require-prop-types https://eslint.vuejs.org/rules/require-prop-types.html
vue/require-render-return https://eslint.vuejs.org/rules/require-render-return.html
vue/require-slots-as-functions https://eslint.vuejs.org/rules/require-slots-as-functions.html
🚫 vue/require-toggle-inside-transition https://eslint.vuejs.org/rules/require-toggle-inside-transition.html
vue/require-typed-object-prop https://eslint.vuejs.org/rules/require-typed-object-prop.html
vue/require-typed-ref https://eslint.vuejs.org/rules/require-typed-ref.html
🚫 vue/require-v-for-key https://eslint.vuejs.org/rules/require-v-for-key.html
vue/require-valid-default-prop https://eslint.vuejs.org/rules/require-valid-default-prop.html
🚫 vue/restricted-component-names https://eslint.vuejs.org/rules/restricted-component-names.html
vue/return-in-computed-property https://eslint.vuejs.org/rules/return-in-computed-property.html
vue/return-in-emits-validator https://eslint.vuejs.org/rules/return-in-emits-validator.html
vue/script-indent https://eslint.vuejs.org/rules/script-indent.html
🚫 vue/singleline-html-element-content-newline https://eslint.vuejs.org/rules/singleline-html-element-content-newline.html
🚫 vue/slot-name-casing https://eslint.vuejs.org/rules/slot-name-casing.html
vue/sort-keys https://eslint.vuejs.org/rules/sort-keys.html
🚫 vue/space-in-parens https://eslint.vuejs.org/rules/space-in-parens.html
🚫 vue/space-infix-ops https://eslint.vuejs.org/rules/space-infix-ops.html
🚫 vue/space-unary-ops https://eslint.vuejs.org/rules/space-unary-ops.html
🚫 vue/static-class-names-order https://eslint.vuejs.org/rules/static-class-names-order.html
🚫 vue/template-curly-spacing https://eslint.vuejs.org/rules/template-curly-spacing.html
🚫 vue/use-v-on-exact https://eslint.vuejs.org/rules/use-v-on-exact.html
🚫 vue/v-bind-style https://eslint.vuejs.org/rules/v-bind-style.html
🚫 vue/v-for-delimiter-style https://eslint.vuejs.org/rules/v-for-delimiter-style.html
🚫 vue/v-if-else-key https://eslint.vuejs.org/rules/v-if-else-key.html
🚫 vue/v-on-event-hyphenation https://eslint.vuejs.org/rules/v-on-event-hyphenation.html
🚫 vue/v-on-handler-style https://eslint.vuejs.org/rules/v-on-handler-style.html
🚫 vue/v-on-style https://eslint.vuejs.org/rules/v-on-style.html
🚫 vue/v-slot-style https://eslint.vuejs.org/rules/v-slot-style.html
🚫 vue/valid-attribute-name https://eslint.vuejs.org/rules/valid-attribute-name.html
vue/valid-define-emits https://eslint.vuejs.org/rules/valid-define-emits.html
vue/valid-define-options https://eslint.vuejs.org/rules/valid-define-options.html
vue/valid-define-props https://eslint.vuejs.org/rules/valid-define-props.html
vue/valid-next-tick https://eslint.vuejs.org/rules/valid-next-tick.html
🚫 vue/valid-template-root https://eslint.vuejs.org/rules/valid-template-root.html
🚫 vue/valid-v-bind https://eslint.vuejs.org/rules/valid-v-bind.html
🚫 vue/valid-v-cloak https://eslint.vuejs.org/rules/valid-v-cloak.html
🚫 vue/valid-v-else-if https://eslint.vuejs.org/rules/valid-v-else-if.html
🚫 vue/valid-v-else https://eslint.vuejs.org/rules/valid-v-else.html
🚫 vue/valid-v-for https://eslint.vuejs.org/rules/valid-v-for.html
🚫 vue/valid-v-html https://eslint.vuejs.org/rules/valid-v-html.html
🚫 vue/valid-v-if https://eslint.vuejs.org/rules/valid-v-if.html
🚫 vue/valid-v-is https://eslint.vuejs.org/rules/valid-v-is.html
🚫 vue/valid-v-memo https://eslint.vuejs.org/rules/valid-v-memo.html
🚫 vue/valid-v-model https://eslint.vuejs.org/rules/valid-v-model.html
🚫 vue/valid-v-on https://eslint.vuejs.org/rules/valid-v-on.html
🚫 vue/valid-v-once https://eslint.vuejs.org/rules/valid-v-once.html
🚫 vue/valid-v-pre https://eslint.vuejs.org/rules/valid-v-pre.html
🚫 vue/valid-v-show https://eslint.vuejs.org/rules/valid-v-show.html
🚫 vue/valid-v-slot https://eslint.vuejs.org/rules/valid-v-slot.html
🚫 vue/valid-v-text https://eslint.vuejs.org/rules/valid-v-text.html

✨ = Implemented, 🚫 = No need to implement

Deprecated rules

✨: 0, 🚫: 3 / total: 4
Status Name Docs
🚫 vue/no-v-for-template-key https://eslint.vuejs.org/rules/no-v-for-template-key.html
🚫 vue/no-v-model-argument https://eslint.vuejs.org/rules/no-v-model-argument.html
vue/valid-model-definition https://eslint.vuejs.org/rules/valid-model-definition.html
🚫 vue/valid-v-bind-sync https://eslint.vuejs.org/rules/valid-v-bind-sync.html

✨ = Implemented, 🚫 = No need to implement

camc314 avatar Jun 02 '25 12:06 camc314

after reading the docs, just want to make sure that i understood:

  • vue template support not ready
  • eslint vue support not ready
  • formatter support not ready

so it is not for production at 1.0 ? (without eslint/prettier)

orenmizr avatar Jul 08 '25 08:07 orenmizr

I'm trying out oxlint 1.16.0 with a minimal vue project, posting findings here in case it helps.

Config :

{
	"$schema": "./node_modules/oxlint/configuration_schema.json",
	"plugins": ["import", "promise", "vue", "typescript"],
	"ignorePatterns": ["worker-configuration.d.ts"],
	"rules": {
		"import/default": "error",
		"import/namespace": "error",
		"import/export": "warn",
		"import/named": "error",
		"promise/no-callback-in-promise": "error",
		"promise/no-new-statics": "error",
		"promise/valid-params": "error",
		"vue/valid-define-emits": "error",
		"vue/valid-define-props": "error",
		"vue/define-emits-declaration": "error",
		"typescript/no-floating-promises": "off"
	}
}

Test file :

<script lang="ts" setup>
const emit = defineEmits(["change", "update"]);
const emit2 = defineEmits({
  change: (id) => typeof id === "number",
  update: (value) => typeof value === "string",
})
Math.min(Math.max(100, x), 0);
Math.max(1000, Math.min(0, z));
x === y || x < y;
x < y || x === y;

function add(a: number, b: number) {
  return a;
}
</script>

The cli command I'm running is :pnpm exec oxlint test.vue

Here's what I'm finding out at the moment

  • eslint rules like [eslint(no-unused-vars)] are NOT working at all
  • vue rules like [eslint-plugin-vue(define-emits-declaration)] are working with the CLI, but NOT with the vscode extension
  • oxc rules like [[oxc(bad-min-max-func)] are NOT working with the CLI, but working with the vscode extension

Interestingly, the "source.fixAll.oxc": "explicit" apply fixes even though the cli doesn't detect them

I'm not sure where we are for vue support. Is there another place where we can subscribe ?

Hebilicious avatar Sep 20 '25 18:09 Hebilicious

eslint rules like [eslint(no-unused-vars)] are NOT working at all

Because the linter does not know if the variable is used inside <template>, it does not enable the rule for .vue files.

vue rules like [eslint-plugin-vue(define-emits-declaration)] are working with the CLI, but NOT with the vscode extension

Make sure, you have the same VSCode Extension Version as your oxlint version.

Image

oxc rules like [[oxc(bad-min-max-func)] are NOT working with the CLI, but working with the vscode extension

It worked for me in both tools:

  × oxc(bad-min-max-func): Math.min and Math.max combination leads to constant result
   ╭─[testfile.vue:7:1]
 6 │ })
 7 │ Math.min(Math.max(100, x), 0);
   · ─────────────────────────────
 8 │ Math.max(1000, Math.min(0, z));
   ╰────
  help: This evaluates to 0.0 because of the incorrect `Math.min`/`Math.max` combination
Image

Make sure the oxc plugin is active.

When you have more problems, please create a new issue :)

Sysix avatar Sep 21 '25 12:09 Sysix

not sure i completely understand - you need to vscode extension to enable vue files to linting vue files/templates blocks ? what if you ran it as a CI operation. a bit confused.

orenmizr avatar Oct 13 '25 04:10 orenmizr

not sure i completely understand - you need to vscode extension to enable vue files to linting vue files/templates blocks ? what if you ran it as a CI operation. a bit confused.

It's the same for eslint as well as prettier, you need to have the cli and if you use vscode, you need the extension to show errors and the code actions (auto fix on save for example)

namhtpyn avatar Oct 13 '25 04:10 namhtpyn

thanks for the response. clarification: does that mean that oxclint now spots errors within

orenmizr avatar Oct 13 '25 05:10 orenmizr

does that mean that oxclint now spots errors within ?

It spots only errors within the <script> blocks. It has no <template>-syntax understanding,
that's why many rules are not supported for Vue.

i read it required a plugin system to enable it.

No, it works without any configuration. You can enable the vue plugin, but this will only enable its eslint-plugin-vue rules.

Sysix avatar Oct 13 '25 16:10 Sysix

Hm, it's a bit confusing to mark the rules as no need to implement, unless the intention is never to support linting code inside <template> tags at all. Is that the intent long-term?

connorshea avatar Oct 19 '25 05:10 connorshea

We do hope to support linting code inside <template> tags, likely via JS plugins. But what the mechanism for doing this will be is an open question right now.

overlookmotel avatar Nov 13 '25 10:11 overlookmotel

have you seen this post by biome ("Full support for Vue, Svelte, and Astro ") https://biomejs.dev/blog/biome-v2-3/ perhaps they figured out a way to have a fast core logic that extends to support vue.

orenmizr avatar Nov 13 '25 11:11 orenmizr

have you seen this post by biome ("Full support for Vue, Svelte, and Astro ") https://biomejs.dev/blog/biome-v2-3/ perhaps they figured out a way to have a fast core logic that extends to support vue.

Biome 2.3 introduces full support for Vue, Svelte, and Astro files. This means you can now format and lint the JavaScript and TypeScript code inside

The use of "full support" is different to how we are trying to provide full support.

In the blog post:

This means you can now format and lint the JavaScript and TypeScript code inside

Oxlint supported this since March https://oxc.rs/blog/2025-03-15-oxlint-beta.html#highlight-of-new-features-since-general-availability

Our full support means all rules listed in the issue description.

Boshen avatar Nov 13 '25 12:11 Boshen