Skip to content

Commit dc149b5

Browse files
authored
Merge pull request #624 from bmish/eslint-plugin-unicorn
Add eslint-plugin-unicorn internally and fix recommended rules
2 parents c93198c + 9a6a4be commit dc149b5

32 files changed

+336
-149
lines changed

.eslintrc.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@ module.exports = {
44
root: true,
55
parserOptions: {
66
ecmaVersion: 2017,
7+
sourceType: 'script'
78
},
89
plugins: [
910
'eslint-plugin',
1011
'filenames',
1112
'import',
1213
'node',
13-
'prettier'
14+
'prettier',
15+
'unicorn'
1416
],
1517
extends: [
1618
'eslint:recommended',
@@ -19,6 +21,7 @@ module.exports = {
1921
'plugin:import/errors',
2022
'plugin:import/warnings',
2123
'plugin:node/recommended',
24+
'plugin:unicorn/recommended',
2225
'prettier'
2326
],
2427
env: {
@@ -117,6 +120,9 @@ module.exports = {
117120
    'import/no-useless-path-segments''error',
118121
    'import/no-webpack-loader-syntax''error',
119122
'import/unambiguous': 'error',
123+
124+
// Unicorn rules:
125+
'unicorn/prevent-abbreviations': 'off'
120126
},
121127
overrides: [
122128
// test files

lib/rules/alias-model-in-controller.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ module.exports = {
4242
const parsedArgs = utils.parseArgs(property.value);
4343

4444
if (
45-
parsedCallee.length &&
46-
['alias', 'readOnly', 'reads'].indexOf(parsedCallee.pop()) > -1 &&
45+
parsedCallee.length > 0 &&
46+
['alias', 'readOnly', 'reads'].includes(parsedCallee.pop()) &&
4747
(parsedArgs[0] === 'model' || String(parsedArgs[0]).startsWith('model.'))
4848
) {
4949
aliasPresent = true;

lib/rules/avoid-leaking-state-in-ember-objects.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ module.exports = {
8787
const properties = ember.getModuleProperties(node);
8888

8989
properties
90-
.filter(property => property.key && ignoredProperties.indexOf(property.key.name) === -1)
90+
.filter(property => property.key && !ignoredProperties.includes(property.key.name))
9191
.forEach(property => {
9292
if (!isAllowed(property.value)) {
9393
report(property);

lib/rules/computed-property-getters.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ module.exports = {
4343

4444
const requireGetterOnlyWithASetterInComputedProperty = function(node) {
4545
const objectExpressions = node.arguments.filter(arg => types.isObjectExpression(arg));
46-
if (objectExpressions.length) {
46+
if (objectExpressions.length > 0) {
4747
const { properties } = objectExpressions[0];
4848
const getters = properties.filter(
4949
prop => prop.key && prop.key.name && prop.key.name === 'get'
@@ -62,7 +62,7 @@ module.exports = {
6262

6363
const preventGetterInComputedProperty = function(node) {
6464
const objectExpressions = node.arguments.filter(arg => types.isObjectExpression(arg));
65-
if (objectExpressions.length) {
65+
if (objectExpressions.length > 0) {
6666
const { properties } = objectExpressions[0];
6767
const getters = properties.filter(
6868
prop => prop.key && prop.key.name && prop.key.name === 'get'
@@ -80,7 +80,7 @@ module.exports = {
8080
const objectExpressions = node.arguments.filter(arg => types.isObjectExpression(arg));
8181
const functionExpressions = node.arguments.filter(arg => types.isFunctionExpression(arg));
8282

83-
if (objectExpressions.length) {
83+
if (objectExpressions.length > 0) {
8484
const { properties } = objectExpressions[0];
8585

8686
const getters = properties.filter(
@@ -89,14 +89,14 @@ module.exports = {
8989
if (getters.length === 0) {
9090
report(node, ALWAYS_GETTER_MESSAGE);
9191
}
92-
} else if (functionExpressions.length) {
92+
} else if (functionExpressions.length > 0) {
9393
report(node, ALWAYS_GETTER_MESSAGE);
9494
}
9595
};
9696

9797
return {
9898
CallExpression(node) {
99-
if (ember.isComputedProp(node) && node.arguments.length) {
99+
if (ember.isComputedProp(node) && node.arguments.length > 0) {
100100
if (requireGetters === 'always-with-setter') {
101101
requireGetterOnlyWithASetterInComputedProperty(node);
102102
}

lib/rules/jquery-ember-run.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ module.exports = {
4646
const callee = node.callee;
4747
const fnNodes = utils.findNodes(node.arguments, 'ArrowFunctionExpression');
4848

49-
if (isJqueryUsed(callee) && fnNodes.length) {
49+
if (isJqueryUsed(callee) && fnNodes.length > 0) {
5050
fnNodes.forEach(fnNode => {
5151
const fnBody = fnNode.body.body;
5252
const fnExpressions = utils.findNodes(fnBody, 'ExpressionStatement');

lib/rules/named-functions-in-promises.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -58,16 +58,16 @@ module.exports = {
5858
}
5959
},
6060
};
61-
62-
function hasPromiseExpression(node) {
63-
const callee = node.callee;
64-
const promisesMethods = ['then', 'catch', 'finally'];
65-
66-
return (
67-
types.isCallExpression(callee.object) &&
68-
types.isIdentifier(callee.property) &&
69-
promisesMethods.indexOf(callee.property.name) > -1
70-
);
71-
}
7261
},
7362
};
63+
64+
function hasPromiseExpression(node) {
65+
const callee = node.callee;
66+
const promisesMethods = ['then', 'catch', 'finally'];
67+
68+
return (
69+
types.isCallExpression(callee.object) &&
70+
types.isIdentifier(callee.property) &&
71+
promisesMethods.includes(callee.property.name)
72+
);
73+
}

lib/rules/new-module-imports.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,8 @@ module.exports = {
102102
const fullNames = getFullNames(fullName, node);
103103

104104
// find a matching expression starting at the end
105-
for (let i = 0; i < fullNames.length; i++) {
106-
fullName = fullNames[i];
105+
for (const element of fullNames) {
106+
fullName = element;
107107

108108
const key = fullName.replace(/^Ember\./, '');
109109
const match = GLOBALS[fullName];

lib/rules/no-actions-hash.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,6 @@ module.exports = {
2020
},
2121

2222
create: context => {
23-
function inClassWhichCanContainActions(context, node) {
24-
return (
25-
ember.isEmberComponent(context, node) ||
26-
ember.isEmberController(context, node) ||
27-
ember.isEmberRoute(context, node)
28-
);
29-
}
30-
3123
function reportActionsProp(properties) {
3224
const actionsProp = properties.find(property => ember.isActionsProp(property));
3325
if (actionsProp) {
@@ -49,3 +41,11 @@ module.exports = {
4941
};
5042
},
5143
};
44+
45+
function inClassWhichCanContainActions(context, node) {
46+
return (
47+
ember.isEmberComponent(context, node) ||
48+
ember.isEmberController(context, node) ||
49+
ember.isEmberRoute(context, node)
50+
);
51+
}

lib/rules/no-attrs-in-components.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,6 @@ module.exports = {
2323
},
2424

2525
create(context) {
26-
function isThisAttrsExpression(node) {
27-
return types.isThisExpression(node.object) && node.property.name === 'attrs';
28-
}
29-
3026
return {
3127
MemberExpression(node) {
3228
if (isThisAttrsExpression(node)) {
@@ -36,3 +32,7 @@ module.exports = {
3632
};
3733
},
3834
};
35+
36+
function isThisAttrsExpression(node) {
37+
return types.isThisExpression(node.object) && node.property.name === 'attrs';
38+
}

lib/rules/no-empty-attrs.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ module.exports = {
4040
);
4141

4242
isDSAttr.forEach(attr => {
43-
if (!attr.value.arguments.length) {
43+
if (attr.value.arguments.length === 0) {
4444
report(attr.value);
4545
}
4646
});

0 commit comments

Comments
 (0)