Skip to content

Commit

Permalink
prefer-add-event-listener: Only fix ExpressionStatement, check `o…
Browse files Browse the repository at this point in the history
…perator` (#1955)
  • Loading branch information
fisker committed Nov 8, 2022
1 parent 25cd810 commit aca21f2
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 8 deletions.
8 changes: 6 additions & 2 deletions rules/prefer-add-event-listener.js
Expand Up @@ -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'
Expand Down Expand Up @@ -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);
}

Expand Down
11 changes: 5 additions & 6 deletions test/prefer-add-event-listener.mjs
Expand Up @@ -5,7 +5,7 @@ const {test} = getTester(import.meta);

const excludeFooOptions = [{excludedPackages: ['foo']}];

test({
test.snapshot({
valid: [
'foo.addEventListener(\'click\', () => {})',
'foo.removeEventListener(\'click\', onClick)',
Expand Down Expand Up @@ -64,11 +64,6 @@ test({
options: excludeFooOptions,
},
],
invalid: [],
});

test.snapshot({
valid: [],
invalid: [
'foo.onclick = () => {}',
'foo.onclick = 1',
Expand Down Expand Up @@ -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() {};',
],
});

Expand Down
53 changes: 53 additions & 0 deletions test/snapshots/prefer-add-event-listener.mjs.md
Expand Up @@ -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\`.␊
`
Binary file modified test/snapshots/prefer-add-event-listener.mjs.snap
Binary file not shown.

0 comments on commit aca21f2

Please sign in to comment.