From 75d950d9724facf80c02dbfeacf7ba43fff4fd20 Mon Sep 17 00:00:00 2001 From: "german.smirnov" Date: Sun, 16 Dec 2018 19:47:47 +0300 Subject: [PATCH 01/10] add avoid lodash rule --- README.md | 148 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) diff --git a/README.md b/README.md index 2491fb8..e797452 100644 --- a/README.md +++ b/README.md @@ -573,3 +573,151 @@ export class MyAwesomeComponent extends React.PureComponent { } } ``` +## Exteranl libraries + +### Prefer native methods vs lodash + +> Reason: lodash is a great library which contains a lot of useful functions but the modern js has the short identical part of this functionality so some lodash functions are excess alternative. + +```javascript +// BAD +_.each([1, 2, 3], callback); +// GOOD +[1, 2, 3].forEach(callback); +``` +```javascript +// BAD +_.filter([1, 2, 3], callback); +// GOOD +[1, 2, 3].filter(callback); +``` +```javascript +// BAD +_.compact([1, 2, 3, 0, false, '']); +// GOOD +[1, 2, 3, 0, false, ''].filter(Boolean) +``` +```javascript +// BAD +_.map([1, 2, 3], callback); +// GOOD +[1, 2, 3].map(callback); +``` +```javascript +// BAD +_.every([1, 2, 3], callback); +// GOOD +[1, 2, 3].every(callback); +``` +```javascript +// BAD +_.some([1, 2, 3], callback); +// GOOD +[1, 2, 3].some(callback); +``` +```javascript +// BAD +_.reduce([1, 2, 3], callback); +// GOOD +[1, 2, 3].reduce(callback); +``` +```javascript +// BAD +_.concat([1, 2, 3], [4, 5, 6]); +// GOOD +[1, 2, 3].concat([4, 5, 6]); +``` +```javascript +// BAD +_.indexOf([1, 2, 3], 1); +// GOOD +[1, 2, 3].indexOf(1); +``` +```javascript +// BAD +const first = _.first([1, 2, 3]); +// GOOD +const [first] = [1, 2, 3]; +``` +```javascript +// BAD +_.join([1, 2, 3], '-'); +// GOOD +[1, 2, 3].join('-'); +``` +```javascript +// BAD +_.reverse([1, 2, 3]); +// GOOD +[1, 2, 3].reverse(); +``` +```javascript +// BAD +_.isArray([1, 2, 3]); +// GOOD +Array.isArray([1, 2, 3]); +``` +```javascript +// BAD +_.size([1, 2, 3]); +// GOOD +[1, 2, 3].length; +``` +```javascript +// BAD +_.bind(function, this); +// GOOD +function.bind(this); +``` +```javascript +// BAD +_.isNaN(value); +// GOOD +Number.isNaN(value); +``` +```javascript +// BAD +_.isUndefined(value); +// GOOD +value === undefined; +``` +```javascript +// BAD +const foo = _.assign({}, object1, object2); +// GOOD +const foo = { + ...object1, + ...object2, +}; +``` +```javascript +// BAD +const others = _.omit({a: 1, b: 2, c: 3, d: 4}, ['a', 'c']); +// GOOD +const {a, c, ...others} = {a: 1, b: 2, c: 3, d: 4}; +``` +```javascript +// BAD +_.keys(object); +// GOOD +Object.keys(object) +``` +```javascript +// BAD +_.values(object) +// GOOD +Object.values(object); +``` +```javascript +// BAD +_.entries(object) +// GOOD +Object.entries(object); +``` +```javascript +// BAD +_.trim(' 123 '); +// GOOD +' 123 '.trim(); +``` + From 46cb4ad6e97ca4e7d4e63de798ffed5361e8f8be Mon Sep 17 00:00:00 2001 From: "german.smirnov" Date: Sun, 16 Dec 2018 19:49:19 +0300 Subject: [PATCH 02/10] change title --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e797452..0a36f8a 100644 --- a/README.md +++ b/README.md @@ -575,7 +575,7 @@ export class MyAwesomeComponent extends React.PureComponent { ``` ## Exteranl libraries -### Prefer native methods vs lodash +### Prefer native js vs lodash > Reason: lodash is a great library which contains a lot of useful functions but the modern js has the short identical part of this functionality so some lodash functions are excess alternative. From 5bd4fab7f96573edf6a02e5ac9710d41a03dae66 Mon Sep 17 00:00:00 2001 From: "german.smirnov" Date: Sun, 16 Dec 2018 19:54:57 +0300 Subject: [PATCH 03/10] add semicolons --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0a36f8a..5091acb 100644 --- a/README.md +++ b/README.md @@ -700,17 +700,17 @@ const {a, c, ...others} = {a: 1, b: 2, c: 3, d: 4}; // BAD _.keys(object); // GOOD -Object.keys(object) +Object.keys(object); ``` ```javascript // BAD -_.values(object) +_.values(object); // GOOD Object.values(object); ``` ```javascript // BAD -_.entries(object) +_.entries(object); // GOOD Object.entries(object); ``` From 85be1d8fcf1b7c2c653fae056f2c90dfa4752bb2 Mon Sep 17 00:00:00 2001 From: "german.smirnov" Date: Sun, 16 Dec 2018 20:16:51 +0300 Subject: [PATCH 04/10] add includes --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 5091acb..04290a7 100644 --- a/README.md +++ b/README.md @@ -635,6 +635,12 @@ _.indexOf([1, 2, 3], 1); ``` ```javascript // BAD +_.includes([1, 2, 3], 1); +// GOOD +[1, 2, 3].includes(1); +``` +```javascript +// BAD const first = _.first([1, 2, 3]); // GOOD const [first] = [1, 2, 3]; From 965f5cda899b15525433ee7d5ed8836a703997ad Mon Sep 17 00:00:00 2001 From: "german.smirnov" Date: Sun, 16 Dec 2018 20:29:57 +0300 Subject: [PATCH 05/10] add top menu link --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 04290a7..b74a181 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ React-specific guidelines described at [RingCentral React Style Guide](https://g 1. [Language statements and features](#language-statements-and-features) 1. [Spaces and alignments](#spaces-and-alignments) 1. [Naming](#naming) +1. [External libraries](#external-libraries) ## Overview @@ -573,7 +574,7 @@ export class MyAwesomeComponent extends React.PureComponent { } } ``` -## Exteranl libraries +## External libraries ### Prefer native js vs lodash From 9fec11dfbc7384dc9eca541d0d57850521137dd8 Mon Sep 17 00:00:00 2001 From: "german.smirnov" Date: Fri, 4 Jan 2019 20:10:15 +0300 Subject: [PATCH 06/10] review fixes --- README.md | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index b74a181..dff9c19 100644 --- a/README.md +++ b/README.md @@ -580,6 +580,7 @@ export class MyAwesomeComponent extends React.PureComponent { > Reason: lodash is a great library which contains a lot of useful functions but the modern js has the short identical part of this functionality so some lodash functions are excess alternative. +> Don't forget to check necessary browsers compatibility and turn on polyfills if it's needed. ```javascript // BAD _.each([1, 2, 3], callback); @@ -596,7 +597,7 @@ _.filter([1, 2, 3], callback); // BAD _.compact([1, 2, 3, 0, false, '']); // GOOD -[1, 2, 3, 0, false, ''].filter(Boolean) +[1, 2, 3, 0, false, ''].filter(Boolean); ``` ```javascript // BAD @@ -618,9 +619,9 @@ _.some([1, 2, 3], callback); ``` ```javascript // BAD -_.reduce([1, 2, 3], callback); +_.reduce([1, 2, 3], callback, 0); // GOOD -[1, 2, 3].reduce(callback); +[1, 2, 3].reduce(callback, 0); ``` ```javascript // BAD @@ -672,9 +673,15 @@ _.size([1, 2, 3]); ``` ```javascript // BAD -_.bind(function, this); +_.isEmpty([]); // GOOD -function.bind(this); +[].length === 0; +```` +```javascript +// BAD +_.bind(func, this); +// GOOD +func.bind(this); ``` ```javascript // BAD @@ -705,6 +712,12 @@ const {a, c, ...others} = {a: 1, b: 2, c: 3, d: 4}; ``` ```javascript // BAD +_.isEmpty(object); +// GOOD +Object.keys(object).length === 0; +```` +```javascript +// BAD _.keys(object); // GOOD Object.keys(object); From 4202030d7f444135ce60a169b4b097daabba5564 Mon Sep 17 00:00:00 2001 From: "german.smirnov" Date: Fri, 4 Jan 2019 20:55:35 +0300 Subject: [PATCH 07/10] add uniq --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index dff9c19..282ffbf 100644 --- a/README.md +++ b/README.md @@ -661,6 +661,12 @@ _.reverse([1, 2, 3]); ``` ```javascript // BAD +_.uniq([1, 2, 3, 3, 2]); +// GOOD +[...new Set([1, 2, 3, 3, 2])]; +``` +```javascript +// BAD _.isArray([1, 2, 3]); // GOOD Array.isArray([1, 2, 3]); @@ -740,4 +746,3 @@ _.trim(' 123 '); // GOOD ' 123 '.trim(); ``` - From 9c7dd8f8543c10eed987153384b21bd2bdcc0e64 Mon Sep 17 00:00:00 2001 From: "german.smirnov" Date: Fri, 4 Jan 2019 21:35:05 +0300 Subject: [PATCH 08/10] add you-dont-need-lodash-underscore to eslint config --- eslint-config-ringcentral/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eslint-config-ringcentral/index.js b/eslint-config-ringcentral/index.js index d34ecdd..3a270a9 100644 --- a/eslint-config-ringcentral/index.js +++ b/eslint-config-ringcentral/index.js @@ -7,7 +7,7 @@ module.exports = { es6: true, mocha: true }, - extends: 'eslint:recommended', + extends: ['plugin:you-dont-need-lodash-underscore/all', 'eslint:recommended'], parser: 'babel-eslint', parserOptions: { ecmaFeatures: { From 4a0456c3677a8c482722db6e7c8744dcd89a90a5 Mon Sep 17 00:00:00 2001 From: ledamint Date: Mon, 1 Apr 2019 16:57:31 +0300 Subject: [PATCH 09/10] add isEmpty --- README.md | 6 ++++++ eslint-config-ringcentral/index.js | 4 ++-- eslint-config-ringcentral/package.json | 3 ++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 282ffbf..70ec615 100644 --- a/README.md +++ b/README.md @@ -703,6 +703,12 @@ value === undefined; ``` ```javascript // BAD +_.isEmpty(object); +// GOOD +Object.keys(object).length === 0; +``` +```javascript +// BAD const foo = _.assign({}, object1, object2); // GOOD const foo = { diff --git a/eslint-config-ringcentral/index.js b/eslint-config-ringcentral/index.js index 3a270a9..4a2c223 100644 --- a/eslint-config-ringcentral/index.js +++ b/eslint-config-ringcentral/index.js @@ -7,7 +7,7 @@ module.exports = { es6: true, mocha: true }, - extends: ['plugin:you-dont-need-lodash-underscore/all', 'eslint:recommended'], + extends: ['eslint:recommended', 'plugin:you-dont-need-lodash-underscore/all'], parser: 'babel-eslint', parserOptions: { ecmaFeatures: { @@ -16,7 +16,7 @@ module.exports = { }, sourceType: 'module' }, - plugins: ['react'], + plugins: ['react', 'you-dont-need-lodash-underscore'], globals: { chai: true, expect: true, diff --git a/eslint-config-ringcentral/package.json b/eslint-config-ringcentral/package.json index e5ca536..125383b 100644 --- a/eslint-config-ringcentral/package.json +++ b/eslint-config-ringcentral/package.json @@ -29,6 +29,7 @@ "peerDependencies": { "eslint": ">=4.1.1", "eslint-plugin-import": "^2.7.0", - "eslint-plugin-react": "^7.1.0" + "eslint-plugin-react": "^7.1.0", + "eslint-plugin-you-dont-need-lodash-underscore": "^6.4.0" } } From 7a87af80b92c6790ed2e322bb2882368e14e861c Mon Sep 17 00:00:00 2001 From: ledamint Date: Sun, 18 Aug 2019 20:16:32 +0300 Subject: [PATCH 10/10] make you-dont-need-lodash-underscore warn --- eslint-config-ringcentral/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eslint-config-ringcentral/index.js b/eslint-config-ringcentral/index.js index 7940849..a985fe7 100644 --- a/eslint-config-ringcentral/index.js +++ b/eslint-config-ringcentral/index.js @@ -16,7 +16,7 @@ module.exports = { sourceType: 'module' }, plugins: ['react', 'import', 'ringcentral', 'you-dont-need-lodash-underscore'], - extends: ['eslint:recommended', 'plugin:ringcentral/all', 'plugin:you-dont-need-lodash-underscore/all'], + extends: ['eslint:recommended', 'plugin:ringcentral/all', 'plugin:you-dont-need-lodash-underscore/all-warn'], globals: { chai: true, expect: true,