Skip to content

Commit

Permalink
Fix regression in jsx-uses-vars with babel-eslint (fixes #110)
Browse files Browse the repository at this point in the history
  • Loading branch information
yannickcr committed Jun 14, 2015
1 parent ee57450 commit b6d9268
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 7 deletions.
13 changes: 8 additions & 5 deletions lib/util/variable.js
Expand Up @@ -15,24 +15,27 @@ function markVariableAsUsed(context, name) {
var variables;
var i;
var len;
var found = false;

// Special Node.js scope means we need to start one level deeper
if (scope.type === 'global' && scope.childScopes.length) {
scope = scope.childScopes[0];
if (scope.type === 'global') {
while (scope.childScopes.length) {
scope = scope.childScopes[0];
}
}

do {
variables = scope.variables;
for (i = 0, len = variables.length; i < len; i++) {
if (variables[i].name === name && scope.type !== 'class') {
if (variables[i].name === name) {
variables[i].eslintUsed = true;
return true;
found = true;
}
}
scope = scope.upper;
} while (scope);

return false;
return found;
}

/**
Expand Down
32 changes: 30 additions & 2 deletions tests/lib/rules/jsx-uses-vars.js
Expand Up @@ -12,6 +12,8 @@
var eslint = require('eslint').linter;
var ESLintTester = require('eslint-tester');

require('babel-eslint');

// -----------------------------------------------------------------------------
// Tests
// -----------------------------------------------------------------------------
Expand All @@ -32,12 +34,20 @@ eslintTester.addRuleTest('node_modules/eslint/lib/rules/no-unused-vars', {
ecmaFeatures: {
jsx: true
}
},
{
}, {
code: '\
/*eslint jsx-uses-vars:1*/\
var App;\
React.render(<App/>);',
ecmaFeatures: {
jsx: true
}
}, {
code: '\
/*eslint jsx-uses-vars:1*/\
var App;\
React.render(<App/>);',
parser: 'babel-eslint',
ecmaFeatures: {
jsx: true
}
Expand Down Expand Up @@ -134,6 +144,24 @@ eslintTester.addRuleTest('node_modules/eslint/lib/rules/no-unused-vars', {
classes: true,
jsx: true
}
}, {
code: '\
/*eslint jsx-uses-vars:1*/\
class HelloMessage {\
render() {\
var HelloMessage = <div>Hello</div>;\
return HelloMessage;\
}\
}',
errors: [{
message: 'HelloMessage is defined but never used',
line: 1
}],
parser: 'babel-eslint',
ecmaFeatures: {
classes: true,
jsx: true
}
}
]
});

0 comments on commit b6d9268

Please sign in to comment.