Skip to content

Commit 989ec61

Browse files
authored
prefer-add-event-listener: Don't autofix non-function assignments (#2865)
1 parent 80ff1b7 commit 989ec61

File tree

4 files changed

+122
-7
lines changed

4 files changed

+122
-7
lines changed

rules/prefer-add-event-listener.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {isParenthesized} from './utils/index.js';
1+
import {isParenthesized, isNodeValueNotFunction} from './utils/index.js';
22
import eventTypes from './shared/dom-events.js';
33
import {isUndefined, isNullLiteral, isStaticRequire} from './ast/index.js';
44

@@ -138,6 +138,7 @@ const create = context => {
138138
operator === '='
139139
&& node.parent.type === 'ExpressionStatement'
140140
&& node.parent.expression === node
141+
&& !isNodeValueNotFunction(assignedExpression)
141142
) {
142143
fix = fixer => fixCode(fixer, context, node, memberExpression);
143144
}

test/prefer-add-event-listener.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,14 @@ test.snapshot({
165165
'window.onunload ??= function() {};',
166166
'window.onunload ||= function() {};',
167167
'window.onunload += function() {};',
168+
// Non-function values should not be autofixed
169+
'foo.onclick = true',
170+
'foo.onclick = \'bar\'',
171+
'foo.onclick = `bar`',
172+
'foo.onclick = {}',
173+
'foo.onclick = []',
174+
'foo.onclick = void 0',
175+
'foo.onclick = new Handler()',
168176
],
169177
});
170178

test/snapshots/prefer-add-event-listener.js.md

Lines changed: 112 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,6 @@ Generated by [AVA](https://avajs.dev).
3737
Message:␊
3838
> 1 | foo.onclick = 1␊
3939
| ^^^^^^^ Prefer \`addEventListener\` over \`onclick\`.␊
40-
41-
Output:␊
42-
1 | foo.addEventListener('click', 1)␊
4340
`
4441

4542
## invalid(3): foo.bar.onclick = onClick
@@ -558,9 +555,6 @@ Generated by [AVA](https://avajs.dev).
558555
Message:␊
559556
> 1 | window.onload = window.onunload = function() {};␊
560557
| ^^^^^^ Prefer \`addEventListener\` over \`onload\`.␊
561-
562-
Output:␊
563-
1 | window.addEventListener('load', window.onunload = function() {});␊
564558
`
565559

566560
> Error 2/2
@@ -618,3 +612,115 @@ Generated by [AVA](https://avajs.dev).
618612
> 1 | window.onunload += function() {};␊
619613
| ^^^^^^^^ Prefer \`addEventListener\` over \`onunload\`.␊
620614
`
615+
616+
## invalid(31): foo.onclick = true
617+
618+
> Input
619+
620+
`␊
621+
1 | foo.onclick = true␊
622+
`
623+
624+
> Error 1/1
625+
626+
`␊
627+
Message:␊
628+
> 1 | foo.onclick = true␊
629+
| ^^^^^^^ Prefer \`addEventListener\` over \`onclick\`.␊
630+
`
631+
632+
## invalid(32): foo.onclick = 'bar'
633+
634+
> Input
635+
636+
`␊
637+
1 | foo.onclick = 'bar'␊
638+
`
639+
640+
> Error 1/1
641+
642+
`␊
643+
Message:␊
644+
> 1 | foo.onclick = 'bar'␊
645+
| ^^^^^^^ Prefer \`addEventListener\` over \`onclick\`.␊
646+
`
647+
648+
## invalid(33): foo.onclick = `bar`
649+
650+
> Input
651+
652+
`␊
653+
1 | foo.onclick = \`bar\`␊
654+
`
655+
656+
> Error 1/1
657+
658+
`␊
659+
Message:␊
660+
> 1 | foo.onclick = \`bar\`␊
661+
| ^^^^^^^ Prefer \`addEventListener\` over \`onclick\`.␊
662+
`
663+
664+
## invalid(34): foo.onclick = {}
665+
666+
> Input
667+
668+
`␊
669+
1 | foo.onclick = {}␊
670+
`
671+
672+
> Error 1/1
673+
674+
`␊
675+
Message:␊
676+
> 1 | foo.onclick = {}␊
677+
| ^^^^^^^ Prefer \`addEventListener\` over \`onclick\`.␊
678+
`
679+
680+
## invalid(35): foo.onclick = []
681+
682+
> Input
683+
684+
`␊
685+
1 | foo.onclick = []␊
686+
`
687+
688+
> Error 1/1
689+
690+
`␊
691+
Message:␊
692+
> 1 | foo.onclick = []␊
693+
| ^^^^^^^ Prefer \`addEventListener\` over \`onclick\`.␊
694+
`
695+
696+
## invalid(36): foo.onclick = void 0
697+
698+
> Input
699+
700+
`␊
701+
1 | foo.onclick = void 0␊
702+
`
703+
704+
> Error 1/1
705+
706+
`␊
707+
Message:␊
708+
> 1 | foo.onclick = void 0␊
709+
| ^^^^^^^ Prefer \`addEventListener\` over \`onclick\`.␊
710+
`
711+
712+
## invalid(37): foo.onclick = new Handler()
713+
714+
> Input
715+
716+
`␊
717+
1 | foo.onclick = new Handler()␊
718+
`
719+
720+
> Error 1/1
721+
722+
`␊
723+
Message:␊
724+
> 1 | foo.onclick = new Handler()␊
725+
| ^^^^^^^ Prefer \`addEventListener\` over \`onclick\`.␊
726+
`
197 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)