Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add eslint and use ES6 #33

Merged
merged 6 commits into from
Feb 16, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
module.exports = {
env: {
node: true,
mocha: true,
},
extends: [
'airbnb-base',
],
rules: {
'func-names': 0,
'no-use-before-define': 0,
'no-plusplus': 0,
'strict': 0,
},
}
2 changes: 1 addition & 1 deletion config/base.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,5 +35,5 @@ module.exports = {
'ember/use-ember-get-and-set': 1,
'ember/avoid-leaking-state-in-components': 2,
'ember/use-brace-expansion': 1,
}
},
};
4 changes: 2 additions & 2 deletions config/recommended.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,6 @@ module.exports = {
'prefer-arrow-callback': 0,
'prefer-rest-params': 0,
'consistent-return': 0,
'generator-star-spacing': [2, "after"],
}
'generator-star-spacing': [2, 'after'],
},
};
23 changes: 12 additions & 11 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
'use strict';

var resolve = require('path').resolve;
var requireIndex = require('requireindex');
const resolve = require('path').resolve;
const requireIndex = require('requireindex');

var rules = requireIndex(resolve(__dirname, 'lib/rules'));
var configs = requireIndex(resolve(__dirname, 'config'));
const rules = requireIndex(resolve(__dirname, 'lib/rules'));
const configs = requireIndex(resolve(__dirname, 'config'));

var ember = require(resolve(__dirname, 'lib/utils/ember'));
var utils = require(resolve(__dirname, 'lib/utils/utils'));
/* eslint-disable import/no-dynamic-require */
Copy link
Contributor

@bardzusny bardzusny Feb 16, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe it makes sense to disable it globally, in our case?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is literally the only place with dynamic requires, and for a clear reason. In other places we'd rather want to be explicit about this.

const ember = require(resolve(__dirname, 'lib/utils/ember'));
const utils = require(resolve(__dirname, 'lib/utils/utils'));

module.exports = {
rules: rules,
configs: configs,
rules,
configs,
utils: {
ember: ember,
utils: utils
}
ember,
utils,
},
};
29 changes: 13 additions & 16 deletions lib/rules/alias-model-in-controller.js
Original file line number Diff line number Diff line change
@@ -1,31 +1,29 @@
'use strict';

var utils = require('../utils/utils');
var ember = require('../utils/ember');
const utils = require('../utils/utils');
const ember = require('../utils/ember');

//------------------------------------------------------------------------------
// Controllers - Alias your model
//------------------------------------------------------------------------------

module.exports = function(context) {
module.exports = function (context) {
const message = 'Alias your model';

var message = 'Alias your model';

var report = function(node) {
const report = function (node) {
context.report(node, message);
};

return {
CallExpression: function(node) {
CallExpression(node) {
if (!ember.isEmberController(node)) return;

var callee = node.callee;
var properties = ember.getModuleProperties(node);
var aliasPresent = false;
const properties = ember.getModuleProperties(node);
let aliasPresent = false;

properties.forEach(function(property) {
var parsedCallee = utils.parseCallee(property.value);
var parsedArgs = utils.parseArgs(property.value);
properties.forEach((property) => {
const parsedCallee = utils.parseCallee(property.value);
const parsedArgs = utils.parseArgs(property.value);

if (
parsedCallee.length &&
Expand All @@ -38,9 +36,8 @@ module.exports = function(context) {


if (!aliasPresent) {
report(node)
report(node);
}
}
},
};

};
27 changes: 12 additions & 15 deletions lib/rules/avoid-leaking-state-in-components.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
'use strict';

var utils = require('../utils/utils');
var ember = require('../utils/ember');
const ember = require('../utils/ember');

//------------------------------------------------------------------------------
// Components rule - Avoid leaking state
Expand All @@ -11,20 +10,20 @@ var ember = require('../utils/ember');
module.exports = {
meta: {
schema: [{
type: "array",
items: { type: "string" },
type: 'array',
items: { type: 'string' },
}],
},

create: function(context) {
var ignoredProperties = context.options[0] || [];
create(context) {
let ignoredProperties = context.options[0] || [];

var message = {
const message = {
array: 'Avoid using arrays as default properties',
object: 'Avoid using objects as default properties',
};

var report = function(node, messageType) {
const report = function (node, messageType) {
context.report(node, message[messageType]);
};

Expand All @@ -39,23 +38,21 @@ module.exports = {
]);

return {
CallExpression: function(node) {
CallExpression(node) {
if (!ember.isEmberComponent(node)) return;

var properties = ember.getModuleProperties(node);
const properties = ember.getModuleProperties(node);

properties
.filter(function(property) {
return ignoredProperties.indexOf(property.key.name) === -1;
})
.forEach(function(property) {
.filter(property => ignoredProperties.indexOf(property.key.name) === -1)
.forEach((property) => {
if (ember.isObjectProp(property)) {
report(property, 'object');
} else if (ember.isArrayProp(property)) {
report(property, 'array');
}
});
}
},
};
},
};
16 changes: 7 additions & 9 deletions lib/rules/closure-actions.js
Original file line number Diff line number Diff line change
@@ -1,29 +1,27 @@
'use strict';

var utils = require('../utils/utils');
const utils = require('../utils/utils');

//------------------------------------------------------------------------------
// Components - Closure actions
//------------------------------------------------------------------------------

module.exports = function(context) {
module.exports = function (context) {
const message = 'Use closure actions, unless you need bubbling';

var message = 'Use closure actions, unless you need bubbling';

var report = function(node) {
const report = function (node) {
context.report(node, message);
};

return {
MemberExpression: function(node) {
var isSendAction = utils.isThisExpression(node.object) &&
MemberExpression(node) {
const isSendAction = utils.isThisExpression(node.object) &&
utils.isIdentifier(node.property) &&
node.property.name === 'sendAction';

if (isSendAction) {
report(node);
}
}
},
};

};
42 changes: 20 additions & 22 deletions lib/rules/jquery-ember-run.js
Original file line number Diff line number Diff line change
@@ -1,54 +1,52 @@
'use strict';

var utils = require('../utils/utils');
var ember = require('../utils/ember');
const utils = require('../utils/utils');
const ember = require('../utils/ember');

//------------------------------------------------------------------------------
// General rule - Don’t use jQuery without Ember Run Loop
//------------------------------------------------------------------------------

module.exports = function(context) {
module.exports = function (context) {
const message = 'Don\'t use jQuery without Ember Run Loop';

var message = 'Don\'t use jQuery without Ember Run Loop';

var report = function(node) {
const report = function (node) {
context.report(node, message);
};

var isJqueryUsed = function(node) {
const isJqueryUsed = function (node) {
return utils.isMemberExpression(node) &&
utils.isCallExpression(node.object) &&
ember.isModule(node.object, '$');
};

var isRunUsed = function(node) {
const isRunUsed = function (node) {
return ember.isModule(node, 'run');
};

return {
CallExpression: function(node) {
var callee = node.callee;
var fnNodes = utils.findNodes(node.arguments, 'ArrowFunctionExpression');
CallExpression(node) {
const callee = node.callee;
const fnNodes = utils.findNodes(node.arguments, 'ArrowFunctionExpression');

if (isJqueryUsed(callee) && fnNodes.length) {
fnNodes.forEach(function(fnNode) {
var fnBody = fnNode.body.body;
var fnExpressions = utils.findNodes(fnBody, 'ExpressionStatement');
fnNodes.forEach((fnNode) => {
const fnBody = fnNode.body.body;
const fnExpressions = utils.findNodes(fnBody, 'ExpressionStatement');

fnExpressions.forEach(function(fnExpression) {
fnExpression = fnExpression.expression;
fnExpressions.forEach((fnExpression) => {
const expression = fnExpression.expression;

if (
utils.isCallExpression(fnExpression) &&
utils.isMemberExpression(fnExpression.callee) &&
!isRunUsed(fnExpression)
utils.isCallExpression(expression) &&
utils.isMemberExpression(expression.callee) &&
!isRunUsed(expression)
) {
report(fnExpression.callee);
report(expression.callee);
}
});
});
}
}
},
};

};
26 changes: 12 additions & 14 deletions lib/rules/local-modules.js
Original file line number Diff line number Diff line change
@@ -1,33 +1,32 @@
'use strict';

var utils = require('../utils/utils');
const utils = require('../utils/utils');

//------------------------------------------------------------------------------
// General rule - Create local version of Ember.* and DS.*
//------------------------------------------------------------------------------

module.exports = function(context) {
module.exports = function (context) {
const message = 'Create local version of ';

var message = 'Create local version of ';

var report = function(node, name) {
var msg = message + name + '.' + node.property.name;
const report = function (node, name) {
const msg = `${message + name}.${node.property.name}`;
context.report(node, msg);
};

var allowedEmberProperties = ['$', 'Object', 'Router', 'String'];
var allowedDSProperties = [];
const allowedEmberProperties = ['$', 'Object', 'Router', 'String'];
const allowedDSProperties = [];

var isExpressionForbidden = function (objectName, node, allowedProperties) {
const isExpressionForbidden = function (objectName, node, allowedProperties) {
return node.object.name === objectName &&
node.property.name.length &&
allowedProperties.indexOf(node.property.name) === -1;
};

return {
CallExpression: function(node) {
var callee = node.callee;
var obj = utils.isMemberExpression(callee.object) ? callee.object : callee;
CallExpression(node) {
const callee = node.callee;
const obj = utils.isMemberExpression(callee.object) ? callee.object : callee;

if (
utils.isIdentifier(obj.object) &&
Expand All @@ -41,7 +40,6 @@ module.exports = function(context) {
report(obj, 'DS');
}
}
}
},
};

};
19 changes: 9 additions & 10 deletions lib/rules/named-functions-in-promises.js
Original file line number Diff line number Diff line change
@@ -1,22 +1,21 @@
'use strict';

var utils = require('../utils/utils');
const utils = require('../utils/utils');

//------------------------------------------------------------------------------
// General rule - Use named functions defined on objects to handle promises
//------------------------------------------------------------------------------

module.exports = function(context) {
module.exports = function (context) {
const message = 'Use named functions defined on objects to handle promises';

var message = 'Use named functions defined on objects to handle promises';

var report = function(node) {
const report = function (node) {
context.report(node, message);
};

return {
CallExpression: function(node) {
var firstArg = node.arguments[0];
CallExpression(node) {
const firstArg = node.arguments[0];

if (
hasPromiseExpression(node) &&
Expand All @@ -27,12 +26,12 @@ module.exports = function(context) {
) {
report(node);
}
}
},
};

function hasPromiseExpression(node) {
var callee = node.callee;
var promisesMethods = ['then', 'catch', 'finally'];
const callee = node.callee;
const promisesMethods = ['then', 'catch', 'finally'];

return utils.isCallExpression(callee.object) &&
utils.isIdentifier(callee.property) &&
Expand Down
Loading