Skip to content

Commit

Permalink
prefer-object-from-entries: Stop checking unknown cases (#1771)
Browse files Browse the repository at this point in the history
  • Loading branch information
fisker committed Mar 30, 2022
1 parent 1920597 commit 309771d
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 409 deletions.
4 changes: 0 additions & 4 deletions docs/rules/prefer-object-from-entries.md
Expand Up @@ -34,10 +34,6 @@ const object = pairs.reduce(
);
```

```js
const object = pairs.reduce(addPairToObject, {});
```

```js
const object = _.fromPairs(pairs);
```
Expand Down
10 changes: 0 additions & 10 deletions rules/prefer-object-from-entries.js
Expand Up @@ -183,10 +183,6 @@ function create(context) {

for (const {selector, test, getProperty} of fixableArrayReduceCases) {
listeners[selector] = node => {
// If this listener exits without adding a fix, the `arrayReduceWithEmptyObject` listener
// should still add it into the `arrayReduce` map. To be safer, add it here too.
arrayReduce.set(node, undefined);

const [callbackFunction] = node.arguments;
if (!test(callbackFunction)) {
return;
Expand All @@ -211,12 +207,6 @@ function create(context) {
};
}

listeners[arrayReduceWithEmptyObject] = node => {
if (!arrayReduce.has(node)) {
arrayReduce.set(node, undefined);
}
};

listeners['Program:exit'] = () => {
for (const [node, fix] of arrayReduce.entries()) {
context.report({
Expand Down
100 changes: 47 additions & 53 deletions test/prefer-object-from-entries.mjs
Expand Up @@ -30,6 +30,52 @@ test.snapshot({
'pairs.reduce(object => ({...object, key}), object.create(null));',
'pairs.reduce(object => ({...object, key}), object.CREATE(null));',
'pairs.reduce(object => ({...object, key}), Object.create("null"));',
// Unknown callback
'pairs.reduce(callback, {})',
'pairs.reduce(callback, Object.create(null))',
'pairs.reduce(async function * () {}, {})',
'pairs.reduce()',
'pairs.reduce(callback, {}, extraArgument)',
'pairs.reduce?.(callback, {})',
'pairs?.reduce(callback, {})',
'pairs.notReduce(callback, {})',
'pairs[reduce](callback, {})',
'pairs.reduce(...callback, {})',
'pairs.reduce(function(object) {Object.assign(object, {key})}, {});',
'pairs.reduce(object => ({...object, key} + 1), {});',
'pairs.reduce((object = {}) => ({...object, key}), {});',
'pairs.reduce((object) => ({...NotSameObject, key}), {});',
'pairs.reduce(object => ({...object, key, anotherKey}), {});',
'pairs.reduce(object => ({}), {});',
'pairs.reduce(object => ({keyFirst, ...object}), {});',
'pairs.reduce(async object => ({...object, key}), {});',
'pairs.reduce(async object => await {...object, key}, {});',
'pairs.reduce((...object) => ({...object, key}), {});',
'pairs.reduce(({object}) => ({...object, key}), {});',
'pairs.reduce(object => ({...object, ...key}), {});',
'pairs.reduce(object => Object.assign(NotSameObject, {key}), {});',
'pairs.reduce(object => Object.assign(object, {}), {});',
'pairs.reduce(object => Object.assign(object, {...key}), {});',
'pairs.reduce(object => Object.assign?.(object, {key}), {});',
'pairs.reduce(object => Object?.assign(object, {key}), {});',
'pairs.reduce(object => Object.notAssign(object, {key}), {});',
'pairs.reduce(object => NotObject.assign(object, {key}), {});',
// `object` is used somewhere else
'pairs.reduce(object => ({...object, object}), {});',
'pairs.reduce(object => ({...object, key: Object.keys(object)}), {});',
'pairs.reduce((object, [key, value = object]) => ({...object, [key]: value}), {});',
'pairs.reduce((object) => Object.assign(object, {object}), {});',
'pairs.reduce(object => ({...object, key: function () { return object; }}), {});',
// Complicated key value
'pairs.reduce(object => ({...object, method() {}}), {});',
'pairs.reduce(object => Object.assign(object, {async * method() {}}), {});',
'pairs.reduce(object => ({...object, async method() {}}), {});',
'pairs.reduce(object => ({...object, * method() {}}), {});',
'pairs.reduce(object => ({...object, async * method() {}}), {});',
'pairs.reduce(object => ({...object, get key() {}}), {});',
'pairs.reduce(object => ({...object, set key(v) {}}), {});',
// #1631
'const flattened = arrayOfObjects.reduce((flattened, next) => Object.assign(flattened, next), {});',
],
invalid: [
'pairs.reduce(object => ({...object, key}), {});',
Expand Down Expand Up @@ -100,61 +146,9 @@ test.snapshot({
// `.reduce` has multiple parameters
'pairs.reduce((object, element, index, array) => ({...object, key}), {});',
'pairs.reduce((object, [key, value], index, array,) => ({...object, [key]: value + index + array.length}), {});',
// Callback function, not fixable, but should still be caught by another listener
'pairs.reduce(function(object) {Object.assign(object, {key})}, {});',
'pairs.reduce(object => ({...object, key} + 1), {});',
'pairs.reduce((object = {}) => ({...object, key}), {});',
'pairs.reduce((object) => ({...NotSameObject, key}), {});',
'pairs.reduce(object => ({...object, key, anotherKey}), {});',
'pairs.reduce(object => ({}), {});',
'pairs.reduce(object => ({keyFirst, ...object}), {});',
'pairs.reduce(async object => ({...object, key}), {});',
'pairs.reduce(async object => await {...object, key}, {});',
'pairs.reduce((...object) => ({...object, key}), {});',
'pairs.reduce(({object}) => ({...object, key}), {});',
'pairs.reduce(object => ({...object, ...key}), {});',
'pairs.reduce(object => Object.assign(NotSameObject, {key}), {});',
'pairs.reduce(object => Object.assign(object, {}), {});',
'pairs.reduce(object => Object.assign(object, {...key}), {});',
'pairs.reduce(object => Object.assign?.(object, {key}), {});',
'pairs.reduce(object => Object?.assign(object, {key}), {});',
'pairs.reduce(object => Object.notAssign(object, {key}), {});',
'pairs.reduce(object => NotObject.assign(object, {key}), {});',
// `object` is used somewhere else
'pairs.reduce(object => ({...object, object}), {});',
'pairs.reduce(object => ({...object, key: Object.keys(object)}), {});',
'pairs.reduce((object, [key, value = object]) => ({...object, [key]: value}), {});',
'pairs.reduce((object) => Object.assign(object, {object}), {});',
'pairs.reduce(object => ({...object, key: function () { return object; }}), {});',
'pairs.reduce(object => ({...object, key: function (object) { return object; }}), {});', // This is fixable
// Complicated key value
'pairs.reduce(object => ({...object, method() {}}), {});',
'pairs.reduce(object => Object.assign(object, {async * method() {}}), {});',
'pairs.reduce(object => ({...object, async method() {}}), {});',
'pairs.reduce(object => ({...object, * method() {}}), {});',
'pairs.reduce(object => ({...object, async * method() {}}), {});',
'pairs.reduce(object => ({...object, key: function (object) { return object; }}), {});',
'pairs.reduce(object => ({...object, method: async () => {}}), {});',
'pairs.reduce(object => ({...object, method: async function * (){}}), {});',
'pairs.reduce(object => ({...object, get key() {}}), {});',
'pairs.reduce(object => ({...object, set key(v) {}}), {});',
],
});

// Non-fixable `Array#reduce()`
test.snapshot({
valid: [
'pairs.reduce()',
'pairs.reduce(callback, {}, extraArgument)',
'pairs.reduce?.(callback, {})',
'pairs?.reduce(callback, {})',
'pairs.notReduce(callback, {})',
'pairs[reduce](callback, {})',
'pairs.reduce(...callback, {})',
],
invalid: [
'pairs.reduce(callback, {})',
'pairs.reduce(callback, Object.create(null))',
'pairs.reduce(async function * () {}, {})',
],
});

Expand Down

0 comments on commit 309771d

Please sign in to comment.