From 665b1014519a75e0fb8aff7fc82856c55a8e505e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Sajn=C3=B3g?= Date: Wed, 15 Feb 2017 22:14:15 +0100 Subject: [PATCH 1/6] Add basic eslint and fix code --- .eslintrc.js | 14 ++++++++++++++ lib/rules/alias-model-in-controller.js | 1 - lib/rules/avoid-leaking-state-in-components.js | 1 - lib/rules/no-observers.js | 5 +---- lib/rules/use-brace-expansion.js | 2 -- lib/utils/ember.js | 2 +- lib/utils/utils.js | 2 +- tests/lib/utils/ember-test.js | 4 ++-- 8 files changed, 19 insertions(+), 12 deletions(-) create mode 100644 .eslintrc.js diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000000..a6d14f48c1 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,14 @@ +module.exports = { + root: true, + parserOptions: { + ecmaVersion: 6, + sourceType: 'module', + }, + env: { + node: true, + mocha: true, + }, + extends: [ + 'eslint:recommended', + ], +} diff --git a/lib/rules/alias-model-in-controller.js b/lib/rules/alias-model-in-controller.js index d9a3c0d8e5..47ba7cf041 100644 --- a/lib/rules/alias-model-in-controller.js +++ b/lib/rules/alias-model-in-controller.js @@ -19,7 +19,6 @@ module.exports = function(context) { CallExpression: function(node) { if (!ember.isEmberController(node)) return; - var callee = node.callee; var properties = ember.getModuleProperties(node); var aliasPresent = false; diff --git a/lib/rules/avoid-leaking-state-in-components.js b/lib/rules/avoid-leaking-state-in-components.js index 03c941636c..6d07d202fb 100644 --- a/lib/rules/avoid-leaking-state-in-components.js +++ b/lib/rules/avoid-leaking-state-in-components.js @@ -1,6 +1,5 @@ 'use strict'; -var utils = require('../utils/utils'); var ember = require('../utils/ember'); //------------------------------------------------------------------------------ diff --git a/lib/rules/no-observers.js b/lib/rules/no-observers.js index 1aeccc3b33..ff618722a6 100644 --- a/lib/rules/no-observers.js +++ b/lib/rules/no-observers.js @@ -8,7 +8,7 @@ var ember = require('../utils/ember'); module.exports = function(context) { - var message = 'Don\'t use observers if possible'; + var message = "Don't use observers if possible"; var report = function(node) { context.report(node, message); @@ -16,12 +16,9 @@ module.exports = function(context) { return { CallExpression: function(node) { - var callee = node.callee; - if(ember.isModule(node, 'observer')) { report(node); } } }; - }; diff --git a/lib/rules/use-brace-expansion.js b/lib/rules/use-brace-expansion.js index 4537a8b795..23eb79196f 100644 --- a/lib/rules/use-brace-expansion.js +++ b/lib/rules/use-brace-expansion.js @@ -17,8 +17,6 @@ module.exports = function(context) { return { CallExpression: function(node) { - var callee = node.callee; - if (ember.isComputedProp(node)) { var properties = node.arguments .filter(arg => utils.isLiteral(arg) && typeof arg.value === 'string') diff --git a/lib/utils/ember.js b/lib/utils/ember.js index 4fe9c563d4..2ea7f407be 100644 --- a/lib/utils/ember.js +++ b/lib/utils/ember.js @@ -47,7 +47,7 @@ function isLocalModule(callee, element) { } function isEmberModule(callee, element, module) { - memberExp = utils.isMemberExpression(callee.object) ? callee.object : callee; + const memberExp = utils.isMemberExpression(callee.object) ? callee.object : callee; return isLocalModule(memberExp, module) && utils.isIdentifier(memberExp.property) && diff --git a/lib/utils/utils.js b/lib/utils/utils.js index c4c5964c19..c5e3a72d06 100644 --- a/lib/utils/utils.js +++ b/lib/utils/utils.js @@ -234,4 +234,4 @@ function findUnorderedProperty(arr) { } return null; -}; +} diff --git a/tests/lib/utils/ember-test.js b/tests/lib/utils/ember-test.js index bbb727f76c..b6a0ceaf70 100644 --- a/tests/lib/utils/ember-test.js +++ b/tests/lib/utils/ember-test.js @@ -155,7 +155,7 @@ describe('isCustomProp', function() { describe('isModelProp', function() { let node; - if('should be a model prop', function() { + it('should be a model prop', function() { node = getProperty(`test = { model() {} }`); assert.ok(emberUtils.isModelProp(node)); @@ -167,7 +167,7 @@ describe('isModelProp', function() { describe('isActionsProp', function() { const node = getProperty(`test = { actions: {} }`); - if('should be actions prop', function() { + it('should be actions prop', function() { assert.ok(emberUtils.isActionsProp(node)); }); }); From a4f438cad87bede9873fa4b2cd0d007a86630f22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Sajn=C3=B3g?= Date: Wed, 15 Feb 2017 23:32:34 +0100 Subject: [PATCH 2/6] Use airbnb-base config, fix code --- .eslintrc.js | 7 +- config/base.js | 2 +- config/recommended.js | 4 +- index.js | 25 +-- lib/rules/alias-model-in-controller.js | 30 ++- .../avoid-leaking-state-in-components.js | 28 ++- lib/rules/closure-actions.js | 18 +- lib/rules/jquery-ember-run.js | 44 ++-- lib/rules/local-modules.js | 28 ++- lib/rules/named-functions-in-promises.js | 21 +- lib/rules/no-empty-attrs.js | 21 +- lib/rules/no-function-prototype-extensions.js | 24 +- lib/rules/no-observers.js | 17 +- lib/rules/no-on-calls-in-components.js | 35 +-- lib/rules/no-side-effects.js | 32 ++- lib/rules/order-in-components.js | 20 +- lib/rules/order-in-controllers.js | 18 +- lib/rules/order-in-models.js | 18 +- lib/rules/order-in-routes.js | 18 +- lib/rules/query-params-on-top.js | 22 +- lib/rules/routes-segments-snake-case.js | 40 ++-- lib/rules/use-brace-expansion.js | 40 ++-- lib/rules/use-ember-get-and-set.js | 18 +- lib/utils/ember.js | 206 +++++++++--------- lib/utils/property-order.js | 57 +++-- lib/utils/utils.js | 84 ++++--- package.json | 4 +- tests/lib/rules/alias-model-in-controller.js | 36 +-- .../avoid-leaking-state-in-components.js | 38 ++-- tests/lib/rules/closure-actions.js | 20 +- tests/lib/rules/jquery-ember-run.js | 18 +- tests/lib/rules/local-modules.js | 42 ++-- .../lib/rules/named-functions-in-promises.js | 40 ++-- tests/lib/rules/no-empty-attrs.js | 26 +-- .../rules/no-function-prototype-extensions.js | 48 ++-- tests/lib/rules/no-observers.js | 20 +- tests/lib/rules/no-on-calls-in-components.js | 42 ++-- tests/lib/rules/no-side-effects.js | 18 +- tests/lib/rules/order-in-components.js | 86 ++++---- tests/lib/rules/order-in-controllers.js | 46 ++-- tests/lib/rules/order-in-models.js | 54 ++--- tests/lib/rules/order-in-routes.js | 40 ++-- tests/lib/rules/query-params-on-top.js | 40 ++-- tests/lib/rules/routes-segments-snake-case.js | 20 +- tests/lib/rules/use-brace-expansion.js | 14 +- tests/lib/rules/use-ember-get-and-set.js | 10 +- tests/lib/utils/ember-test.js | 140 ++++++------ tests/lib/utils/utils-test.js | 76 +++---- tests/plugin-exports.js | 15 +- 49 files changed, 863 insertions(+), 907 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index a6d14f48c1..603ffde4b1 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -9,6 +9,11 @@ module.exports = { mocha: true, }, extends: [ - 'eslint:recommended', + 'airbnb-base', ], + rules: { + 'func-names': 0, + 'no-use-before-define': 0, + 'no-plusplus': 0, + }, } diff --git a/config/base.js b/config/base.js index cc82840b5b..23246d7c03 100644 --- a/config/base.js +++ b/config/base.js @@ -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, - } + }, }; diff --git a/config/recommended.js b/config/recommended.js index 7a46c21223..8105992716 100644 --- a/config/recommended.js +++ b/config/recommended.js @@ -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'], + }, }; diff --git a/index.js b/index.js index 0f4257e3bf..abcfc6999f 100644 --- a/index.js +++ b/index.js @@ -1,19 +1,18 @@ -'use strict'; +const { resolve } = require('path'); +const requireIndex = require('requireindex'); -var resolve = require('path').resolve; -var requireIndex = require('requireindex'); +const rules = requireIndex(resolve(__dirname, 'lib/rules')); +const configs = requireIndex(resolve(__dirname, 'config')); -var rules = requireIndex(resolve(__dirname, 'lib/rules')); -var 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 */ +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, + }, }; diff --git a/lib/rules/alias-model-in-controller.js b/lib/rules/alias-model-in-controller.js index 47ba7cf041..53a38d2f56 100644 --- a/lib/rules/alias-model-in-controller.js +++ b/lib/rules/alias-model-in-controller.js @@ -1,30 +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) { - - var message = 'Alias your model'; +module.exports = function (context) { + const 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 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 && @@ -37,9 +36,8 @@ module.exports = function(context) { if (!aliasPresent) { - report(node) + report(node); } - } + }, }; - }; diff --git a/lib/rules/avoid-leaking-state-in-components.js b/lib/rules/avoid-leaking-state-in-components.js index 6d07d202fb..095bba7fea 100644 --- a/lib/rules/avoid-leaking-state-in-components.js +++ b/lib/rules/avoid-leaking-state-in-components.js @@ -1,6 +1,6 @@ -'use strict'; -var ember = require('../utils/ember'); + +const ember = require('../utils/ember'); //------------------------------------------------------------------------------ // Components rule - Avoid leaking state @@ -10,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]); }; @@ -38,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'); } }); - } + }, }; }, }; diff --git a/lib/rules/closure-actions.js b/lib/rules/closure-actions.js index 67d41e7867..b6a156a585 100644 --- a/lib/rules/closure-actions.js +++ b/lib/rules/closure-actions.js @@ -1,29 +1,27 @@ -'use strict'; -var utils = require('../utils/utils'); + +const utils = require('../utils/utils'); //------------------------------------------------------------------------------ // Components - Closure actions //------------------------------------------------------------------------------ -module.exports = function(context) { - - var message = 'Use closure actions, unless you need bubbling'; +module.exports = function (context) { + const 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); } - } + }, }; - }; diff --git a/lib/rules/jquery-ember-run.js b/lib/rules/jquery-ember-run.js index 3391920816..63bcce6ceb 100644 --- a/lib/rules/jquery-ember-run.js +++ b/lib/rules/jquery-ember-run.js @@ -1,54 +1,50 @@ -'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) { - - var message = 'Don\'t use jQuery without Ember Run Loop'; +module.exports = function (context) { + const 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; 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); } }); }); } - } + }, }; - }; diff --git a/lib/rules/local-modules.js b/lib/rules/local-modules.js index f3929b404e..70f8ea6e74 100644 --- a/lib/rules/local-modules.js +++ b/lib/rules/local-modules.js @@ -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) { - - var message = 'Create local version of '; +module.exports = function (context) { + const 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) && @@ -41,7 +40,6 @@ module.exports = function(context) { report(obj, 'DS'); } } - } + }, }; - }; diff --git a/lib/rules/named-functions-in-promises.js b/lib/rules/named-functions-in-promises.js index 963585b8e7..fd458cac62 100644 --- a/lib/rules/named-functions-in-promises.js +++ b/lib/rules/named-functions-in-promises.js @@ -1,22 +1,19 @@ -'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) { - - var message = 'Use named functions defined on objects to handle promises'; +module.exports = function (context) { + const 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) && @@ -27,12 +24,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) && diff --git a/lib/rules/no-empty-attrs.js b/lib/rules/no-empty-attrs.js index 451ab4ce4f..16080f130c 100644 --- a/lib/rules/no-empty-attrs.js +++ b/lib/rules/no-empty-attrs.js @@ -1,33 +1,28 @@ -'use strict'; - -var ember = require('../utils/ember'); +const ember = require('../utils/ember'); //------------------------------------------------------------------------------ // Ember Data - Be explicit with Ember data attribute types //------------------------------------------------------------------------------ -module.exports = function(context) { - - var message = 'Supply proper attribute type'; +module.exports = function (context) { + const message = 'Supply proper attribute type'; - var report = function(node) { + const report = function (node) { context.report(node, message); }; return { - CallExpression: function(node) { + CallExpression(node) { if (!ember.isDSModel(node)) return; const allProperties = ember.getModuleProperties(node); - const propertiesWithEmptyAttrs = allProperties.filter(property => + const propertiesWithEmptyAttrs = allProperties.filter(property => ember.isModule(property.value, 'attr', 'DS') && - !property.value.arguments.length - ); + !property.value.arguments.length); if (propertiesWithEmptyAttrs.length) { report(node); } - } + }, }; - }; diff --git a/lib/rules/no-function-prototype-extensions.js b/lib/rules/no-function-prototype-extensions.js index 34b9579896..6f4a876a1f 100644 --- a/lib/rules/no-function-prototype-extensions.js +++ b/lib/rules/no-function-prototype-extensions.js @@ -1,28 +1,26 @@ -'use strict'; - -var utils = require('../utils/utils'); +const utils = require('../utils/utils'); //---------------------------------------------------------------------------------------------- // General rule - Don't use Ember's function prototype extensions like .property() or .observe() //---------------------------------------------------------------------------------------------- -module.exports = function(context) { - - var message = 'Don\'t use Ember\'s function prototype extensions'; +module.exports = function (context) { + const message = 'Don\'t use Ember\'s function prototype extensions'; - var functionPrototypeExtensionNames = ['property', 'observe', 'on']; + const functionPrototypeExtensionNames = ['property', 'observe', 'on']; - var isFunctionPrototypeExtension = function (property) { - return utils.isIdentifier(property) && functionPrototypeExtensionNames.indexOf(property.name) !== -1; + const isFunctionPrototypeExtension = function (property) { + return utils.isIdentifier(property) && + functionPrototypeExtensionNames.indexOf(property.name) !== -1; }; - var report = function(node) { + const report = function (node) { context.report(node, message); }; return { - CallExpression: function(node) { - var callee = node.callee; + CallExpression(node) { + const callee = node.callee; if ( utils.isCallExpression(node) && @@ -32,6 +30,6 @@ module.exports = function(context) { ) { report(node); } - } + }, }; }; diff --git a/lib/rules/no-observers.js b/lib/rules/no-observers.js index ff618722a6..795c37d3cd 100644 --- a/lib/rules/no-observers.js +++ b/lib/rules/no-observers.js @@ -1,24 +1,23 @@ -'use strict'; -var ember = require('../utils/ember'); + +const ember = require('../utils/ember'); //------------------------------------------------------------------------------ // General rule - Don't use observers //------------------------------------------------------------------------------ -module.exports = function(context) { - - var message = "Don't use observers if possible"; +module.exports = function (context) { + const message = "Don't use observers if possible"; - var report = function(node) { + const report = function (node) { context.report(node, message); }; return { - CallExpression: function(node) { - if(ember.isModule(node, 'observer')) { + CallExpression(node) { + if (ember.isModule(node, 'observer')) { report(node); } - } + }, }; }; diff --git a/lib/rules/no-on-calls-in-components.js b/lib/rules/no-on-calls-in-components.js index 7c725ed684..730a6f6c56 100644 --- a/lib/rules/no-on-calls-in-components.js +++ b/lib/rules/no-on-calls-in-components.js @@ -1,42 +1,43 @@ -'use strict'; -var ember = require('../utils/ember'); -var utils = require('../utils/utils'); + +const ember = require('../utils/ember'); +const utils = require('../utils/utils'); //---------------------------------------------- // General rule - Don\'t use .on() in components //---------------------------------------------- -module.exports = function(context) { - - var message = 'Don\'t use .on() in components'; +module.exports = function (context) { + const message = 'Don\'t use .on() in components'; - var isOnCall = function (node) { - var value = node.value; - var callee = value.callee; + const isOnCall = function (node) { + const value = node.value; + const callee = value.callee; return utils.isCallExpression(value) && - (utils.isIdentifier(callee) && callee.name === 'on') || ( - utils.isMemberExpression(callee) && - utils.isIdentifier(callee.object) && callee.object.name === 'Ember' && - utils.isIdentifier(callee.property) && callee.property.name === 'on' + (utils.isIdentifier(callee) && callee.name === 'on') || + ( + utils.isMemberExpression(callee) && + utils.isIdentifier(callee.object) && callee.object.name === 'Ember' && + utils.isIdentifier(callee.property) && callee.property.name === 'on' + ) ); }; - var report = function(node) { + const report = function (node) { context.report(node, message); }; return { - CallExpression: function(node) { + CallExpression(node) { if (!ember.isEmberComponent(node)) return; - var propertiesWithOnCalls = ember.getModuleProperties(node).filter(isOnCall); + const propertiesWithOnCalls = ember.getModuleProperties(node).filter(isOnCall); if (propertiesWithOnCalls.length) { report(node); } - } + }, }; }; diff --git a/lib/rules/no-side-effects.js b/lib/rules/no-side-effects.js index b4b9616e3e..d5c778bb5d 100644 --- a/lib/rules/no-side-effects.js +++ b/lib/rules/no-side-effects.js @@ -1,31 +1,28 @@ -'use strict'; - -var utils = require('../utils/utils'); +const utils = require('../utils/utils'); //------------------------------------------------------------------------------ // General rule - Don't introduce side-effects in computed properties //------------------------------------------------------------------------------ -module.exports = function(context) { - - var message = 'Don\'t introduce side-effects in computed properties'; +module.exports = function (context) { + const message = 'Don\'t introduce side-effects in computed properties'; - var report = function(node) { + const report = function (node) { context.report(node, message); }; return { - CallExpression: function(node) { - var callee = node.callee; - var fnNodes = utils.findNodes(node.arguments, 'FunctionExpression'); + CallExpression(node) { + const callee = node.callee; + const fnNodes = utils.findNodes(node.arguments, 'FunctionExpression'); - if (callee && callee.name == 'computed' && fnNodes) { - fnNodes.forEach(function(fnNode) { - var fnBody = fnNode.body ? fnNode.body.body : fnNode.body; - var fnExpressions = utils.findNodes(fnBody, 'ExpressionStatement'); + if (callee && callee.name === 'computed' && fnNodes) { + fnNodes.forEach((fnNode) => { + const fnBody = fnNode.body ? fnNode.body.body : fnNode.body; + const fnExpressions = utils.findNodes(fnBody, 'ExpressionStatement'); - fnExpressions.forEach(function(fnExpression) { - var fnCallee = fnExpression.expression.callee; + fnExpressions.forEach((fnExpression) => { + const fnCallee = fnExpression.expression.callee; if ( utils.isMemberExpression(fnCallee) && @@ -38,7 +35,6 @@ module.exports = function(context) { }); }); } - } + }, }; - }; diff --git a/lib/rules/order-in-components.js b/lib/rules/order-in-components.js index 35554f18c0..a238483725 100644 --- a/lib/rules/order-in-components.js +++ b/lib/rules/order-in-components.js @@ -1,9 +1,9 @@ -'use strict'; -var ember = require('../utils/ember'); -var propOrder = require('../utils/property-order'); -var reportUnorderedProperties = propOrder.reportUnorderedProperties; +const ember = require('../utils/ember'); +const propOrder = require('../utils/property-order'); + +const reportUnorderedProperties = propOrder.reportUnorderedProperties; const ORDER = [ 'service', @@ -20,15 +20,15 @@ const ORDER = [ // Organizing - Organize your components and keep order in objects //------------------------------------------------------------------------------ -module.exports = function(context) { - var options = context.options[0] || {}; - var order = options.order || ORDER; +module.exports = function (context) { + const options = context.options[0] || {}; + const order = options.order || ORDER; return { - CallExpression: function(node) { + CallExpression(node) { if (!ember.isEmberComponent(node)) return; reportUnorderedProperties(node, context, 'component', order); - } - } + }, + }; }; diff --git a/lib/rules/order-in-controllers.js b/lib/rules/order-in-controllers.js index 40ef4f2110..ded9c13c9e 100644 --- a/lib/rules/order-in-controllers.js +++ b/lib/rules/order-in-controllers.js @@ -1,9 +1,9 @@ -'use strict'; -var ember = require('../utils/ember'); -var propOrder = require('../utils/property-order'); -var reportUnorderedProperties = propOrder.reportUnorderedProperties; +const ember = require('../utils/ember'); +const propOrder = require('../utils/property-order'); + +const reportUnorderedProperties = propOrder.reportUnorderedProperties; const ORDER = [ 'service', @@ -20,16 +20,16 @@ const ORDER = [ // Organizing - Organize your routes and keep order in objects //------------------------------------------------------------------------------ -module.exports = function(context) { - var options = context.options[0] || {}; - var order = options.order || ORDER; +module.exports = function (context) { + const options = context.options[0] || {}; + const order = options.order || ORDER; return { - CallExpression: function(node) { + CallExpression(node) { if (!ember.isEmberController(node)) return; reportUnorderedProperties(node, context, 'controller', order); - } + }, }; }; diff --git a/lib/rules/order-in-models.js b/lib/rules/order-in-models.js index 257c64da9f..368421a0a1 100644 --- a/lib/rules/order-in-models.js +++ b/lib/rules/order-in-models.js @@ -1,9 +1,9 @@ -'use strict'; -var ember = require('../utils/ember'); -var propOrder = require('../utils/property-order'); -var reportUnorderedProperties = propOrder.reportUnorderedProperties; +const ember = require('../utils/ember'); +const propOrder = require('../utils/property-order'); + +const reportUnorderedProperties = propOrder.reportUnorderedProperties; const ORDER = [ 'attribute', @@ -17,15 +17,15 @@ const ORDER = [ // Attributes -> Relations -> Computed Properties //------------------------------------------------------------------------------ -module.exports = function(context) { - var options = context.options[0] || {}; - var order = options.order || ORDER; +module.exports = function (context) { + const options = context.options[0] || {}; + const order = options.order || ORDER; return { - CallExpression: function(node) { + CallExpression(node) { if (!ember.isDSModel(node)) return; reportUnorderedProperties(node, context, 'model', order); - } + }, }; }; diff --git a/lib/rules/order-in-routes.js b/lib/rules/order-in-routes.js index 941982ab98..1fcbd8c51a 100644 --- a/lib/rules/order-in-routes.js +++ b/lib/rules/order-in-routes.js @@ -1,9 +1,9 @@ -'use strict'; -var ember = require('../utils/ember'); -var propOrder = require('../utils/property-order'); -var reportUnorderedProperties = propOrder.reportUnorderedProperties; +const ember = require('../utils/ember'); +const propOrder = require('../utils/property-order'); + +const reportUnorderedProperties = propOrder.reportUnorderedProperties; const ORDER = [ 'service', @@ -19,15 +19,15 @@ const ORDER = [ // Organizing - Organize your routes and keep order in objects //------------------------------------------------------------------------------ -module.exports = function(context) { - var options = context.options[0] || {}; - var order = options.order || ORDER; +module.exports = function (context) { + const options = context.options[0] || {}; + const order = options.order || ORDER; return { - CallExpression: function(node) { + CallExpression(node) { if (!ember.isEmberRoute(node)) return; reportUnorderedProperties(node, context, 'route', order); - } + }, }; }; diff --git a/lib/rules/query-params-on-top.js b/lib/rules/query-params-on-top.js index 440684d19e..f41c3fd29a 100644 --- a/lib/rules/query-params-on-top.js +++ b/lib/rules/query-params-on-top.js @@ -1,33 +1,29 @@ -'use strict'; -var ember = require('../utils/ember'); + +const ember = require('../utils/ember'); //------------------------------------------------------------------------------ // Controllers - Query params should always be on top //------------------------------------------------------------------------------ -module.exports = function(context) { - - var message = 'Query params should always be on top'; +module.exports = function (context) { + const message = 'Query params should always be on top'; - var report = function(node) { + const report = function (node) { context.report(node, message); }; return { - CallExpression: function(node) { + CallExpression(node) { if (!ember.isEmberController(node)) return; - var properties = ember.getModuleProperties(node); + const properties = ember.getModuleProperties(node); - var propKeys = properties.map(function(property) { - return property.key.name; - }); + const propKeys = properties.map(property => property.key.name); if (propKeys.indexOf('queryParams') > 0) { report(node); } - } + }, }; - }; diff --git a/lib/rules/routes-segments-snake-case.js b/lib/rules/routes-segments-snake-case.js index 08454efa7e..27c2daa11f 100644 --- a/lib/rules/routes-segments-snake-case.js +++ b/lib/rules/routes-segments-snake-case.js @@ -1,61 +1,55 @@ -'use strict'; - -var utils = require('../utils/utils'); -var snakeCase = require('snake-case'); +const utils = require('../utils/utils'); +const snakeCase = require('snake-case'); //------------------------------------------------------------------------------ // Routing - Snake case in dynamic segments of routes //------------------------------------------------------------------------------ -module.exports = function(context) { - - var message = 'Use snake case in dynamic segments of routes'; +module.exports = function (context) { + const message = 'Use snake case in dynamic segments of routes'; - var report = function(node) { + const report = function (node) { context.report(node, message); }; - var isRoute = function(node) { + const isRoute = function (node) { return utils.isMemberExpression(node.callee) && utils.isThisExpression(node.callee.object) && utils.isIdentifier(node.callee.property) && node.callee.property.name === 'route'; }; - var isSegment = function(property) { + const isSegment = function (property) { return property.key.name === 'path' && property.value.value.indexOf(':') > -1; }; - var getSegmentNames = function(property) { - if (!isSegment(property)) return; + const getSegmentNames = function (property) { + if (!isSegment(property)) return []; return property.value.value .match(/:([a-zA-Z0-9-_]+)/g) - .map(function (segment) { - return segment.slice(1); - }); + .map(segment => segment.slice(1)); }; - var isNotSnakeCase = function(name) { + const isNotSnakeCase = function (name) { return snakeCase(name) !== name; }; return { - CallExpression: function(node) { + CallExpression(node) { if (!isRoute(node)) return; - var routeOptions = utils.isObjectExpression(node.arguments[1]) ? node.arguments[1] : false; + const routeOptions = utils.isObjectExpression(node.arguments[1]) ? node.arguments[1] : false; if (routeOptions) { - routeOptions.properties.forEach(function(property) { - var segmentNames = getSegmentNames(property); + routeOptions.properties.forEach((property) => { + const segmentNames = getSegmentNames(property); - if (segmentNames && segmentNames.filter(isNotSnakeCase).length) { + if (segmentNames.length && segmentNames.filter(isNotSnakeCase).length) { report(property.value); } }); } - } + }, }; - }; diff --git a/lib/rules/use-brace-expansion.js b/lib/rules/use-brace-expansion.js index 23eb79196f..38f3764d60 100644 --- a/lib/rules/use-brace-expansion.js +++ b/lib/rules/use-brace-expansion.js @@ -1,37 +1,33 @@ -'use strict'; - -var utils = require('../utils/utils'); -var ember = require('../utils/ember'); +const utils = require('../utils/utils'); +const ember = require('../utils/ember'); //------------------------------------------------------------------------------ // General rule - Use brace expansion //------------------------------------------------------------------------------ -module.exports = function(context) { - - var message = 'Use brace expansion'; +module.exports = function (context) { + const message = 'Use brace expansion'; function report(node) { context.report(node, message); } return { - CallExpression: function(node) { - if (ember.isComputedProp(node)) { - var properties = node.arguments - .filter(arg => utils.isLiteral(arg) && typeof arg.value === 'string') - .map(e => e.value.split('.')) - .filter(e => e.length > 1) - .map(e => e[0]) - .sort((a, b) => a > b); - - for (var i = 0; i < properties.length - 1; i++) { - if (properties[i] === properties[i+1]) { - return report(node); - } + CallExpression(node) { + if (!ember.isComputedProp(node)) return; + + const properties = node.arguments + .filter(arg => utils.isLiteral(arg) && typeof arg.value === 'string') + .map(e => e.value.split('.')) + .filter(e => e.length > 1) + .map(e => e[0]) + .sort((a, b) => a > b); + + for (let i = 0; i < properties.length - 1; i++) { + if (properties[i] === properties[i + 1]) { + report(node); } } - } + }, }; - }; diff --git a/lib/rules/use-ember-get-and-set.js b/lib/rules/use-ember-get-and-set.js index 6e66cd1be4..b9d27158e8 100644 --- a/lib/rules/use-ember-get-and-set.js +++ b/lib/rules/use-ember-get-and-set.js @@ -1,20 +1,19 @@ -'use strict'; -var utils = require('../utils/utils'); + +const utils = require('../utils/utils'); //------------------------------------------------------------------------------ // General - use get and set //------------------------------------------------------------------------------ -module.exports = function(context) { - - var message = 'Use get/set'; +module.exports = function (context) { + const message = 'Use get/set'; - var report = function(node) { + const report = function (node) { context.report(node, message); }; - var avoidedProperties = [ + const avoidedProperties = [ 'get', 'set', 'getProperties', @@ -23,14 +22,13 @@ module.exports = function(context) { ]; return { - MemberExpression: function(node) { + MemberExpression(node) { if ( utils.isIdentifier(node.property) && avoidedProperties.indexOf(node.property.name) > -1 ) { report(node.property); } - } + }, }; - }; diff --git a/lib/utils/ember.js b/lib/utils/ember.js index 2ea7f407be..1ada2dd0be 100644 --- a/lib/utils/ember.js +++ b/lib/utils/ember.js @@ -1,42 +1,42 @@ -var utils = require('./utils'); +const utils = require('./utils'); module.exports = { - isDSModel: isDSModel, - isModule: isModule, - - isEmberComponent: isEmberComponent, - isEmberController: isEmberController, - isEmberRoute: isEmberRoute, - - isSingleLineFn: isSingleLineFn, - isMultiLineFn: isMultiLineFn, - isFunctionExpression: isFunctionExpression, - - getModuleProperties: getModuleProperties, - - isInjectedServiceProp: isInjectedServiceProp, - isObserverProp: isObserverProp, - isObjectProp: isObjectProp, - isArrayProp: isArrayProp, - isComputedProp: isComputedProp, - isCustomProp: isCustomProp, - isActionsProp: isActionsProp, - isModelProp: isModelProp, - - isRelation: isRelation, - - isComponentLifecycleHookName: isComponentLifecycleHookName, - isComponentLifecycleHook: isComponentLifecycleHook, - isComponentCustomFunction: isComponentCustomFunction, - - isRouteMethod: isRouteMethod, - isRouteDefaultMethod: isRouteDefaultMethod, - isRouteCustomFunction: isRouteCustomFunction, - isRouteProperty: isRouteProperty, - isRouteDefaultProp: isRouteDefaultProp, - - isControllerProperty: isControllerProperty, - isControllerDefaultProp: isControllerDefaultProp, + isDSModel, + isModule, + + isEmberComponent, + isEmberController, + isEmberRoute, + + isSingleLineFn, + isMultiLineFn, + isFunctionExpression, + + getModuleProperties, + + isInjectedServiceProp, + isObserverProp, + isObjectProp, + isArrayProp, + isComputedProp, + isCustomProp, + isActionsProp, + isModelProp, + + isRelation, + + isComponentLifecycleHookName, + isComponentLifecycleHook, + isComponentCustomFunction, + + isRouteMethod, + isRouteDefaultMethod, + isRouteCustomFunction, + isRouteProperty, + isRouteDefaultProp, + + isControllerProperty, + isControllerDefaultProp, }; // Private @@ -55,27 +55,29 @@ function isEmberModule(callee, element, module) { } function isPropOfType(node, type) { - var calleeNode = node.callee; + const calleeNode = node.callee; return utils.isCallExpression(node) && ( - utils.isIdentifier(calleeNode) && - calleeNode.name === type - ) || - ( - utils.isMemberExpression(calleeNode) && - utils.isIdentifier(calleeNode.property) && - calleeNode.property.name === type + ( + utils.isIdentifier(calleeNode) && + calleeNode.name === type + ) || + ( + utils.isMemberExpression(calleeNode) && + utils.isIdentifier(calleeNode.property) && + calleeNode.property.name === type + ) ); } // Public function isModule(node, element, module) { - module = module || 'Ember'; + const moduleName = module || 'Ember'; return utils.isCallExpression(node) && - (isLocalModule(node.callee, element) || isEmberModule(node.callee, element, module)); + (isLocalModule(node.callee, element) || isEmberModule(node.callee, element, moduleName)); } function isDSModel(node) { @@ -108,7 +110,7 @@ function isComputedProp(node) { function isArrayProp(node) { if (utils.isNewExpression(node.value)) { - var parsedCallee = utils.parseCallee(node.value); + const parsedCallee = utils.parseCallee(node.value); return parsedCallee.pop() === 'A'; } @@ -117,7 +119,7 @@ function isArrayProp(node) { function isObjectProp(node) { if (utils.isNewExpression(node.value)) { - var parsedCallee = utils.parseCallee(node.value); + const parsedCallee = utils.parseCallee(node.value); return parsedCallee.pop() === 'Object'; } @@ -125,8 +127,8 @@ function isObjectProp(node) { } function isCustomProp(property) { - var value = property.value; - var isCustomObjectProp = utils.isObjectExpression(value) && property.key.name !== 'actions'; + const value = property.value; + const isCustomObjectProp = utils.isObjectExpression(value) && property.key.name !== 'actions'; return utils.isLiteral(value) || utils.isIdentifier(value) || @@ -170,53 +172,53 @@ function isComponentCustomFunction(property) { } function isRouteMethod(name) { - return [ - 'activate', - 'addObserver', - 'afterModel', - 'beforeModel', - 'cacheFor', - 'controllerFor', - 'create', - 'deactivate', - 'decrementProperty', - 'destroy', - 'disconnectOutlet', - 'extend', - 'get', - 'getProperties', - 'getWithDefault', - 'has', - 'incrementProperty', - 'init', - 'intermediateTransitionTo', - 'model', - 'modelFor', - 'notifyPropertyChange', - 'off', - 'on', - 'one', - 'paramsFor', - 'redirect', - 'refresh', - 'removeObserver', - 'render', - 'renderTemplate', - 'reopen', - 'reopenClass', - 'replaceWith', - 'resetController', - 'send', - 'serialize', - 'set', - 'setProperties', - 'setupController', - 'toString', - 'toggleProperty', - 'transitionTo', - 'trigger', - 'willDestroy', - ].indexOf(name) > -1; + return [ + 'activate', + 'addObserver', + 'afterModel', + 'beforeModel', + 'cacheFor', + 'controllerFor', + 'create', + 'deactivate', + 'decrementProperty', + 'destroy', + 'disconnectOutlet', + 'extend', + 'get', + 'getProperties', + 'getWithDefault', + 'has', + 'incrementProperty', + 'init', + 'intermediateTransitionTo', + 'model', + 'modelFor', + 'notifyPropertyChange', + 'off', + 'on', + 'one', + 'paramsFor', + 'redirect', + 'refresh', + 'removeObserver', + 'render', + 'renderTemplate', + 'reopen', + 'reopenClass', + 'replaceWith', + 'resetController', + 'send', + 'serialize', + 'set', + 'setProperties', + 'setupController', + 'toString', + 'toggleProperty', + 'transitionTo', + 'trigger', + 'willDestroy', + ].indexOf(name) > -1; } function isRouteDefaultMethod(property) { @@ -268,7 +270,7 @@ function isControllerDefaultProp(property) { } function getModuleProperties(module) { - var firstObjectExpressionNode = utils.findNodes(module.arguments, 'ObjectExpression')[0]; + const firstObjectExpressionNode = utils.findNodes(module.arguments, 'ObjectExpression')[0]; return firstObjectExpressionNode ? firstObjectExpressionNode.properties : []; } @@ -299,10 +301,10 @@ function isFunctionExpression(property) { } function isRelation(property) { - var relationAttrs = ['hasMany', 'belongsTo']; - var result = false; + const relationAttrs = ['hasMany', 'belongsTo']; + let result = false; - relationAttrs.forEach(function(relation) { + relationAttrs.forEach((relation) => { if (isModule(property.value, relation, 'DS')) { result = true; } diff --git a/lib/utils/property-order.js b/lib/utils/property-order.js index 25b0ac62f6..03e4e4bc51 100644 --- a/lib/utils/property-order.js +++ b/lib/utils/property-order.js @@ -1,25 +1,23 @@ -'use strict'; - -var ember = require('./ember'); +const ember = require('./ember'); module.exports = { determinePropertyType, - reportUnorderedProperties: reportUnorderedProperties + reportUnorderedProperties, }; const NAMES = { - 'service': 'service injection', - 'property': 'property', + service: 'service injection', + property: 'property', 'single-line-function': 'single-line function', 'multi-line-function': 'multi-line function', - 'observer': 'observer', - 'model': '"model" hook', + observer: 'observer', + model: '"model" hook', 'lifecycle-hook': 'lifecycle hook', - 'actions': 'actions hash', - 'method': 'method', - 'unknown': 'unknown property type', - 'attribute': 'attribute', - 'relationship': 'relationship', + actions: 'actions hash', + method: 'method', + unknown: 'unknown property type', + attribute: 'attribute', + relationship: 'relationship', }; function determinePropertyType(node, parentType) { @@ -85,14 +83,14 @@ function determinePropertyType(node, parentType) { } function getOrder(ORDER, type) { - for (var i = 0, len = ORDER.length; i < len; i++) { - let value = ORDER[i]; + for (let i = 0, len = ORDER.length; i < len; i++) { + const value = ORDER[i]; if (typeof value === 'string') { if (value === type) { return i; } } else { - var index = value.indexOf(type); + const index = value.indexOf(type); if (index !== -1) { return i; } @@ -112,7 +110,7 @@ function getName(type, node) { } } - let typeDescription = NAMES[type]; + const typeDescription = NAMES[type]; if (type === 'inherited-property') { return prefix ? `inherited "${prefix}" property` : 'inherited property'; @@ -122,36 +120,35 @@ function getName(type, node) { } function reportUnorderedProperties(node, context, parentType, ORDER) { - var maxOrder = -1; - var firstPropertyOfType = {}; + let maxOrder = -1; + const firstPropertyOfType = {}; + let firstPropertyOfNextType; - ember.getModuleProperties(node).forEach(function(property) { - var type = determinePropertyType(property, parentType); - let order = getOrder(ORDER, type); + ember.getModuleProperties(node).forEach((property) => { + const type = determinePropertyType(property, parentType); + const order = getOrder(ORDER, type); - var info = { + const info = { node: property, type, }; // check if this property should be moved further upwards if (order < maxOrder) { - // look for correct position to insert this property - for (var i = order + 1; i <= maxOrder; i++) { - var firstPropertyOfNextType = firstPropertyOfType[i]; + for (let i = order + 1; i <= maxOrder; i++) { + firstPropertyOfNextType = firstPropertyOfType[i]; if (firstPropertyOfNextType) { break; } } - var typeName = getName(info.type, info.node); - var nextTypeName = getName(firstPropertyOfNextType.type, firstPropertyOfNextType.node); - var nextSourceLine = firstPropertyOfNextType.node.loc.start.line; + const typeName = getName(info.type, info.node); + const nextTypeName = getName(firstPropertyOfNextType.type, firstPropertyOfNextType.node); + const nextSourceLine = firstPropertyOfNextType.node.loc.start.line; context.report(property, `The ${typeName} should be above the ${nextTypeName} on line ${nextSourceLine}`); - } else { maxOrder = order; diff --git a/lib/utils/utils.js b/lib/utils/utils.js index c5e3a72d06..da58847d8f 100644 --- a/lib/utils/utils.js +++ b/lib/utils/utils.js @@ -1,21 +1,21 @@ module.exports = { - findNodes: findNodes, - isIdentifier: isIdentifier, - isLiteral: isLiteral, - isMemberExpression: isMemberExpression, - isCallExpression: isCallExpression, - isObjectExpression: isObjectExpression, - isArrayExpression: isArrayExpression, - isFunctionExpression: isFunctionExpression, - isArrowFunctionExpression: isArrowFunctionExpression, - isNewExpression: isNewExpression, - isCallWithFunctionExpression: isCallWithFunctionExpression, - isThisExpression: isThisExpression, - isConditionalExpression: isConditionalExpression, - getSize: getSize, - parseCallee: parseCallee, - parseArgs: parseArgs, - findUnorderedProperty: findUnorderedProperty, + findNodes, + isIdentifier, + isLiteral, + isMemberExpression, + isCallExpression, + isObjectExpression, + isArrayExpression, + isFunctionExpression, + isArrowFunctionExpression, + isNewExpression, + isCallWithFunctionExpression, + isThisExpression, + isConditionalExpression, + getSize, + parseCallee, + parseArgs, + findUnorderedProperty, }; /** @@ -26,15 +26,13 @@ module.exports = { * @return {Array} */ function findNodes(body, nodeName) { - var nodesArray = []; + let nodesArray = []; - if (body) { - nodesArray = body.filter(function (node) { - return node.type === nodeName; - }); - } + if (body) { + nodesArray = body.filter(node => node.type === nodeName); + } - return nodesArray; + return nodesArray; } /** @@ -44,7 +42,7 @@ function findNodes(body, nodeName) { * @returns {boolean} Whether or not the node is an Identifier. */ function isIdentifier(node) { - return node !== undefined && node.type === 'Identifier'; + return node !== undefined && node.type === 'Identifier'; } /** @@ -54,7 +52,7 @@ function isIdentifier(node) { * @returns {boolean} Whether or not the node is an Literal. */ function isLiteral(node) { - return node !== undefined && node.type === 'Literal'; + return node !== undefined && node.type === 'Literal'; } /** @@ -64,7 +62,7 @@ function isLiteral(node) { * @return {boolean} Whether or not the node is an MemberExpression. */ function isMemberExpression(node) { - return node !== undefined && node.type === 'MemberExpression'; + return node !== undefined && node.type === 'MemberExpression'; } /** @@ -74,7 +72,7 @@ function isMemberExpression(node) { * @returns {boolean} Whether or not the node is an CallExpression. */ function isCallExpression(node) { - return node !== undefined && node.type === 'CallExpression'; + return node !== undefined && node.type === 'CallExpression'; } /** @@ -84,7 +82,7 @@ function isCallExpression(node) { * @returns {boolean} Whether or not the node is an ObjectExpression. */ function isObjectExpression(node) { - return node !== undefined && node.type === 'ObjectExpression'; + return node !== undefined && node.type === 'ObjectExpression'; } /** @@ -136,8 +134,8 @@ function isNewExpression(node) { * @return {Boolean} [description] */ function isCallWithFunctionExpression(node) { - var callObj = isMemberExpression(node.callee) ? node.callee.object : node; - var firstArg = callObj.arguments ? callObj.arguments[0] : null; + const callObj = isMemberExpression(node.callee) ? node.callee.object : node; + const firstArg = callObj.arguments ? callObj.arguments[0] : null; return callObj !== undefined && isCallExpression(callObj) && firstArg && isFunctionExpression(firstArg); } @@ -149,7 +147,7 @@ function isCallWithFunctionExpression(node) { * @returns {boolean} Whether or not the node is an ThisExpression. */ function isThisExpression(node) { - return node !== undefined && node.type === 'ThisExpression'; + return node !== undefined && node.type === 'ThisExpression'; } /** @@ -159,7 +157,7 @@ function isThisExpression(node) { * @returns {boolean} Whether or not the node is a ConditionalExpression. */ function isConditionalExpression(node) { - return node !== undefined && node.type === 'ConditionalExpression'; + return node !== undefined && node.type === 'ConditionalExpression'; } /** @@ -169,7 +167,7 @@ function isConditionalExpression(node) { * @return {Integer} Number of lines */ function getSize(node) { - return node.loc.end.line - node.loc.start.line + 1; + return (node.loc.end.line - node.loc.start.line) + 1; } /** @@ -179,8 +177,8 @@ function getSize(node) { * @return {Array} eg. ['Ember', 'computed', 'alias'] */ function parseCallee(node) { - var parsedCallee = []; - var callee; + const parsedCallee = []; + let callee; if (isCallExpression(node) || isNewExpression(node)) { callee = node.callee; @@ -207,14 +205,12 @@ function parseCallee(node) { * @return {Array} Literal function's arguments */ function parseArgs(node) { - var parsedArgs = []; + let parsedArgs = []; if (isCallExpression(node)) { - parsedArgs = node.arguments.filter(function(argument) { - return isLiteral(argument) ? argument.value : false; - }).map(function(argument) { - return argument.value; - }); + parsedArgs = node.arguments + .filter(argument => isLiteral(argument) && argument.value) + .map(argument => argument.value); } return parsedArgs; @@ -227,8 +223,8 @@ function parseArgs(node) { * @return {Object} Unordered property or null */ function findUnorderedProperty(arr) { - for (var i = 0; i < arr.length - 1; i++) { - if (arr[i].order > arr[i+1].order) { + for (let i = 0; i < arr.length - 1; i++) { + if (arr[i].order > arr[i + 1].order) { return arr[i]; } } diff --git a/package.json b/package.json index cc532c1331..862e0a71eb 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,9 @@ "devDependencies": { "babel-eslint": "^7.1.0", "chai": "^3.5.0", - "eslint": "^3.4.0", + "eslint": "^3.15.0", + "eslint-config-airbnb-base": "^11.1.0", + "eslint-plugin-import": "^2.2.0", "mocha": "^3.2.0" }, "dependencies": { diff --git a/tests/lib/rules/alias-model-in-controller.js b/tests/lib/rules/alias-model-in-controller.js index ba04616e74..5cea39a1e4 100644 --- a/tests/lib/rules/alias-model-in-controller.js +++ b/tests/lib/rules/alias-model-in-controller.js @@ -1,82 +1,82 @@ -'use strict'; + // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ -var rule = require('../../../lib/rules/alias-model-in-controller'); -var RuleTester = require('eslint').RuleTester; +const rule = require('../../../lib/rules/alias-model-in-controller'); +const RuleTester = require('eslint').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -var eslintTester = new RuleTester(); +const eslintTester = new RuleTester(); eslintTester.run('alias-model-in-controller', rule, { valid: [ { code: 'export default Ember.Controller.extend({nail: alias("model")});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Ember.Controller.extend({nail: computed.alias("model")});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Ember.Controller.extend({nail: Ember.computed.alias("model")});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Ember.Controller.extend(TestMixin, {nail: Ember.computed.alias("model")});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Ember.Controller.extend(TestMixin, TestMixin2, {nail: Ember.computed.alias("model")});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, - } + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, + }, ], invalid: [ { code: 'export default Ember.Controller.extend({});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Alias your model', }], }, { code: 'export default Ember.Controller.extend({resetPassword: service()});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Alias your model', }], }, { code: 'export default Ember.Controller.extend({resetPassword: inject.service()});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Alias your model', }], }, { code: 'export default Ember.Controller.extend({resetPassword: Ember.inject.service()});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Alias your model', }], }, { code: 'export default Ember.Controller.extend(TestMixin, {});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Alias your model', }], }, { code: 'export default Ember.Controller.extend(TestMixin, TestMixin2, {});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Alias your model', }], - } - ] + }, + ], }); diff --git a/tests/lib/rules/avoid-leaking-state-in-components.js b/tests/lib/rules/avoid-leaking-state-in-components.js index 807e5803cc..4e8386519b 100644 --- a/tests/lib/rules/avoid-leaking-state-in-components.js +++ b/tests/lib/rules/avoid-leaking-state-in-components.js @@ -1,94 +1,94 @@ -'use strict'; + // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ -var rule = require('../../../lib/rules/avoid-leaking-state-in-components'); -var RuleTester = require('eslint').RuleTester; +const rule = require('../../../lib/rules/avoid-leaking-state-in-components'); +const RuleTester = require('eslint').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -var eslintTester = new RuleTester(); +const eslintTester = new RuleTester(); eslintTester.run('avoid-leaking-state-in-components', rule, { valid: [ { code: 'export default Component.extend();', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Component.extend({ someProp: "example", init() { this.set("anotherProp", []) } });', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Component.extend({ someProp: "example", init() { this.set("anotherProp", {}) } });', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Component.extend({ someProp: "example", init() { this.set("anotherProp", new Ember.A()) } });', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Component.extend({ someProp: "example", init() { this.set("anotherProp", new A()) } });', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Component.extend({ someProp: "example", init() { this.set("anotherProp", new Ember.Object()) } });', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Component.extend({ someProp: "example", init() { this.set("anotherProp", new Object()) } });', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Component.extend({ classNames: [], classNameBindings: [], actions: {}, concatenatedProperties: [], mergedProperties: [], positionalParams: [] });', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, ], invalid: [ { code: 'export default Component.extend({someProp: []});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Avoid using arrays as default properties', }], }, { code: 'export default Component.extend({someProp: new Ember.A()});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Avoid using arrays as default properties', }], }, { code: 'export default Component.extend({someProp: new A()});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Avoid using arrays as default properties', }], }, { code: 'export default Component.extend({someProp: {}});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Avoid using objects as default properties', }], }, { code: 'export default Component.extend({someProp: new Ember.Object()});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Avoid using objects as default properties', }], }, { code: 'export default Component.extend({someProp: new Object()});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Avoid using objects as default properties', }], }, - ] + ], }); diff --git a/tests/lib/rules/closure-actions.js b/tests/lib/rules/closure-actions.js index 54c2b4d22f..fb0a230218 100644 --- a/tests/lib/rules/closure-actions.js +++ b/tests/lib/rules/closure-actions.js @@ -1,35 +1,35 @@ -'use strict'; + // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ -var rule = require('../../../lib/rules/closure-actions'); -var RuleTester = require('eslint').RuleTester; +const rule = require('../../../lib/rules/closure-actions'); +const RuleTester = require('eslint').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -var eslintTester = new RuleTester(); +const eslintTester = new RuleTester(); eslintTester.run('closure-actions', rule, { valid: [ { code: 'export default Component.extend();', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Component.extend({actions: {pushLever() {this.attr.boom();}}});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, - } + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, + }, ], invalid: [ { code: 'export default Component.extend({actions: {pushLever() {this.sendAction("detonate");}}});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Use closure actions, unless you need bubbling', }], - } - ] + }, + ], }); diff --git a/tests/lib/rules/jquery-ember-run.js b/tests/lib/rules/jquery-ember-run.js index 2082297653..aeb0e6686d 100644 --- a/tests/lib/rules/jquery-ember-run.js +++ b/tests/lib/rules/jquery-ember-run.js @@ -1,31 +1,31 @@ -'use strict'; + // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ -var rule = require('../../../lib/rules/jquery-ember-run'); -var RuleTester = require('eslint').RuleTester; +const rule = require('../../../lib/rules/jquery-ember-run'); +const RuleTester = require('eslint').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -var eslintTester = new RuleTester(); +const eslintTester = new RuleTester(); eslintTester.run('jquery-ember-run', rule, { valid: [ { code: 'Ember.$("#something-rendered-by-jquery-plugin").on("click", () => {Ember.run.bind(this, this._handlerActionFromController);});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, - } + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, + }, ], invalid: [ { code: 'Ember.$("#something-rendered-by-jquery-plugin").on("click", () => {this._handlerActionFromController();});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Don\'t use jQuery without Ember Run Loop', }], - } - ] + }, + ], }); diff --git a/tests/lib/rules/local-modules.js b/tests/lib/rules/local-modules.js index 10504e2d09..7b9c4e5721 100644 --- a/tests/lib/rules/local-modules.js +++ b/tests/lib/rules/local-modules.js @@ -1,30 +1,30 @@ -'use strict'; + // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ -var rule = require('../../../lib/rules/local-modules'); -var RuleTester = require('eslint').RuleTester; +const rule = require('../../../lib/rules/local-modules'); +const RuleTester = require('eslint').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -var eslintTester = new RuleTester(); +const eslintTester = new RuleTester(); eslintTester.run('local-modules', rule, { valid: [ { code: 'export default Model.extend()', - parserOptions: { ecmaVersion: 6, sourceType: "module" }, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Model.extend({})', - parserOptions: { ecmaVersion: 6, sourceType: "module" }, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Route.extend({})', - parserOptions: { ecmaVersion: 6, sourceType: "module" }, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'title: attr("string")', @@ -37,44 +37,44 @@ eslintTester.run('local-modules', rule, { { code: 'Ember.MODEL_FACTORY_INJECTIONS = true;', parserOptions: { ecmaVersion: 6 }, - } + }, ], invalid: [ { code: 'export default DS.Model.extend({})', - parserOptions: { ecmaVersion: 6, sourceType: "module" }, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { message: 'Create local version of DS.Model', - } + }, ], }, { code: 'export default Ember.Route.extend({});', - parserOptions: { ecmaVersion: 6, sourceType: "module" }, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { - message: 'Create local version of Ember.Route' - } + message: 'Create local version of Ember.Route', + }, ], }, { code: 'title: DS.attr("string")', - parserOptions: { ecmaVersion: 6, sourceType: "module" }, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { - message: 'Create local version of DS.attr' - } + message: 'Create local version of DS.attr', + }, ], }, { code: 'title: Ember.computed.alias("test")', - parserOptions: { ecmaVersion: 6, sourceType: "module" }, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { - message: 'Create local version of Ember.computed' - } + message: 'Create local version of Ember.computed', + }, ], - } - ] + }, + ], }); diff --git a/tests/lib/rules/named-functions-in-promises.js b/tests/lib/rules/named-functions-in-promises.js index 2f33450a4b..86fb91cf4b 100644 --- a/tests/lib/rules/named-functions-in-promises.js +++ b/tests/lib/rules/named-functions-in-promises.js @@ -1,73 +1,73 @@ -'use strict'; + // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ -var rule = require('../../../lib/rules/named-functions-in-promises'); -var RuleTester = require('eslint').RuleTester; +const rule = require('../../../lib/rules/named-functions-in-promises'); +const RuleTester = require('eslint').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -var eslintTester = new RuleTester(); +const eslintTester = new RuleTester(); eslintTester.run('named-functions-in-promises', rule, { valid: [ { code: 'user.save().then(this._reloadUser.bind(this));', - parserOptions: {ecmaVersion: 6}, + parserOptions: { ecmaVersion: 6 }, }, { code: 'user.save().catch(this._handleError.bind(this));', - parserOptions: {ecmaVersion: 6}, + parserOptions: { ecmaVersion: 6 }, }, { code: 'user.save().finally(this._finallyDo.bind(this));', - parserOptions: {ecmaVersion: 6}, + parserOptions: { ecmaVersion: 6 }, }, { code: 'user.save().then(this._reloadUser);', - parserOptions: {ecmaVersion: 6}, + parserOptions: { ecmaVersion: 6 }, }, { code: 'user.save().catch(this._handleError);', - parserOptions: {ecmaVersion: 6}, + parserOptions: { ecmaVersion: 6 }, }, { code: 'user.save().finally(this._finallyDo);', - parserOptions: {ecmaVersion: 6}, + parserOptions: { ecmaVersion: 6 }, }, { code: 'user.save().then(_reloadUser);', - parserOptions: {ecmaVersion: 6}, + parserOptions: { ecmaVersion: 6 }, }, { code: 'user.save().catch(_handleError);', - parserOptions: {ecmaVersion: 6}, + parserOptions: { ecmaVersion: 6 }, }, { code: 'user.save().finally(_finallyDo);', - parserOptions: {ecmaVersion: 6}, - } + parserOptions: { ecmaVersion: 6 }, + }, ], invalid: [ { code: 'user.save().then(() => {return user.reload();});', - parserOptions: {ecmaVersion: 6}, + parserOptions: { ecmaVersion: 6 }, errors: [{ message: 'Use named functions defined on objects to handle promises', }], }, { code: 'user.save().then(() => user.reload());', - parserOptions: {ecmaVersion: 6}, + parserOptions: { ecmaVersion: 6 }, errors: [{ message: 'Use named functions defined on objects to handle promises', }], }, { code: 'user.save().catch(() => {return error.handle();});', - parserOptions: {ecmaVersion: 6}, + parserOptions: { ecmaVersion: 6 }, errors: [{ message: 'Use named functions defined on objects to handle promises', }], }, { code: 'user.save().finally(() => {return finallyDo();});', - parserOptions: {ecmaVersion: 6}, + parserOptions: { ecmaVersion: 6 }, errors: [{ message: 'Use named functions defined on objects to handle promises', }], - } - ] + }, + ], }); diff --git a/tests/lib/rules/no-empty-attrs.js b/tests/lib/rules/no-empty-attrs.js index fa057342c1..bf464dce1f 100644 --- a/tests/lib/rules/no-empty-attrs.js +++ b/tests/lib/rules/no-empty-attrs.js @@ -1,36 +1,36 @@ -'use strict'; + // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ -var rule = require('../../../lib/rules/no-empty-attrs'); -var RuleTester = require('eslint').RuleTester; +const rule = require('../../../lib/rules/no-empty-attrs'); +const RuleTester = require('eslint').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -var eslintTester = new RuleTester(); +const eslintTester = new RuleTester(); eslintTester.run('no-empty-attrs', rule, { valid: [ { code: 'export default Model.extend();', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Model.extend({name: attr("string"), points: attr("number"), dob: attr("date")});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Model.extend({name: attr("string")});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `someArrayOfStrings.filter(function(attr) { return attr.underscore(); });`, - parserOptions: {ecmaVersion: 6}, + parserOptions: { ecmaVersion: 6 }, }, { code: `export default Model.extend({ @@ -38,23 +38,23 @@ eslintTester.run('no-empty-attrs', rule, { return attr.underscore(); }), });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, ], invalid: [ { code: 'export default Model.extend({name: attr(), points: attr("number"), dob: attr("date")});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Supply proper attribute type', }], }, { code: 'export default Model.extend({name: attr("string"), points: attr("number"), dob: attr()});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Supply proper attribute type', }], - } - ] + }, + ], }); diff --git a/tests/lib/rules/no-function-prototype-extensions.js b/tests/lib/rules/no-function-prototype-extensions.js index 6348b1528f..d099c48926 100644 --- a/tests/lib/rules/no-function-prototype-extensions.js +++ b/tests/lib/rules/no-function-prototype-extensions.js @@ -1,101 +1,99 @@ -'use strict'; - // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ -var rule = require('../../../lib/rules/no-function-prototype-extensions'); -var RuleTester = require('eslint').RuleTester; +const rule = require('../../../lib/rules/no-function-prototype-extensions'); +const RuleTester = require('eslint').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -var eslintTester = new RuleTester(); +const eslintTester = new RuleTester(); eslintTester.run('no-function-prototype-extensions', rule, { valid: [ { code: 'export default Controller.extend();', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Controller.extend({actions: {}});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Controller.extend({test: function () {}});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Controller.extend({init() {}});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Controller.extend({test: computed("abc", function () {})});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Controller.extend({test: observer("abc", function () {})});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Controller.extend({test: service()});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Controller.extend({actions: {test() {}}});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Controller.extend({actions: {test: function () {}}});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Controller.extend({test: function () {}});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Controller.extend({test: on("init", function () {})});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Controller.extend({test: observer("abc", function () {abc.on();})});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Controller.extend({test: function () {$("body").on("click", abc);}});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Controller.extend({test() {$("body").on("click", abc);}});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Controller.extend({test() {$("body").on("click", abc).on("click", function () {});}});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, ], invalid: [ { code: 'export default Controller.extend({test: function() {}.property("abc")});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Don\'t use Ember\'s function prototype extensions', }], }, { code: 'export default Controller.extend({test: function() {}.observe("abc")});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Don\'t use Ember\'s function prototype extensions', }], }, { code: 'export default Controller.extend({test: function() {}.on("init")});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Don\'t use Ember\'s function prototype extensions', }], - } - ] + }, + ], }); diff --git a/tests/lib/rules/no-observers.js b/tests/lib/rules/no-observers.js index 29f7d9fad3..8926270247 100644 --- a/tests/lib/rules/no-observers.js +++ b/tests/lib/rules/no-observers.js @@ -1,35 +1,35 @@ -'use strict'; + // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ -var rule = require('../../../lib/rules/no-observers'); -var RuleTester = require('eslint').RuleTester; +const rule = require('../../../lib/rules/no-observers'); +const RuleTester = require('eslint').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -var eslintTester = new RuleTester(); +const eslintTester = new RuleTester(); eslintTester.run('no-observers', rule, { valid: [ { code: 'export default Controller.extend();', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Controller.extend({actions: {},});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, - } + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, + }, ], invalid: [ { code: 'Ember.observer("text", function() {});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Don\'t use observers if possible', }], - } - ] + }, + ], }); diff --git a/tests/lib/rules/no-on-calls-in-components.js b/tests/lib/rules/no-on-calls-in-components.js index 46c0a26bdb..11380ed021 100644 --- a/tests/lib/rules/no-on-calls-in-components.js +++ b/tests/lib/rules/no-on-calls-in-components.js @@ -1,90 +1,90 @@ -'use strict'; + // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ -var rule = require('../../../lib/rules/no-on-calls-in-components'); -var RuleTester = require('eslint').RuleTester; +const rule = require('../../../lib/rules/no-on-calls-in-components'); +const RuleTester = require('eslint').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -var eslintTester = new RuleTester(); +const eslintTester = new RuleTester(); eslintTester.run('no-on-calls-in-components', rule, { valid: [ { code: 'export default Component.extend();', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Component.extend({actions: {}});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Component.extend({abc: service()});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Component.extend({abc: inject.service()});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Component.extend({abc: false});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Component.extend({classNames: ["abc", "def"]});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Component.extend({abc: computed(function () {})});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Component.extend({abc: observer("abc", function () {})});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Component.extend({abc: observer("abc", function () {test.on("xyz", def)})});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Component.extend({abc: function () {test.on("xyz", def)}});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Component.extend({abc() {$("body").on("click", def)}});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Component.extend({didInsertElement() {$("body").on("click", def).on("click", function () {})}});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Component.extend({actions: {abc() {test.on("xyz", def)}}});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Component.extend({actions: {abc() {$("body").on("click", def).on("click", function () {})}}});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, ], invalid: [ { code: 'export default Component.extend({test: on("didInsertElement", function () {})});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Don\'t use .on() in components', }], }, { code: 'export default Component.extend({test: Ember.on("didInsertElement", function () {})});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Don\'t use .on() in components', }], }, - ] + ], }); diff --git a/tests/lib/rules/no-side-effects.js b/tests/lib/rules/no-side-effects.js index 93ce7313bd..3430a160e3 100644 --- a/tests/lib/rules/no-side-effects.js +++ b/tests/lib/rules/no-side-effects.js @@ -1,31 +1,31 @@ -'use strict'; + // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ -var rule = require('../../../lib/rules/no-side-effects'); -var RuleTester = require('eslint').RuleTester; +const rule = require('../../../lib/rules/no-side-effects'); +const RuleTester = require('eslint').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -var eslintTester = new RuleTester(); +const eslintTester = new RuleTester(); eslintTester.run('no-side-effects', rule, { valid: [ { code: 'testAmount: alias("test.length")', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, - } + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, + }, ], invalid: [ { code: 'prop: computed("test", function() {this.set("testAmount", test.length); return "";})', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Don\'t introduce side-effects in computed properties', }], - } - ] + }, + ], }); diff --git a/tests/lib/rules/order-in-components.js b/tests/lib/rules/order-in-components.js index abaf0084f2..c734ca285f 100644 --- a/tests/lib/rules/order-in-components.js +++ b/tests/lib/rules/order-in-components.js @@ -1,22 +1,22 @@ -'use strict'; + // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ -var rule = require('../../../lib/rules/order-in-components'); -var RuleTester = require('eslint').RuleTester; +const rule = require('../../../lib/rules/order-in-components'); +const RuleTester = require('eslint').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -var eslintTester = new RuleTester(); +const eslintTester = new RuleTester(); eslintTester.run('order-in-components', rule, { valid: [ { - code: `export default Component.extend();`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + code: 'export default Component.extend();', + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Component.extend({ @@ -29,7 +29,7 @@ eslintTester.run('order-in-components', rule, { actions: {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Component.extend({ @@ -40,7 +40,7 @@ eslintTester.run('order-in-components', rule, { actions: {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Component.extend({ @@ -49,7 +49,7 @@ eslintTester.run('order-in-components', rule, { actions: {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Component.extend(TestMixin, { @@ -58,7 +58,7 @@ eslintTester.run('order-in-components', rule, { actions: {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Component.extend(TestMixin, TestMixin2, { @@ -67,7 +67,7 @@ eslintTester.run('order-in-components', rule, { actions: {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Component.extend({ @@ -80,7 +80,7 @@ eslintTester.run('order-in-components', rule, { levelOfHappiness: computed("attitude", "health", () => { }) });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Component.extend({ @@ -90,7 +90,7 @@ eslintTester.run('order-in-components', rule, { ghi: alias("def") });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Component.extend({ @@ -105,7 +105,7 @@ eslintTester.run('order-in-components', rule, { actions: {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Component.extend({ @@ -120,7 +120,7 @@ eslintTester.run('order-in-components', rule, { customFunction() { } });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Component.extend({ @@ -144,7 +144,7 @@ eslintTester.run('order-in-components', rule, { customFunc() { }});`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Component.extend({ @@ -173,7 +173,7 @@ eslintTester.run('order-in-components', rule, { actions: {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Component.extend({ @@ -185,7 +185,7 @@ eslintTester.run('order-in-components', rule, { tSomeAction: task(function* (url) { }) });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Component.extend({ @@ -199,7 +199,7 @@ eslintTester.run('order-in-components', rule, { tSomeAction: task(function* (url) { }).restartable() });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Component.extend({ @@ -214,7 +214,7 @@ eslintTester.run('order-in-components', rule, { _anotherPrivateFnc() { } });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Component.extend({ @@ -227,7 +227,7 @@ eslintTester.run('order-in-components', rule, { typeOfDate: null, action: K });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Component.extend({ @@ -237,7 +237,7 @@ eslintTester.run('order-in-components', rule, { actions: {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Component.extend({ @@ -247,7 +247,7 @@ eslintTester.run('order-in-components', rule, { actions: {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Component.extend({ @@ -258,7 +258,7 @@ eslintTester.run('order-in-components', rule, { actions: {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Component.extend({ @@ -272,7 +272,7 @@ eslintTester.run('order-in-components', rule, { foobar: Ember.inject.service(), });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, options: [{ order: [ 'property', @@ -295,7 +295,7 @@ eslintTester.run('order-in-components', rule, { foobar: Ember.inject.service(), });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, options: [{ order: [ 'property', @@ -313,7 +313,7 @@ eslintTester.run('order-in-components', rule, { ghi: alias("def") });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, ], invalid: [ @@ -328,7 +328,7 @@ eslintTester.run('order-in-components', rule, { levelOfHappiness: computed("attitude", "health", () => { }) });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The "role" property should be above the actions hash on line 2', line: 4, @@ -351,7 +351,7 @@ eslintTester.run('order-in-components', rule, { actions: {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The "role" property should be above the "vehicle" single-line function on line 2', line: 4, @@ -368,7 +368,7 @@ eslintTester.run('order-in-components', rule, { actions: {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The "vehicle" single-line function should be above the "levelOfHappiness" multi-line function on line 2', line: 5, @@ -388,7 +388,7 @@ eslintTester.run('order-in-components', rule, { actions: {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The "vehicle" single-line function should be above the "levelOfHappiness" multi-line function on line 2', line: 5, @@ -408,7 +408,7 @@ eslintTester.run('order-in-components', rule, { actions: {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The "vehicle" single-line function should be above the "levelOfHappiness" multi-line function on line 2', line: 5, @@ -422,7 +422,7 @@ eslintTester.run('order-in-components', rule, { abc: true, i18n: service() });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The "i18n" service injection should be above the "abc" property on line 2', line: 3, @@ -433,7 +433,7 @@ eslintTester.run('order-in-components', rule, { vehicle: alias("car"), i18n: service() });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The "i18n" service injection should be above the "vehicle" single-line function on line 2', line: 3, @@ -445,7 +445,7 @@ eslintTester.run('order-in-components', rule, { }), vehicle: alias("car") });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The "vehicle" single-line function should be above the "levelOfHappiness" observer on line 2', line: 4, @@ -458,7 +458,7 @@ eslintTester.run('order-in-components', rule, { aaa: computed("attitude", "health", () => { }) });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The "aaa" multi-line function should be above the "levelOfHappiness" observer on line 2', line: 4, @@ -471,7 +471,7 @@ eslintTester.run('order-in-components', rule, { levelOfHappiness: observer("attitude", "health", () => { }) });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The "levelOfHappiness" observer should be above the "init" lifecycle hook on line 2', line: 4, @@ -483,7 +483,7 @@ eslintTester.run('order-in-components', rule, { init() { } });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The "init" lifecycle hook should be above the actions hash on line 2', line: 3, @@ -495,7 +495,7 @@ eslintTester.run('order-in-components', rule, { }, actions: {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The actions hash should be above the "customFunc" method on line 2', line: 4, @@ -507,7 +507,7 @@ eslintTester.run('order-in-components', rule, { }), actions: {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The actions hash should be above the "tAction" method on line 2', line: 4, @@ -526,7 +526,7 @@ eslintTester.run('order-in-components', rule, { actions: {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The "vehicle" single-line function should be above the "levelOfHappiness" multi-line function on line 4', line: 7, @@ -542,11 +542,11 @@ eslintTester.run('order-in-components', rule, { actions: {}, [foo]: 'foo', });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The property should be above the actions hash on line 4', line: 5, }], }, - ] + ], }); diff --git a/tests/lib/rules/order-in-controllers.js b/tests/lib/rules/order-in-controllers.js index b6e9e5c533..71422da5a4 100644 --- a/tests/lib/rules/order-in-controllers.js +++ b/tests/lib/rules/order-in-controllers.js @@ -1,22 +1,22 @@ -'use strict'; + // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ -var rule = require('../../../lib/rules/order-in-controllers'); -var RuleTester = require('eslint').RuleTester; +const rule = require('../../../lib/rules/order-in-controllers'); +const RuleTester = require('eslint').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -var eslintTester = new RuleTester(); +const eslintTester = new RuleTester(); eslintTester.run('order-in-controllers', rule, { valid: [ { - code: `export default Controller.extend();`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + code: 'export default Controller.extend();', + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Controller.extend({ @@ -28,7 +28,7 @@ eslintTester.run('order-in-controllers', rule, { _customAction2: function() {}, tSomeTask: task(function* () {}) });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Controller.extend({ @@ -38,7 +38,7 @@ eslintTester.run('order-in-controllers', rule, { obs: observer("asd", function() {}), actions: {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Controller.extend({ @@ -49,7 +49,7 @@ eslintTester.run('order-in-controllers', rule, { actions: {}, _customAction() {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Controller.extend({ @@ -60,7 +60,7 @@ eslintTester.run('order-in-controllers', rule, { }), _customAction() {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, options: [{ order: [ 'actions', @@ -75,10 +75,10 @@ eslintTester.run('order-in-controllers', rule, { queryParams: [], currentUser: service() });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The "currentUser" service injection should be above the inherited "queryParams" property on line 2', - line: 3 + line: 3, }], }, { @@ -87,10 +87,10 @@ eslintTester.run('order-in-controllers', rule, { customProp: "test", queryParams: [] });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The inherited "queryParams" property should be above the "customProp" property on line 3', - line: 4 + line: 4, }], }, { @@ -99,10 +99,10 @@ eslintTester.run('order-in-controllers', rule, { actions: {}, customProp: "test" });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The "customProp" property should be above the actions hash on line 3', - line: 4 + line: 4, }], }, { @@ -111,10 +111,10 @@ eslintTester.run('order-in-controllers', rule, { _customAction() {}, actions: {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The actions hash should be above the "_customAction" method on line 3', - line: 4 + line: 4, }], }, { @@ -123,10 +123,10 @@ eslintTester.run('order-in-controllers', rule, { queryParams: [], actions: {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The inherited "queryParams" property should be above the "test" property on line 2', - line: 3 + line: 3, }], }, { @@ -136,11 +136,11 @@ eslintTester.run('order-in-controllers', rule, { comp: computed("asd", function() {}), actions: {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The "comp" single-line function should be above the "obs" observer on line 3', - line: 4 + line: 4, }], }, - ] + ], }); diff --git a/tests/lib/rules/order-in-models.js b/tests/lib/rules/order-in-models.js index 1493e55631..36b0f5fede 100644 --- a/tests/lib/rules/order-in-models.js +++ b/tests/lib/rules/order-in-models.js @@ -1,22 +1,22 @@ -'use strict'; + // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ -var rule = require('../../../lib/rules/order-in-models'); -var RuleTester = require('eslint').RuleTester; +const rule = require('../../../lib/rules/order-in-models'); +const RuleTester = require('eslint').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -var eslintTester = new RuleTester(); +const eslintTester = new RuleTester(); eslintTester.run('order-in-models', rule, { valid: [ { - code: `export default Model.extend();`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + code: 'export default Model.extend();', + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Model.extend({ @@ -26,7 +26,7 @@ eslintTester.run('order-in-models', rule, { mood: computed("health", "hunger", function() { }) });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Model.extend({ @@ -34,14 +34,14 @@ eslintTester.run('order-in-models', rule, { mood: computed("health", "hunger", function() { }) });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Model.extend({ mood: computed("health", "hunger", function() { }) });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default DS.Model.extend({ @@ -50,7 +50,7 @@ eslintTester.run('order-in-models', rule, { mood: computed("health", "hunger", function() { }) });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default DS.Model.extend({ @@ -58,28 +58,28 @@ eslintTester.run('order-in-models', rule, { mood: computed("health", "hunger", function() { }) });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default DS.Model.extend({ mood: computed("health", "hunger", function() { }) });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default DS.Model.extend(TestMixin, { mood: computed("health", "hunger", function() { }) });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default DS.Model.extend(TestMixin, TestMixin2, { mood: computed("health", "hunger", function() { }) });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default DS.Model.extend({ @@ -88,7 +88,7 @@ eslintTester.run('order-in-models', rule, { convertA(paramA) { } });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default DS.Model.extend({ @@ -97,7 +97,7 @@ eslintTester.run('order-in-models', rule, { a: attr("string"), b: belongsTo("c", { async: false }), });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, options: [{ order: [ 'method', @@ -113,7 +113,7 @@ eslintTester.run('order-in-models', rule, { mood: computed("health", "hunger", function() { }) });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The "shape" attribute should be above the "behaviors" relationship on line 2', line: 3, @@ -126,7 +126,7 @@ eslintTester.run('order-in-models', rule, { }), behaviors: hasMany("behaviour") });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The "behaviors" relationship should be above the "mood" multi-line function on line 3', line: 5, @@ -138,7 +138,7 @@ eslintTester.run('order-in-models', rule, { }), shape: attr("string") });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The "shape" attribute should be above the "mood" multi-line function on line 2', line: 4, @@ -151,7 +151,7 @@ eslintTester.run('order-in-models', rule, { mood: Ember.computed("health", "hunger", function() { }) });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The "shape" attribute should be above the "behaviors" relationship on line 2', line: 3, @@ -164,7 +164,7 @@ eslintTester.run('order-in-models', rule, { }), behaviors: hasMany("behaviour") });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The "behaviors" relationship should be above the "mood" multi-line function on line 3', line: 5, @@ -176,7 +176,7 @@ eslintTester.run('order-in-models', rule, { }), shape: attr("string") });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The "shape" attribute should be above the "mood" multi-line function on line 2', line: 4, @@ -188,7 +188,7 @@ eslintTester.run('order-in-models', rule, { }), test: computed.alias("qwerty") });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The "test" single-line function should be above the "mood" multi-line function on line 2', line: 4, @@ -200,7 +200,7 @@ eslintTester.run('order-in-models', rule, { }), test: computed.alias("qwerty") });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The "test" single-line function should be above the "mood" multi-line function on line 2', line: 4, @@ -212,11 +212,11 @@ eslintTester.run('order-in-models', rule, { }), test: computed.alias("qwerty") });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The "test" single-line function should be above the "mood" multi-line function on line 2', line: 4, }], - } - ] + }, + ], }); diff --git a/tests/lib/rules/order-in-routes.js b/tests/lib/rules/order-in-routes.js index e5216d348a..a62c5f1d34 100644 --- a/tests/lib/rules/order-in-routes.js +++ b/tests/lib/rules/order-in-routes.js @@ -1,22 +1,22 @@ -'use strict'; + // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ -var rule = require('../../../lib/rules/order-in-routes'); -var RuleTester = require('eslint').RuleTester; +const rule = require('../../../lib/rules/order-in-routes'); +const RuleTester = require('eslint').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -var eslintTester = new RuleTester(); +const eslintTester = new RuleTester(); eslintTester.run('order-in-routes', rule, { valid: [ { - code: `export default Route.extend();`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + code: 'export default Route.extend();', + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Route.extend({ @@ -30,7 +30,7 @@ eslintTester.run('order-in-routes', rule, { _customAction2: function() {}, tSomeTask: task(function* () {}) });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Route.extend({ @@ -40,7 +40,7 @@ eslintTester.run('order-in-routes', rule, { }, _customAction() {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Route.extend({ @@ -48,7 +48,7 @@ eslintTester.run('order-in-routes', rule, { render() {}, init() {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Route.extend({ @@ -56,7 +56,7 @@ eslintTester.run('order-in-routes', rule, { model() {}, actions: {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Route.extend({ @@ -64,7 +64,7 @@ eslintTester.run('order-in-routes', rule, { test: "asd", model() {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: `export default Route.extend({ @@ -72,7 +72,7 @@ eslintTester.run('order-in-routes', rule, { model() {}, currentUser: service(), });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, options: [{ order: [ 'lifecycle-hook', @@ -93,7 +93,7 @@ eslintTester.run('order-in-routes', rule, { actions: {}, _customAction() {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The "currentUser" service injection should be above the inherited "queryParams" property on line 2', line: 3, @@ -108,7 +108,7 @@ eslintTester.run('order-in-routes', rule, { actions: {}, _customAction() {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The inherited "queryParams" property should be above the "customProp" property on line 2', line: 3, @@ -123,7 +123,7 @@ eslintTester.run('order-in-routes', rule, { actions: {}, _customAction() {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The inherited "queryParams" property should be above the "customProp" property on line 2', line: 3, @@ -140,7 +140,7 @@ eslintTester.run('order-in-routes', rule, { _customAction() {}, actions: {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The actions hash should be above the "_customAction" method on line 5', line: 6, @@ -152,7 +152,7 @@ eslintTester.run('order-in-routes', rule, { customProp: "test", actions: {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The "customProp" property should be above the "model" hook on line 2', line: 3, @@ -164,7 +164,7 @@ eslintTester.run('order-in-routes', rule, { mergedProperties: {}, model() {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The inherited "mergedProperties" property should be above the "test" property on line 2', line: 3, @@ -176,11 +176,11 @@ eslintTester.run('order-in-routes', rule, { _test2() {}, model() {} });`, - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'The "model" hook should be above the "_test2" method on line 3', line: 4, }], }, - ] + ], }); diff --git a/tests/lib/rules/query-params-on-top.js b/tests/lib/rules/query-params-on-top.js index 67af52d3ae..014fd84309 100644 --- a/tests/lib/rules/query-params-on-top.js +++ b/tests/lib/rules/query-params-on-top.js @@ -1,91 +1,91 @@ -'use strict'; + // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ -var rule = require('../../../lib/rules/query-params-on-top'); -var RuleTester = require('eslint').RuleTester; +const rule = require('../../../lib/rules/query-params-on-top'); +const RuleTester = require('eslint').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -var eslintTester = new RuleTester(); +const eslintTester = new RuleTester(); eslintTester.run('query-params-on-top', rule, { valid: [ { code: 'export default Controller.extend();', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Controller.extend({queryParams: ["status"], status: []});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Ember.Controller.extend({queryParams: ["status"], status: []});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Controller.extend({queryParams: ["status"], status: [], actions: {}});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Controller.extend({});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Controller.extend({status: [], actions: {}});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Component.extend({status: attr("string"), queryParams: attr("string")});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Controller.extend(TestMixin, {status: [], actions: {}});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, { code: 'export default Controller.extend(TestMixin, TestMixin2, {status: [], actions: {}});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, }, ], invalid: [ { code: 'export default Controller.extend({status: [], queryParams: ["status"]});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Query params should always be on top', }], }, { code: 'export default Ember.Controller.extend({status: [], queryParams: ["status"]});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Query params should always be on top', }], }, { code: 'export default Controller.extend({status: [], queryParams: ["status"], actions: {}});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Query params should always be on top', }], }, { code: 'export default Controller.extend(TestMixin, {status: [], queryParams: ["status"], actions: {}});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Query params should always be on top', }], }, { code: 'export default Controller.extend(TestMixin, TestMixin2, {status: [], queryParams: ["status"], actions: {}});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Query params should always be on top', }], - } - ] + }, + ], }); diff --git a/tests/lib/rules/routes-segments-snake-case.js b/tests/lib/rules/routes-segments-snake-case.js index 9d7cb96232..01544b6501 100644 --- a/tests/lib/rules/routes-segments-snake-case.js +++ b/tests/lib/rules/routes-segments-snake-case.js @@ -1,17 +1,17 @@ -'use strict'; + // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ -var rule = require('../../../lib/rules/routes-segments-snake-case'); -var RuleTester = require('eslint').RuleTester; +const rule = require('../../../lib/rules/routes-segments-snake-case'); +const RuleTester = require('eslint').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -var eslintTester = new RuleTester(); +const eslintTester = new RuleTester(); eslintTester.run('routes-segments-snake-case', rule, { valid: [ 'this.route("tree", { path: ":tree_id"});', @@ -31,38 +31,38 @@ eslintTester.run('routes-segments-snake-case', rule, { invalid: [ { code: 'this.route("tree", { path: ":treeId"});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Use snake case in dynamic segments of routes', }], }, { code: 'this.route("tree", { path: ":tree-id" });', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Use snake case in dynamic segments of routes', }], }, { code: 'this.route("tree", { path: "/test/:treeId"});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Use snake case in dynamic segments of routes', }], }, { code: 'this.route("tree", { path: "/test/treeId/:treeChildId"});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Use snake case in dynamic segments of routes', }], }, { code: 'this.route("tree", { path: "/test/tree-id/:tree-child-id"});', - parserOptions: {ecmaVersion: 6, sourceType: "module"}, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [{ message: 'Use snake case in dynamic segments of routes', }], }, - ] + ], }); diff --git a/tests/lib/rules/use-brace-expansion.js b/tests/lib/rules/use-brace-expansion.js index 4b4689711d..1227952a75 100644 --- a/tests/lib/rules/use-brace-expansion.js +++ b/tests/lib/rules/use-brace-expansion.js @@ -1,24 +1,24 @@ -'use strict'; + // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ -var rule = require('../../../lib/rules/use-brace-expansion'); -var RuleTester = require('eslint').RuleTester; +const rule = require('../../../lib/rules/use-brace-expansion'); +const RuleTester = require('eslint').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -var eslintTester = new RuleTester(); +const eslintTester = new RuleTester(); eslintTester.run('use-brace-expansion', rule, { valid: [ { code: '{ test: computed("a", "b", function() {}) }' }, { code: '{ test: computed(function() {}) }' }, { code: '{ test: computed("a.test", "b.test", function() {}) }' }, { code: '{ test: computed("a.{test,test2}", "b", function() {}) }' }, - { code: "{ test: Ember.computed.filterBy('a', 'b', false) }"}, + { code: "{ test: Ember.computed.filterBy('a', 'b', false) }" }, ], invalid: [ { @@ -32,6 +32,6 @@ eslintTester.run('use-brace-expansion', rule, { errors: [{ message: 'Use brace expansion', }], - } - ] + }, + ], }); diff --git a/tests/lib/rules/use-ember-get-and-set.js b/tests/lib/rules/use-ember-get-and-set.js index 62eed762f3..4b7d34ee2e 100644 --- a/tests/lib/rules/use-ember-get-and-set.js +++ b/tests/lib/rules/use-ember-get-and-set.js @@ -1,17 +1,17 @@ -'use strict'; + // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ -var rule = require('../../../lib/rules/use-ember-get-and-set'); -var RuleTester = require('eslint').RuleTester; +const rule = require('../../../lib/rules/use-ember-get-and-set'); +const RuleTester = require('eslint').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ -var eslintTester = new RuleTester(); +const eslintTester = new RuleTester(); eslintTester.run('use-ember-get-and-set', rule, { valid: [ 'get(this, "test")', @@ -110,5 +110,5 @@ eslintTester.run('use-ember-get-and-set', rule, { message: 'Use get/set', }], }, - ] + ], }); diff --git a/tests/lib/utils/ember-test.js b/tests/lib/utils/ember-test.js index b6a0ceaf70..9ec6e35c43 100644 --- a/tests/lib/utils/ember-test.js +++ b/tests/lib/utils/ember-test.js @@ -1,4 +1,4 @@ -'use strict'; + const assert = require('chai').assert; const babelEslint = require('babel-eslint'); @@ -12,167 +12,167 @@ function getProperty(code) { return parse(code).right.properties[0]; } -describe('isModule', function() { +describe('isModule', () => { let node; - it('should check if it\'s a proper module', function() { - node = parse(`Ember.test()`); + it('should check if it\'s a proper module', () => { + node = parse('Ember.test()'); assert.ok(emberUtils.isModule(node, 'test')); - node = parse(`Ember.Component()`); + node = parse('Ember.Component()'); assert.ok(emberUtils.isModule(node, 'Component')); - node = parse(`DS.test()`); + node = parse('DS.test()'); assert.ok(emberUtils.isModule(node, 'test', 'DS')); - node = parse(`DS.Model()`); + node = parse('DS.Model()'); assert.ok(emberUtils.isModule(node, 'Model', 'DS')); }); }); -describe('isDSModel', function() { - const node = parse(`DS.Model()`); +describe('isDSModel', () => { + const node = parse('DS.Model()'); - it('should check if it\'s a DS Model', function() { + it('should check if it\'s a DS Model', () => { assert.ok(emberUtils.isDSModel(node)); }); }); -describe('isEmberComponent', function() { - const node = parse(`Ember.Component()`); +describe('isEmberComponent', () => { + const node = parse('Ember.Component()'); - it('should check if it\'s an Ember Component', function() { + it('should check if it\'s an Ember Component', () => { assert.ok(emberUtils.isEmberComponent(node)); }); }); -describe('isEmberController', function() { - const node = parse(`Ember.Controller()`); +describe('isEmberController', () => { + const node = parse('Ember.Controller()'); - it('should check if it\'s an Ember Controller', function() { + it('should check if it\'s an Ember Controller', () => { assert.ok(emberUtils.isEmberController(node)); }); }); -describe('isEmberRoute', function() { - const node = parse(`Ember.Route()`); +describe('isEmberRoute', () => { + const node = parse('Ember.Route()'); - it('should check if it\'s an Ember Route', function() { + it('should check if it\'s an Ember Route', () => { assert.ok(emberUtils.isEmberRoute(node)); }); }); -describe('isInjectedServiceProp', function() { +describe('isInjectedServiceProp', () => { let node; - it('should check if it\'s an injected service prop', function() { - node = parse(`service()`); + it('should check if it\'s an injected service prop', () => { + node = parse('service()'); assert.ok(emberUtils.isInjectedServiceProp(node)); - node = parse(`Ember.service()`); + node = parse('Ember.service()'); assert.ok(emberUtils.isInjectedServiceProp(node)); }); }); -describe('isComputedProp', function() { +describe('isComputedProp', () => { let node; - it('should check if it\'s an computed prop', function() { - node = parse(`computed()`); + it('should check if it\'s an computed prop', () => { + node = parse('computed()'); assert.ok(emberUtils.isComputedProp(node)); - node = parse(`Ember.computed()`); + node = parse('Ember.computed()'); assert.ok(emberUtils.isComputedProp(node)); }); }); -describe('isObserverProp', function() { +describe('isObserverProp', () => { let node; - it('should check if it\'s an observer prop', function() { - node = parse(`observer()`); + it('should check if it\'s an observer prop', () => { + node = parse('observer()'); assert.ok(emberUtils.isObserverProp(node)); - node = parse(`Ember.observer()`); + node = parse('Ember.observer()'); assert.ok(emberUtils.isObserverProp(node)); }); }); -describe('isArrayProp', function() { +describe('isArrayProp', () => { let node; - it('should be an array', function() { - node = getProperty(`test = { test: new Ember.A() }`); + it('should be an array', () => { + node = getProperty('test = { test: new Ember.A() }'); assert.ok(emberUtils.isArrayProp(node)); - node = getProperty(`test = { test: new A() }`); + node = getProperty('test = { test: new A() }'); assert.ok(emberUtils.isArrayProp(node)); - node = getProperty(`test = { test: [] }`); + node = getProperty('test = { test: [] }'); assert.ok(emberUtils.isArrayProp(node)); }); }); -describe('isObjectProp', function() { +describe('isObjectProp', () => { let node; - it('should be an object', function() { - node = getProperty(`test = { test: new Ember.Object() }`); + it('should be an object', () => { + node = getProperty('test = { test: new Ember.Object() }'); assert.ok(emberUtils.isObjectProp(node)); - node = getProperty(`test = { test: new Object() }`); + node = getProperty('test = { test: new Object() }'); assert.ok(emberUtils.isObjectProp(node)); - node = getProperty(`test = { test: {} }`); + node = getProperty('test = { test: {} }'); assert.ok(emberUtils.isObjectProp(node)); }); }); -describe('isCustomProp', function() { +describe('isCustomProp', () => { let node; - it('should be custom property', function() { - node = getProperty(`test = { test: 'someLiteral' }`); + it('should be custom property', () => { + node = getProperty('test = { test: \'someLiteral\' }'); assert.ok(emberUtils.isCustomProp(node)); - node = getProperty(`test = { test: someIdentifier }`); + node = getProperty('test = { test: someIdentifier }'); assert.ok(emberUtils.isCustomProp(node)); - node = getProperty(`test = { test: [] }`); + node = getProperty('test = { test: [] }'); assert.ok(emberUtils.isCustomProp(node)); - node = getProperty(`test = { test: {} }`); + node = getProperty('test = { test: {} }'); assert.ok(emberUtils.isCustomProp(node)); - node = getProperty(`test = { test: foo ? 'bar': 'baz' }`); + node = getProperty('test = { test: foo ? \'bar\': \'baz\' }'); assert.ok(emberUtils.isCustomProp(node)); - node = getProperty(`test = { actions: {} }`); + node = getProperty('test = { actions: {} }'); assert.notOk(emberUtils.isCustomProp(node)); }); }); -describe('isModelProp', function() { +describe('isModelProp', () => { let node; - it('should be a model prop', function() { - node = getProperty(`test = { model() {} }`); + it('should be a model prop', () => { + node = getProperty('test = { model() {} }'); assert.ok(emberUtils.isModelProp(node)); - node = getProperty(`test = { model: function() {} }`); + node = getProperty('test = { model: function() {} }'); assert.ok(emberUtils.isModelProp(node)); }); }); -describe('isActionsProp', function() { - const node = getProperty(`test = { actions: {} }`); +describe('isActionsProp', () => { + const node = getProperty('test = { actions: {} }'); - it('should be actions prop', function() { + it('should be actions prop', () => { assert.ok(emberUtils.isActionsProp(node)); }); }); -describe('getModuleProperties', function() { +describe('getModuleProperties', () => { const module = parse(` Ember.Component.extend(SomeMixin, { asd: 'qwe', @@ -181,38 +181,38 @@ describe('getModuleProperties', function() { }) `); - it('returns module\'s properties', function() { - const properties = emberUtils.getModuleProperties(module); - assert.equal(properties.length, 3); - }); + it('returns module\'s properties', () => { + const properties = emberUtils.getModuleProperties(module); + assert.equal(properties.length, 3); + }); }); -describe('isSingleLineFn', function() { +describe('isSingleLineFn', () => { const property = getProperty(`test = { test: computed.or('asd', 'qwe') }`); - it('should check if given function has one line', function() { + it('should check if given function has one line', () => { assert.ok(emberUtils.isSingleLineFn(property)); }); }); -describe('isMultiLineFn', function() { +describe('isMultiLineFn', () => { const property = getProperty(`test = { test: computed('asd', function() { return get(this, 'asd') + 'test'; }) }`); - it('should check if given function has more than one line', function() { + it('should check if given function has more than one line', () => { assert.ok(emberUtils.isMultiLineFn(property)); }); }); -describe('isFunctionExpression', function() { +describe('isFunctionExpression', () => { let property; - it('should check if given property is a function expression', function() { + it('should check if given property is a function expression', () => { property = getProperty(`test = { test: someFn(function() {}) }`); @@ -235,10 +235,10 @@ describe('isFunctionExpression', function() { }); }); -describe('isRelation', function() { +describe('isRelation', () => { let property; - it('should detect hasMany relation', function() { + it('should detect hasMany relation', () => { property = getProperty(`test = { test: hasMany() }`); @@ -250,7 +250,7 @@ describe('isRelation', function() { assert.ok(emberUtils.isRelation(property)); }); - it('should detect belongsTo relation', function() { + it('should detect belongsTo relation', () => { property = getProperty(`test = { test: belongsTo() }`); diff --git a/tests/lib/utils/utils-test.js b/tests/lib/utils/utils-test.js index eead6946c6..c63510c577 100644 --- a/tests/lib/utils/utils-test.js +++ b/tests/lib/utils/utils-test.js @@ -6,12 +6,12 @@ function parse(code) { return babelEslint.parse(code).body[0].expression; } -describe('findNodes', function() { +describe('findNodes', () => { const node = parse(`test = [ {test: "a"}, b, "c", [d, e], "f", "g", h, {test: "i"}, function() {}, [], new Date() ]`).right.elements; - it('should find nodes based on their name', function() { + it('should find nodes based on their name', () => { const literals = utils.findNodes(node, 'Literal'); const identifiers = utils.findNodes(node, 'Identifier'); const objects = utils.findNodes(node, 'ObjectExpression'); @@ -28,119 +28,119 @@ describe('findNodes', function() { }); }); -describe('isIdentifier', function() { +describe('isIdentifier', () => { const node = parse('test'); - it('should check if node is identifier', function() { + it('should check if node is identifier', () => { assert.ok(utils.isIdentifier(node)); }); }); -describe('isLiteral', function() { +describe('isLiteral', () => { const node = parse('"test"'); - it('should check if node is identifier', function() { + it('should check if node is identifier', () => { assert.ok(utils.isLiteral(node)); }); }); -describe('isMemberExpression', function() { +describe('isMemberExpression', () => { const node = parse('test.value'); - it('should check if node is member expression', function() { + it('should check if node is member expression', () => { assert.ok(utils.isMemberExpression(node)); }); }); -describe('isCallExpression', function() { +describe('isCallExpression', () => { const node = parse('test()'); - it('should check if node is call expression', function() { + it('should check if node is call expression', () => { assert.ok(utils.isCallExpression(node)); }); }); -describe('isObjectExpression', function() { +describe('isObjectExpression', () => { const node = parse('test = {}').right; - it('should check if node is identifier', function() { + it('should check if node is identifier', () => { assert.ok(utils.isObjectExpression(node)); }); }); -describe('isArrayExpression', function() { +describe('isArrayExpression', () => { const node = parse('test = []').right; - it('should check if node is array expression', function() { + it('should check if node is array expression', () => { assert.ok(utils.isArrayExpression(node)); }); }); -describe('isFunctionExpression', function() { +describe('isFunctionExpression', () => { const node = parse('test = function () {}').right; - it('should check if node is function expression', function() { + it('should check if node is function expression', () => { assert.ok(utils.isFunctionExpression(node)); }); }); -describe('isArrowFunctionExpression', function() { +describe('isArrowFunctionExpression', () => { const node = parse('test = () => {}').right; - it('should check if node is arrow function expression', function() { + it('should check if node is arrow function expression', () => { assert.ok(utils.isArrowFunctionExpression(node)); }); }); -describe('isNewExpression', function() { +describe('isNewExpression', () => { const node = parse('new Date()'); - it('should check if node is new expression', function() { + it('should check if node is new expression', () => { assert.ok(utils.isNewExpression(node)); }); }); -describe('isCallWithFunctionExpression', function() { +describe('isCallWithFunctionExpression', () => { const node = parse('mysteriousFnc(function(){})'); - it('should check if node is call with function expression', function() { + it('should check if node is call with function expression', () => { assert.ok(utils.isCallWithFunctionExpression(node)); }); }); -describe('isThisExpression', function() { +describe('isThisExpression', () => { const node = parse('this'); - it('should check if node is "this" expression', function() { + it('should check if node is "this" expression', () => { assert.ok(utils.isThisExpression(node)); }); }); -describe('isConditionalExpression', function() { - const node = parse(`test = true ? 'asd' : 'qwe'`).right; +describe('isConditionalExpression', () => { + const node = parse('test = true ? \'asd\' : \'qwe\'').right; - it('should check if node is a conditional expression', function() { + it('should check if node is a conditional expression', () => { assert.ok(utils.isConditionalExpression(node)); }); }); -describe('getSize', function() { +describe('getSize', () => { const node = parse('some = {\nfew: "line",\nheight: "statement",\nthat: "should",\nhave: "6 lines",\n};'); - it('should check size of given expression', function() { + it('should check size of given expression', () => { assert.equal(utils.getSize(node), 6); }); }); -describe('parseCallee', function() { - it('should parse calleeExpression', function() { +describe('parseCallee', () => { + it('should parse calleeExpression', () => { const node = parse('Ember.computed.or("asd", "qwe")'); const parsedCallee = utils.parseCallee(node); assert.equal(parsedCallee.length, 3, 'it has 3 elements in array'); assert.deepEqual(parsedCallee, ['Ember', 'computed', 'or']); }); - it('should parse newExpression', function() { + it('should parse newExpression', () => { const node = parse('new Ember.A()'); const parsedCallee = utils.parseCallee(node); assert.equal(parsedCallee.length, 2, 'it has 2 elements in array'); @@ -148,11 +148,11 @@ describe('parseCallee', function() { }); }); -describe('parseArgs', function() { - it('should parse arguments', function() { - const node = parse('Ember.computed("asd", "qwe", "zxc", function() {})'); - const parsedArgs = utils.parseArgs(node); - assert.equal(parsedArgs.length, 3); - assert.deepEqual(parsedArgs, ['asd', 'qwe', 'zxc']); +describe('parseArgs', () => { + it('should parse arguments', () => { + const node = parse('Ember.computed("asd", "qwe", "zxc", function() {})'); + const parsedArgs = utils.parseArgs(node); + assert.equal(parsedArgs.length, 3); + assert.deepEqual(parsedArgs, ['asd', 'qwe', 'zxc']); }); }); diff --git a/tests/plugin-exports.js b/tests/plugin-exports.js index c47b682837..aca143c006 100644 --- a/tests/plugin-exports.js +++ b/tests/plugin-exports.js @@ -1,16 +1,15 @@ -var assert = require('assert'); +const assert = require('assert'); +const plugin = require('../index.js'); +const ember = require('../lib/utils/ember'); +const utils = require('../lib/utils/utils'); -describe('plugin exports library functions', function() { - it('should export functions from the ember', function() { - var plugin = require('../index.js'); - var ember = require('../lib/utils/ember'); +describe('plugin exports library functions', () => { + it('should export functions from the ember', () => { assert.ok(plugin.utils.ember); assert.equal(plugin.utils.ember, ember); }); - it('should export functions from utils', function() { - var plugin = require('../index.js'); - var utils = require('../lib/utils/utils'); + it('should export functions from utils', () => { assert.ok(plugin.utils.utils); assert.equal(plugin.utils.utils, utils); }); From 4e74ad172f5c10f346ca78e5d2d34326ea40be3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Sajn=C3=B3g?= Date: Wed, 15 Feb 2017 23:36:34 +0100 Subject: [PATCH 3/6] Remove empty lines --- lib/rules/alias-model-in-controller.js | 2 -- lib/rules/avoid-leaking-state-in-components.js | 2 -- lib/rules/closure-actions.js | 2 -- lib/rules/local-modules.js | 2 -- lib/rules/no-observers.js | 2 -- lib/rules/no-on-calls-in-components.js | 2 -- lib/rules/order-in-components.js | 2 -- lib/rules/order-in-controllers.js | 2 -- lib/rules/order-in-models.js | 2 -- lib/rules/order-in-routes.js | 2 -- lib/rules/query-params-on-top.js | 2 -- lib/rules/use-ember-get-and-set.js | 2 -- tests/lib/rules/alias-model-in-controller.js | 2 -- tests/lib/rules/avoid-leaking-state-in-components.js | 2 -- tests/lib/rules/closure-actions.js | 2 -- tests/lib/rules/jquery-ember-run.js | 2 -- tests/lib/rules/local-modules.js | 2 -- tests/lib/rules/named-functions-in-promises.js | 2 -- tests/lib/rules/no-empty-attrs.js | 2 -- tests/lib/rules/no-observers.js | 2 -- tests/lib/rules/no-on-calls-in-components.js | 2 -- tests/lib/rules/no-side-effects.js | 2 -- tests/lib/rules/order-in-components.js | 2 -- tests/lib/rules/order-in-controllers.js | 2 -- tests/lib/rules/order-in-models.js | 2 -- tests/lib/rules/order-in-routes.js | 2 -- tests/lib/rules/query-params-on-top.js | 2 -- tests/lib/rules/routes-segments-snake-case.js | 2 -- tests/lib/rules/use-brace-expansion.js | 2 -- tests/lib/rules/use-ember-get-and-set.js | 2 -- tests/lib/utils/ember-test.js | 2 -- 31 files changed, 62 deletions(-) diff --git a/lib/rules/alias-model-in-controller.js b/lib/rules/alias-model-in-controller.js index 53a38d2f56..dbac7ab17f 100644 --- a/lib/rules/alias-model-in-controller.js +++ b/lib/rules/alias-model-in-controller.js @@ -1,5 +1,3 @@ - - const utils = require('../utils/utils'); const ember = require('../utils/ember'); diff --git a/lib/rules/avoid-leaking-state-in-components.js b/lib/rules/avoid-leaking-state-in-components.js index 095bba7fea..d0dbca68eb 100644 --- a/lib/rules/avoid-leaking-state-in-components.js +++ b/lib/rules/avoid-leaking-state-in-components.js @@ -1,5 +1,3 @@ - - const ember = require('../utils/ember'); //------------------------------------------------------------------------------ diff --git a/lib/rules/closure-actions.js b/lib/rules/closure-actions.js index b6a156a585..9469a839d8 100644 --- a/lib/rules/closure-actions.js +++ b/lib/rules/closure-actions.js @@ -1,5 +1,3 @@ - - const utils = require('../utils/utils'); //------------------------------------------------------------------------------ diff --git a/lib/rules/local-modules.js b/lib/rules/local-modules.js index 70f8ea6e74..337aed18b5 100644 --- a/lib/rules/local-modules.js +++ b/lib/rules/local-modules.js @@ -1,5 +1,3 @@ - - const utils = require('../utils/utils'); //------------------------------------------------------------------------------ diff --git a/lib/rules/no-observers.js b/lib/rules/no-observers.js index 795c37d3cd..bbcdcb72e5 100644 --- a/lib/rules/no-observers.js +++ b/lib/rules/no-observers.js @@ -1,5 +1,3 @@ - - const ember = require('../utils/ember'); //------------------------------------------------------------------------------ diff --git a/lib/rules/no-on-calls-in-components.js b/lib/rules/no-on-calls-in-components.js index 730a6f6c56..e62f3754dc 100644 --- a/lib/rules/no-on-calls-in-components.js +++ b/lib/rules/no-on-calls-in-components.js @@ -1,5 +1,3 @@ - - const ember = require('../utils/ember'); const utils = require('../utils/utils'); diff --git a/lib/rules/order-in-components.js b/lib/rules/order-in-components.js index a238483725..e631a497e7 100644 --- a/lib/rules/order-in-components.js +++ b/lib/rules/order-in-components.js @@ -1,5 +1,3 @@ - - const ember = require('../utils/ember'); const propOrder = require('../utils/property-order'); diff --git a/lib/rules/order-in-controllers.js b/lib/rules/order-in-controllers.js index ded9c13c9e..e8560fb03c 100644 --- a/lib/rules/order-in-controllers.js +++ b/lib/rules/order-in-controllers.js @@ -1,5 +1,3 @@ - - const ember = require('../utils/ember'); const propOrder = require('../utils/property-order'); diff --git a/lib/rules/order-in-models.js b/lib/rules/order-in-models.js index 368421a0a1..b342006802 100644 --- a/lib/rules/order-in-models.js +++ b/lib/rules/order-in-models.js @@ -1,5 +1,3 @@ - - const ember = require('../utils/ember'); const propOrder = require('../utils/property-order'); diff --git a/lib/rules/order-in-routes.js b/lib/rules/order-in-routes.js index 1fcbd8c51a..6f3dcec801 100644 --- a/lib/rules/order-in-routes.js +++ b/lib/rules/order-in-routes.js @@ -1,5 +1,3 @@ - - const ember = require('../utils/ember'); const propOrder = require('../utils/property-order'); diff --git a/lib/rules/query-params-on-top.js b/lib/rules/query-params-on-top.js index f41c3fd29a..035193c263 100644 --- a/lib/rules/query-params-on-top.js +++ b/lib/rules/query-params-on-top.js @@ -1,5 +1,3 @@ - - const ember = require('../utils/ember'); //------------------------------------------------------------------------------ diff --git a/lib/rules/use-ember-get-and-set.js b/lib/rules/use-ember-get-and-set.js index b9d27158e8..db34a51689 100644 --- a/lib/rules/use-ember-get-and-set.js +++ b/lib/rules/use-ember-get-and-set.js @@ -1,5 +1,3 @@ - - const utils = require('../utils/utils'); //------------------------------------------------------------------------------ diff --git a/tests/lib/rules/alias-model-in-controller.js b/tests/lib/rules/alias-model-in-controller.js index 5cea39a1e4..f8aad65669 100644 --- a/tests/lib/rules/alias-model-in-controller.js +++ b/tests/lib/rules/alias-model-in-controller.js @@ -1,5 +1,3 @@ - - // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ diff --git a/tests/lib/rules/avoid-leaking-state-in-components.js b/tests/lib/rules/avoid-leaking-state-in-components.js index 4e8386519b..2793f39773 100644 --- a/tests/lib/rules/avoid-leaking-state-in-components.js +++ b/tests/lib/rules/avoid-leaking-state-in-components.js @@ -1,5 +1,3 @@ - - // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ diff --git a/tests/lib/rules/closure-actions.js b/tests/lib/rules/closure-actions.js index fb0a230218..e5b1b28432 100644 --- a/tests/lib/rules/closure-actions.js +++ b/tests/lib/rules/closure-actions.js @@ -1,5 +1,3 @@ - - // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ diff --git a/tests/lib/rules/jquery-ember-run.js b/tests/lib/rules/jquery-ember-run.js index aeb0e6686d..09a5e85e05 100644 --- a/tests/lib/rules/jquery-ember-run.js +++ b/tests/lib/rules/jquery-ember-run.js @@ -1,5 +1,3 @@ - - // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ diff --git a/tests/lib/rules/local-modules.js b/tests/lib/rules/local-modules.js index 7b9c4e5721..fe36a5d7e6 100644 --- a/tests/lib/rules/local-modules.js +++ b/tests/lib/rules/local-modules.js @@ -1,5 +1,3 @@ - - // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ diff --git a/tests/lib/rules/named-functions-in-promises.js b/tests/lib/rules/named-functions-in-promises.js index 86fb91cf4b..35846c0f1b 100644 --- a/tests/lib/rules/named-functions-in-promises.js +++ b/tests/lib/rules/named-functions-in-promises.js @@ -1,5 +1,3 @@ - - // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ diff --git a/tests/lib/rules/no-empty-attrs.js b/tests/lib/rules/no-empty-attrs.js index bf464dce1f..3fc6f7ef70 100644 --- a/tests/lib/rules/no-empty-attrs.js +++ b/tests/lib/rules/no-empty-attrs.js @@ -1,5 +1,3 @@ - - // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ diff --git a/tests/lib/rules/no-observers.js b/tests/lib/rules/no-observers.js index 8926270247..913963a2f0 100644 --- a/tests/lib/rules/no-observers.js +++ b/tests/lib/rules/no-observers.js @@ -1,5 +1,3 @@ - - // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ diff --git a/tests/lib/rules/no-on-calls-in-components.js b/tests/lib/rules/no-on-calls-in-components.js index 11380ed021..d3741e1db3 100644 --- a/tests/lib/rules/no-on-calls-in-components.js +++ b/tests/lib/rules/no-on-calls-in-components.js @@ -1,5 +1,3 @@ - - // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ diff --git a/tests/lib/rules/no-side-effects.js b/tests/lib/rules/no-side-effects.js index 3430a160e3..2e23d1020f 100644 --- a/tests/lib/rules/no-side-effects.js +++ b/tests/lib/rules/no-side-effects.js @@ -1,5 +1,3 @@ - - // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ diff --git a/tests/lib/rules/order-in-components.js b/tests/lib/rules/order-in-components.js index c734ca285f..d6334fbbcd 100644 --- a/tests/lib/rules/order-in-components.js +++ b/tests/lib/rules/order-in-components.js @@ -1,5 +1,3 @@ - - // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ diff --git a/tests/lib/rules/order-in-controllers.js b/tests/lib/rules/order-in-controllers.js index 71422da5a4..4e67a656a8 100644 --- a/tests/lib/rules/order-in-controllers.js +++ b/tests/lib/rules/order-in-controllers.js @@ -1,5 +1,3 @@ - - // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ diff --git a/tests/lib/rules/order-in-models.js b/tests/lib/rules/order-in-models.js index 36b0f5fede..445288b4fa 100644 --- a/tests/lib/rules/order-in-models.js +++ b/tests/lib/rules/order-in-models.js @@ -1,5 +1,3 @@ - - // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ diff --git a/tests/lib/rules/order-in-routes.js b/tests/lib/rules/order-in-routes.js index a62c5f1d34..4f9ae8a8ca 100644 --- a/tests/lib/rules/order-in-routes.js +++ b/tests/lib/rules/order-in-routes.js @@ -1,5 +1,3 @@ - - // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ diff --git a/tests/lib/rules/query-params-on-top.js b/tests/lib/rules/query-params-on-top.js index 014fd84309..478ef3f8c2 100644 --- a/tests/lib/rules/query-params-on-top.js +++ b/tests/lib/rules/query-params-on-top.js @@ -1,5 +1,3 @@ - - // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ diff --git a/tests/lib/rules/routes-segments-snake-case.js b/tests/lib/rules/routes-segments-snake-case.js index 01544b6501..803d3902ef 100644 --- a/tests/lib/rules/routes-segments-snake-case.js +++ b/tests/lib/rules/routes-segments-snake-case.js @@ -1,5 +1,3 @@ - - // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ diff --git a/tests/lib/rules/use-brace-expansion.js b/tests/lib/rules/use-brace-expansion.js index 1227952a75..2d43267efa 100644 --- a/tests/lib/rules/use-brace-expansion.js +++ b/tests/lib/rules/use-brace-expansion.js @@ -1,5 +1,3 @@ - - // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ diff --git a/tests/lib/rules/use-ember-get-and-set.js b/tests/lib/rules/use-ember-get-and-set.js index 4b7d34ee2e..c9862c780b 100644 --- a/tests/lib/rules/use-ember-get-and-set.js +++ b/tests/lib/rules/use-ember-get-and-set.js @@ -1,5 +1,3 @@ - - // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ diff --git a/tests/lib/utils/ember-test.js b/tests/lib/utils/ember-test.js index 9ec6e35c43..0d0467aeea 100644 --- a/tests/lib/utils/ember-test.js +++ b/tests/lib/utils/ember-test.js @@ -1,5 +1,3 @@ - - const assert = require('chai').assert; const babelEslint = require('babel-eslint'); const emberUtils = require('../../../lib/utils/ember'); From d68250d6fd2076a6c22fa7c67dac40b01a26fc45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Sajn=C3=B3g?= Date: Wed, 15 Feb 2017 23:47:14 +0100 Subject: [PATCH 4/6] Add linting to npm scripts and test task --- package.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 862e0a71eb..dd46906c94 100644 --- a/package.json +++ b/package.json @@ -8,9 +8,10 @@ "test": "test" }, "scripts": { - "start": "mocha tests --recursive --reporter nyan --watch", - "test": "mocha tests --recursive --reporter nyan", - "test:ci": "mocha tests --recursive" + "lint": "eslint .", + "start": "npm run test -- --watch", + "test": "npm run test:ci -- --reporter nyan", + "test:ci": "npm run lint && mocha tests --recursive" }, "repository": { "type": "git", From b507093313de7d83b5e543a0c947aba76a14efe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Sajn=C3=B3g?= Date: Thu, 16 Feb 2017 00:01:25 +0100 Subject: [PATCH 5/6] Use strict --- .eslintrc.js | 1 + index.js | 4 +++- lib/rules/alias-model-in-controller.js | 2 ++ lib/rules/avoid-leaking-state-in-components.js | 2 ++ lib/rules/closure-actions.js | 2 ++ lib/rules/jquery-ember-run.js | 4 +++- lib/rules/local-modules.js | 2 ++ lib/rules/named-functions-in-promises.js | 2 ++ lib/rules/no-empty-attrs.js | 2 ++ lib/rules/no-function-prototype-extensions.js | 2 ++ lib/rules/no-observers.js | 2 ++ lib/rules/no-on-calls-in-components.js | 2 ++ lib/rules/no-side-effects.js | 2 ++ lib/rules/order-in-components.js | 2 ++ lib/rules/order-in-controllers.js | 2 ++ lib/rules/order-in-models.js | 2 ++ lib/rules/order-in-routes.js | 2 ++ lib/rules/query-params-on-top.js | 2 ++ lib/rules/routes-segments-snake-case.js | 2 ++ lib/rules/use-brace-expansion.js | 2 ++ lib/rules/use-ember-get-and-set.js | 2 ++ lib/utils/ember.js | 2 ++ lib/utils/property-order.js | 2 ++ lib/utils/utils.js | 2 ++ tests/lib/utils/ember-test.js | 2 ++ tests/lib/utils/utils-test.js | 2 ++ tests/plugin-exports.js | 2 ++ 27 files changed, 55 insertions(+), 2 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 603ffde4b1..e3bcb0e579 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -15,5 +15,6 @@ module.exports = { 'func-names': 0, 'no-use-before-define': 0, 'no-plusplus': 0, + 'strict': 0, }, } diff --git a/index.js b/index.js index abcfc6999f..c8800ffc6a 100644 --- a/index.js +++ b/index.js @@ -1,4 +1,6 @@ -const { resolve } = require('path'); +'use strict'; + +const resolve = require('path').resolve; const requireIndex = require('requireindex'); const rules = requireIndex(resolve(__dirname, 'lib/rules')); diff --git a/lib/rules/alias-model-in-controller.js b/lib/rules/alias-model-in-controller.js index dbac7ab17f..06593fd1c0 100644 --- a/lib/rules/alias-model-in-controller.js +++ b/lib/rules/alias-model-in-controller.js @@ -1,3 +1,5 @@ +'use strict'; + const utils = require('../utils/utils'); const ember = require('../utils/ember'); diff --git a/lib/rules/avoid-leaking-state-in-components.js b/lib/rules/avoid-leaking-state-in-components.js index d0dbca68eb..e28c57b403 100644 --- a/lib/rules/avoid-leaking-state-in-components.js +++ b/lib/rules/avoid-leaking-state-in-components.js @@ -1,3 +1,5 @@ +'use strict'; + const ember = require('../utils/ember'); //------------------------------------------------------------------------------ diff --git a/lib/rules/closure-actions.js b/lib/rules/closure-actions.js index 9469a839d8..25b8c12950 100644 --- a/lib/rules/closure-actions.js +++ b/lib/rules/closure-actions.js @@ -1,3 +1,5 @@ +'use strict'; + const utils = require('../utils/utils'); //------------------------------------------------------------------------------ diff --git a/lib/rules/jquery-ember-run.js b/lib/rules/jquery-ember-run.js index 63bcce6ceb..b96732889a 100644 --- a/lib/rules/jquery-ember-run.js +++ b/lib/rules/jquery-ember-run.js @@ -1,3 +1,5 @@ +'use strict'; + const utils = require('../utils/utils'); const ember = require('../utils/ember'); @@ -33,7 +35,7 @@ module.exports = function (context) { const fnExpressions = utils.findNodes(fnBody, 'ExpressionStatement'); fnExpressions.forEach((fnExpression) => { - const { expression } = fnExpression; + const expression = fnExpression.expression; if ( utils.isCallExpression(expression) && diff --git a/lib/rules/local-modules.js b/lib/rules/local-modules.js index 337aed18b5..16eb57bb32 100644 --- a/lib/rules/local-modules.js +++ b/lib/rules/local-modules.js @@ -1,3 +1,5 @@ +'use strict'; + const utils = require('../utils/utils'); //------------------------------------------------------------------------------ diff --git a/lib/rules/named-functions-in-promises.js b/lib/rules/named-functions-in-promises.js index fd458cac62..0859c93854 100644 --- a/lib/rules/named-functions-in-promises.js +++ b/lib/rules/named-functions-in-promises.js @@ -1,3 +1,5 @@ +'use strict'; + const utils = require('../utils/utils'); //------------------------------------------------------------------------------ diff --git a/lib/rules/no-empty-attrs.js b/lib/rules/no-empty-attrs.js index 16080f130c..103b75c554 100644 --- a/lib/rules/no-empty-attrs.js +++ b/lib/rules/no-empty-attrs.js @@ -1,3 +1,5 @@ +'use strict'; + const ember = require('../utils/ember'); //------------------------------------------------------------------------------ diff --git a/lib/rules/no-function-prototype-extensions.js b/lib/rules/no-function-prototype-extensions.js index 6f4a876a1f..97f50b674d 100644 --- a/lib/rules/no-function-prototype-extensions.js +++ b/lib/rules/no-function-prototype-extensions.js @@ -1,3 +1,5 @@ +'use strict'; + const utils = require('../utils/utils'); //---------------------------------------------------------------------------------------------- diff --git a/lib/rules/no-observers.js b/lib/rules/no-observers.js index bbcdcb72e5..5f9a57e1f4 100644 --- a/lib/rules/no-observers.js +++ b/lib/rules/no-observers.js @@ -1,3 +1,5 @@ +'use strict'; + const ember = require('../utils/ember'); //------------------------------------------------------------------------------ diff --git a/lib/rules/no-on-calls-in-components.js b/lib/rules/no-on-calls-in-components.js index e62f3754dc..807338f705 100644 --- a/lib/rules/no-on-calls-in-components.js +++ b/lib/rules/no-on-calls-in-components.js @@ -1,3 +1,5 @@ +'use strict'; + const ember = require('../utils/ember'); const utils = require('../utils/utils'); diff --git a/lib/rules/no-side-effects.js b/lib/rules/no-side-effects.js index d5c778bb5d..e75eb2b890 100644 --- a/lib/rules/no-side-effects.js +++ b/lib/rules/no-side-effects.js @@ -1,3 +1,5 @@ +'use strict'; + const utils = require('../utils/utils'); //------------------------------------------------------------------------------ diff --git a/lib/rules/order-in-components.js b/lib/rules/order-in-components.js index e631a497e7..8f59729e72 100644 --- a/lib/rules/order-in-components.js +++ b/lib/rules/order-in-components.js @@ -1,3 +1,5 @@ +'use strict'; + const ember = require('../utils/ember'); const propOrder = require('../utils/property-order'); diff --git a/lib/rules/order-in-controllers.js b/lib/rules/order-in-controllers.js index e8560fb03c..adf24fe1ee 100644 --- a/lib/rules/order-in-controllers.js +++ b/lib/rules/order-in-controllers.js @@ -1,3 +1,5 @@ +'use strict'; + const ember = require('../utils/ember'); const propOrder = require('../utils/property-order'); diff --git a/lib/rules/order-in-models.js b/lib/rules/order-in-models.js index b342006802..2b0e69255d 100644 --- a/lib/rules/order-in-models.js +++ b/lib/rules/order-in-models.js @@ -1,3 +1,5 @@ +'use strict'; + const ember = require('../utils/ember'); const propOrder = require('../utils/property-order'); diff --git a/lib/rules/order-in-routes.js b/lib/rules/order-in-routes.js index 6f3dcec801..4b69b9a852 100644 --- a/lib/rules/order-in-routes.js +++ b/lib/rules/order-in-routes.js @@ -1,3 +1,5 @@ +'use strict'; + const ember = require('../utils/ember'); const propOrder = require('../utils/property-order'); diff --git a/lib/rules/query-params-on-top.js b/lib/rules/query-params-on-top.js index 035193c263..8462ff3a00 100644 --- a/lib/rules/query-params-on-top.js +++ b/lib/rules/query-params-on-top.js @@ -1,3 +1,5 @@ +'use strict'; + const ember = require('../utils/ember'); //------------------------------------------------------------------------------ diff --git a/lib/rules/routes-segments-snake-case.js b/lib/rules/routes-segments-snake-case.js index 27c2daa11f..657d362cf6 100644 --- a/lib/rules/routes-segments-snake-case.js +++ b/lib/rules/routes-segments-snake-case.js @@ -1,3 +1,5 @@ +'use strict'; + const utils = require('../utils/utils'); const snakeCase = require('snake-case'); diff --git a/lib/rules/use-brace-expansion.js b/lib/rules/use-brace-expansion.js index 38f3764d60..3ab6945684 100644 --- a/lib/rules/use-brace-expansion.js +++ b/lib/rules/use-brace-expansion.js @@ -1,3 +1,5 @@ +'use strict'; + const utils = require('../utils/utils'); const ember = require('../utils/ember'); diff --git a/lib/rules/use-ember-get-and-set.js b/lib/rules/use-ember-get-and-set.js index db34a51689..8e11e4ddb5 100644 --- a/lib/rules/use-ember-get-and-set.js +++ b/lib/rules/use-ember-get-and-set.js @@ -1,3 +1,5 @@ +'use strict'; + const utils = require('../utils/utils'); //------------------------------------------------------------------------------ diff --git a/lib/utils/ember.js b/lib/utils/ember.js index 1ada2dd0be..d3b058a63c 100644 --- a/lib/utils/ember.js +++ b/lib/utils/ember.js @@ -1,3 +1,5 @@ +'use strict'; + const utils = require('./utils'); module.exports = { diff --git a/lib/utils/property-order.js b/lib/utils/property-order.js index 03e4e4bc51..c4e18f680a 100644 --- a/lib/utils/property-order.js +++ b/lib/utils/property-order.js @@ -1,3 +1,5 @@ +'use strict'; + const ember = require('./ember'); module.exports = { diff --git a/lib/utils/utils.js b/lib/utils/utils.js index da58847d8f..bd08155226 100644 --- a/lib/utils/utils.js +++ b/lib/utils/utils.js @@ -1,3 +1,5 @@ +'use strict'; + module.exports = { findNodes, isIdentifier, diff --git a/tests/lib/utils/ember-test.js b/tests/lib/utils/ember-test.js index 0d0467aeea..ce8642bba9 100644 --- a/tests/lib/utils/ember-test.js +++ b/tests/lib/utils/ember-test.js @@ -1,3 +1,5 @@ +'use strict'; + const assert = require('chai').assert; const babelEslint = require('babel-eslint'); const emberUtils = require('../../../lib/utils/ember'); diff --git a/tests/lib/utils/utils-test.js b/tests/lib/utils/utils-test.js index c63510c577..fc7a5de387 100644 --- a/tests/lib/utils/utils-test.js +++ b/tests/lib/utils/utils-test.js @@ -1,3 +1,5 @@ +'use strict'; + const assert = require('chai').assert; const babelEslint = require('babel-eslint'); const utils = require('../../../lib/utils/utils'); diff --git a/tests/plugin-exports.js b/tests/plugin-exports.js index aca143c006..b0336ee838 100644 --- a/tests/plugin-exports.js +++ b/tests/plugin-exports.js @@ -1,3 +1,5 @@ +'use strict'; + const assert = require('assert'); const plugin = require('../index.js'); const ember = require('../lib/utils/ember'); From 72888956fbf3bbd84865ba40f90815252120cdac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Sajn=C3=B3g?= Date: Thu, 16 Feb 2017 09:04:29 +0100 Subject: [PATCH 6/6] Remove redundant settings in .eslintrc.js --- .eslintrc.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index e3bcb0e579..596d23231e 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,9 +1,4 @@ module.exports = { - root: true, - parserOptions: { - ecmaVersion: 6, - sourceType: 'module', - }, env: { node: true, mocha: true,