Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/brown-eels-care.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"eslint-plugin-vue": minor
---

Added [new configs](https://eslint.vuejs.org/user-guide/#bundle-configurations-eslint-config-js) `strongly-recommended-error` and `recommended-error` with all rules' severity set to `error`
Copy link

Copilot AI Dec 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The changeset description only mentions strongly-recommended-error and recommended-error, but this PR also adds Vue 2 variants (vue2-strongly-recommended-error and vue2-recommended-error) and flat config versions of all these. Consider updating the description to be more comprehensive, for example: "Added new -error config variants (strongly-recommended-error, recommended-error, vue2-strongly-recommended-error, vue2-recommended-error, and their flat config equivalents) with all rules' severity set to error"

Suggested change
Added [new configs](https://eslint.vuejs.org/user-guide/#bundle-configurations-eslint-config-js) `strongly-recommended-error` and `recommended-error` with all rules' severity set to `error`
Added [new `-error` config variants](https://eslint.vuejs.org/user-guide/#bundle-configurations-eslint-config-js): `strongly-recommended-error`, `recommended-error`, `vue2-strongly-recommended-error`, `vue2-recommended-error`, and their flat config equivalents, with all rules' severity set to `error`.

Copilot uses AI. Check for mistakes.
12 changes: 12 additions & 0 deletions docs/user-guide/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,20 @@ You can use the following configs by adding them to `eslint.config.js`.
- Configurations for using Vue.js 3.x:
- `*.configs["flat/essential"]` ... `base`, plus rules to prevent errors or unintended behavior.
- `*.configs["flat/strongly-recommended"]` ... Above, plus rules to considerably improve code readability and/or dev experience.
- `*.configs["flat/strongly-recommended-error"]` ... Above, except with all rules configured to error instead of warn.
- `*.configs["flat/recommended"]` ... Above, plus rules to enforce subjective community defaults to ensure consistency.
- `*.configs["flat/recommended-error"]` ... Above, except with all rules configured to error instead of warn.
- Configurations for using Vue.js 2.x:
- `*.configs["flat/vue2-essential"]` ... `base`, plus rules to prevent errors or unintended behavior.
- `*.configs["flat/vue2-strongly-recommended"]` ... Above, plus rules to considerably improve code readability and/or dev experience.
- `*.configs["flat/vue2-strongly-recommended-error"]` ... Above, except with all rules configured to error instead of warn.
Copy link

Copilot AI Dec 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The description "Above, except with all rules configured to error instead of warn" is potentially misleading. This config doesn't modify the config mentioned directly above it (vue2-strongly-recommended); rather, it's an alternative to vue2-strongly-recommended where the category's rules are set to error severity instead of warn. Consider clarifying this to say something like "Same as vue2-strongly-recommended, except with all rules in this category configured to error instead of warn" to make it clearer that this is an alternative, not a modification of the previous config.

Suggested change
- `*.configs["flat/vue2-strongly-recommended-error"]` ... Above, except with all rules configured to error instead of warn.
- `*.configs["flat/vue2-strongly-recommended-error"]` ... Same as vue2-strongly-recommended, except with all rules in this category configured to error instead of warn.

Copilot uses AI. Check for mistakes.
- `*.configs["flat/vue2-recommended"]` ... Above, plus rules to enforce subjective community defaults to ensure consistency
- `*.configs["flat/vue2-recommended-error"]` ... Above, except with all rules configured to error instead of warn.
Comment on lines +68 to +76
Copy link

Copilot AI Dec 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The description "Above, except with all rules configured to error instead of warn" is potentially misleading. This config doesn't modify the config mentioned directly above it (strongly-recommended); rather, it's an alternative to strongly-recommended where the category's rules are set to error severity instead of warn. Consider clarifying this to say something like "Same as strongly-recommended, except with all rules in this category configured to error instead of warn" to make it clearer that this is an alternative, not a modification of the previous config.

Suggested change
- `*.configs["flat/strongly-recommended-error"]` ... Above, except with all rules configured to error instead of warn.
- `*.configs["flat/recommended"]` ... Above, plus rules to enforce subjective community defaults to ensure consistency.
- `*.configs["flat/recommended-error"]` ... Above, except with all rules configured to error instead of warn.
- Configurations for using Vue.js 2.x:
- `*.configs["flat/vue2-essential"]` ... `base`, plus rules to prevent errors or unintended behavior.
- `*.configs["flat/vue2-strongly-recommended"]` ... Above, plus rules to considerably improve code readability and/or dev experience.
- `*.configs["flat/vue2-strongly-recommended-error"]` ... Above, except with all rules configured to error instead of warn.
- `*.configs["flat/vue2-recommended"]` ... Above, plus rules to enforce subjective community defaults to ensure consistency
- `*.configs["flat/vue2-recommended-error"]` ... Above, except with all rules configured to error instead of warn.
- `*.configs["flat/strongly-recommended-error"]` ... Same as strongly-recommended, except with all rules in this category configured to error instead of warn.
- `*.configs["flat/recommended"]` ... Above, plus rules to enforce subjective community defaults to ensure consistency.
- `*.configs["flat/recommended-error"]` ... Same as recommended, except with all rules in this category configured to error instead of warn.
- Configurations for using Vue.js 2.x:
- `*.configs["flat/vue2-essential"]` ... `base`, plus rules to prevent errors or unintended behavior.
- `*.configs["flat/vue2-strongly-recommended"]` ... Above, plus rules to considerably improve code readability and/or dev experience.
- `*.configs["flat/vue2-strongly-recommended-error"]` ... Same as vue2-strongly-recommended, except with all rules in this category configured to error instead of warn.
- `*.configs["flat/vue2-recommended"]` ... Above, plus rules to enforce subjective community defaults to ensure consistency
- `*.configs["flat/vue2-recommended-error"]` ... Same as vue2-recommended, except with all rules in this category configured to error instead of warn.

Copilot uses AI. Check for mistakes.
Comment on lines +68 to +76
Copy link

Copilot AI Dec 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The description "Above, except with all rules configured to error instead of warn" is potentially misleading. This config doesn't modify the config mentioned directly above it (recommended); rather, it's an alternative to recommended where the category's rules are set to error severity instead of warn. Consider clarifying this to say something like "Same as recommended, except with all rules in this category configured to error instead of warn" to make it clearer that this is an alternative, not a modification of the previous config.

Suggested change
- `*.configs["flat/strongly-recommended-error"]` ... Above, except with all rules configured to error instead of warn.
- `*.configs["flat/recommended"]` ... Above, plus rules to enforce subjective community defaults to ensure consistency.
- `*.configs["flat/recommended-error"]` ... Above, except with all rules configured to error instead of warn.
- Configurations for using Vue.js 2.x:
- `*.configs["flat/vue2-essential"]` ... `base`, plus rules to prevent errors or unintended behavior.
- `*.configs["flat/vue2-strongly-recommended"]` ... Above, plus rules to considerably improve code readability and/or dev experience.
- `*.configs["flat/vue2-strongly-recommended-error"]` ... Above, except with all rules configured to error instead of warn.
- `*.configs["flat/vue2-recommended"]` ... Above, plus rules to enforce subjective community defaults to ensure consistency
- `*.configs["flat/vue2-recommended-error"]` ... Above, except with all rules configured to error instead of warn.
- `*.configs["flat/strongly-recommended-error"]` ... Same as strongly-recommended, except with all rules in this category configured to error instead of warn.
- `*.configs["flat/recommended"]` ... Above, plus rules to enforce subjective community defaults to ensure consistency.
- `*.configs["flat/recommended-error"]` ... Same as recommended, except with all rules in this category configured to error instead of warn.
- Configurations for using Vue.js 2.x:
- `*.configs["flat/vue2-essential"]` ... `base`, plus rules to prevent errors or unintended behavior.
- `*.configs["flat/vue2-strongly-recommended"]` ... Above, plus rules to considerably improve code readability and/or dev experience.
- `*.configs["flat/vue2-strongly-recommended-error"]` ... Same as vue2-strongly-recommended, except with all rules in this category configured to error instead of warn.
- `*.configs["flat/vue2-recommended"]` ... Above, plus rules to enforce subjective community defaults to ensure consistency
- `*.configs["flat/vue2-recommended-error"]` ... Same as vue2-recommended, except with all rules in this category configured to error instead of warn.

Copilot uses AI. Check for mistakes.
Copy link

Copilot AI Dec 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The description "Above, except with all rules configured to error instead of warn" is potentially misleading. This config doesn't modify the config mentioned directly above it (vue2-recommended); rather, it's an alternative to vue2-recommended where the category's rules are set to error severity instead of warn. Consider clarifying this to say something like "Same as vue2-recommended, except with all rules in this category configured to error instead of warn" to make it clearer that this is an alternative, not a modification of the previous config.

Suggested change
- `*.configs["flat/vue2-recommended-error"]` ... Above, except with all rules configured to error instead of warn.
- `*.configs["flat/vue2-recommended-error"]` ... Same as vue2-recommended, except with all rules in this category configured to error instead of warn.

Copilot uses AI. Check for mistakes.

:::warning Reporting rules
By default, all rules from **base** and **essential** categories report ESLint errors. Other rules - because they're not covering potential bugs in the application - report warnings. What does it mean? By default - nothing, but if you want - you can set up a threshold and break the build after a certain amount of warnings, instead of any. More information [here](https://eslint.org/docs/user-guide/command-line-interface#handling-warnings).

Alternatively, there are versions of the configs with all rules set to error suffixed with `-error` that you can use.
:::

#### Specifying Globals (`eslint.config.js`)
Expand Down Expand Up @@ -187,14 +193,20 @@ You can use the following configs by adding them to `extends`.
- Configurations for using Vue.js 3.x:
- `"plugin:vue/essential"` ... `base`, plus rules to prevent errors or unintended behavior.
- `"plugin:vue/strongly-recommended"` ... Above, plus rules to considerably improve code readability and/or dev experience.
- `"plugin:vue/strongly-recommended-error"` ... Above, except with all rules configured to error instead of warn.
- `"plugin:vue/recommended"` ... Above, plus rules to enforce subjective community defaults to ensure consistency.
- `"plugin:vue/recommended-error"` ... Above, except with all rules configured to error instead of warn.
- Configurations for using Vue.js 2.x:
- `"plugin:vue/vue2-essential"` ... `base`, plus rules to prevent errors or unintended behavior.
- `"plugin:vue/vue2-strongly-recommended"` ... Above, plus rules to considerably improve code readability and/or dev experience.
- `"plugin:vue/vue2-strongly-recommended-error"` ... Above, except with all rules configured to error instead of warn.
Copy link

Copilot AI Dec 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The description "Above, except with all rules configured to error instead of warn" is potentially misleading. This config doesn't modify the config mentioned directly above it (vue2-strongly-recommended); rather, it's an alternative to vue2-strongly-recommended where the category's rules are set to error severity instead of warn. Consider clarifying this to say something like "Same as vue2-strongly-recommended, except with all rules in this category configured to error instead of warn" to make it clearer that this is an alternative, not a modification of the previous config.

Suggested change
- `"plugin:vue/vue2-strongly-recommended-error"` ... Above, except with all rules configured to error instead of warn.
- `"plugin:vue/vue2-strongly-recommended-error"` ... Same as vue2-strongly-recommended, except with all rules in this category configured to error instead of warn.

Copilot uses AI. Check for mistakes.
- `"plugin:vue/vue2-recommended"` ... Above, plus rules to enforce subjective community defaults to ensure consistency.
- `"plugin:vue/vue2-recommended-error"` ... Above, except with all rules configured to error instead of warn.
Comment on lines +196 to +204
Copy link

Copilot AI Dec 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The description "Above, except with all rules configured to error instead of warn" is potentially misleading. This config doesn't modify the config mentioned directly above it (strongly-recommended); rather, it's an alternative to strongly-recommended where the category's rules are set to error severity instead of warn. Consider clarifying this to say something like "Same as strongly-recommended, except with all rules in this category configured to error instead of warn" to make it clearer that this is an alternative, not a modification of the previous config.

Suggested change
- `"plugin:vue/strongly-recommended-error"` ... Above, except with all rules configured to error instead of warn.
- `"plugin:vue/recommended"` ... Above, plus rules to enforce subjective community defaults to ensure consistency.
- `"plugin:vue/recommended-error"` ... Above, except with all rules configured to error instead of warn.
- Configurations for using Vue.js 2.x:
- `"plugin:vue/vue2-essential"` ... `base`, plus rules to prevent errors or unintended behavior.
- `"plugin:vue/vue2-strongly-recommended"` ... Above, plus rules to considerably improve code readability and/or dev experience.
- `"plugin:vue/vue2-strongly-recommended-error"` ... Above, except with all rules configured to error instead of warn.
- `"plugin:vue/vue2-recommended"` ... Above, plus rules to enforce subjective community defaults to ensure consistency.
- `"plugin:vue/vue2-recommended-error"` ... Above, except with all rules configured to error instead of warn.
- `"plugin:vue/strongly-recommended-error"` ... Same as strongly-recommended, except with all rules in this category configured to error instead of warn.
- `"plugin:vue/recommended"` ... Above, plus rules to enforce subjective community defaults to ensure consistency.
- `"plugin:vue/recommended-error"` ... Same as recommended, except with all rules in this category configured to error instead of warn.
- Configurations for using Vue.js 2.x:
- `"plugin:vue/vue2-essential"` ... `base`, plus rules to prevent errors or unintended behavior.
- `"plugin:vue/vue2-strongly-recommended"` ... Above, plus rules to considerably improve code readability and/or dev experience.
- `"plugin:vue/vue2-strongly-recommended-error"` ... Same as vue2-strongly-recommended, except with all rules in this category configured to error instead of warn.
- `"plugin:vue/vue2-recommended"` ... Above, plus rules to enforce subjective community defaults to ensure consistency.
- `"plugin:vue/vue2-recommended-error"` ... Same as vue2-recommended, except with all rules in this category configured to error instead of warn.

Copilot uses AI. Check for mistakes.
Comment on lines +196 to +204
Copy link

Copilot AI Dec 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The description "Above, except with all rules configured to error instead of warn" is potentially misleading. This config doesn't modify the config mentioned directly above it (recommended); rather, it's an alternative to recommended where the category's rules are set to error severity instead of warn. Consider clarifying this to say something like "Same as recommended, except with all rules in this category configured to error instead of warn" to make it clearer that this is an alternative, not a modification of the previous config.

Suggested change
- `"plugin:vue/strongly-recommended-error"` ... Above, except with all rules configured to error instead of warn.
- `"plugin:vue/recommended"` ... Above, plus rules to enforce subjective community defaults to ensure consistency.
- `"plugin:vue/recommended-error"` ... Above, except with all rules configured to error instead of warn.
- Configurations for using Vue.js 2.x:
- `"plugin:vue/vue2-essential"` ... `base`, plus rules to prevent errors or unintended behavior.
- `"plugin:vue/vue2-strongly-recommended"` ... Above, plus rules to considerably improve code readability and/or dev experience.
- `"plugin:vue/vue2-strongly-recommended-error"` ... Above, except with all rules configured to error instead of warn.
- `"plugin:vue/vue2-recommended"` ... Above, plus rules to enforce subjective community defaults to ensure consistency.
- `"plugin:vue/vue2-recommended-error"` ... Above, except with all rules configured to error instead of warn.
- `"plugin:vue/strongly-recommended-error"` ... Same as strongly-recommended, except with all rules in this category configured to error instead of warn.
- `"plugin:vue/recommended"` ... Above, plus rules to enforce subjective community defaults to ensure consistency.
- `"plugin:vue/recommended-error"` ... Same as recommended, except with all rules in this category configured to error instead of warn.
- Configurations for using Vue.js 2.x:
- `"plugin:vue/vue2-essential"` ... `base`, plus rules to prevent errors or unintended behavior.
- `"plugin:vue/vue2-strongly-recommended"` ... Above, plus rules to considerably improve code readability and/or dev experience.
- `"plugin:vue/vue2-strongly-recommended-error"` ... Same as vue2-strongly-recommended, except with all rules in this category configured to error instead of warn.
- `"plugin:vue/vue2-recommended"` ... Above, plus rules to enforce subjective community defaults to ensure consistency.
- `"plugin:vue/vue2-recommended-error"` ... Same as vue2-recommended, except with all rules in this category configured to error instead of warn.

Copilot uses AI. Check for mistakes.
Comment on lines +196 to +204
Copy link

Copilot AI Dec 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The description "Above, except with all rules configured to error instead of warn" is potentially misleading. This config doesn't modify the config mentioned directly above it (vue2-recommended); rather, it's an alternative to vue2-recommended where the category's rules are set to error severity instead of warn. Consider clarifying this to say something like "Same as vue2-recommended, except with all rules in this category configured to error instead of warn" to make it clearer that this is an alternative, not a modification of the previous config.

Suggested change
- `"plugin:vue/strongly-recommended-error"` ... Above, except with all rules configured to error instead of warn.
- `"plugin:vue/recommended"` ... Above, plus rules to enforce subjective community defaults to ensure consistency.
- `"plugin:vue/recommended-error"` ... Above, except with all rules configured to error instead of warn.
- Configurations for using Vue.js 2.x:
- `"plugin:vue/vue2-essential"` ... `base`, plus rules to prevent errors or unintended behavior.
- `"plugin:vue/vue2-strongly-recommended"` ... Above, plus rules to considerably improve code readability and/or dev experience.
- `"plugin:vue/vue2-strongly-recommended-error"` ... Above, except with all rules configured to error instead of warn.
- `"plugin:vue/vue2-recommended"` ... Above, plus rules to enforce subjective community defaults to ensure consistency.
- `"plugin:vue/vue2-recommended-error"` ... Above, except with all rules configured to error instead of warn.
- `"plugin:vue/strongly-recommended-error"` ... Same as strongly-recommended, except with all rules in this category configured to error instead of warn.
- `"plugin:vue/recommended"` ... Above, plus rules to enforce subjective community defaults to ensure consistency.
- `"plugin:vue/recommended-error"` ... Same as recommended, except with all rules in this category configured to error instead of warn.
- Configurations for using Vue.js 2.x:
- `"plugin:vue/vue2-essential"` ... `base`, plus rules to prevent errors or unintended behavior.
- `"plugin:vue/vue2-strongly-recommended"` ... Above, plus rules to considerably improve code readability and/or dev experience.
- `"plugin:vue/vue2-strongly-recommended-error"` ... Same as vue2-strongly-recommended, except with all rules in this category configured to error instead of warn.
- `"plugin:vue/vue2-recommended"` ... Above, plus rules to enforce subjective community defaults to ensure consistency.
- `"plugin:vue/vue2-recommended-error"` ... Same as vue2-recommended, except with all rules in this category configured to error instead of warn.

Copilot uses AI. Check for mistakes.

:::warning Reporting rules
By default, all rules from **base** and **essential** categories report ESLint errors. Other rules - because they're not covering potential bugs in the application - report warnings. What does it mean? By default - nothing, but if you want - you can set up a threshold and break the build after a certain amount of warnings, instead of any. More information [here](https://eslint.org/docs/user-guide/command-line-interface#handling-warnings).

Alternatively, there are versions of the configs with all rules set to error suffixed with `-error` that you can use.
:::

:::warning Status of Vue.js 3.x supports
Expand Down
24 changes: 24 additions & 0 deletions lib/configs/flat/vue2-recommended-error.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/*
* IMPORTANT!
* This file has been automatically generated,
* in order to update its content execute "npm run update"
*/
'use strict'
const config = require('./vue2-strongly-recommended-error.js')

module.exports = [
...config,
{
name: 'vue/vue2-recommended/rules',
rules: {
'vue/attributes-order': 'error',
'vue/block-order': 'error',
'vue/no-lone-template': 'error',
'vue/no-multiple-slot-args': 'error',
'vue/no-required-prop-with-default': 'error',
'vue/no-v-html': 'error',
'vue/order-in-components': 'error',
'vue/this-in-template': 'error'
}
}
]
39 changes: 39 additions & 0 deletions lib/configs/flat/vue2-strongly-recommended-error.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/*
* IMPORTANT!
* This file has been automatically generated,
* in order to update its content execute "npm run update"
*/
'use strict'
const config = require('./vue2-essential.js')

module.exports = [
...config,
{
name: 'vue/vue2-strongly-recommended/rules',
rules: {
'vue/attribute-hyphenation': 'error',
'vue/component-definition-name-casing': 'error',
'vue/first-attribute-linebreak': 'error',
'vue/html-closing-bracket-newline': 'error',
'vue/html-closing-bracket-spacing': 'error',
'vue/html-end-tags': 'error',
'vue/html-indent': 'error',
'vue/html-quotes': 'error',
'vue/html-self-closing': 'error',
'vue/max-attributes-per-line': 'error',
'vue/multiline-html-element-content-newline': 'error',
'vue/mustache-interpolation-spacing': 'error',
'vue/no-multi-spaces': 'error',
'vue/no-spaces-around-equal-signs-in-attribute': 'error',
'vue/no-template-shadow': 'error',
'vue/one-component-per-file': 'error',
'vue/prop-name-casing': 'error',
'vue/require-default-prop': 'error',
'vue/require-prop-types': 'error',
'vue/singleline-html-element-content-newline': 'error',
'vue/v-bind-style': 'error',
'vue/v-on-style': 'error',
'vue/v-slot-style': 'error'
}
}
]
24 changes: 24 additions & 0 deletions lib/configs/flat/vue3-recommended-error.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/*
* IMPORTANT!
* This file has been automatically generated,
* in order to update its content execute "npm run update"
*/
'use strict'
const config = require('./vue3-strongly-recommended-error.js')

module.exports = [
...config,
{
name: 'vue/recommended/rules',
rules: {
'vue/attributes-order': 'error',
'vue/block-order': 'error',
'vue/no-lone-template': 'error',
'vue/no-multiple-slot-args': 'error',
'vue/no-required-prop-with-default': 'error',
'vue/no-v-html': 'error',
'vue/order-in-components': 'error',
'vue/this-in-template': 'error'
}
}
]
47 changes: 47 additions & 0 deletions lib/configs/flat/vue3-strongly-recommended-error.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/*
* IMPORTANT!
* This file has been automatically generated,
* in order to update its content execute "npm run update"
*/
'use strict'
const config = require('./vue3-essential.js')

module.exports = [
...config,
{
name: 'vue/strongly-recommended/rules',
rules: {
'vue/attribute-hyphenation': 'error',
'vue/component-definition-name-casing': 'error',
'vue/first-attribute-linebreak': 'error',
'vue/html-closing-bracket-newline': 'error',
'vue/html-closing-bracket-spacing': 'error',
'vue/html-end-tags': 'error',
'vue/html-indent': 'error',
'vue/html-quotes': 'error',
'vue/html-self-closing': 'error',
'vue/max-attributes-per-line': 'error',
'vue/multiline-html-element-content-newline': 'error',
'vue/mustache-interpolation-spacing': 'error',
'vue/no-multi-spaces': 'error',
'vue/no-spaces-around-equal-signs-in-attribute': 'error',
'vue/no-template-shadow': 'error',
'vue/one-component-per-file': 'error',
'vue/prop-name-casing': 'error',
'vue/require-default-prop': 'error',
'vue/require-explicit-emits': 'error',
'vue/require-prop-types': 'error',
'vue/singleline-html-element-content-newline': 'error',
'vue/v-bind-style': 'error',
'vue/v-on-event-hyphenation': [
'error',
'always',
{
autofix: true
}
],
'vue/v-on-style': 'error',
'vue/v-slot-style': 'error'
}
}
]
18 changes: 18 additions & 0 deletions lib/configs/vue2-recommended-error.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/*
* IMPORTANT!
* This file has been automatically generated,
* in order to update its content execute "npm run update"
*/
module.exports = {
extends: require.resolve('./vue2-strongly-recommended-error'),
rules: {
'vue/attributes-order': 'error',
'vue/block-order': 'error',
'vue/no-lone-template': 'error',
'vue/no-multiple-slot-args': 'error',
'vue/no-required-prop-with-default': 'error',
'vue/no-v-html': 'error',
'vue/order-in-components': 'error',
'vue/this-in-template': 'error'
}
}
33 changes: 33 additions & 0 deletions lib/configs/vue2-strongly-recommended-error.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/*
* IMPORTANT!
* This file has been automatically generated,
* in order to update its content execute "npm run update"
*/
module.exports = {
extends: require.resolve('./vue2-essential'),
rules: {
'vue/attribute-hyphenation': 'error',
'vue/component-definition-name-casing': 'error',
'vue/first-attribute-linebreak': 'error',
'vue/html-closing-bracket-newline': 'error',
'vue/html-closing-bracket-spacing': 'error',
'vue/html-end-tags': 'error',
'vue/html-indent': 'error',
'vue/html-quotes': 'error',
'vue/html-self-closing': 'error',
'vue/max-attributes-per-line': 'error',
'vue/multiline-html-element-content-newline': 'error',
'vue/mustache-interpolation-spacing': 'error',
'vue/no-multi-spaces': 'error',
'vue/no-spaces-around-equal-signs-in-attribute': 'error',
'vue/no-template-shadow': 'error',
'vue/one-component-per-file': 'error',
'vue/prop-name-casing': 'error',
'vue/require-default-prop': 'error',
'vue/require-prop-types': 'error',
'vue/singleline-html-element-content-newline': 'error',
'vue/v-bind-style': 'error',
'vue/v-on-style': 'error',
'vue/v-slot-style': 'error'
}
}
18 changes: 18 additions & 0 deletions lib/configs/vue3-recommended-error.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/*
* IMPORTANT!
* This file has been automatically generated,
* in order to update its content execute "npm run update"
*/
module.exports = {
extends: require.resolve('./vue3-strongly-recommended-error'),
rules: {
'vue/attributes-order': 'error',
'vue/block-order': 'error',
'vue/no-lone-template': 'error',
'vue/no-multiple-slot-args': 'error',
'vue/no-required-prop-with-default': 'error',
'vue/no-v-html': 'error',
'vue/order-in-components': 'error',
'vue/this-in-template': 'error'
}
}
41 changes: 41 additions & 0 deletions lib/configs/vue3-strongly-recommended-error.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/*
* IMPORTANT!
* This file has been automatically generated,
* in order to update its content execute "npm run update"
*/
module.exports = {
extends: require.resolve('./vue3-essential'),
rules: {
'vue/attribute-hyphenation': 'error',
'vue/component-definition-name-casing': 'error',
'vue/first-attribute-linebreak': 'error',
'vue/html-closing-bracket-newline': 'error',
'vue/html-closing-bracket-spacing': 'error',
'vue/html-end-tags': 'error',
'vue/html-indent': 'error',
'vue/html-quotes': 'error',
'vue/html-self-closing': 'error',
'vue/max-attributes-per-line': 'error',
'vue/multiline-html-element-content-newline': 'error',
'vue/mustache-interpolation-spacing': 'error',
'vue/no-multi-spaces': 'error',
'vue/no-spaces-around-equal-signs-in-attribute': 'error',
'vue/no-template-shadow': 'error',
'vue/one-component-per-file': 'error',
'vue/prop-name-casing': 'error',
'vue/require-default-prop': 'error',
'vue/require-explicit-emits': 'error',
'vue/require-prop-types': 'error',
'vue/singleline-html-element-content-newline': 'error',
'vue/v-bind-style': 'error',
'vue/v-on-event-hyphenation': [
'error',
'always',
{
autofix: true
}
],
'vue/v-on-style': 'error',
'vue/v-slot-style': 'error'
}
}
24 changes: 18 additions & 6 deletions tools/update-lib-configs.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,11 @@ const extendsCategories = {
'vue3-use-with-caution': 'vue3-recommended'
}

function formatRules(rules, categoryId) {
function formatRules(rules, categoryId, alwaysError) {
const obj = Object.fromEntries(
rules.map((rule) => {
let options = errorCategories.has(categoryId) ? 'error' : 'warn'
let options =
alwaysError || errorCategories.has(categoryId) ? 'error' : 'warn'
const defaultOptions =
rule.meta && rule.meta.docs && rule.meta.docs.defaultOptions
if (defaultOptions) {
Expand All @@ -47,8 +48,8 @@ function formatRules(rules, categoryId) {
return JSON.stringify(obj, null, 2)
}

function formatCategory(category) {
const extendsCategoryId = extendsCategories[category.categoryId]
function formatCategory(category, alwaysError = false) {
let extendsCategoryId = extendsCategories[category.categoryId]
if (extendsCategoryId == null) {
return `/*
* IMPORTANT!
Expand All @@ -63,7 +64,7 @@ module.exports = {
plugins: [
'vue'
],
rules: ${formatRules(category.rules, category.categoryId)},
rules: ${formatRules(category.rules, category.categoryId, alwaysError)},
overrides: [
{
files: '*.vue',
Expand All @@ -73,14 +74,18 @@ module.exports = {
}
`
}
if (alwaysError && !errorCategories.has(extendsCategoryId)) {
extendsCategoryId += '-error'
}

return `/*
* IMPORTANT!
* This file has been automatically generated,
* in order to update its content execute "npm run update"
*/
module.exports = {
extends: require.resolve('./${extendsCategoryId}'),
rules: ${formatRules(category.rules, category.categoryId)}
rules: ${formatRules(category.rules, category.categoryId, alwaysError)}
}
`
}
Expand All @@ -92,6 +97,13 @@ for (const category of categories) {
const content = formatCategory(category)

fs.writeFileSync(filePath, content)

if (!errorCategories.has(category.categoryId)) {
fs.writeFileSync(
path.join(ROOT, `${category.categoryId}-error.js`),
formatCategory(category, true)
)
}
}

Copy link

Copilot AI Dec 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The script creates new -error config files but doesn't update lib/configs/index.js to export them. This means the new configs won't be accessible to users via the documented syntax like plugin:vue/strongly-recommended-error. The script should also update the exports in lib/configs/index.js to include entries like 'vue2-strongly-recommended-error': require('./vue2-strongly-recommended-error'), 'vue2-recommended-error': require('./vue2-recommended-error'), 'strongly-recommended-error': require('./vue3-strongly-recommended-error'), and 'recommended-error': require('./vue3-recommended-error').

Suggested change
// Update lib/configs/index.js to export all config files.
const CONFIGS_INDEX_PATH = path.join(ROOT, 'index.js')
function updateConfigsIndex() {
const files = fs.readdirSync(ROOT)
.filter(f => f.endsWith('.js') && f !== 'index.js')
const entries = files
.map(f => {
const name = path.basename(f, '.js')
return ` '${name}': require('./${name}')`
})
.join(',\n')
const content = `/*
* IMPORTANT!
* This file has been automatically generated,
* in order to update its content execute "npm run update"
*/
module.exports = {
${entries}
}
`
fs.writeFileSync(CONFIGS_INDEX_PATH, content)
}
updateConfigsIndex()

Copilot uses AI. Check for mistakes.
// Format files.
Expand Down
Loading
Loading