UNPKG

@jsxtools/eslint-plugin-jsx-a11y

Version:

Static AST checker for accessibility rules on JSX elements for flat ESLint Config.

51 lines (48 loc) 1.79 kB
const axeCore = require('../util/module/axe-core.cjs'); const jsxAstUtils = require('../util/module/jsx-ast-utils.cjs'); const schemas = require('../util/schemas.cjs'); const getElementType = require('../util/getElementType.cjs'); const schema = schemas.generateObjSchema({ inputComponents: schemas.arraySchema }); const ruleOfAutocompleteValid = { meta: { docs: { url: "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/tree/HEAD/docs/rules/autocomplete-valid.md", description: "Enforce that autocomplete attributes are used correctly." }, schema: [schema] }, create: (context) => { const elementType = getElementType(context); return { JSXOpeningElement: (node) => { const options = context.options[0] || {}; const { inputComponents = [] } = options; const inputTypes = ["input"].concat(inputComponents); const elType = elementType(node); const autocomplete = jsxAstUtils.getLiteralPropValue(jsxAstUtils.getProp(node.attributes, "autocomplete")); if (typeof autocomplete !== "string" || !inputTypes.includes(elType)) { return; } const type = jsxAstUtils.getLiteralPropValue(jsxAstUtils.getProp(node.attributes, "type")); const { violations } = axeCore.runVirtualRule("autocomplete-valid", { nodeName: "input", attributes: { autocomplete, // Which autocomplete is valid depends on the input type type: type === null ? void 0 : type } }); if (violations.length === 0) { return; } context.report({ node, message: violations[0].nodes[0].all[0].message }); } }; } }; module.exports = ruleOfAutocompleteValid;