diff --git a/package.json b/package.json index 2d7020b0..af24435f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-angular", - "version": "0.6.0", + "version": "0.6.1", "description": "ESLint rules for AngularJS projects", "main": "index.js", "repository": { diff --git a/rules/ng_deferred.js b/rules/ng_deferred.js index 9ec9ee18..ee76f542 100644 --- a/rules/ng_deferred.js +++ b/rules/ng_deferred.js @@ -6,7 +6,7 @@ module.exports = function(context) { 'MemberExpression': function(node) { if(node.object.type === 'Identifier' && node.object.name === '$q'){ - if(node.property.type === 'Identifier' && node.property.name === 'deferred'){ + if(node.property.type === 'Identifier' && node.property.name === 'defer'){ context.report(node, 'You should not create a new promise with this syntax. Use the $q(function(resolve, reject){}) syntax.', {}); } diff --git a/rules/ng_di_order.js b/rules/ng_di_order.js index 009edaee..7f55012b 100644 --- a/rules/ng_di_order.js +++ b/rules/ng_di_order.js @@ -12,15 +12,19 @@ module.exports = function(context) { 'provider', 'service' ]; + var setupCalls = [ + 'config', + 'run' + ]; - function checkOrder(node, fn) { + function checkOrder(fn) { var args = fn.params.map(function(arg) { return arg.name; }); var sortedArgs = args.slice().sort(); sortedArgs.some(function(value, index) { if(args.indexOf(value) !== index) { - context.report(node, 'Injected values should be sorted alphabetically'); + context.report(fn, 'Injected values should be sorted alphabetically'); return true; } }); @@ -31,18 +35,22 @@ module.exports = function(context) { 'AssignmentExpression': function(node) { // The $get function of a provider. if(node.left.type === 'MemberExpression' && node.left.property.name === '$get') { - return checkOrder(node, node.right); + return checkOrder(node.right); } }, 'CallExpression': function(node) { // An Angular component definition. - if(utils.isAngularComponent(node) && node.callee.type === 'MemberExpression' && angularNamedObjectList.indexOf(node.callee.property.name) >= 0){ - return checkOrder(node, node.arguments[1]); + if(utils.isAngularComponent(node) && node.callee.type === 'MemberExpression' && node.arguments[1].type === 'FunctionExpression' && angularNamedObjectList.indexOf(node.callee.property.name) >= 0){ + return checkOrder(node.arguments[1]); + } + // Config and run functions. + if(node.callee.type === 'MemberExpression' && node.arguments.length > 0 && setupCalls.indexOf(node.callee.property.name) !== -1 && node.arguments[0].type === 'FunctionExpression') { + return checkOrder(node.arguments[0]); } // Injected values in unittests. if(node.callee.type === 'Identifier' && node.callee.name === 'inject') { - return checkOrder(node, node.arguments[0]); + return checkOrder(node.arguments[0]); } } }; diff --git a/test/ng_deferred.js b/test/ng_deferred.js index e18dee13..4ec2efa8 100644 --- a/test/ng_deferred.js +++ b/test/ng_deferred.js @@ -12,9 +12,9 @@ var rule = require('../rules/ng_deferred'), var eslintTester = new RuleTester(); eslintTester.run('ng_deferred', rule, { valid: [ - '$qs(function(){});' + '$q(function(){});' ], invalid: [ - { code: 'var deferred = $q.deferred;', errors: [{ message: 'You should not create a new promise with this syntax. Use the $q(function(resolve, reject){}) syntax.'}] } + { code: 'var deferred = $q.defer();', errors: [{ message: 'You should not create a new promise with this syntax. Use the $q(function(resolve, reject){}) syntax.'}] } ] }); diff --git a/test/ng_di_order.js b/test/ng_di_order.js index 8829481d..fa69a53d 100644 --- a/test/ng_di_order.js +++ b/test/ng_di_order.js @@ -15,9 +15,12 @@ eslintTester.run('ng_di_order', rule, { 'app.controller("", function($http, $q){});', 'app.directive("", function($http, $q){});', 'app.factory("", function($http, $q){});', + 'app.factory("", fsctoryName);', 'app.filter("", function($http, $q){});', 'app.provider("", function($http, $q){});', 'app.service("", function($http, $q){});', + 'app.config(function($httpProvider, $routeProvider){});', + 'app.run(function($http, $q){});', 'inject(function($http, $q){});', 'it(inject(function($http, $q){}));', 'this.$get = function($http, $q){};', @@ -40,6 +43,12 @@ eslintTester.run('ng_di_order', rule, { }, { code: 'app.service("", function($q, $http){});', errors: [{message: 'Injected values should be sorted alphabetically'}] + }, { + code: 'app.config(function($routeProvider, $httpProvider){});', + errors: [{message: 'Injected values should be sorted alphabetically'}] + }, { + code: 'app.run(function($q, $http){});', + errors: [{message: 'Injected values should be sorted alphabetically'}] }, { code: 'inject(function($q, $http){});', errors: [{message: 'Injected values should be sorted alphabetically'}]