Skip to content

Commit b6d9268

Browse files
committed
Fix regression in jsx-uses-vars with babel-eslint (fixes #110)
1 parent ee57450 commit b6d9268

File tree

2 files changed

+38
-7
lines changed

2 files changed

+38
-7
lines changed

lib/util/variable.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,24 +15,27 @@ function markVariableAsUsed(context, name) {
1515
var variables;
1616
var i;
1717
var len;
18+
var found = false;
1819

1920
// Special Node.js scope means we need to start one level deeper
20-
if (scope.type === 'global' && scope.childScopes.length) {
21-
scope = scope.childScopes[0];
21+
if (scope.type === 'global') {
22+
while (scope.childScopes.length) {
23+
scope = scope.childScopes[0];
24+
}
2225
}
2326

2427
do {
2528
variables = scope.variables;
2629
for (i = 0, len = variables.length; i < len; i++) {
27-
if (variables[i].name === name && scope.type !== 'class') {
30+
if (variables[i].name === name) {
2831
variables[i].eslintUsed = true;
29-
return true;
32+
found = true;
3033
}
3134
}
3235
scope = scope.upper;
3336
} while (scope);
3437

35-
return false;
38+
return found;
3639
}
3740

3841
/**

tests/lib/rules/jsx-uses-vars.js

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
var eslint = require('eslint').linter;
1313
var ESLintTester = require('eslint-tester');
1414

15+
require('babel-eslint');
16+
1517
// -----------------------------------------------------------------------------
1618
// Tests
1719
// -----------------------------------------------------------------------------
@@ -32,12 +34,20 @@ eslintTester.addRuleTest('node_modules/eslint/lib/rules/no-unused-vars', {
3234
ecmaFeatures: {
3335
jsx: true
3436
}
35-
},
36-
{
37+
}, {
38+
code: '\
39+
/*eslint jsx-uses-vars:1*/\
40+
var App;\
41+
React.render(<App/>);',
42+
ecmaFeatures: {
43+
jsx: true
44+
}
45+
}, {
3746
code: '\
3847
/*eslint jsx-uses-vars:1*/\
3948
var App;\
4049
React.render(<App/>);',
50+
parser: 'babel-eslint',
4151
ecmaFeatures: {
4252
jsx: true
4353
}
@@ -134,6 +144,24 @@ eslintTester.addRuleTest('node_modules/eslint/lib/rules/no-unused-vars', {
134144
classes: true,
135145
jsx: true
136146
}
147+
}, {
148+
code: '\
149+
/*eslint jsx-uses-vars:1*/\
150+
class HelloMessage {\
151+
render() {\
152+
var HelloMessage = <div>Hello</div>;\
153+
return HelloMessage;\
154+
}\
155+
}',
156+
errors: [{
157+
message: 'HelloMessage is defined but never used',
158+
line: 1
159+
}],
160+
parser: 'babel-eslint',
161+
ecmaFeatures: {
162+
classes: true,
163+
jsx: true
164+
}
137165
}
138166
]
139167
});

0 commit comments

Comments
 (0)