All Patina Rules
This page lists all 238 Patina rule implementations declared under crates/vize_patina/src/rules. The category pages keep the longer examples; this page is the compact reference for coverage, default severity, preset membership, fixability, and source implementation.
Preset names use Vize CLI terminology. The oxlint plugin metadata name general-recommended is shown here as happy-path. _none_ means the rule is opt-in, host-driven, or outside the bundled lint presets.
Categories
| Category | Rules |
|---|---|
| Essential | 48 |
| Strongly Recommended | 12 |
| Recommended | 41 |
| Accessibility | 31 |
| HTML Conformance | 9 |
| Type Aware | 5 |
| Vapor | 7 |
| Ecosystem | 9 |
| CSS | 10 |
| Musea | 6 |
| Script | 60 |
Essential (48)
| Rule | Severity | Presets | Fixable | Implementation | Description | |
|---|---|---|---|---|---|---|
petite-vue/no-unsupported-directive |
error |
none | No | source | Disallow directives that petite-vue does not support | |
petite-vue/valid-v-effect |
error |
none | No | source | Require v-effect to have a non-empty expression | |
petite-vue/valid-v-scope |
error |
none | No | source | Require v-scope to bind an object literal | |
vue/multi-word-component-names |
error |
essential, nuxt, opinionated |
No | source | Require component names to be multi-word | |
vue/no-child-content |
error |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow child content when using v-html or v-text | |
vue/no-deprecated-filter |
error |
none | No | source | Disallow deprecated Vue 2 filter syntax (the `\ | ` pipe) |
vue/no-deprecated-functional-template |
error |
none | No | source | Disallow the functional attribute on the SFC <template> |
|
vue/no-deprecated-html-element-is |
error |
none | No | source | Disallow the is attribute on native HTML elements |
|
vue/no-deprecated-router-link-tag-prop |
error |
none | No | source | Disallow the tag prop on <router-link> |
|
vue/no-deprecated-scope-attribute |
error |
none | No | source | Disallow the deprecated scope attribute on <template> |
|
vue/no-deprecated-slot-attribute |
error |
none | No | source | Disallow the deprecated slot attribute |
|
vue/no-deprecated-slot-scope-attribute |
error |
none | No | source | Disallow the deprecated slot-scope attribute |
|
vue/no-deprecated-v-bind-sync |
error |
none | No | source | Disallow the deprecated .sync modifier on v-bind |
|
vue/no-deprecated-v-on-native-modifier |
error |
none | No | source | Disallow the deprecated .native modifier on v-on |
|
vue/no-deprecated-v-on-number-modifiers |
error |
none | No | source | Disallow deprecated numeric keyCode modifiers on v-on |
|
vue/no-dupe-v-else-if |
error |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow duplicate conditions in v-if / v-else-if chains |
|
vue/no-duplicate-attributes |
error |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow duplicate attributes on the same element | |
vue/no-mutating-props |
error |
happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow mutating component props | |
vue/no-reserved-component-names |
error |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow the use of reserved names as component names | |
vue/no-template-key |
error |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow key attribute on <template> |
|
vue/no-textarea-mustache |
error |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow mustache interpolation in <textarea> |
|
vue/no-unused-components |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow registering components that are not used inside templates | |
vue/no-unused-vars |
warning |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow unused variable definitions in v-for and v-slot directives | |
vue/no-use-v-if-with-v-for |
warning |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow using v-if on the same element as v-for |
|
vue/no-useless-template-attributes |
error |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow useless attributes on <template> elements |
|
vue/no-v-for-template-key-on-child |
error |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow key on the child of a <template v-for> |
|
vue/no-v-html |
warning |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Warn against v-html to prevent XSS vulnerabilities | |
vue/no-v-text-v-html-on-component |
error |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow v-text / v-html on component elements | |
vue/permitted-contents |
error |
happy-path, nuxt, ecosystem, opinionated |
No | source | Enforce HTML content model rules | |
vue/require-component-is |
error |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Require v-bind:is on <component> elements |
|
vue/require-toggle-inside-transition |
error |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Require a toggle on the element wrapped by <transition> |
|
vue/require-v-for-key |
error |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Require v-bind:key with v-for directives |
|
vue/use-v-on-exact |
warning |
essential, nuxt, opinionated |
No | source | Enforce .exact modifier on v-on when there are modifier-based handlers |
|
vue/valid-attribute-name |
error |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Require valid attribute names | |
vue/valid-template-root |
error |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Enforce a valid <template> root for Vue 3 fragment semantics |
|
vue/valid-v-bind |
error |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Enforce valid v-bind directives |
|
vue/valid-v-cloak |
error |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Enforce valid v-cloak directives |
|
vue/valid-v-else |
error |
essential, happy-path, nuxt, ecosystem, opinionated |
Yes | source | Enforce valid v-else directives |
|
vue/valid-v-for |
error |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Enforce valid v-for directives |
|
vue/valid-v-html |
error |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Enforce valid v-html directives |
|
vue/valid-v-if |
error |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Enforce valid v-if directives |
|
vue/valid-v-memo |
error |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Enforce valid v-memo directives |
|
vue/valid-v-model |
error |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Enforce valid v-model directives |
|
vue/valid-v-on |
error |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Enforce valid v-on directives |
|
vue/valid-v-once |
error |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Enforce valid v-once directives |
|
vue/valid-v-show |
error |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Enforce valid v-show directives |
|
vue/valid-v-slot |
error |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Enforce valid v-slot directives |
|
vue/valid-v-text |
error |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Enforce valid v-text directives |
Strongly Recommended (12)
| Rule | Severity | Presets | Fixable | Implementation | Description |
|---|---|---|---|---|---|
vue/attribute-hyphenation |
warning |
happy-path, nuxt, ecosystem, opinionated |
Yes | source | Enforce attribute naming style on custom components |
vue/component-definition-name-casing |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Enforce PascalCase for component definition names |
vue/html-quotes |
warning |
happy-path, nuxt, ecosystem, opinionated |
Yes | source | Enforce quotes style of HTML attributes |
vue/html-self-closing |
warning |
nuxt, opinionated |
Yes | source | Enforce self-closing style |
vue/mustache-interpolation-spacing |
warning |
happy-path, nuxt, ecosystem, opinionated |
Yes | source | Enforce consistent spacing inside mustache interpolations |
vue/no-multi-spaces |
warning |
happy-path, nuxt, ecosystem, opinionated |
Yes | source | Disallow multiple consecutive spaces |
vue/no-template-shadow |
warning |
nuxt, opinionated |
No | source | Disallow variable names that shadow variables in outer scope |
vue/no-unused-properties |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow unused properties defined in defineProps |
vue/prop-name-casing |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Enforce kebab-case prop names in templates |
vue/v-bind-style |
warning |
nuxt, opinionated |
Yes | source | Enforce v-bind directive style |
vue/v-on-style |
warning |
happy-path, nuxt, ecosystem, opinionated |
Yes | source | Enforce v-on directive style |
vue/v-slot-style |
warning |
happy-path, nuxt, ecosystem, opinionated |
Yes | source | Enforce v-slot directive style |
Recommended (41)
| Rule | Severity | Presets | Fixable | Implementation | Description |
|---|---|---|---|---|---|
ssr/no-browser-globals-in-ssr |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow browser-only globals in SSR context |
ssr/no-hydration-mismatch |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow non-deterministic values that cause hydration mismatch |
vue/a11y-img-alt |
warning |
none | No | source | Require alt attribute on images for accessibility |
vue/attribute-order |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Enforce a consistent order of attributes |
vue/component-name-in-template-casing |
warning |
nuxt, opinionated |
Yes | source | Enforce specific casing for component names in templates |
vue/html-button-has-type |
warning |
nuxt, opinionated |
No | source | Require an explicit valid type on button elements |
vue/no-array-index-key |
warning |
nuxt, opinionated |
No | source | Disallow using the v-for index variable directly as the :key |
vue/no-bare-strings-in-template |
warning |
none | No | source | Disallow raw human-readable text in the template that should be internationalized |
vue/no-boolean-attr-value |
warning |
nuxt, opinionated |
Yes | source | Disallow explicit values for boolean HTML attributes |
vue/no-empty-component-block |
warning |
nuxt, opinionated |
No | source | Disallow empty SFC blocks |
vue/no-inline-style |
warning |
nuxt, opinionated |
No | source | Discourage use of inline style attributes |
vue/no-invalid-html-attribute |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow invalid static values for HTML attributes |
vue/no-lone-template |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow unnecessary <template> elements |
vue/no-multiple-objects-in-class |
warning |
nuxt, opinionated |
No | source | Disallow multiple object literals inside a :class array binding |
vue/no-negated-v-if-condition |
warning |
nuxt, opinionated |
No | source | Disallow a negated v-if condition when the chain has a v-else |
vue/no-preprocessor-lang |
warning |
nuxt, opinionated |
Yes | source | Discourage CSS preprocessor usage in favor of modern CSS |
vue/no-root-v-if |
warning |
nuxt, opinionated |
No | source | Disallow v-if on the single root element of a template |
vue/no-script-non-standard-lang |
warning |
nuxt, opinionated |
No | source | Discourage non-standard script lang values |
vue/no-src-attribute |
warning |
nuxt, opinionated |
No | source | Discourage src attribute on SFC blocks |
vue/no-template-lang |
warning |
nuxt, opinionated |
Yes | source | Discourage lang attribute on template block |
vue/no-template-target-blank |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow target="_blank" without rel="noopener" |
vue/no-undefined-refs |
warning |
none | No | source | Disallow undefined variable references in templates |
vue/no-unsafe-url |
warning |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Warn about potentially unsafe URL bindings |
vue/no-unsandboxed-iframe |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Require a sandbox attribute on iframe elements |
vue/no-unused-refs |
warning |
nuxt, opinionated |
No | source | Report template refs (ref="x") never referenced in <script> |
vue/no-useless-mustaches |
warning |
nuxt, opinionated |
No | source | Disallow a mustache interpolation whose expression is a constant string literal |
vue/no-useless-v-bind |
warning |
nuxt, opinionated |
No | source | Disallow a v-bind whose value is a plain string literal |
vue/no-v-text |
warning |
nuxt, opinionated |
No | source | Disallow the v-text directive; prefer mustache interpolation |
vue/prefer-props-shorthand |
warning |
nuxt, opinionated |
Yes | source | Recommend shorthand syntax for props (Vue 3.4+) |
vue/prefer-true-attribute-shorthand |
warning |
nuxt, opinionated |
No | source | Prefer the shorthand for a boolean attribute bound to true |
vue/require-component-registration |
warning |
opinionated |
No | source | Require explicit import or registration for components |
vue/require-scoped-style |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Require scoped attribute on style tags |
vue/scoped-event-names |
warning |
nuxt, opinionated |
No | source | Recommend scoped event names using context:event format |
vue/sfc-element-order |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Enforce consistent order of SFC top-level elements |
vue/single-style-block |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Recommend having a single style block |
vue/slot-name-casing |
warning |
nuxt, opinionated |
No | source | Enforce kebab-case for named slots used via v-slot |
vue/this-in-template |
warning |
nuxt, opinionated |
No | source | Disallow this. in template expressions |
vue/v-on-event-hyphenation |
warning |
nuxt, opinionated |
No | source | Enforce hyphenation of custom event names in v-on on components |
vue/v-on-handler-style |
warning |
nuxt, opinionated |
No | source | Enforce writing v-on handlers as a method reference or an inline function |
vue/warn-custom-block |
warning |
nuxt, opinionated |
No | source | Warn about custom blocks in SFC files |
vue/warn-custom-directive |
warning |
nuxt, opinionated |
No | source | Warn about custom directives that need registration |
Accessibility (31)
| Rule | Severity | Presets | Fixable | Implementation | Description |
|---|---|---|---|---|---|
a11y/alt-text |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Require alternative text for media elements |
a11y/anchor-has-content |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Require anchor elements to have accessible content |
a11y/anchor-is-valid |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Enforce valid href on anchor elements |
a11y/aria-props |
error |
happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow invalid ARIA attributes |
a11y/aria-role |
error |
happy-path, nuxt, ecosystem, opinionated |
No | source | Elements with ARIA roles must use a valid, non-abstract ARIA role |
a11y/aria-unsupported-elements |
error |
happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow ARIA attributes on elements that do not support them |
a11y/click-events-have-key-events |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Require keyboard event handlers with click events |
a11y/form-control-has-label |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Require form controls to have associated labels |
a11y/heading-has-content |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Require heading elements to have accessible content |
a11y/heading-levels |
warning |
nuxt, opinionated |
No | source | Disallow skipping heading levels |
a11y/iframe-has-title |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Require iframe elements to have a title attribute |
a11y/img-alt |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Require alt attribute on images for accessibility |
a11y/interactive-supports-focus |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Require interactive role elements to be focusable |
a11y/label-has-for |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Require labels to have associated form controls |
a11y/landmark-roles |
warning |
nuxt, opinionated |
No | source | Validate landmark role placement and uniqueness |
a11y/media-has-caption |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Require media elements to have captions |
a11y/mouse-events-have-key-events |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Require focus/blur events with mouse events |
a11y/no-access-key |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow the use of the accesskey attribute |
a11y/no-aria-hidden-on-focusable |
error |
happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow aria-hidden="true" on focusable elements |
a11y/no-autofocus |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow the use of the autofocus attribute |
a11y/no-distracting-elements |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow distracting elements like <marquee> and <blink> |
a11y/no-i-for-icon |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow using <i> element for icons |
a11y/no-redundant-roles |
warning |
happy-path, nuxt, ecosystem, opinionated |
Yes | source | Disallow redundant ARIA roles |
a11y/no-refer-to-non-existent-id |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow references to non-existent IDs |
a11y/no-role-presentation-on-focusable |
error |
happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow role="presentation" or role="none" on focusable elements |
a11y/no-static-element-interactions |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow event handlers on static elements |
a11y/placeholder-label-option |
warning |
nuxt, opinionated |
No | source | Require disabled or hidden on select placeholder option |
a11y/role-has-required-aria-props |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Require ARIA roles to have required properties |
a11y/tabindex-no-positive |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow positive tabindex values |
a11y/use-list |
warning |
nuxt, opinionated |
No | source | Suggest using list elements for bullet-like text |
vue/use-unique-element-ids |
warning |
nuxt, opinionated |
No | source | Enforce unique element IDs using useId() instead of static literals |
HTML Conformance (9)
| Rule | Severity | Presets | Fixable | Implementation | Description |
|---|---|---|---|---|---|
html/deprecated-attr |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow deprecated HTML attributes |
html/deprecated-element |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow deprecated HTML elements |
html/id-duplication |
error |
essential, happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow duplicate element IDs |
html/no-consecutive-br |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow consecutive <br> elements |
html/no-dupe-style-properties |
warning |
nuxt, opinionated |
No | source | Disallow duplicate properties in inline style attributes |
html/no-duplicate-class |
warning |
nuxt, opinionated |
No | source | Disallow duplicate class names in a static class attribute |
html/no-duplicate-dt |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow duplicate <dt> names in <dl> |
html/no-empty-palpable-content |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow empty elements that expect visible content |
html/require-datetime |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Require datetime attribute on <time> element |
Type Aware (5)
| Rule | Severity | Presets | Fixable | Implementation | Description |
|---|---|---|---|---|---|
type/no-floating-promises |
warning |
nuxt, opinionated |
No | source | Disallow floating (unhandled) Promises |
type/no-reactivity-loss |
warning |
nuxt, opinionated |
No | source | Disallow plain snapshots of reactive values across assignments and calls |
type/no-unsafe-template-binding |
warning |
nuxt, opinionated |
No | source | Disallow template bindings that resolve to unsafe types |
type/require-typed-emits |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Require type definition for defineEmits |
type/require-typed-props |
warning |
happy-path, nuxt, ecosystem, opinionated |
No | source | Require type definition for defineProps |
Vapor (7)
| Rule | Severity | Presets | Fixable | Implementation | Description |
|---|---|---|---|---|---|
script/no-get-current-instance |
error |
opinionated, nuxt |
No | source | Disallow getCurrentInstance() in Vapor mode (returns null) |
script/no-next-tick |
error |
none | No | source | Disallow nextTick() usage in Vapor-oriented components |
script/no-options-api |
error |
opinionated |
No | source | Disallow Options API patterns in Vapor mode |
vapor/no-inline-template |
error |
nuxt, opinionated |
No | source | Disallow deprecated inline-template attribute |
vapor/no-vue-lifecycle-events |
error |
happy-path, nuxt, ecosystem, opinionated |
No | source | Disallow @vue:xxx per-element lifecycle events (not supported in Vapor) |
vapor/prefer-static-class |
warning |
nuxt, opinionated |
Yes | source | Prefer static class over dynamic class binding for string literals |
vapor/require-vapor-attribute |
warning |
nuxt, opinionated |
Yes | source | Suggest adding vapor attribute to script setup |
Ecosystem (9)
| Rule | Severity | Presets | Fixable | Implementation | Description |
|---|---|---|---|---|---|
ecosystem/nuxt-prefer-nuxt-link |
warning |
ecosystem |
No | source | Prefer NuxtLink for internal application links |
ecosystem/pinia-prefer-store-to-refs |
warning |
ecosystem |
No | source | Prefer storeToRefs() when destructuring Pinia stores |
ecosystem/router-link-require-to |
error |
ecosystem |
No | source | Require a to target on RouterLink and NuxtLink components |
ecosystem/void-link-require-href |
error |
ecosystem |
No | source | Require href on Void Vue Link components |
ecosystem/void-link-valid-method |
warning |
ecosystem |
No | source | Validate static Void Vue Link method props |
ecosystem/vue-i18n-no-missing-key |
warning |
ecosystem |
No | source | Report static vue-i18n keys that are absent from local SFC messages |
ecosystem/vue-router-prefer-named-link |
warning |
ecosystem |
No | source | Prefer named route objects over static path strings in RouterLink |
ecosystem/vue-router-prefer-named-push |
warning |
ecosystem |
No | source | Prefer named route objects for Vue Router programmatic navigation |
ecosystem/vue-test-utils-no-html-snapshot |
warning |
ecosystem |
No | source | Avoid snapshotting wrapper.html() in Vue Test Utils tests |
CSS (10)
| Rule | Severity | Presets | Fixable | Implementation | Description |
|---|---|---|---|---|---|
css/no-display-none |
warning |
opinionated, nuxt |
No | source | Suggest using v-show instead of display: none |
css/no-hardcoded-values |
warning |
opinionated, nuxt |
No | source | Suggest using CSS variables instead of hardcoded values |
css/no-id-selectors |
warning |
opinionated, nuxt |
No | source | Discourage use of ID selectors in CSS |
css/no-important |
warning |
opinionated, nuxt |
No | source | Discourage use of !important in CSS |
css/no-utility-classes |
warning |
opinionated, nuxt |
No | source | Warn against implementing utility classes in component styles |
css/no-v-bind-performance |
warning |
opinionated, nuxt |
No | source | Warn about performance cost of CSS v-bind() |
css/prefer-logical-properties |
warning |
opinionated, nuxt |
No | source | Recommend CSS logical properties for better i18n support |
css/prefer-nested-selectors |
warning |
opinionated, nuxt |
No | source | Recommend using CSS nesting for descendant selectors |
css/prefer-slotted |
warning |
opinionated, nuxt |
No | source | Recommend ::v-slotted() for styling slot content |
css/require-font-display |
warning |
opinionated, nuxt |
No | source | Require font-display in @font-face rules |
Musea (6)
| Rule | Severity | Presets | Fixable | Implementation | Description |
|---|---|---|---|---|---|
musea/no-empty-variant |
warning |
none | No | source | Disallow empty <variant> blocks |
musea/prefer-design-tokens |
warning |
none | No | source | Prefer design token CSS variables over hardcoded primitive values |
musea/require-component |
warning |
none | No | source | Require component attribute in <art> block |
musea/require-title |
error |
none | No | source | Require title attribute in <art> block |
musea/unique-variant-names |
error |
none | No | source | Require unique variant names |
musea/valid-variant |
error |
none | No | source | Require name attribute in <variant> blocks |
Script (60)
| Rule | Severity | Presets | Fixable | Implementation | Description |
|---|---|---|---|---|---|
script/component-options-name-casing |
error |
opinionated, nuxt |
No | source | Enforce PascalCase for the component name option |
script/custom-event-name-casing |
error |
opinionated, nuxt |
No | source | Enforce camelCase for emitted custom event names |
script/define-emits-declaration |
warning |
opinionated, nuxt |
No | source | Enforce the type-based defineEmits<{}>() form over the runtime/array form |
script/define-macros-order |
warning |
opinionated, nuxt |
No | source | Enforce a consistent order of the Vue compiler macros in <script setup> |
script/define-props-declaration |
warning |
opinionated, nuxt |
No | source | Enforce type-based defineProps<{ ... }>() over the runtime/object form |
script/define-props-destructuring |
warning |
opinionated, nuxt |
No | source | Disallow destructuring the return value of defineProps in <script setup> |
script/no-arrow-functions-in-watch |
error |
opinionated, nuxt |
No | source | Disallow arrow functions as Options API watch handlers |
script/no-async-in-computed |
error |
none | No | source | Disallow async functions in computed properties |
script/no-boolean-default |
warning |
opinionated, nuxt |
No | source | Disallow a default on a Boolean prop |
script/no-deep-destructure-in-props |
warning |
none | No | source | Disallow deeply nested destructuring in defineProps |
script/no-deprecated-data-object-declaration |
error |
none | No | source | Disallow an object literal as the component data option (Vue 3 requires a function) |
script/no-deprecated-dollar-listeners-api |
error |
none | No | source | Disallow the $listeners instance property removed in Vue 3 (merged into $attrs) |
script/no-deprecated-dollar-scopedslots-api |
error |
none | No | source | Disallow the $scopedSlots instance property removed in Vue 3 (use $slots) |
script/no-deprecated-events-api |
error |
none | No | source | Disallow the removed Vue 2 events API ($on / $off / $once) |
script/no-deprecated-props-default-this |
error |
none | No | source | Disallow this inside a prop default/validator function (removed in Vue 3) |
script/no-dupe-keys |
error |
none | No | source | Disallow duplicate keys across Options API props/data/computed/methods/setup/inject |
script/no-duplicate-attr-inheritance |
warning |
opinionated, nuxt |
No | source | Flag an explicit inheritAttrs: true option as redundant (true is the default) |
script/no-export-in-script-setup |
error |
opinionated, nuxt |
No | source | Disallow export statements inside <script setup> |
script/no-import-compiler-macros |
error |
none | No | source | Disallow importing Vue compiler macros that are auto-imported |
script/no-internal-imports |
error |
none | No | source | Disallow importing from Vue internal modules |
script/no-multiple-slot-args |
warning |
opinionated, nuxt |
No | source | Disallow passing more than one argument to a scoped-slot function call |
script/no-potential-component-option-typo |
error |
opinionated, nuxt |
No | source | Flag likely typos in Options API component option names |
script/no-reactive-destructure |
warning |
none | No | source | Disallow destructuring reactive objects which loses reactivity |
script/no-ref-as-operand |
error |
opinionated, nuxt |
No | source | Require ref-bound variables to be accessed via .value when used as an operand |
script/no-required-prop-with-default |
error |
opinionated, nuxt |
No | source | Disallow a prop that is both required: true and has a default |
script/no-reserved-identifiers |
error |
none | No | source | Disallow using Vue compiler reserved identifiers |
script/no-reserved-keys |
error |
opinionated, nuxt |
No | source | Disallow Vue-reserved names as Options API props/data/computed/methods/setup/inject keys |
script/no-reserved-props |
error |
opinionated, nuxt |
No | source | Disallow reserved names in a component's props declaration |
script/no-restricted-globals |
error |
none | No | source | Disallow references to runtime-environment globals that must go through a typed wrapper |
script/no-restricted-members |
error |
none | No | source | Disallow project-configured object.property member accesses |
script/no-side-effects-in-computed-properties |
error |
none | No | source | Disallow side effects in Options API computed getters |
script/no-top-level-ref-in-script |
error |
none | No | source | Disallow top-level ref/reactive to prevent Cross-Request State Pollution |
script/no-unstable-nested-components |
warning |
opinionated, nuxt |
No | source | Disallow component definitions inside setup or render functions |
script/no-unused-emit-declarations |
warning |
opinionated, nuxt |
No | source | Flag declared events that are never emitted |
script/no-use-computed-property-like-method |
error |
opinionated, nuxt |
No | source | Disallow calling an Options API computed property like a method |
script/no-with-defaults |
warning |
none | No | source | Discourage withDefaults in favor of destructuring defaults (Vue 3.5+) |
script/prefer-computed |
warning |
none | No | source | Prefer computed() for derived reactive state |
script/prefer-define-options |
warning |
opinionated, nuxt |
No | source | Prefer defineOptions() over a plain <script> that only sets name/inheritAttrs |
script/prefer-import-from-vue |
warning |
none | Yes | source | Prefer importing from 'vue' instead of internal packages |
script/prefer-ref-over-reactive |
warning |
none | No | source | Recommend using ref() over reactive() for state management |
script/prefer-use-attrs |
warning |
none | No | source | Recommend using useAttrs() over context.attrs |
script/prefer-use-id |
warning |
none | No | source | Recommend using useId() for generating unique IDs (Vue 3.5+) |
script/prefer-use-slots |
warning |
none | No | source | Recommend using useSlots() over context.slots |
script/prefer-use-template-ref |
warning |
none | No | source | Recommend useTemplateRef over ref(null) for template references (Vue 3.5+) |
script/require-default-prop |
error |
opinionated, nuxt |
No | source | Require a default value for every optional, non-Boolean prop |
script/require-explicit-emits |
warning |
opinionated, nuxt |
No | source | Require emitted events to be declared in defineEmits or the emits option |
script/require-explicit-slots |
warning |
opinionated, nuxt |
No | source | Require slots consumed via useSlots() to be explicitly typed with defineSlots<...>() |
script/require-function-return-type |
warning |
none | No | source | Require return type annotations on functions |
script/require-prop-type-constructor |
error |
opinionated, nuxt |
No | source | Require prop type values to be constructors rather than string literals |
script/require-prop-types |
error |
opinionated, nuxt |
No | source | Require every prop to declare a type |
script/require-symbol-provide |
warning |
none | No | source | Recommend using Symbol as injection key for provide/inject |
script/require-typed-object-prop |
warning |
opinionated, nuxt |
No | source | Require an explicit type on a prop whose runtime type is Object or Array |
script/require-typed-ref |
warning |
opinionated, nuxt |
No | source | Require an explicit type argument on a ref() initialized with no value, null, or undefined |
script/require-valid-default-prop |
error |
opinionated, nuxt |
No | source | Require a prop's default value to be valid for its declared type |
script/return-in-computed-property |
error |
opinionated, nuxt |
No | source | Require a return value in every computed getter |
script/return-in-emits-validator |
error |
opinionated, nuxt |
No | source | Require a return value in every Options API emits validator |
script/valid-define-emits |
error |
opinionated, nuxt |
No | source | Enforce valid defineEmits() usage (no type+runtime args, no local references, single call) |
script/valid-define-options |
error |
opinionated, nuxt |
No | source | Enforce valid defineOptions() usage (single object arg, no props/emits/expose/slots) |
script/valid-define-props |
error |
opinionated, nuxt |
No | source | Enforce valid defineProps() usage (single call, not both type and runtime args, no local references) |
script/valid-next-tick |
warning |
opinionated, nuxt |
No | source | Require the result of a nextTick() call to be awaited, chained, or given a callback |