Skip to content

Commit c188307

Browse files
author
Yannick Croissant
committed
Fix jsx-uses-vars for ES6 classes (fixes #96)
1 parent 6e07ee4 commit c188307

File tree

2 files changed

+50
-7
lines changed

2 files changed

+50
-7
lines changed

lib/util/variable.js

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@
77
/**
88
* Record that a particular variable has been used in code
99
*
10-
* Similar to the one coming from ESLint but with a patch for babel-eslint
11-
* to avoid https://github.com/babel/babel-eslint/issues/21
12-
*
1310
* @param {String} name The name of the variable to mark as used.
1411
* @returns {Boolean} True if the variable was found and marked as used, false if not.
1512
*/
@@ -22,15 +19,12 @@ function markVariableAsUsed(context, name) {
2219
// Special Node.js scope means we need to start one level deeper
2320
if (scope.type === 'global' && scope.childScopes.length) {
2421
scope = scope.childScopes[0];
25-
if (scope.childScopes.length) {
26-
scope = scope.childScopes[0];
27-
}
2822
}
2923

3024
do {
3125
variables = scope.variables;
3226
for (i = 0, len = variables.length; i < len; i++) {
33-
if (variables[i].name === name) {
27+
if (variables[i].name === name && scope.type !== 'class') {
3428
variables[i].eslintUsed = true;
3529
return true;
3630
}

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

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,29 @@ eslintTester.addRuleTest('node_modules/eslint/lib/rules/no-unused-vars', {
6868
ecmaFeatures: {
6969
jsx: true
7070
}
71+
}, {
72+
code: '\
73+
/*eslint jsx-uses-vars:1*/\
74+
class HelloMessage {}\
75+
<HelloMessage />',
76+
ecmaFeatures: {
77+
classes: true,
78+
jsx: true
79+
}
80+
}, {
81+
code: '\
82+
/*eslint jsx-uses-vars:1*/\
83+
class HelloMessage {\
84+
render() {\
85+
var HelloMessage = <div>Hello</div>;\
86+
return HelloMessage;\
87+
}\
88+
}\
89+
<HelloMessage />',
90+
ecmaFeatures: {
91+
classes: true,
92+
jsx: true
93+
}
7194
}
7295
],
7396
invalid: [
@@ -85,6 +108,32 @@ eslintTester.addRuleTest('node_modules/eslint/lib/rules/no-unused-vars', {
85108
ecmaFeatures: {
86109
jsx: true
87110
}
111+
}, {
112+
code: '\
113+
/*eslint jsx-uses-vars:1*/\
114+
class unused {}',
115+
errors: [{message: 'unused is defined but never used'}],
116+
ecmaFeatures: {
117+
classes: true,
118+
jsx: true
119+
}
120+
}, {
121+
code: '\
122+
/*eslint jsx-uses-vars:1*/\
123+
class HelloMessage {\
124+
render() {\
125+
var HelloMessage = <div>Hello</div>;\
126+
return HelloMessage;\
127+
}\
128+
}',
129+
errors: [{
130+
message: 'HelloMessage is defined but never used',
131+
line: 1
132+
}],
133+
ecmaFeatures: {
134+
classes: true,
135+
jsx: true
136+
}
88137
}
89138
]
90139
});

0 commit comments

Comments
 (0)