From 867702a6f29263ddeeb64df0be649990d78a8e81 Mon Sep 17 00:00:00 2001 From: James Garbutt <43081j@users.noreply.github.com> Date: Thu, 17 Apr 2025 09:08:49 +0100 Subject: [PATCH 1/8] feat: add `no-add-event-listener` rule --- README.md | 1 + docs/rules.md | 1 + docs/rules/no-add-event-listener.md | 31 ++ .../eslint-plugin-svelte/src/rule-types.ts | 5 + .../src/rules/no-add-event-listener.ts | 74 +++++ .../eslint-plugin-svelte/src/utils/rules.ts | 2 + .../invalid/_requirements.json | 3 + .../invalid/test01-errors.yaml | 266 ++++++++++++++++++ .../invalid/test01-input.svelte | 31 ++ .../valid/_requirements.json | 3 + .../valid/test01-input.svelte | 19 ++ .../tests/src/rules/no-add-event-listener.ts | 12 + 12 files changed, 448 insertions(+) create mode 100644 docs/rules/no-add-event-listener.md create mode 100644 packages/eslint-plugin-svelte/src/rules/no-add-event-listener.ts create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/_requirements.json create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/test01-errors.yaml create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/test01-input.svelte create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/valid/_requirements.json create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/valid/test01-input.svelte create mode 100644 packages/eslint-plugin-svelte/tests/src/rules/no-add-event-listener.ts diff --git a/README.md b/README.md index edc472b33..e69f037ae 100644 --- a/README.md +++ b/README.md @@ -294,6 +294,7 @@ These rules relate to better ways of doing things to help you avoid problems: |:--------|:------------|:---| | [svelte/block-lang](https://sveltejs.github.io/eslint-plugin-svelte/rules/block-lang/) | disallows the use of languages other than those specified in the configuration for the lang attribute of ` +``` + +## :mag: Implementation + +- [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-add-event-listener.ts) +- [Test source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/tests/src/rules/no-add-event-listener.ts) diff --git a/packages/eslint-plugin-svelte/src/rule-types.ts b/packages/eslint-plugin-svelte/src/rule-types.ts index ac9f2a94f..8c56fd802 100644 --- a/packages/eslint-plugin-svelte/src/rule-types.ts +++ b/packages/eslint-plugin-svelte/src/rule-types.ts @@ -99,6 +99,11 @@ export interface RuleOptions { * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/mustache-spacing/ */ 'svelte/mustache-spacing'?: Linter.RuleEntry + /** + * Warns against the use of `addEventListener` + * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-add-event-listener/ + */ + 'svelte/no-add-event-listener'?: Linter.RuleEntry<[]> /** * disallow the use of `{@debug}` * @see https://sveltejs.github.io/eslint-plugin-svelte/rules/no-at-debug-tags/ diff --git a/packages/eslint-plugin-svelte/src/rules/no-add-event-listener.ts b/packages/eslint-plugin-svelte/src/rules/no-add-event-listener.ts new file mode 100644 index 000000000..fb478ce72 --- /dev/null +++ b/packages/eslint-plugin-svelte/src/rules/no-add-event-listener.ts @@ -0,0 +1,74 @@ +import type { TSESTree } from '@typescript-eslint/types'; + +import { createRule } from '../utils/index.js'; +import type { SuggestionReportDescriptor } from '../types.js'; + +export default createRule('no-add-event-listener', { + meta: { + docs: { + description: 'Warns against the use of `addEventListener`', + category: 'Best Practices', + recommended: false, + default: 'warn' + }, + hasSuggestions: true, + schema: [], + messages: { + unexpected: + 'Do not use `addEventListener`. Use the `on` function from `svelte/events` instead.' + }, + type: 'suggestion', + conditions: [ + { + svelteVersions: ['5'] + } + ] + }, + create(context) { + return { + CallExpression(node: TSESTree.CallExpression) { + const { callee, arguments: args } = node; + let target: string | null = null; + + if (args.length !== 2) { + return; + } + + if ( + callee.type === 'MemberExpression' && + callee.property.type === 'Identifier' && + callee.property.name === 'addEventListener' + ) { + target = context.sourceCode.getText(callee.object); + } else if (callee.type === 'Identifier' && callee.name === 'addEventListener') { + target = 'window'; + } + + if (target === null) { + return; + } + + const openParen = context.sourceCode.getTokenAfter(callee); + const suggest: SuggestionReportDescriptor[] = []; + + if (openParen !== null) { + suggest.push({ + desc: 'Use `on` from `svelte/events` instead', + fix(fixer) { + return [ + fixer.replaceText(callee, 'on'), + fixer.insertTextAfter(openParen, `${target}, `) + ]; + } + }); + } + + context.report({ + node, + messageId: 'unexpected', + suggest + }); + } + }; + } +}); diff --git a/packages/eslint-plugin-svelte/src/utils/rules.ts b/packages/eslint-plugin-svelte/src/utils/rules.ts index e79cd969a..446c49b1a 100644 --- a/packages/eslint-plugin-svelte/src/utils/rules.ts +++ b/packages/eslint-plugin-svelte/src/utils/rules.ts @@ -19,6 +19,7 @@ import indent from '../rules/indent.js'; import infiniteReactiveLoop from '../rules/infinite-reactive-loop.js'; import maxAttributesPerLine from '../rules/max-attributes-per-line.js'; import mustacheSpacing from '../rules/mustache-spacing.js'; +import noAddEventListener from '../rules/no-add-event-listener.js'; import noAtDebugTags from '../rules/no-at-debug-tags.js'; import noAtHtmlTags from '../rules/no-at-html-tags.js'; import noDomManipulating from '../rules/no-dom-manipulating.js'; @@ -96,6 +97,7 @@ export const rules = [ infiniteReactiveLoop, maxAttributesPerLine, mustacheSpacing, + noAddEventListener, noAtDebugTags, noAtHtmlTags, noDomManipulating, diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/_requirements.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/_requirements.json new file mode 100644 index 000000000..0192b1098 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/_requirements.json @@ -0,0 +1,3 @@ +{ + "svelte": ">=5.0.0-0" +} diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/test01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/test01-errors.yaml new file mode 100644 index 000000000..7ae3e6dc1 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/test01-errors.yaml @@ -0,0 +1,266 @@ +- message: Do not use `addEventListener`. Use the `on` function from + `svelte/events` instead. + line: 17 + column: 3 + suggestions: + - desc: Use `on` from `svelte/events` instead + output: | + + + +- message: Do not use `addEventListener`. Use the `on` function from + `svelte/events` instead. + line: 18 + column: 3 + suggestions: + - desc: Use `on` from `svelte/events` instead + output: | + + + +- message: Do not use `addEventListener`. Use the `on` function from + `svelte/events` instead. + line: 21 + column: 2 + suggestions: + - desc: Use `on` from `svelte/events` instead + output: | + + + +- message: Do not use `addEventListener`. Use the `on` function from + `svelte/events` instead. + line: 22 + column: 2 + suggestions: + - desc: Use `on` from `svelte/events` instead + output: | + + + +- message: Do not use `addEventListener`. Use the `on` function from + `svelte/events` instead. + line: 23 + column: 2 + suggestions: + - desc: Use `on` from `svelte/events` instead + output: | + + + +- message: Do not use `addEventListener`. Use the `on` function from + `svelte/events` instead. + line: 26 + column: 2 + suggestions: + - desc: Use `on` from `svelte/events` instead + output: | + + + +- message: Do not use `addEventListener`. Use the `on` function from + `svelte/events` instead. + line: 28 + column: 2 + suggestions: + - desc: Use `on` from `svelte/events` instead + output: | + + + diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/test01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/test01-input.svelte new file mode 100644 index 000000000..d51aeca93 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/test01-input.svelte @@ -0,0 +1,31 @@ + + + diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/valid/_requirements.json b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/valid/_requirements.json new file mode 100644 index 000000000..0192b1098 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/valid/_requirements.json @@ -0,0 +1,3 @@ +{ + "svelte": ">=5.0.0-0" +} diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/valid/test01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/valid/test01-input.svelte new file mode 100644 index 000000000..0b48a7d94 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/valid/test01-input.svelte @@ -0,0 +1,19 @@ + + + diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-add-event-listener.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-add-event-listener.ts new file mode 100644 index 000000000..a2b5928d1 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-add-event-listener.ts @@ -0,0 +1,12 @@ +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-add-event-listener.js'; +import { loadTestCases } from '../../utils/utils.js'; + +const tester = new RuleTester({ + languageOptions: { + ecmaVersion: 2020, + sourceType: 'module' + } +}); + +tester.run('no-add-event-listener', rule as any, loadTestCases('no-add-event-listener')); From da8cb79f5140c232edcc07282c966d61a5cbcde7 Mon Sep 17 00:00:00 2001 From: James Garbutt <43081j@users.noreply.github.com> Date: Mon, 21 Apr 2025 13:51:17 +0100 Subject: [PATCH 2/8] test: add options test cases --- docs/rules/no-add-event-listener.md | 13 +++- .../src/rules/no-add-event-listener.ts | 2 +- .../invalid/test01-errors.yaml | 62 +++++++++++++++++++ .../invalid/test01-input.svelte | 3 + .../invalid/typescript01-errors.yaml | 17 +++++ .../invalid/typescript01-input.svelte | 10 +++ 6 files changed, 105 insertions(+), 2 deletions(-) create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/typescript01-errors.yaml create mode 100644 packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/typescript01-input.svelte diff --git a/docs/rules/no-add-event-listener.md b/docs/rules/no-add-event-listener.md index 0371457e1..2a81c9aff 100644 --- a/docs/rules/no-add-event-listener.md +++ b/docs/rules/no-add-event-listener.md @@ -19,9 +19,20 @@ This rule reports usages of `addEventListener`: ```svelte + +``` + + + +```svelte + + ``` diff --git a/packages/eslint-plugin-svelte/src/rules/no-add-event-listener.ts b/packages/eslint-plugin-svelte/src/rules/no-add-event-listener.ts index fb478ce72..95e553c62 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-add-event-listener.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-add-event-listener.ts @@ -30,7 +30,7 @@ export default createRule('no-add-event-listener', { const { callee, arguments: args } = node; let target: string | null = null; - if (args.length !== 2) { + if (args.length < 2 || args.length > 3) { return; } diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/test01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/test01-errors.yaml index 7ae3e6dc1..0318160dc 100644 --- a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/test01-errors.yaml +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/test01-errors.yaml @@ -33,6 +33,9 @@ window.addEventListener ('message', handler); // with a comment window.addEventListener/* foo */('message', handler); + + // with options + window.addEventListener('message', handler, { once: true }); @@ -71,6 +74,9 @@ window.addEventListener ('message', handler); // with a comment window.addEventListener/* foo */('message', handler); + + // with options + window.addEventListener('message', handler, { once: true }); @@ -109,6 +115,9 @@ window.addEventListener ('message', handler); // with a comment window.addEventListener/* foo */('message', handler); + + // with options + window.addEventListener('message', handler, { once: true }); @@ -147,6 +156,9 @@ window.addEventListener ('message', handler); // with a comment window.addEventListener/* foo */('message', handler); + + // with options + window.addEventListener('message', handler, { once: true }); @@ -185,6 +197,9 @@ window.addEventListener ('message', handler); // with a comment window.addEventListener/* foo */('message', handler); + + // with options + window.addEventListener('message', handler, { once: true }); @@ -223,6 +238,9 @@ on (window, 'message', handler); // with a comment window.addEventListener/* foo */('message', handler); + + // with options + window.addEventListener('message', handler, { once: true }); @@ -261,6 +279,50 @@ window.addEventListener ('message', handler); // with a comment on/* foo */(window, 'message', handler); + + // with options + window.addEventListener('message', handler, { once: true }); + + + +- message: Do not use `addEventListener`. Use the `on` function from + `svelte/events` instead. + line: 31 + column: 2 + suggestions: + - desc: Use `on` from `svelte/events` instead + output: | + diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/test01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/test01-input.svelte index d51aeca93..790e022f7 100644 --- a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/test01-input.svelte +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/test01-input.svelte @@ -26,6 +26,9 @@ window.addEventListener ('message', handler); // with a comment window.addEventListener/* foo */('message', handler); + + // with options + window.addEventListener('message', handler, { once: true }); diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/typescript01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/typescript01-errors.yaml new file mode 100644 index 000000000..b1c8fc473 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/typescript01-errors.yaml @@ -0,0 +1,17 @@ +- message: Do not use `addEventListener`. Use the `on` function from + `svelte/events` instead. + line: 6 + column: 2 + suggestions: + - desc: Use `on` from `svelte/events` instead + output: | + + +
Hello
diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/typescript01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/typescript01-input.svelte new file mode 100644 index 000000000..180366a12 --- /dev/null +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/typescript01-input.svelte @@ -0,0 +1,10 @@ + + +
Hello
From 0090a276465f60c4e5bb922bf3c872ba5b573a42 Mon Sep 17 00:00:00 2001 From: James Garbutt <43081j@users.noreply.github.com> Date: Thu, 24 Apr 2025 15:25:35 +0100 Subject: [PATCH 3/8] docs: update wording of rule details Co-authored-by: Yuichiro Yamashita --- docs/rules/no-add-event-listener.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/rules/no-add-event-listener.md b/docs/rules/no-add-event-listener.md index 2a81c9aff..dc38dbe8c 100644 --- a/docs/rules/no-add-event-listener.md +++ b/docs/rules/no-add-event-listener.md @@ -14,7 +14,7 @@ description: 'Warns against the use of `addEventListener`' ## :book: Rule Details -This rule reports usages of `addEventListener`: +Svelte relies on event delegation for performance and predictable handler order. Calling `addEventListener` inside a component skips this mechanism. This rule reports any call to `addEventListener` suggests converting to the `on()` helper from `svelte/events`. From 9693dd089303e4d772c477d752747cb44c80d717 Mon Sep 17 00:00:00 2001 From: James Garbutt <43081j@users.noreply.github.com> Date: Fri, 25 Apr 2025 08:56:45 +0100 Subject: [PATCH 4/8] docs: add further reading --- docs/rules/no-add-event-listener.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/rules/no-add-event-listener.md b/docs/rules/no-add-event-listener.md index dc38dbe8c..aa4869ebf 100644 --- a/docs/rules/no-add-event-listener.md +++ b/docs/rules/no-add-event-listener.md @@ -36,6 +36,14 @@ Svelte relies on event delegation for performance and predictable handler order. ``` +## :books: Further reading + +- [svelte - event delegation] +- [svelte/events `on` documentation] + +[svelte - event delegation]: https://svelte.dev/docs/svelte/basic-markup#Events-Event-delegation +[svelte/events `on` documentation]: https://svelte.dev/docs/svelte/svelte-events#on + ## :mag: Implementation - [Rule source](https://github.com/sveltejs/eslint-plugin-svelte/blob/main/packages/eslint-plugin-svelte/src/rules/no-add-event-listener.ts) From ad440fed420f58d402e9e51ce5183fd4ce5c6f9a Mon Sep 17 00:00:00 2001 From: James Garbutt <43081j@users.noreply.github.com> Date: Fri, 25 Apr 2025 08:58:37 +0100 Subject: [PATCH 5/8] chore: remove default --- .../eslint-plugin-svelte/src/rules/no-add-event-listener.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/eslint-plugin-svelte/src/rules/no-add-event-listener.ts b/packages/eslint-plugin-svelte/src/rules/no-add-event-listener.ts index 95e553c62..0f0f675e5 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-add-event-listener.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-add-event-listener.ts @@ -8,8 +8,7 @@ export default createRule('no-add-event-listener', { docs: { description: 'Warns against the use of `addEventListener`', category: 'Best Practices', - recommended: false, - default: 'warn' + recommended: false }, hasSuggestions: true, schema: [], From 2f819ccdc66f4d68a4264818f59be4bcb025f51e Mon Sep 17 00:00:00 2001 From: James Garbutt <43081j@users.noreply.github.com> Date: Fri, 25 Apr 2025 09:10:47 +0100 Subject: [PATCH 6/8] fix: support all call signatures --- .../src/rules/no-add-event-listener.ts | 4 -- .../invalid/test01-errors.yaml | 68 +++++++++++++++++++ .../invalid/test01-input.svelte | 3 + 3 files changed, 71 insertions(+), 4 deletions(-) diff --git a/packages/eslint-plugin-svelte/src/rules/no-add-event-listener.ts b/packages/eslint-plugin-svelte/src/rules/no-add-event-listener.ts index 0f0f675e5..77040524c 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-add-event-listener.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-add-event-listener.ts @@ -29,10 +29,6 @@ export default createRule('no-add-event-listener', { const { callee, arguments: args } = node; let target: string | null = null; - if (args.length < 2 || args.length > 3) { - return; - } - if ( callee.type === 'MemberExpression' && callee.property.type === 'Identifier' && diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/test01-errors.yaml b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/test01-errors.yaml index 0318160dc..db04267ef 100644 --- a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/test01-errors.yaml +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/test01-errors.yaml @@ -36,6 +36,9 @@ // with options window.addEventListener('message', handler, { once: true }); + + // using spread + window.addEventListener(...params); @@ -77,6 +80,9 @@ // with options window.addEventListener('message', handler, { once: true }); + + // using spread + window.addEventListener(...params); @@ -118,6 +124,9 @@ // with options window.addEventListener('message', handler, { once: true }); + + // using spread + window.addEventListener(...params); @@ -159,6 +168,9 @@ // with options window.addEventListener('message', handler, { once: true }); + + // using spread + window.addEventListener(...params); @@ -200,6 +212,9 @@ // with options window.addEventListener('message', handler, { once: true }); + + // using spread + window.addEventListener(...params); @@ -241,6 +256,9 @@ // with options window.addEventListener('message', handler, { once: true }); + + // using spread + window.addEventListener(...params); @@ -282,6 +300,9 @@ // with options window.addEventListener('message', handler, { once: true }); + + // using spread + window.addEventListener(...params); @@ -323,6 +344,53 @@ // with options on(window, 'message', handler, { once: true }); + + // using spread + window.addEventListener(...params); + + + +- message: Do not use `addEventListener`. Use the `on` function from + `svelte/events` instead. + line: 34 + column: 2 + suggestions: + - desc: Use `on` from `svelte/events` instead + output: | + diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/test01-input.svelte b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/test01-input.svelte index 790e022f7..5f8a27c6c 100644 --- a/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/test01-input.svelte +++ b/packages/eslint-plugin-svelte/tests/fixtures/rules/no-add-event-listener/invalid/test01-input.svelte @@ -29,6 +29,9 @@ // with options window.addEventListener('message', handler, { once: true }); + + // using spread + window.addEventListener(...params); From 9faaf7484200f1f200ff51e1f7d466dab338b765 Mon Sep 17 00:00:00 2001 From: James Garbutt <43081j@users.noreply.github.com> Date: Fri, 25 Apr 2025 09:18:31 +0100 Subject: [PATCH 7/8] chore: add changeset --- .changeset/sad-points-strive.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/sad-points-strive.md diff --git a/.changeset/sad-points-strive.md b/.changeset/sad-points-strive.md new file mode 100644 index 000000000..2b53faf8b --- /dev/null +++ b/.changeset/sad-points-strive.md @@ -0,0 +1,5 @@ +--- +'eslint-plugin-svelte': minor +--- + +Added `no-add-event-listener` rule to disallow usages of `addEventListener` From 7efc7309bd64dea069599f5df0adbdb1ced69984 Mon Sep 17 00:00:00 2001 From: James Garbutt <43081j@users.noreply.github.com> Date: Wed, 30 Apr 2025 10:53:10 +0100 Subject: [PATCH 8/8] fix: remove unused variable --- .../eslint-plugin-svelte/src/rules/no-add-event-listener.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/eslint-plugin-svelte/src/rules/no-add-event-listener.ts b/packages/eslint-plugin-svelte/src/rules/no-add-event-listener.ts index 77040524c..9ba558393 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-add-event-listener.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-add-event-listener.ts @@ -26,7 +26,7 @@ export default createRule('no-add-event-listener', { create(context) { return { CallExpression(node: TSESTree.CallExpression) { - const { callee, arguments: args } = node; + const { callee } = node; let target: string | null = null; if (