'use strict'; const {memberExpressionSelector} = require('./selectors/index.js'); const ERROR = 'error'; const SUGGESTION = 'suggestion'; const messages = { [ERROR]: 'Prefer `.textContent` over `.innerText`.', [SUGGESTION]: 'Switch to `.textContent`.', }; const memberExpressionPropertySelector = `${memberExpressionSelector('innerText')} > .property`; const destructuringSelector = [ 'ObjectPattern', ' > ', 'Property.properties', '[kind="init"]', '[computed!=true]', ' > ', 'Identifier.key', '[name="innerText"]', ].join(''); /** @param {import('eslint').Rule.RuleContext} context */ const create = () => ({ [memberExpressionPropertySelector](node) { return { node, messageId: ERROR, suggest: [ { messageId: SUGGESTION, fix: fixer => fixer.replaceText(node, 'textContent'), }, ], }; }, [destructuringSelector](node) { return { node, messageId: ERROR, suggest: [ { messageId: SUGGESTION, fix: fixer => fixer.replaceText( node, node.parent.shorthand ? 'textContent: innerText' : 'textContent', ), }, ], }; }, }); /** @type {import('eslint').Rule.RuleModule} */ module.exports = { create, meta: { type: 'suggestion', docs: { description: 'Prefer `.textContent` over `.innerText`.', }, hasSuggestions: true, messages, }, };