diff --git a/rules/prefer-add-event-listener.js b/rules/prefer-add-event-listener.js index 8573bce3e1..1cba8982e6 100644 --- a/rules/prefer-add-event-listener.js +++ b/rules/prefer-add-event-listener.js @@ -94,7 +94,7 @@ const create = context => { return; } - const {left: memberExpression, right: assignedExpression} = node; + const {left: memberExpression, right: assignedExpression, operator} = node; if ( memberExpression.type !== 'MemberExpression' @@ -132,7 +132,11 @@ const create = context => { } else if (eventTypeName === 'error') { // Disable `onerror` fix, see #1493 extra = extraMessages.error; - } else { + } else if ( + operator === '=' + && node.parent.type === 'ExpressionStatement' + && node.parent.expression === node + ) { fix = fixer => fixCode(fixer, context.getSourceCode(), node, memberExpression); } diff --git a/test/prefer-add-event-listener.mjs b/test/prefer-add-event-listener.mjs index 609e86cccc..a28475f211 100644 --- a/test/prefer-add-event-listener.mjs +++ b/test/prefer-add-event-listener.mjs @@ -5,7 +5,7 @@ const {test} = getTester(import.meta); const excludeFooOptions = [{excludedPackages: ['foo']}]; -test({ +test.snapshot({ valid: [ 'foo.addEventListener(\'click\', () => {})', 'foo.removeEventListener(\'click\', onClick)', @@ -64,11 +64,6 @@ test({ options: excludeFooOptions, }, ], - invalid: [], -}); - -test.snapshot({ - valid: [], invalid: [ 'foo.onclick = () => {}', 'foo.onclick = 1', @@ -166,6 +161,10 @@ test.snapshot({ }, 'myWorker.port.onmessage = function(e) {}', '((foo)).onclick = ((0, listener))', + 'window.onload = window.onunload = function() {};', + 'window.onunload ??= function() {};', + 'window.onunload ||= function() {};', + 'window.onunload += function() {};', ], }); diff --git a/test/snapshots/prefer-add-event-listener.mjs.md b/test/snapshots/prefer-add-event-listener.mjs.md index 09a8e03efd..b3d711f9b2 100644 --- a/test/snapshots/prefer-add-event-listener.mjs.md +++ b/test/snapshots/prefer-add-event-listener.mjs.md @@ -441,3 +441,56 @@ Generated by [AVA](https://avajs.dev). > 1 | ((foo)).onclick = ((0, listener))␊ | ^^^^^^^ Prefer \`addEventListener\` over \`onclick\`.␊ ` + +## Invalid #27 + 1 | window.onload = window.onunload = function() {}; + +> Output + + `␊ + 1 | window.addEventListener('load', window.onunload = function() {});␊ + ` + +> Error 1/2 + + `␊ + > 1 | window.onload = window.onunload = function() {};␊ + | ^^^^^^ Prefer \`addEventListener\` over \`onload\`.␊ + ` + +> Error 2/2 + + `␊ + > 1 | window.onload = window.onunload = function() {};␊ + | ^^^^^^^^ Prefer \`addEventListener\` over \`onunload\`.␊ + ` + +## Invalid #28 + 1 | window.onunload ??= function() {}; + +> Error 1/1 + + `␊ + > 1 | window.onunload ??= function() {};␊ + | ^^^^^^^^ Prefer \`addEventListener\` over \`onunload\`.␊ + ` + +## Invalid #29 + 1 | window.onunload ||= function() {}; + +> Error 1/1 + + `␊ + > 1 | window.onunload ||= function() {};␊ + | ^^^^^^^^ Prefer \`addEventListener\` over \`onunload\`.␊ + ` + +## Invalid #30 + 1 | window.onunload += function() {}; + +> Error 1/1 + + `␊ + > 1 | window.onunload += function() {};␊ + | ^^^^^^^^ Prefer \`addEventListener\` over \`onunload\`.␊ + ` diff --git a/test/snapshots/prefer-add-event-listener.mjs.snap b/test/snapshots/prefer-add-event-listener.mjs.snap index 9875badfd3..ddf58857ff 100644 Binary files a/test/snapshots/prefer-add-event-listener.mjs.snap and b/test/snapshots/prefer-add-event-listener.mjs.snap differ