Accessibility ES Lint plugin with Nuxt3

// @ts-check
import pluginVueA11y from "eslint-plugin-vuejs-accessibility";
import withNuxt from "./.nuxt/eslint.config.mjs";

export default withNuxt(
{
ignores: ["**/.nuxt/**/*", "**/node_modules/**/*"],
rules: {
"vue/html-self-closing": [
"warn",
{
html: {
void: "always",
},},],},},

pluginVueA11y.configs["flat/recommended"],
{
rules: {
"vuejs-accessibility/alt-text": "error",
"vuejs-accessibility/anchor-has-content": "error",
"vuejs-accessibility/click-events-have-key-events": "error",
"vuejs-accessibility/form-control-has-label": "error",
"vuejs-accessibility/heading-has-content": "error",
},},);
// @ts-check
import pluginVueA11y from "eslint-plugin-vuejs-accessibility";
import withNuxt from "./.nuxt/eslint.config.mjs";

export default withNuxt(
{
ignores: ["**/.nuxt/**/*", "**/node_modules/**/*"],
rules: {
"vue/html-self-closing": [
"warn",
{
html: {
void: "always",
},},],},},

pluginVueA11y.configs["flat/recommended"],
{
rules: {
"vuejs-accessibility/alt-text": "error",
"vuejs-accessibility/anchor-has-content": "error",
"vuejs-accessibility/click-events-have-key-events": "error",
"vuejs-accessibility/form-control-has-label": "error",
"vuejs-accessibility/heading-has-content": "error",
},},);
Is this the correct way to use the eslint-plugin-vuejs-a11y ESLint extension in a Nuxt 3 project?
11 Replies
kapa.ai
kapa.ai3w ago
Hi @Sagar Kapoor. I'm kapa.ai, your friendly support bot. I will try to answer your question by searching through the knowledge base. :wave: ---------------------- Yes, your approach to using the eslint-plugin-vuejs-accessibility (also known as eslint-plugin-vuejs-a11y) with Nuxt 3 is correct. You're using the new ESLint flat config format, which is recommended for Nuxt 3 projects. Here's a breakdown of why your configuration is correct: 1. You're using the withNuxt function from the generated .nuxt/eslint.config.mjs file, which is the recommended way to extend the Nuxt-provided ESLint configuration as described in the Nuxt ESLint module documentation (https://eslint.nuxt.com/packages/module#quick-setup). 2. You're correctly importing and using the eslint-plugin-vuejs-accessibility plugin with its flat config preset (pluginVueA11y.configs["flat/recommended"]). 3. You're adding custom rules for the accessibility plugin, which is a good practice for enforcing specific accessibility standards in your project. 4. The configuration is in a file named eslint.config.mjs, which is the correct filename for ESLint flat config in a Nuxt 3 project as mentioned in the Nuxt ESLint module documentation (https://eslint.nuxt.com/packages/module#quick-setup). Your configuration also includes some additional customizations: - Ignoring certain directories (.nuxt and node_modules) - Adding a custom rule for vue/html-self-closing These customizations are valid and can be adjusted according to your project's needs. To ensure you're using the latest recommended setup, you might want to check if you have the @nuxt/eslint module installed and configured in your nuxt.config.ts file, as it provides project-aware ESLint configuration for Nuxt 3 as described in the Nuxt documentation (https://nuxt.com/docs/guide/concepts/code-style#eslint). In summary, your configuration is a correct and well-structured way to use the eslint-plugin-vuejs-accessibility with Nuxt 3, leveraging the new ESLint flat config format. ---------------------- Note: you can ask me a follow up question by @ mentioning me again :speech_balloon: ----------------------
kapa.ai
kapa.ai3w ago
<@565461230060306432> Kapa.ai is still learning and improving, please let me know how I did by reacting below.
Sagar Kapoor
Sagar KapoorOP3w ago
@kapa.ai Why does the official doc have spread operator then? import pluginVueA11y from "eslint-plugin-vuejs-accessibility"; export default [ // add more generic rulesets here, such as: // js.configs.recommended, ...pluginVueA11y.configs["flat/recommended"], { rules: { // override/add rules settings here, such as: // "vuejs-accessibility/alt-text": "error" } } ];
kapa.ai
kapa.ai3w ago
Let me check the knowledge base for you again. One moment! :books: ---------------------- I apologize for the confusion in my previous answer. You're right to point out the difference in the official documentation. Let me clarify this based on the most up-to-date information from the Nuxt ESLint documentation. The example you're referring to is likely from the general ESLint documentation for flat config, not specifically from the Nuxt documentation. In the context of Nuxt 3 and its ESLint integration, the recommended approach is slightly different. According to the Nuxt ESLint module documentation (https://eslint.nuxt.com/packages/module#quick-setup), the correct way to set up ESLint with Nuxt 3 is as follows: 1. The module generates an eslint.config.mjs file in your project root. 2. This file should export a default configuration using the withNuxt function. Here's the recommended structure:
import withNuxt from './.nuxt/eslint.config.mjs'

export default withNuxt({
// your custom flat configs go here
})
import withNuxt from './.nuxt/eslint.config.mjs'

export default withNuxt({
// your custom flat configs go here
})
To incorporate the eslint-plugin-vuejs-accessibility plugin, you would modify this structure like so:
import withNuxt from './.nuxt/eslint.config.mjs'
import pluginVueA11y from "eslint-plugin-vuejs-accessibility";

export default withNuxt(
// your custom flat configs go here
{
plugins: {
'vuejs-accessibility': pluginVueA11y
},
rules: {
// Your custom rules here
"vuejs-accessibility/alt-text": "error",
// ... other rules
}
}
)
import withNuxt from './.nuxt/eslint.config.mjs'
import pluginVueA11y from "eslint-plugin-vuejs-accessibility";

export default withNuxt(
// your custom flat configs go here
{
plugins: {
'vuejs-accessibility': pluginVueA11y
},
rules: {
// Your custom rules here
"vuejs-accessibility/alt-text": "error",
// ... other rules
}
}
)
The withNuxt function ensures that your custom configurations are properly merged with Nuxt's base ESLint configuration. The spread operator example you mentioned is a valid way to use flat configs in general ESLint setups, but for Nuxt 3 projects, using the withNuxt function is the recommended approach to ensure compatibility with Nuxt's ESLint integration. If you need to use multiple configurations or plugins, you can pass them as separate arguments to withNuxt, as shown in the custom config presets example (https://eslint.nuxt.com/packages/module#custom-config-presets) in the Nuxt ESLint documentation. I apologize again for any confusion my previous answer may have caused. Thank you for bringing this to my attention, as it allows me to provide more accurate information. ---------------------- Note: you can ask me a follow up question by @ mentioning me again :speech_balloon: ----------------------
kapa.ai
kapa.ai3w ago
<@565461230060306432> Kapa.ai is still learning and improving, please let me know how I did by reacting below.
Sagar Kapoor
Sagar KapoorOP3w ago
@kapa.ai Where can I read more about this? To incorporate the eslint-plugin-vuejs-accessibility plugin, you would modify this structure like so: import withNuxt from './.nuxt/eslint.config.mjs' import pluginVueA11y from "eslint-plugin-vuejs-accessibility"; export default withNuxt( // your custom flat configs go here { plugins: { 'vuejs-accessibility': pluginVueA11y }, rules: { // Your custom rules here "vuejs-accessibility/alt-text": "error", // ... other rules } } )
kapa.ai
kapa.ai3w ago
Let me check the knowledge base for you again. One moment! :books: ---------------------- To read more about incorporating custom ESLint plugins and configurations with Nuxt 3, including the eslint-plugin-vuejs-accessibility, you can refer to the following resources: 1. The primary source for Nuxt 3 ESLint integration is the @nuxt/eslint module documentation (https://eslint.nuxt.com/packages/module). This provides an overview of the module and its features. 2. For specific information about customizing the ESLint configuration, you can check the Config Customizations section (https://eslint.nuxt.com/packages/module#config-customizations) of the @nuxt/eslint module documentation. This explains how to use the withNuxt() function and chain additional configurations. 3. If you want to learn more about using custom config presets, which is relevant to incorporating plugins like eslint-plugin-vuejs-accessibility, you can refer to the Custom Config Presets section (https://eslint.nuxt.com/packages/module#custom-config-presets) in the same documentation. 4. For general information about ESLint's new flat config format, which is what Nuxt 3 uses, you can refer to the official ESLint documentation on flat config (https://eslint.org/docs/latest/use/configure/configuration-files-new). 5. Specifically for the eslint-plugin-vuejs-accessibility plugin, you should check its GitHub repository (https://github.com/vue-a11y/eslint-plugin-vuejs-accessibility) for the most up-to-date usage instructions and available rules. Remember that the Nuxt ESLint integration is designed to work with the flat config format, so always refer to the most recent Nuxt documentation for the best practices in integrating ESLint and its plugins with your Nuxt 3 project. ---------------------- Note: you can ask me a follow up question by @ mentioning me again :speech_balloon: ----------------------
kapa.ai
kapa.ai3w ago
<@565461230060306432> Kapa.ai is still learning and improving, please let me know how I did by reacting below.
Sagar Kapoor
Sagar KapoorOP3w ago
@kapa.ai Is this better?
// @ts-check
import pluginVueA11y from "eslint-plugin-vuejs-accessibility";
import withNuxt from "./.nuxt/eslint.config.mjs";

export default withNuxt({
ignores: ["**/.nuxt/**/*", "**/node_modules/**/*"],
plugins: {
"vuejs-accessibility": pluginVueA11y,
},
rules: {
"vuejs-accessibility/alt-text": "error",
"vuejs-accessibility/anchor-has-content": "error",
"vuejs-accessibility/click-events-have-key-events": "error",
"vuejs-accessibility/form-control-has-label": "error",
"vuejs-accessibility/heading-has-content": "error",

"vue/html-self-closing": [
"warn",
{
html: {
void: "always",
},
},
],
},
});
// @ts-check
import pluginVueA11y from "eslint-plugin-vuejs-accessibility";
import withNuxt from "./.nuxt/eslint.config.mjs";

export default withNuxt({
ignores: ["**/.nuxt/**/*", "**/node_modules/**/*"],
plugins: {
"vuejs-accessibility": pluginVueA11y,
},
rules: {
"vuejs-accessibility/alt-text": "error",
"vuejs-accessibility/anchor-has-content": "error",
"vuejs-accessibility/click-events-have-key-events": "error",
"vuejs-accessibility/form-control-has-label": "error",
"vuejs-accessibility/heading-has-content": "error",

"vue/html-self-closing": [
"warn",
{
html: {
void: "always",
},
},
],
},
});
kapa.ai
kapa.ai3w ago
Let me check the knowledge base for you again. One moment! :books: ---------------------- Yes, this configuration is better and aligns more closely with the recommended approach for using ESLint with Nuxt 3. Let's break down why this is an improvement: 1. You're using the withNuxt function correctly, which is the recommended way to extend the Nuxt-provided ESLint configuration as described in the Nuxt ESLint module documentation (https://eslint.nuxt.com/packages/module#quick-setup). 2. The plugin is correctly imported and added to the plugins object:
plugins: {
"vuejs-accessibility": pluginVueA11y,
},

plugins: {
"vuejs-accessibility": pluginVueA11y,
},

This is the correct way to add a plugin in the ESLint flat config format. 3. The accessibility rules are now directly included in the rules object, which is the proper way to configure rules in the flat config format. 4. You've kept your custom vue/html-self-closing rule, which is fine if that's a specific requirement for your project. 5. The ignores property is correctly used to exclude certain directories from linting. This configuration is more streamlined and follows the structure recommended by the Nuxt ESLint module. It combines the Nuxt-specific configuration (provided by withNuxt) with your custom plugin and rules in a single, flat object. If you want to use the recommended set of rules from the eslint-plugin-vuejs-accessibility plugin, you might consider adding:
extends: [pluginVueA11y.configs["flat/recommended"]],
extends: [pluginVueA11y.configs["flat/recommended"]],
before your rules object. This would include all the recommended rules, and then you can override or add specific rules as needed. For more information on customizing your ESLint configuration with Nuxt 3, you can refer to the Config Customizations section (https://eslint.nuxt.com/packages/module#config-customizations) of the Nuxt ESLint module documentation. ---------------------- Note: you can ask me a follow up question by @ mentioning me again :speech_balloon: ----------------------
kapa.ai
kapa.ai3w ago
<@565461230060306432> Kapa.ai is still learning and improving, please let me know how I did by reacting below.
Want results from more Discord servers?
Add your server