const passiveEventListenerNames = new Set(['touchstart', 'touchmove', 'wheel', 'mousewheel']) const propIsPassiveTrue = prop => prop.key && prop.key.name === 'passive' && prop.value && prop.value.value === true module.exports = { meta: { type: 'suggestion', docs: { description: 'enforce marking high frequency event handlers as passive', url: require('../url')(module) }, schema: [] }, create(context) { return { ['CallExpression[callee.property.name="addEventListener"]']: function (node) { const [name, listener, options] = node.arguments if (!listener) return if (name.type !== 'Literal') return if (!passiveEventListenerNames.has(name.value)) return if (options && options.type === 'ObjectExpression' && options.properties.some(propIsPassiveTrue)) return context.report({node, message: `High Frequency Events like "${name.value}" should be \`passive: true\``}) } } } }