UNPKG

eslint-plugin-ember

Version:
66 lines (59 loc) 1.95 kB
/** @type {import('eslint').Rule.RuleModule} */ module.exports = { meta: { type: 'suggestion', docs: { description: 'disallow autofocus attribute', category: 'Accessibility', url: 'https://github.com/ember-cli/eslint-plugin-ember/tree/master/docs/rules/template-no-autofocus-attribute.md', }, fixable: 'code', schema: [], messages: { noAutofocus: 'Avoid using autofocus attribute. Autofocusing elements can cause usability issues for sighted and non-sighted users.', }, originallyFrom: { name: 'ember-template-lint', rule: 'lib/rules/no-autofocus-attribute.js', docs: 'docs/rule/no-autofocus-attribute.md', tests: 'test/unit/rules/no-autofocus-attribute-test.js', }, }, create(context) { return { GlimmerElementNode(node) { const autofocusAttr = node.attributes?.find((attr) => attr.name === 'autofocus'); if (autofocusAttr) { context.report({ node: autofocusAttr, messageId: 'noAutofocus', fix(fixer) { const sourceCode = context.sourceCode; const text = sourceCode.getText(); const attrStart = autofocusAttr.range[0]; const attrEnd = autofocusAttr.range[1]; let removeStart = attrStart; while (removeStart > 0 && /\s/.test(text[removeStart - 1])) { removeStart--; } return fixer.removeRange([removeStart, attrEnd]); }, }); } }, GlimmerMustacheStatement(node) { if (!node.hash || !node.hash.pairs) { return; } const autofocusPair = node.hash.pairs.find((pair) => pair.key === 'autofocus'); if (autofocusPair) { context.report({ node: autofocusPair, messageId: 'noAutofocus', }); } }, }; }, };