Skip to content

Commit cbf944b

Browse files
Merge pull request #539 from xdjinnx/fix-di-unused-not-working-with-function-names
Add scope type check to fix problem with function names for di-unused.
2 parents dadaa3a + 8a605ed commit cbf944b

File tree

2 files changed

+47
-2
lines changed

2 files changed

+47
-2
lines changed

rules/di-unused.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ module.exports = {
2323
// Keeps track of visited scopes in the collectAngularScopes function to prevent infinite recursion on circular references.
2424
var visitedScopes = [];
2525

26-
// This collects the variable scopes for the injectible functions which have been collected.
26+
// This collects the variable scopes for the injectable functions which have been collected.
2727
function collectAngularScopes(scope) {
2828
if (visitedScopes.indexOf(scope) === -1) {
2929
visitedScopes.push(scope);
@@ -41,6 +41,11 @@ module.exports = {
4141
if (scope.block !== fn) {
4242
return;
4343
}
44+
45+
if (scope.type === 'function-expression-name') {
46+
return;
47+
}
48+
4449
scope.variables.forEach(function(variable) {
4550
if (variable.name === 'arguments') {
4651
return;
@@ -71,7 +76,6 @@ module.exports = {
7176
reportUnusedVariables(null, $get);
7277
},
7378

74-
// Actually find and report unused injected variables.
7579
'Program:exit': function() {
7680
var globalScope = context.getScope();
7781
collectAngularScopes(globalScope);

test/di-unused.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,26 +16,36 @@ var eslintTester = new RuleTester();
1616
eslintTester.run('di-unused', rule, {
1717
valid: [
1818
'angular.module("").controller("", function($q) {return $q;});',
19+
'angular.module("").controller("", function controller($q) {return $q;});',
1920
'angular.module("").controller("", ["$q", function($q) {return $q;}]);',
2021
'angular.module("").animation("", function($q) {return $q;});',
22+
'angular.module("").animation("", function animation($q) {return $q;});',
2123
'angular.module("").animation("", ["$q", function($q) {return $q;}]);',
2224
'angular.module("").directive("", function($q) {return $q;});',
25+
'angular.module("").directive("", function directive($q) {return $q;});',
2326
'angular.module("").directive("", ["$q", function($q) {return $q;}]);',
2427
'angular.module("").factory("", function($q) {return $q;});',
28+
'angular.module("").factory("", function factory($q) {return $q;});',
2529
'angular.module("").factory("", ["$q", function($q) {return $q;}]);',
2630
'angular.module("").factory("", function($q) {return function() {return $q;};});',
2731
'angular.module("").factory("", function() {var myVar;});',
2832
'angular.module("").filter("", function($q) {return $q;});',
33+
'angular.module("").filter("", function filter($q) {return $q;});',
2934
'angular.module("").filter("", ["$q", function($q) {return $q;}]);',
3035
'angular.module("").provider("", function($httpProvider) {return $httpProvider;});',
36+
'angular.module("").provider("", function provider($httpProvider) {return $httpProvider;});',
3137
'angular.module("").provider("", ["$$httpProvider", function($$httpProvider) {return $$httpProvider;}]);',
3238
'angular.module("").service("", function($q) {return $q;});',
39+
'angular.module("").service("", function service($q) {return $q;});',
3340
'angular.module("").service("", ["$q", function($q) {return $q;}]);',
3441
'angular.module("").config(function($httpProvider) {$httpProvider.defaults.headers.post.answer="42"})',
42+
'angular.module("").config(function config($httpProvider) {$httpProvider.defaults.headers.post.answer="42"})',
3543
'angular.module("").config(["$httpProvider", function($httpProvider) {$httpProvider.defaults.headers.post.answer="42"}]);',
3644
'angular.module("").run(function($q) {$q()})',
45+
'angular.module("").run(function run($q) {$q()})',
3746
'angular.module("").run(["$q", function($q) {return $q;}]);',
3847
'inject(function($q) {_$q_ = $q;});',
48+
'inject(function inject($q) {_$q_ = $q;});',
3949
'angular.module("").provider("", function() {this.$get = function($q) {return $q};});',
4050
'angular.module("").provider("", function() {this.$get = ["$q", function($q) {return $q}];});',
4151
// Potential crashes
@@ -54,6 +64,9 @@ eslintTester.run('di-unused', rule, {
5464
{
5565
code: 'angular.module("").animation("", function($q) {});',
5666
errors: [{message: 'Unused injected value $q'}]
67+
}, {
68+
code: 'angular.module("").animation("", function animation($q) {});',
69+
errors: [{message: 'Unused injected value $q'}]
5770
}, {
5871
code: 'angular.module("").animation("", ["q", function($q) {}]);',
5972
errors: [{message: 'Unused injected value $q'}]
@@ -68,6 +81,9 @@ eslintTester.run('di-unused', rule, {
6881
{
6982
code: 'angular.module("").controller("", function($q) {});',
7083
errors: [{message: 'Unused injected value $q'}]
84+
}, {
85+
code: 'angular.module("").controller("", function controller($q) {});',
86+
errors: [{message: 'Unused injected value $q'}]
7187
}, {
7288
code: 'angular.module("").controller("", ["q", function($q) {}]);',
7389
errors: [{message: 'Unused injected value $q'}]
@@ -92,6 +108,9 @@ eslintTester.run('di-unused', rule, {
92108
{
93109
code: 'angular.module("").directive("", function($q) {});',
94110
errors: [{message: 'Unused injected value $q'}]
111+
}, {
112+
code: 'angular.module("").directive("", function directive($q) {});',
113+
errors: [{message: 'Unused injected value $q'}]
95114
}, {
96115
code: 'angular.module("").directive("", ["q", function($q) {}]);',
97116
errors: [{message: 'Unused injected value $q'}]
@@ -107,6 +126,10 @@ eslintTester.run('di-unused', rule, {
107126
code: 'angular.module("").factory("", function($q) {});',
108127
errors: [{message: 'Unused injected value $q'}]
109128
},
129+
{
130+
code: 'angular.module("").factory("", function factory($q) {});',
131+
errors: [{message: 'Unused injected value $q'}]
132+
},
110133
{
111134
code: 'angular.module("").factory("", $q => {});',
112135
errors: [{message: 'Unused injected value $q'}],
@@ -145,6 +168,9 @@ eslintTester.run('di-unused', rule, {
145168
{
146169
code: 'angular.module("").filter("", function($q) {});',
147170
errors: [{message: 'Unused injected value $q'}]
171+
}, {
172+
code: 'angular.module("").filter("", function filter($q) {});',
173+
errors: [{message: 'Unused injected value $q'}]
148174
}, {
149175
code: 'angular.module("").filter("", ["q", function($q) {}]);',
150176
errors: [{message: 'Unused injected value $q'}]
@@ -159,6 +185,9 @@ eslintTester.run('di-unused', rule, {
159185
{
160186
code: 'angular.module("").provider("", function($httpProvider) {});',
161187
errors: [{message: 'Unused injected value $httpProvider'}]
188+
}, {
189+
code: 'angular.module("").provider("", function provider($httpProvider) {});',
190+
errors: [{message: 'Unused injected value $httpProvider'}]
162191
}, {
163192
code: 'angular.module("").provider("", ["q", function($q) {}]);',
164193
errors: [{message: 'Unused injected value $q'}]
@@ -173,6 +202,9 @@ eslintTester.run('di-unused', rule, {
173202
{
174203
code: 'angular.module("").service("", function($q) {});',
175204
errors: [{message: 'Unused injected value $q'}]
205+
}, {
206+
code: 'angular.module("").service("", function service($q) {});',
207+
errors: [{message: 'Unused injected value $q'}]
176208
}, {
177209
code: 'angular.module("").service("", ["q", function($q) {}]);',
178210
errors: [{message: 'Unused injected value $q'}]
@@ -187,6 +219,9 @@ eslintTester.run('di-unused', rule, {
187219
{
188220
code: 'angular.module("").config(function($httpProvider) {})',
189221
errors: [{message: 'Unused injected value $httpProvider'}]
222+
}, {
223+
code: 'angular.module("").config(function config($httpProvider) {})',
224+
errors: [{message: 'Unused injected value $httpProvider'}]
190225
}, {
191226
code: 'angular.module("").config(["q", function($q) {}]);',
192227
errors: [{message: 'Unused injected value $q'}]
@@ -201,6 +236,9 @@ eslintTester.run('di-unused', rule, {
201236
{
202237
code: 'angular.module("").run(function($q) {});',
203238
errors: [{message: 'Unused injected value $q'}]
239+
}, {
240+
code: 'angular.module("").run(function run($q) {});',
241+
errors: [{message: 'Unused injected value $q'}]
204242
}, {
205243
code: 'angular.module("").run(["q", function($q) {}]);',
206244
errors: [{message: 'Unused injected value $q'}]
@@ -215,6 +253,9 @@ eslintTester.run('di-unused', rule, {
215253
{
216254
code: 'inject(function($q) {});',
217255
errors: [{message: 'Unused injected value $q'}]
256+
}, {
257+
code: 'inject(function inject($q) {});',
258+
errors: [{message: 'Unused injected value $q'}]
218259
}, {
219260
code: 'inject(["q", function($q) {}]);',
220261
errors: [{message: 'Unused injected value $q'}]

0 commit comments

Comments
 (0)