build status npm version license Coverage Status Total npm downloads

Get professional support for eslint-plugin-jsx-a11y on Tidelift # eslint-plugin-jsx-a11y Static AST checker for accessibility rules on JSX elements. #### _Read this in [other languages](https://github.com/ari-os310/eslint-plugin-jsx-a11y/blob/HEAD/translations/Translations.md)._ [Mexican Spanish๐Ÿ‡ฒ๐Ÿ‡ฝ](https://github.com/ari-os310/eslint-plugin-jsx-a11y/blob/HEAD/translations/README.mx.md) ## Why? This plugin does aย static evaluation of the JSX to spot accessibility issues in React apps. Because it only catches errors in static code, use it in combination with [@axe-core/react](https://github.com/dequelabs/axe-core-npm/tree/develop/packages/react) to test the accessibility of the rendered DOM. Consider theseย toolsย just as one step of a larger a11y testing process andย always test your apps with assistive technology. ## Installation **If you are installing this plugin via `eslint-config-airbnb`, please follow [these instructions](https://github.com/airbnb/javascript/tree/HEAD/packages/eslint-config-airbnb#eslint-config-airbnb-1).** You'll first need to install [ESLint](https://eslint.org/docs/latest/user-guide/getting-started): ```sh # npm npm install eslint --save-dev # yarn yarn add eslint --dev ``` Next, install `eslint-plugin-jsx-a11y`: ```sh # npm npm install eslint-plugin-jsx-a11y --save-dev # yarn yarn add eslint-plugin-jsx-a11y --dev ``` **Note:** If you installed ESLint globally (using the `-g` flag in npm, or the `global` prefix in yarn) then you must also install `eslint-plugin-jsx-a11y` globally. ## Usage Add `jsx-a11y` to the plugins section of your `.eslintrc` configuration file. You can omit the `eslint-plugin-` prefix: ```json { "plugins": ["jsx-a11y"] } ``` Then configure the rules you want to use under the rules section. ```json { "rules": { "jsx-a11y/rule-name": 2 } } ``` You can also enable all the recommended or strict rules at once. Add `plugin:jsx-a11y/recommended` or `plugin:jsx-a11y/strict` in `extends`: ```json { "extends": ["plugin:jsx-a11y/recommended"] } ``` > As you are extending our configuration, you can omit `"plugins": ["jsx-a11y"]` from your `.eslintrc` configuration file. To enable your custom components to be checked as DOM elements, you can set global settings in your configuration file by mapping each custom component name to a DOM element type. ```json { "settings": { "jsx-a11y": { "components": { "CityInput": "input", "CustomButton": "button", "MyButton": "button", "RoundButton": "button" } } } } ``` ## Supported Rules ๐Ÿ’ผ Configurations enabled in.\ ๐Ÿšซ Configurations disabled in.\ โ˜‘๏ธ Set in the `recommended` configuration.\ ๐Ÿ”’ Set in the `strict` configuration.\ โŒ Deprecated. | Nameย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย  | Description | ๐Ÿ’ผ | ๐Ÿšซ | โŒ | | :----------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------- | :---- | :---- | :- | | [accessible-emoji](docs/rules/accessible-emoji.md) | Enforce emojis are wrapped in `` and provide screenreader access. | | | โŒ | | [alt-text](docs/rules/alt-text.md) | Enforce all elements that require alternative text have meaningful information to relay back to end user. | โ˜‘๏ธ ๐Ÿ”’ | | | | [anchor-ambiguous-text](docs/rules/anchor-ambiguous-text.md) | Enforce `` text to not exactly match "click here", "here", "link", or "a link". | | โ˜‘๏ธ | | | [anchor-has-content](docs/rules/anchor-has-content.md) | Enforce all anchors to contain accessible content. | โ˜‘๏ธ ๐Ÿ”’ | | | | [anchor-is-valid](docs/rules/anchor-is-valid.md) | Enforce all anchors are valid, navigable elements. | โ˜‘๏ธ ๐Ÿ”’ | | | | [aria-activedescendant-has-tabindex](docs/rules/aria-activedescendant-has-tabindex.md) | Enforce elements with aria-activedescendant are tabbable. | โ˜‘๏ธ ๐Ÿ”’ | | | | [aria-props](docs/rules/aria-props.md) | Enforce all `aria-*` props are valid. | โ˜‘๏ธ ๐Ÿ”’ | | | | [aria-proptypes](docs/rules/aria-proptypes.md) | Enforce ARIA state and property values are valid. | โ˜‘๏ธ ๐Ÿ”’ | | | | [aria-role](docs/rules/aria-role.md) | Enforce that elements with ARIA roles must use a valid, non-abstract ARIA role. | โ˜‘๏ธ ๐Ÿ”’ | | | | [aria-unsupported-elements](docs/rules/aria-unsupported-elements.md) | Enforce that elements that do not support ARIA roles, states, and properties do not have those attributes. | โ˜‘๏ธ ๐Ÿ”’ | | | | [autocomplete-valid](docs/rules/autocomplete-valid.md) | Enforce that autocomplete attributes are used correctly. | โ˜‘๏ธ ๐Ÿ”’ | | | | [click-events-have-key-events](docs/rules/click-events-have-key-events.md) | Enforce a clickable non-interactive element has at least one keyboard event listener. | โ˜‘๏ธ ๐Ÿ”’ | | | | [control-has-associated-label](docs/rules/control-has-associated-label.md) | Enforce that a control (an interactive element) has a text label. | | โ˜‘๏ธ ๐Ÿ”’ | | | [heading-has-content](docs/rules/heading-has-content.md) | Enforce heading (`h1`, `h2`, etc) elements contain accessible content. | โ˜‘๏ธ ๐Ÿ”’ | | | | [html-has-lang](docs/rules/html-has-lang.md) | Enforce `` element has `lang` prop. | โ˜‘๏ธ ๐Ÿ”’ | | | | [iframe-has-title](docs/rules/iframe-has-title.md) | Enforce iframe elements have a title attribute. | โ˜‘๏ธ ๐Ÿ”’ | | | | [img-redundant-alt](docs/rules/img-redundant-alt.md) | Enforce `` alt prop does not contain the word "image", "picture", or "photo". | โ˜‘๏ธ ๐Ÿ”’ | | | | [interactive-supports-focus](docs/rules/interactive-supports-focus.md) | Enforce that elements with interactive handlers like `onClick` must be focusable. | โ˜‘๏ธ ๐Ÿ”’ | | | | [label-has-associated-control](docs/rules/label-has-associated-control.md) | Enforce that a `label` tag has a text label and an associated control. | โ˜‘๏ธ ๐Ÿ”’ | | | | [label-has-for](docs/rules/label-has-for.md) | Enforce that `