Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
tools: avoid let in for loops
This adds a new ESLint tool to check for let
declarations within the for, forIn, forOf expressions.

Fixes: #9045
Ref: #9553
Ref: #8873
PR-URL: #9049
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: Myles Borins <myles.borins@gmail.com>
Reviewed-By: Teddy Katz <teddy.katz@gmail.com>
Reviewed-By: Prince John Wesley <princejohnwesley@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information
jalafel authored and Myles Borins committed Nov 11, 2016
commit d1d337926b3b4a9c1eb1b431addc9f2fc4b3e104
1 change: 1 addition & 0 deletions lib/.eslintrc
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
rules:
# Custom rules in tools/eslint-rules
require-buffer: 2
no-let-in-for-declaration: 2
46 changes: 46 additions & 0 deletions tools/eslint-rules/no-let-in-for-declaration.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/**
* @fileoverview Prohibit the use of `let` as the loop variable
* in the initialization of for, and the left-hand
* iterator in forIn and forOf loops.
*
* @author Jessica Quynh Tran
*/

'use strict';

//------------------------------------------------------------------------------
// Rule Definition
//------------------------------------------------------------------------------

module.exports = {
create(context) {

const msg = 'Use of `let` as the loop variable in a for-loop is ' +
'not recommended. Please use `var` instead.';

/**
* Report function to test if the for-loop is declared using `let`.
*/
function testForLoop(node) {
if (node.init && node.init.kind === 'let') {
context.report(node.init, msg);
}
}

/**
* Report function to test if the for-in or for-of loop
* is declared using `let`.
*/
function testForInOfLoop(node) {
if (node.left && node.left.kind === 'let') {
context.report(node.left, msg);
}
}

return {
'ForStatement': testForLoop,
'ForInStatement': testForInOfLoop,
'ForOfStatement': testForInOfLoop
};
}
};