From 2308764128a1166e63e68362a1aca0dc0e35f3ac Mon Sep 17 00:00:00 2001 From: Gyubong Lee Date: Sat, 9 Apr 2022 15:35:46 +0900 Subject: [PATCH 01/14] Add `prefer-event-target` rule --- configs/recommended.js | 1 + docs/rules/prefer-event-target.md | 39 ++++++++++++ readme.md | 1 + rules/prefer-event-target.js | 44 ++++++++++++++ test/prefer-event-target.mjs | 32 ++++++++++ test/snapshots/prefer-event-target.mjs.md | 64 ++++++++++++++++++++ test/snapshots/prefer-event-target.mjs.snap | Bin 0 -> 380 bytes 7 files changed, 181 insertions(+) create mode 100644 docs/rules/prefer-event-target.md create mode 100644 rules/prefer-event-target.js create mode 100644 test/prefer-event-target.mjs create mode 100644 test/snapshots/prefer-event-target.mjs.md create mode 100644 test/snapshots/prefer-event-target.mjs.snap diff --git a/configs/recommended.js b/configs/recommended.js index 901dee7985..07c22a4df1 100644 --- a/configs/recommended.js +++ b/configs/recommended.js @@ -79,6 +79,7 @@ module.exports = { 'unicorn/prefer-dom-node-dataset': 'error', 'unicorn/prefer-dom-node-remove': 'error', 'unicorn/prefer-dom-node-text-content': 'error', + 'unicorn/prefer-event-target': 'error', 'unicorn/prefer-export-from': 'error', 'unicorn/prefer-includes': 'error', 'unicorn/prefer-json-parse-buffer': 'off', diff --git a/docs/rules/prefer-event-target.md b/docs/rules/prefer-event-target.md new file mode 100644 index 0000000000..4ade15d465 --- /dev/null +++ b/docs/rules/prefer-event-target.md @@ -0,0 +1,39 @@ +# Prefer EventTarget instead of EventEmitter + + + +βœ… *This rule is part of the [recommended](https://github.com/sindresorhus/eslint-plugin-unicorn#recommended-config) config.* + + + +While `EventEmitter` could be used in only Node.js, `EventTarget` exist in *Deno* and *Browser* too. + +This rule could potentially reduce the bundle size, and make your code more cross-platform friendly. + +You can check their [differences](https://nodejs.org/api/events.html#eventtarget-and-event-api) between `EventEmitter` and `EventTarget`. + +## Fail + +```js +import EventEmitter from 'node:event' + +class Foo extends EventEmitter { + +} +``` + +```js +const emitter = new EventEmitter; +``` + +## Pass + +```js +class Foo extends EventTarget { + +} +``` + +```js +const target = new EventTarget; +``` diff --git a/readme.md b/readme.md index c2f1f18f76..7eb7d1b6ab 100644 --- a/readme.md +++ b/readme.md @@ -119,6 +119,7 @@ Each rule has emojis denoting: | [prefer-dom-node-dataset](docs/rules/prefer-dom-node-dataset.md) | Prefer using `.dataset` on DOM elements over calling attribute methods. | βœ… | πŸ”§ | | | [prefer-dom-node-remove](docs/rules/prefer-dom-node-remove.md) | Prefer `childNode.remove()` over `parentNode.removeChild(childNode)`. | βœ… | πŸ”§ | πŸ’‘ | | [prefer-dom-node-text-content](docs/rules/prefer-dom-node-text-content.md) | Prefer `.textContent` over `.innerText`. | βœ… | | πŸ’‘ | +| [prefer-event-target](docs/rules/prefer-event-target.md) | Prefer EventTarget instead of EventEmitter | βœ… | | | | [prefer-export-from](docs/rules/prefer-export-from.md) | Prefer `export…from` when re-exporting. | βœ… | πŸ”§ | πŸ’‘ | | [prefer-includes](docs/rules/prefer-includes.md) | Prefer `.includes()` over `.indexOf()` and `Array#some()` when checking for existence or non-existence. | βœ… | πŸ”§ | πŸ’‘ | | [prefer-json-parse-buffer](docs/rules/prefer-json-parse-buffer.md) | Prefer reading a JSON file as a buffer. | | πŸ”§ | | diff --git a/rules/prefer-event-target.js b/rules/prefer-event-target.js new file mode 100644 index 0000000000..d6c461e023 --- /dev/null +++ b/rules/prefer-event-target.js @@ -0,0 +1,44 @@ +'use strict'; +const MESSAGE_ID = 'prefer-event-target'; +const messages = { + [MESSAGE_ID]: 'Prefer `EventTarget` over `EventEmitter`.', +}; + +const eventEmitterClassSelector = [ + ':matches(ClassDeclaration, ClassExpression)', + '[superClass.name="EventEmitter"]', + '[body.type="ClassBody"]', +].join(''); + +const newEventEmitterSelector = [ + 'NewExpression', + '[callee.name="EventEmitter"]', +].join(''); + +/** @param {import('eslint').Rule.RuleContext} context */ +const create = () => ({ + [eventEmitterClassSelector](node) { + return { + node, + messageId: MESSAGE_ID, + }; + }, + [newEventEmitterSelector](node) { + return { + node, + messageId: MESSAGE_ID, + }; + }, +}); + +/** @type {import('eslint').Rule.RuleModule} */ +module.exports = { + create, + meta: { + type: 'suggestion', + docs: { + description: 'Prefer `EventTarget` over `EventEmitter`.', + }, + messages, + }, +}; diff --git a/test/prefer-event-target.mjs b/test/prefer-event-target.mjs new file mode 100644 index 0000000000..d7e9cc8c80 --- /dev/null +++ b/test/prefer-event-target.mjs @@ -0,0 +1,32 @@ +import outdent from 'outdent'; +import {getTester} from './utils/test.mjs'; + +const {test} = getTester(import.meta); + +test.snapshot({ + valid: [ + outdent`class Foo {}`, + outdent`class Foo extends OtherClass {}`, + outdent`class Foo extends EventTarget {}`, + ], + invalid: [ + outdent`class Foo extends EventEmitter {}`, + outdent`class Foo extends EventEmitter { someMethod() {} }`, + outdent` + class Foo extends EventEmitter { + addListener() {} + removeListener() {} + }`, + ], +}); + +test.snapshot({ + valid: [ + outdent`new EventTarget`, + outdent`const target = new EventTarget;`, + ], + invalid: [ + outdent`new EventEmitter`, + outdent`const emitter = new EventEmitter;`, + ], +}); diff --git a/test/snapshots/prefer-event-target.mjs.md b/test/snapshots/prefer-event-target.mjs.md new file mode 100644 index 0000000000..79205ddf3d --- /dev/null +++ b/test/snapshots/prefer-event-target.mjs.md @@ -0,0 +1,64 @@ +# Snapshot report for `test/prefer-event-target.mjs` + +The actual snapshot is saved in `prefer-event-target.mjs.snap`. + +Generated by [AVA](https://avajs.dev). + +## Invalid #1 + 1 | class Foo extends EventEmitter {} + +> Error 1/1 + + `␊ + > 1 | class Foo extends EventEmitter {}␊ + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ + ` + +## Invalid #2 + 1 | class Foo extends EventEmitter { someMethod() {} } + +> Error 1/1 + + `␊ + > 1 | class Foo extends EventEmitter { someMethod() {} }␊ + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ + ` + +## Invalid #3 + 1 | class Foo extends EventEmitter { + 2 | addListener() {} + 3 | removeListener() {} + 4 | } + +> Error 1/1 + + `␊ + > 1 | class Foo extends EventEmitter {␊ + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^␊ + > 2 | addListener() {}␊ + | ^^^^^^^^^^^^^^^^^␊ + > 3 | removeListener() {}␊ + | ^^^^^^^^^^^^^^^^^␊ + > 4 | }␊ + | ^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ + ` + +## Invalid #1 + 1 | new EventEmitter + +> Error 1/1 + + `␊ + > 1 | new EventEmitter␊ + | ^^^^^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ + ` + +## Invalid #2 + 1 | const emitter = new EventEmitter; + +> Error 1/1 + + `␊ + > 1 | const emitter = new EventEmitter;␊ + | ^^^^^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ + ` diff --git a/test/snapshots/prefer-event-target.mjs.snap b/test/snapshots/prefer-event-target.mjs.snap new file mode 100644 index 0000000000000000000000000000000000000000..b8fd1f32e6c83ebaa4dc6e8c7ea3d84c8ea9d73f GIT binary patch literal 380 zcmV-?0fYWQRzVAW*^d z+9ic)4@{4l+)r2AE!yhI2o|jX;x|{z)n+*~&t5x4pzfHW-hW20s0tGU!$gx0ua0jxPBu_!&YBtap+3@!vUFF}tB#U0f! zcjP1%7c02s=PRUEl%(dR6r;F8p}H384s?4l0J#o{ggOL00C3n#rZr4+8Hn_-LUDd> zs&8sZMt+KhCeZ&1M27&if`sWUv2G>OWkA!6fXX-%Q&M~~i-88E7JR#A-1CiX-Gn@H+s!!e`{D0{{RuccxAN literal 0 HcmV?d00001 From 71bfe97ffb4b5c0056634c5285b8c7a874876732 Mon Sep 17 00:00:00 2001 From: Gyubong Lee Date: Sat, 9 Apr 2022 22:02:01 +0900 Subject: [PATCH 02/14] Reflect feedbacks --- rules/prefer-event-target.js | 21 ++++++++++++-------- test/prefer-event-target.mjs | 18 ++++++++--------- test/snapshots/prefer-event-target.mjs.md | 19 ++++++++---------- test/snapshots/prefer-event-target.mjs.snap | Bin 380 -> 368 bytes 4 files changed, 30 insertions(+), 28 deletions(-) diff --git a/rules/prefer-event-target.js b/rules/prefer-event-target.js index d6c461e023..83cbf3b253 100644 --- a/rules/prefer-event-target.js +++ b/rules/prefer-event-target.js @@ -1,29 +1,34 @@ 'use strict'; +const {matches} = require('./selectors/index.js'); + const MESSAGE_ID = 'prefer-event-target'; const messages = { [MESSAGE_ID]: 'Prefer `EventTarget` over `EventEmitter`.', }; -const eventEmitterClassSelector = [ +const eventEmitterSuperClassSelector = [ ':matches(ClassDeclaration, ClassExpression)', '[superClass.name="EventEmitter"]', '[body.type="ClassBody"]', + ' > ', + '[name="EventEmitter"]', ].join(''); const newEventEmitterSelector = [ 'NewExpression', '[callee.name="EventEmitter"]', + ' > ', + '[name="EventEmitter"]', ].join(''); +const selector = matches([ + eventEmitterSuperClassSelector, + newEventEmitterSelector, +]); + /** @param {import('eslint').Rule.RuleContext} context */ const create = () => ({ - [eventEmitterClassSelector](node) { - return { - node, - messageId: MESSAGE_ID, - }; - }, - [newEventEmitterSelector](node) { + [selector](node) { return { node, messageId: MESSAGE_ID, diff --git a/test/prefer-event-target.mjs b/test/prefer-event-target.mjs index d7e9cc8c80..d0080d6117 100644 --- a/test/prefer-event-target.mjs +++ b/test/prefer-event-target.mjs @@ -5,13 +5,13 @@ const {test} = getTester(import.meta); test.snapshot({ valid: [ - outdent`class Foo {}`, - outdent`class Foo extends OtherClass {}`, - outdent`class Foo extends EventTarget {}`, + 'class Foo {}', + 'class Foo extends OtherClass {}', + 'class Foo extends EventTarget {}', ], invalid: [ - outdent`class Foo extends EventEmitter {}`, - outdent`class Foo extends EventEmitter { someMethod() {} }`, + 'class Foo extends EventEmitter {}', + 'class Foo extends EventEmitter { someMethod() {} }', outdent` class Foo extends EventEmitter { addListener() {} @@ -22,11 +22,11 @@ test.snapshot({ test.snapshot({ valid: [ - outdent`new EventTarget`, - outdent`const target = new EventTarget;`, + 'new EventTarget', + 'const target = new EventTarget;', ], invalid: [ - outdent`new EventEmitter`, - outdent`const emitter = new EventEmitter;`, + 'new EventEmitter', + 'const emitter = new EventEmitter;', ], }); diff --git a/test/snapshots/prefer-event-target.mjs.md b/test/snapshots/prefer-event-target.mjs.md index 79205ddf3d..d76ceb8477 100644 --- a/test/snapshots/prefer-event-target.mjs.md +++ b/test/snapshots/prefer-event-target.mjs.md @@ -11,7 +11,7 @@ Generated by [AVA](https://avajs.dev). `␊ > 1 | class Foo extends EventEmitter {}␊ - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ + | ^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ ` ## Invalid #2 @@ -21,7 +21,7 @@ Generated by [AVA](https://avajs.dev). `␊ > 1 | class Foo extends EventEmitter { someMethod() {} }␊ - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ + | ^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ ` ## Invalid #3 @@ -34,13 +34,10 @@ Generated by [AVA](https://avajs.dev). `␊ > 1 | class Foo extends EventEmitter {␊ - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^␊ - > 2 | addListener() {}␊ - | ^^^^^^^^^^^^^^^^^␊ - > 3 | removeListener() {}␊ - | ^^^^^^^^^^^^^^^^^␊ - > 4 | }␊ - | ^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ + | ^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ + 2 | addListener() {}␊ + 3 | removeListener() {}␊ + 4 | }␊ ` ## Invalid #1 @@ -50,7 +47,7 @@ Generated by [AVA](https://avajs.dev). `␊ > 1 | new EventEmitter␊ - | ^^^^^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ + | ^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ ` ## Invalid #2 @@ -60,5 +57,5 @@ Generated by [AVA](https://avajs.dev). `␊ > 1 | const emitter = new EventEmitter;␊ - | ^^^^^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ + | ^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ ` diff --git a/test/snapshots/prefer-event-target.mjs.snap b/test/snapshots/prefer-event-target.mjs.snap index b8fd1f32e6c83ebaa4dc6e8c7ea3d84c8ea9d73f..20156b8fcb3cf928183d46809c7691a8706ab864 100644 GIT binary patch delta 321 zcmV-H0lxnH0`LMNK~_N^Q*L2!b7*gLAa*he0sy4$VkTCPp5T?`9E*`jF%FR;I)5l1 zP{H)tC534ZOplq|PgmP5+Um&&7A*zhH&@HmW;ry^UOPpg?wF$9e@3tTF$%`7QNEmE*m z$V)9(a4k#CD{+MgS#v1>L5%`75PydR6atD;(|{%>RM+Bk2Q^#~33Ua!?~yE}f;CK?3`F`?p*TM` z)i<>yBR@q$6X`;h TmofoL)p7v<5iEf(Rs#S4l{$oq delta 333 zcmV-T0kZz^0{j9ZK~_N^Q*L2!b7*gLAa*he0st0jxPBu_!&YBtap+3@!vUFF}tB z#U0f!cjP1%7c02s=PRUEl%(dR6r;F8p}H384s?4l0J#o{ggOL00C3n#rZr4+8Hn_- zLUDd>s&8sZMt+KhCeZ&1M27&if`sWUv2G>OWkA!6fXX-%Q&M~~i-88E79xSYhD$q8 fy)j6AQED#GvBYXI0g5B!N$@)WyuxSXr~?21KCh3l From 8c89d6edd030d013d0d42c8961e1468022cbd84f Mon Sep 17 00:00:00 2001 From: Gyubong Lee Date: Tue, 12 Apr 2022 14:04:13 +0900 Subject: [PATCH 03/14] Update prefer-event-target.md --- docs/rules/prefer-event-target.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/rules/prefer-event-target.md b/docs/rules/prefer-event-target.md index 4ade15d465..3237a2b4be 100644 --- a/docs/rules/prefer-event-target.md +++ b/docs/rules/prefer-event-target.md @@ -1,4 +1,4 @@ -# Prefer EventTarget instead of EventEmitter +# Prefer `EventTarget` over `EventEmitter` @@ -6,16 +6,16 @@ -While `EventEmitter` could be used in only Node.js, `EventTarget` exist in *Deno* and *Browser* too. +While [EventEmitter](https://nodejs.org/api/events.html#class-eventemitter) is only available in Node.js, [EventTarget](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget) is also available in *Deno* and browsers. -This rule could potentially reduce the bundle size, and make your code more cross-platform friendly. +This rule reduces the bundle size and makes your code more cross-platform friendly. -You can check their [differences](https://nodejs.org/api/events.html#eventtarget-and-event-api) between `EventEmitter` and `EventTarget`. +See the [differences](https://nodejs.org/api/events.html#eventtarget-and-event-api) between `EventEmitter` and `EventTarget`. ## Fail ```js -import EventEmitter from 'node:event' +import EventEmitter from 'node:event'; class Foo extends EventEmitter { From 8a46b53346ecd66222c4b6928e123ed861f6fd64 Mon Sep 17 00:00:00 2001 From: Gyubong Lee Date: Thu, 14 Apr 2022 23:47:56 +0900 Subject: [PATCH 04/14] Reflect feedbacks --- rules/prefer-event-target.js | 19 ++++-- test/prefer-event-target.mjs | 24 ++++++- test/snapshots/prefer-event-target.mjs.md | 72 +++++++++++++++++++- test/snapshots/prefer-event-target.mjs.snap | Bin 368 -> 622 bytes 4 files changed, 108 insertions(+), 7 deletions(-) diff --git a/rules/prefer-event-target.js b/rules/prefer-event-target.js index 83cbf3b253..b8baf48fd1 100644 --- a/rules/prefer-event-target.js +++ b/rules/prefer-event-target.js @@ -6,23 +6,32 @@ const messages = { [MESSAGE_ID]: 'Prefer `EventTarget` over `EventEmitter`.', }; +const eventEmitterClassNameSelector = [ + matches(['ClassDeclaration', 'ClassExpression']), + ' > ', + 'Identifier[name="EventEmitter"]', +].join(''); + const eventEmitterSuperClassSelector = [ - ':matches(ClassDeclaration, ClassExpression)', - '[superClass.name="EventEmitter"]', + matches(['ClassDeclaration', 'ClassExpression']), '[body.type="ClassBody"]', ' > ', - '[name="EventEmitter"]', + matches([ + 'Identifier.superClass[name="EventEmitter"]', + 'MemberExpression.superClass[property.name="EventEmitter"]', + ]), ].join(''); const newEventEmitterSelector = [ - 'NewExpression', - '[callee.name="EventEmitter"]', + matches(['NewExpression', 'CallExpression']), ' > ', + 'Identifier.callee', '[name="EventEmitter"]', ].join(''); const selector = matches([ eventEmitterSuperClassSelector, + eventEmitterClassNameSelector, newEventEmitterSelector, ]); diff --git a/test/prefer-event-target.mjs b/test/prefer-event-target.mjs index d0080d6117..5e082197d2 100644 --- a/test/prefer-event-target.mjs +++ b/test/prefer-event-target.mjs @@ -8,25 +8,47 @@ test.snapshot({ 'class Foo {}', 'class Foo extends OtherClass {}', 'class Foo extends EventTarget {}', + 'const Foo = class extends EventTarget {}', + 'const Foo = class extends foo.EventTarget {}', + 'const Foo = class extends foo.bar.EventTarget {}', ], invalid: [ 'class Foo extends EventEmitter {}', 'class Foo extends EventEmitter { someMethod() {} }', + 'const Foo = class extends EventEmitter {}', + 'class Foo extends foo.EventEmitter {}', + 'class Foo extends foo.bar.EventEmitter {}', outdent` class Foo extends EventEmitter { addListener() {} removeListener() {} - }`, + } + `, ], }); test.snapshot({ valid: [ + 'EventTarget()', 'new EventTarget', 'const target = new EventTarget;', + 'const target = EventTarget()', ], invalid: [ + 'EventEmitter()', 'new EventEmitter', 'const emitter = new EventEmitter;', + 'const emitter = EventEmitter()', ], }); + +test.snapshot({ + valid: [ + 'class EventTarget extends Foo {}', + 'const Foo = class EventTarget extends Foo {}', + ], + invalid: [ + 'class EventEmitter extends Foo {}', + 'const Foo = class EventEmitter extends Foo {}', + ] +}); diff --git a/test/snapshots/prefer-event-target.mjs.md b/test/snapshots/prefer-event-target.mjs.md index d76ceb8477..e46626a377 100644 --- a/test/snapshots/prefer-event-target.mjs.md +++ b/test/snapshots/prefer-event-target.mjs.md @@ -25,6 +25,36 @@ Generated by [AVA](https://avajs.dev). ` ## Invalid #3 + 1 | const Foo = class extends EventEmitter {} + +> Error 1/1 + + `␊ + > 1 | const Foo = class extends EventEmitter {}␊ + | ^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ + ` + +## Invalid #4 + 1 | class Foo extends foo.EventEmitter {} + +> Error 1/1 + + `␊ + > 1 | class Foo extends foo.EventEmitter {}␊ + | ^^^^^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ + ` + +## Invalid #5 + 1 | class Foo extends foo.bar.EventEmitter {} + +> Error 1/1 + + `␊ + > 1 | class Foo extends foo.bar.EventEmitter {}␊ + | ^^^^^^^^^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ + ` + +## Invalid #6 1 | class Foo extends EventEmitter { 2 | addListener() {} 3 | removeListener() {} @@ -41,6 +71,16 @@ Generated by [AVA](https://avajs.dev). ` ## Invalid #1 + 1 | EventEmitter() + +> Error 1/1 + + `␊ + > 1 | EventEmitter()␊ + | ^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ + ` + +## Invalid #2 1 | new EventEmitter > Error 1/1 @@ -50,7 +90,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ ` -## Invalid #2 +## Invalid #3 1 | const emitter = new EventEmitter; > Error 1/1 @@ -59,3 +99,33 @@ Generated by [AVA](https://avajs.dev). > 1 | const emitter = new EventEmitter;␊ | ^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ ` + +## Invalid #4 + 1 | const emitter = EventEmitter() + +> Error 1/1 + + `␊ + > 1 | const emitter = EventEmitter()␊ + | ^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ + ` + +## Invalid #1 + 1 | class EventEmitter extends Foo {} + +> Error 1/1 + + `␊ + > 1 | class EventEmitter extends Foo {}␊ + | ^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ + ` + +## Invalid #2 + 1 | const Foo = class EventEmitter extends Foo {} + +> Error 1/1 + + `␊ + > 1 | const Foo = class EventEmitter extends Foo {}␊ + | ^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ + ` diff --git a/test/snapshots/prefer-event-target.mjs.snap b/test/snapshots/prefer-event-target.mjs.snap index 20156b8fcb3cf928183d46809c7691a8706ab864..5bff510eba814c5a038c5df8c20b1bdc658008d6 100644 GIT binary patch literal 622 zcmV-!0+IbeRzVp(d-3w6#F2_EnoGPdu`q%~Ie`kC z&N5B+e41tx{MzH7tAoi~QZIB*yQBX}g{YZ}BSw}{&s4)`*LmumkSAQne zx93PsweR+RC%_06-3i1cH+@#Uipvg^Rt-{G&UNH9BUrSGnSr5#;nBCZ%Z{9tH|Eqi zA+w;25iI%}h?`fNulcrME&ueAi}y2}ulq5AMUz+<7&^r=pYC|KCT0KI-Fxygmabw1 ziyj8zo1Y_+8zk2_n_VzJbmh@6CPuKRH!B0fi(Btg-HN+jDnE;P!zAAIm=P@c2#DWY zEmxc6&^&wX6oI;9ihBPU!J<`c3=GT+?BI}MWMvR!YGB~9Q!rGhQAo~7EG|}X%g9-sIKKw0D>9?Ob~|#6atD;(|}qMzy^dQ7Nw__ zBq-#U!G)k^Cg^b?JBKj`#Wg6l!<+?jBAQF6U^7z(JRtJ(ic7$@*g~BFvzgeyz!oUv zI;#b@vxp5HDm#g>0%wXLC$*3pFq?2ETvTUJ+Z755MnK~@6H`)rGK+y0rWR>vLOg2> z5-&>41!_Z=G671}q6T9zO2no@ookEYdJRn+uBS#kMnWBsms*ZuDUy}cuqGI44OV|q z!-6Ut0g3J}Ydjg2x+MtKqBJS7i0tB&5@&T1n^6>s^K(;uQ%f@PQ^3hqf$A9;04XG$ I8@LAm06dBhcmMzZ literal 368 zcmV-$0gwJcRzVCRUH0;FaYZi;+n&4j+pM00000000B) zU|?WiWyo&+74t^K__4pS^11(PtArRCK%fJN^H^WJ`ZKA%Jx6k?eYf{J0Y>RM+Bk2Q^#~33Ua!?~yE}f;CK?3`F`?p*TM`)i<>y zBR@q$6X41!_Z=G671} OasdDlEP*dp0{{T7z?(Aw From 669a52ccdc95c4cc27c42c3e304b792cf4d9e7c6 Mon Sep 17 00:00:00 2001 From: Gyubong Lee Date: Fri, 15 Apr 2022 14:19:05 +0900 Subject: [PATCH 05/14] Fix lint error --- test/prefer-event-target.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/prefer-event-target.mjs b/test/prefer-event-target.mjs index 5e082197d2..068a9153c2 100644 --- a/test/prefer-event-target.mjs +++ b/test/prefer-event-target.mjs @@ -50,5 +50,5 @@ test.snapshot({ invalid: [ 'class EventEmitter extends Foo {}', 'const Foo = class EventEmitter extends Foo {}', - ] + ], }); From 8ee62d2f5c3c37b6680beb15b1e9fb3e8d0bd5e7 Mon Sep 17 00:00:00 2001 From: Gyubong Lee Date: Fri, 15 Apr 2022 14:26:41 +0900 Subject: [PATCH 06/14] Fix CI errors --- docs/rules/prefer-event-target.md | 1 - readme.md | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/rules/prefer-event-target.md b/docs/rules/prefer-event-target.md index 3237a2b4be..c7a6a84ccb 100644 --- a/docs/rules/prefer-event-target.md +++ b/docs/rules/prefer-event-target.md @@ -3,7 +3,6 @@ βœ… *This rule is part of the [recommended](https://github.com/sindresorhus/eslint-plugin-unicorn#recommended-config) config.* - While [EventEmitter](https://nodejs.org/api/events.html#class-eventemitter) is only available in Node.js, [EventTarget](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget) is also available in *Deno* and browsers. diff --git a/readme.md b/readme.md index 7eb7d1b6ab..0e279887f3 100644 --- a/readme.md +++ b/readme.md @@ -119,7 +119,7 @@ Each rule has emojis denoting: | [prefer-dom-node-dataset](docs/rules/prefer-dom-node-dataset.md) | Prefer using `.dataset` on DOM elements over calling attribute methods. | βœ… | πŸ”§ | | | [prefer-dom-node-remove](docs/rules/prefer-dom-node-remove.md) | Prefer `childNode.remove()` over `parentNode.removeChild(childNode)`. | βœ… | πŸ”§ | πŸ’‘ | | [prefer-dom-node-text-content](docs/rules/prefer-dom-node-text-content.md) | Prefer `.textContent` over `.innerText`. | βœ… | | πŸ’‘ | -| [prefer-event-target](docs/rules/prefer-event-target.md) | Prefer EventTarget instead of EventEmitter | βœ… | | | +| [prefer-event-target](docs/rules/prefer-event-target.md) | Prefer `EventTarget` over `EventEmitter`. | βœ… | | | | [prefer-export-from](docs/rules/prefer-export-from.md) | Prefer `export…from` when re-exporting. | βœ… | πŸ”§ | πŸ’‘ | | [prefer-includes](docs/rules/prefer-includes.md) | Prefer `.includes()` over `.indexOf()` and `Array#some()` when checking for existence or non-existence. | βœ… | πŸ”§ | πŸ’‘ | | [prefer-json-parse-buffer](docs/rules/prefer-json-parse-buffer.md) | Prefer reading a JSON file as a buffer. | | πŸ”§ | | From c86161f3a121cb6a75736d82f48872caa4b52471 Mon Sep 17 00:00:00 2001 From: Gyubong Lee Date: Sat, 16 Apr 2022 22:59:01 +0900 Subject: [PATCH 07/14] Fix misunderstood tests --- test/prefer-event-target.mjs | 19 +++------- test/snapshots/prefer-event-target.mjs.md | 40 -------------------- test/snapshots/prefer-event-target.mjs.snap | Bin 622 -> 476 bytes 3 files changed, 6 insertions(+), 53 deletions(-) diff --git a/test/prefer-event-target.mjs b/test/prefer-event-target.mjs index 068a9153c2..fd94d0a134 100644 --- a/test/prefer-event-target.mjs +++ b/test/prefer-event-target.mjs @@ -11,13 +11,17 @@ test.snapshot({ 'const Foo = class extends EventTarget {}', 'const Foo = class extends foo.EventTarget {}', 'const Foo = class extends foo.bar.EventTarget {}', + 'class Foo extends foo.EventEmitter {}', + 'class Foo extends foo.bar.EventEmitter {}', + 'class EventEmitter extends Foo {}', + 'const Foo = class EventEmitter extends Foo {}', + 'new Foo(EventEmitter)', + 'new foo.EventEmitter()', ], invalid: [ 'class Foo extends EventEmitter {}', 'class Foo extends EventEmitter { someMethod() {} }', 'const Foo = class extends EventEmitter {}', - 'class Foo extends foo.EventEmitter {}', - 'class Foo extends foo.bar.EventEmitter {}', outdent` class Foo extends EventEmitter { addListener() {} @@ -41,14 +45,3 @@ test.snapshot({ 'const emitter = EventEmitter()', ], }); - -test.snapshot({ - valid: [ - 'class EventTarget extends Foo {}', - 'const Foo = class EventTarget extends Foo {}', - ], - invalid: [ - 'class EventEmitter extends Foo {}', - 'const Foo = class EventEmitter extends Foo {}', - ], -}); diff --git a/test/snapshots/prefer-event-target.mjs.md b/test/snapshots/prefer-event-target.mjs.md index e46626a377..e89f8a8592 100644 --- a/test/snapshots/prefer-event-target.mjs.md +++ b/test/snapshots/prefer-event-target.mjs.md @@ -35,26 +35,6 @@ Generated by [AVA](https://avajs.dev). ` ## Invalid #4 - 1 | class Foo extends foo.EventEmitter {} - -> Error 1/1 - - `␊ - > 1 | class Foo extends foo.EventEmitter {}␊ - | ^^^^^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ - ` - -## Invalid #5 - 1 | class Foo extends foo.bar.EventEmitter {} - -> Error 1/1 - - `␊ - > 1 | class Foo extends foo.bar.EventEmitter {}␊ - | ^^^^^^^^^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ - ` - -## Invalid #6 1 | class Foo extends EventEmitter { 2 | addListener() {} 3 | removeListener() {} @@ -109,23 +89,3 @@ Generated by [AVA](https://avajs.dev). > 1 | const emitter = EventEmitter()␊ | ^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ ` - -## Invalid #1 - 1 | class EventEmitter extends Foo {} - -> Error 1/1 - - `␊ - > 1 | class EventEmitter extends Foo {}␊ - | ^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ - ` - -## Invalid #2 - 1 | const Foo = class EventEmitter extends Foo {} - -> Error 1/1 - - `␊ - > 1 | const Foo = class EventEmitter extends Foo {}␊ - | ^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ - ` diff --git a/test/snapshots/prefer-event-target.mjs.snap b/test/snapshots/prefer-event-target.mjs.snap index 5bff510eba814c5a038c5df8c20b1bdc658008d6..ebb65071769afb6c315f488f1103a2675327fd40 100644 GIT binary patch literal 476 zcmV<20VDoFRzVh9o#~kq92P000000000BK z#=yY9!Qgb3X}agrG@J0heaab!Jtr|TfWUMh&SQP?>d&P5_8iHn_TAp^1Q@}hvOonD z43ECOU3TQGyfLTF37G|Dj9}4uK-|3Ae9gB7Yx$>_T)dy*eBF-`EXvBnz|bj{`E9vL?|}Ht)pE624$ZUIP7$a( zrl|Ly5iHuq%)szxZuKFTfIj1PX6wD5p3Z7w1dF<}FfcGPu!DWT$jTtd)WN`Ir(md1 zqmZ1RS6rgtmY=U+tB{mLSd^YxlAw@Z1{Z>wo1n*q>@3C#n5)1p0lA7)*HFV1#VBEu3boW0 z#SI#oIGjKY2Sh?0ke6DHVkwf9)UYNPY7JI@QNw~N907^$FKaxBiwf>w>SQ1?T`3gj z=cf9mmSp6oXlMeHnF37{8q+3X-9>FzC@2^KjpIyAN%6@n23iP;cSx=>28kD?<^r{$ SOPK(rYPkRu9C6wm1poj?;ol(u delta 607 zcmV-l0-*ie1MUQWK~_N^Q*L2!b7*gLAa*he0s#GVKrZ(+#9qG{#UfM)WM?0X2mk;8 z00003vtwjn;9+1^n4HaVXvVU=N35II)=#zu3Iaht5L$_k5aW6aKePIpeVBBu2340wDIT{%w#Rbx}}%O*{Qaj^J5GMzE+c69YpY z>x)-^Ce^p+NKUoy_I@Y82o~K5#3eUO#WJ7nc(*2H|J&Vr z@-vpMVg!qS9tPr@pCghRB-c2bT`)g%<0qE&1R49pDd;E-ZuWe{X)VBoS-FjS~fNX|(t zE>>{M&sRvTC`rvrDOO0!&)0J;OU)~B&CM(+Ni9-;sIKKw0D>9?Ob~|#6atD;(|}qM zzy^dQ7Nw__Bq-#U!G)k^Cg^b?JBKj`#Wg6l!<+?jBAQF6U^7z(JRtJ(ic7$@*g~BF zvzgeyz!oUvI;#b@vxp5HDm#g>0%wXLC$*3pFq?2ETvTUJ+Z755MnK~@6H`)rGK+y0 zrWR=?XhJ+|3=%I&%>`;hmofoL)uIMtF-pXyLY-@i;(85D9ImHEJVujm0Ua+HmbxVf t)}k~iv54&AloDrk5}Q#Jit}?*eN#&^@>9UcR)Ojn7yv0Gog26Z008Xf31R>M From d15300b02e80b31996bfb984e6522dd4b40197e6 Mon Sep 17 00:00:00 2001 From: Gyubong Lee Date: Sat, 16 Apr 2022 22:59:13 +0900 Subject: [PATCH 08/14] Remove misunderstood selector --- rules/prefer-event-target.js | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/rules/prefer-event-target.js b/rules/prefer-event-target.js index b8baf48fd1..afa6cfa11b 100644 --- a/rules/prefer-event-target.js +++ b/rules/prefer-event-target.js @@ -6,20 +6,11 @@ const messages = { [MESSAGE_ID]: 'Prefer `EventTarget` over `EventEmitter`.', }; -const eventEmitterClassNameSelector = [ - matches(['ClassDeclaration', 'ClassExpression']), - ' > ', - 'Identifier[name="EventEmitter"]', -].join(''); - const eventEmitterSuperClassSelector = [ matches(['ClassDeclaration', 'ClassExpression']), '[body.type="ClassBody"]', ' > ', - matches([ - 'Identifier.superClass[name="EventEmitter"]', - 'MemberExpression.superClass[property.name="EventEmitter"]', - ]), + 'Identifier.superClass[name="EventEmitter"]', ].join(''); const newEventEmitterSelector = [ @@ -31,7 +22,6 @@ const newEventEmitterSelector = [ const selector = matches([ eventEmitterSuperClassSelector, - eventEmitterClassNameSelector, newEventEmitterSelector, ]); From 8257add9b56376930acadcffcf6331a48148b450 Mon Sep 17 00:00:00 2001 From: Gyubong Lee Date: Thu, 28 Apr 2022 15:00:50 +0900 Subject: [PATCH 09/14] Update prefer-event-target.mjs --- test/prefer-event-target.mjs | 1 + 1 file changed, 1 insertion(+) diff --git a/test/prefer-event-target.mjs b/test/prefer-event-target.mjs index fd94d0a134..817c08f4c6 100644 --- a/test/prefer-event-target.mjs +++ b/test/prefer-event-target.mjs @@ -36,6 +36,7 @@ test.snapshot({ 'EventTarget()', 'new EventTarget', 'const target = new EventTarget;', + 'const target = new Foo(EventEmitter);', 'const target = EventTarget()', ], invalid: [ From 035e560df04a85efc5e08fc2456b72591632b62a Mon Sep 17 00:00:00 2001 From: Gyubong Lee Date: Thu, 28 Apr 2022 15:31:33 +0900 Subject: [PATCH 10/14] Reflect feedbacks --- docs/rules/prefer-event-target.md | 14 +++++--------- rules/prefer-event-target.js | 2 +- test/prefer-event-target.mjs | 6 +++--- test/snapshots/prefer-event-target.mjs.md | 20 ++++++++++++++++++++ test/snapshots/prefer-event-target.mjs.snap | Bin 476 -> 527 bytes 5 files changed, 29 insertions(+), 13 deletions(-) diff --git a/docs/rules/prefer-event-target.md b/docs/rules/prefer-event-target.md index c7a6a84ccb..c94c5f1875 100644 --- a/docs/rules/prefer-event-target.md +++ b/docs/rules/prefer-event-target.md @@ -14,25 +14,21 @@ See the [differences](https://nodejs.org/api/events.html#eventtarget-and-event-a ## Fail ```js -import EventEmitter from 'node:event'; +import {EventEmitter} from 'node:event'; -class Foo extends EventEmitter { - -} +class Foo extends EventEmitter {} ``` ```js -const emitter = new EventEmitter; +const emitter = new EventEmitter(); ``` ## Pass ```js -class Foo extends EventTarget { - -} +class Foo extends EventTarget {} ``` ```js -const target = new EventTarget; +const target = new EventTarget(); ``` diff --git a/rules/prefer-event-target.js b/rules/prefer-event-target.js index afa6cfa11b..c972e607fe 100644 --- a/rules/prefer-event-target.js +++ b/rules/prefer-event-target.js @@ -14,7 +14,7 @@ const eventEmitterSuperClassSelector = [ ].join(''); const newEventEmitterSelector = [ - matches(['NewExpression', 'CallExpression']), + 'NewExpression', ' > ', 'Identifier.callee', '[name="EventEmitter"]', diff --git a/test/prefer-event-target.mjs b/test/prefer-event-target.mjs index 817c08f4c6..dce958a4f4 100644 --- a/test/prefer-event-target.mjs +++ b/test/prefer-event-target.mjs @@ -36,13 +36,13 @@ test.snapshot({ 'EventTarget()', 'new EventTarget', 'const target = new EventTarget;', - 'const target = new Foo(EventEmitter);', 'const target = EventTarget()', + 'const target = new Foo(EventEmitter);', + 'EventEmitter()', + 'const emitter = EventEmitter()', ], invalid: [ - 'EventEmitter()', 'new EventEmitter', 'const emitter = new EventEmitter;', - 'const emitter = EventEmitter()', ], }); diff --git a/test/snapshots/prefer-event-target.mjs.md b/test/snapshots/prefer-event-target.mjs.md index e89f8a8592..62791387e1 100644 --- a/test/snapshots/prefer-event-target.mjs.md +++ b/test/snapshots/prefer-event-target.mjs.md @@ -89,3 +89,23 @@ Generated by [AVA](https://avajs.dev). > 1 | const emitter = EventEmitter()␊ | ^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ ` + +## Invalid #1 + 1 | new EventEmitter + +> Error 1/1 + + `␊ + > 1 | new EventEmitter␊ + | ^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ + ` + +## Invalid #2 + 1 | const emitter = new EventEmitter; + +> Error 1/1 + + `␊ + > 1 | const emitter = new EventEmitter;␊ + | ^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ + ` diff --git a/test/snapshots/prefer-event-target.mjs.snap b/test/snapshots/prefer-event-target.mjs.snap index ebb65071769afb6c315f488f1103a2675327fd40..dc24d2692ac0978399739ec422d340d1c26e12b3 100644 GIT binary patch literal 527 zcmV+q0`UDoRzV1A-xWKJL}%_8*G~00000000By zVq{?8VsJXkG~M%QnoaoMKIM$Vo|AxrKrkJMvzvd#yb&>e>~E}m?mycqAx5yMJWxR% z>x)-^Ce^p+NKUoy_I@Y82o_xm#1#yWzP(*`wb)2(Ow|#6w7?N;_G=ob?sSoAIszqwkjHp`)T_Sz`|b;lI-{xgC_ zOIa8g{>-gD1cc^Ye;J z6x{Oj6>Jrfa}tY-6;dloQu9)Z6YG}Uk)NWW2~5ojG)>P;n}~H6wOyg0U<5RdGchH_C$ku6At-r4GOsa6yeKsns104p R1SnO@1pv#co7q4H003h>?nM9q literal 476 zcmV<20VDoFRzVh9o#~kq92P000000000BK z#=yY9!Qgb3X}agrG@J0heaab!Jtr|TfWUMh&SQP?>d&P5_8iHn_TAp^1Q@}hvOonD z43ECOU3TQGyfLTF37G|Dj9}4uK-|3Ae9gB7Yx$>_T)dy*eBF-`EXvBnz|bj{`E9vL?|}Ht)pE624$ZUIP7$a( zrl|Ly5iHuq%)szxZuKFTfIj1PX6wD5p3Z7w1dF<}FfcGPu!DWT$jTtd)WN`Ir(md1 zqmZ1RS6rgtmY=U+tB{mLSd^YxlAw@Z1{Z>wo1n*q>@3C#n5)1p0lA7)*HFV1#VBEu3boW0 z#SI#oIGjKY2Sh?0ke6DHVkwf9)UYNPY7JI@QNw~N907^$FKaxBiwf>w>SQ1?T`3gj z=cf9mmSp6oXlMeHnF37{8q+3X-9>FzC@2^KjpIyAN%6@n23iP;cSx=>28kD?<^r{$ SOPK(rYPkRu9C6wm1poj?;ol(u From 532fd9bcee077c171e323b7e52450b15f3d3abeb Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Thu, 28 Apr 2022 14:40:24 +0800 Subject: [PATCH 11/14] Consistent style in selector --- rules/prefer-event-target.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rules/prefer-event-target.js b/rules/prefer-event-target.js index c972e607fe..e698b6c347 100644 --- a/rules/prefer-event-target.js +++ b/rules/prefer-event-target.js @@ -10,7 +10,8 @@ const eventEmitterSuperClassSelector = [ matches(['ClassDeclaration', 'ClassExpression']), '[body.type="ClassBody"]', ' > ', - 'Identifier.superClass[name="EventEmitter"]', + 'Identifier.superClass', + '[name="EventEmitter"]', ].join(''); const newEventEmitterSelector = [ From 1b906ed88f933051d53b114c78d77643b4de65ca Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Thu, 28 Apr 2022 14:48:33 +0800 Subject: [PATCH 12/14] Simplify selector --- rules/prefer-event-target.js | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/rules/prefer-event-target.js b/rules/prefer-event-target.js index e698b6c347..c1bbcfca0b 100644 --- a/rules/prefer-event-target.js +++ b/rules/prefer-event-target.js @@ -6,26 +6,16 @@ const messages = { [MESSAGE_ID]: 'Prefer `EventTarget` over `EventEmitter`.', }; -const eventEmitterSuperClassSelector = [ - matches(['ClassDeclaration', 'ClassExpression']), - '[body.type="ClassBody"]', - ' > ', - 'Identifier.superClass', +const selector = [ + 'Identifier', '[name="EventEmitter"]', + matches([ + 'ClassDeclaration > .superClass', + 'ClassExpression > .superClass', + 'NewExpression > .callee', + ]), ].join(''); -const newEventEmitterSelector = [ - 'NewExpression', - ' > ', - 'Identifier.callee', - '[name="EventEmitter"]', -].join(''); - -const selector = matches([ - eventEmitterSuperClassSelector, - newEventEmitterSelector, -]); - /** @param {import('eslint').Rule.RuleContext} context */ const create = () => ({ [selector](node) { From e1c432dac42ce87258e731783ca186d2d7e07fcc Mon Sep 17 00:00:00 2001 From: Gyubong Lee Date: Thu, 28 Apr 2022 15:58:38 +0900 Subject: [PATCH 13/14] Fix snapshot --- test/snapshots/prefer-event-target.mjs.md | 40 -------------------- test/snapshots/prefer-event-target.mjs.snap | Bin 527 -> 409 bytes 2 files changed, 40 deletions(-) diff --git a/test/snapshots/prefer-event-target.mjs.md b/test/snapshots/prefer-event-target.mjs.md index 62791387e1..d527bbc0f1 100644 --- a/test/snapshots/prefer-event-target.mjs.md +++ b/test/snapshots/prefer-event-target.mjs.md @@ -50,46 +50,6 @@ Generated by [AVA](https://avajs.dev). 4 | }␊ ` -## Invalid #1 - 1 | EventEmitter() - -> Error 1/1 - - `␊ - > 1 | EventEmitter()␊ - | ^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ - ` - -## Invalid #2 - 1 | new EventEmitter - -> Error 1/1 - - `␊ - > 1 | new EventEmitter␊ - | ^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ - ` - -## Invalid #3 - 1 | const emitter = new EventEmitter; - -> Error 1/1 - - `␊ - > 1 | const emitter = new EventEmitter;␊ - | ^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ - ` - -## Invalid #4 - 1 | const emitter = EventEmitter() - -> Error 1/1 - - `␊ - > 1 | const emitter = EventEmitter()␊ - | ^^^^^^^^^^^^ Prefer \`EventTarget\` over \`EventEmitter\`.␊ - ` - ## Invalid #1 1 | new EventEmitter diff --git a/test/snapshots/prefer-event-target.mjs.snap b/test/snapshots/prefer-event-target.mjs.snap index dc24d2692ac0978399739ec422d340d1c26e12b3..347f062ac34ed430e6ffd66ced95bf1dfb50041e 100644 GIT binary patch literal 409 zcmV;K0cQR|RzV7JG2`B^1A-xWKJL}%_8*G~00000000By zVq{?8VsJXkG~M%QnoaoMKIM$Vo|AxrKrkJMvzvd#yb&>e>~E}m?mycqAx5yMJWxR% z>x)-^Ce^p+NKUoy_I@Y82o_xm#1#yWzP(*`wb)2(Ow|#6w7?N;_G=ob?sSoAIszqwkjHp`)T_Sz`|b;lI-{xgC_ zOIa8g{>-gD1cc^Ye;J z6x{Oj6>Jrfa}tY-6;dloQu9)Z6YG}Uk)NWW2~5ojG)>P;n}~H6wOyg0U<5RdGchH_C$ku6At-r4GOsa6yeKsns104p R1SnO@1pv#co7q4H003h>?nM9q From 3ec045d72d8c57cf6cd8cbb21dee557d83fdf4eb Mon Sep 17 00:00:00 2001 From: Sindre Sorhus Date: Mon, 9 May 2022 00:21:49 +0700 Subject: [PATCH 14/14] Update prefer-event-target.md --- docs/rules/prefer-event-target.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/rules/prefer-event-target.md b/docs/rules/prefer-event-target.md index c94c5f1875..8660634a2d 100644 --- a/docs/rules/prefer-event-target.md +++ b/docs/rules/prefer-event-target.md @@ -5,7 +5,7 @@ βœ… *This rule is part of the [recommended](https://github.com/sindresorhus/eslint-plugin-unicorn#recommended-config) config.* -While [EventEmitter](https://nodejs.org/api/events.html#class-eventemitter) is only available in Node.js, [EventTarget](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget) is also available in *Deno* and browsers. +While [`EventEmitter`](https://nodejs.org/api/events.html#class-eventemitter) is only available in Node.js, [`EventTarget`](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget) is also available in *Deno* and browsers. This rule reduces the bundle size and makes your code more cross-platform friendly.