We have been stalled on ESLint 3.8.0 for some time. Current ESLint is 3.13.0. We have been unable to upgrade because of more aggressive reporting on some rules, including indentation. ESLint configuration options and bugfixes are now such that we can reasonably upgrade. PR-URL: https://github.com/nodejs/node/pull/10561 Reviewed-By: Teddy Katz <teddy.katz@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
67 lines
2 KiB
JavaScript
67 lines
2 KiB
JavaScript
/**
|
|
* @fileoverview Rule to flag labels that are the same as an identifier
|
|
* @author Ian Christian Myers
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Requirements
|
|
//------------------------------------------------------------------------------
|
|
|
|
const astUtils = require("../ast-utils");
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Rule Definition
|
|
//------------------------------------------------------------------------------
|
|
|
|
module.exports = {
|
|
meta: {
|
|
docs: {
|
|
description: "disallow labels that share a name with a variable",
|
|
category: "Variables",
|
|
recommended: false
|
|
},
|
|
|
|
schema: []
|
|
},
|
|
|
|
create(context) {
|
|
|
|
//--------------------------------------------------------------------------
|
|
// Helpers
|
|
//--------------------------------------------------------------------------
|
|
|
|
/**
|
|
* Check if the identifier is present inside current scope
|
|
* @param {Object} scope current scope
|
|
* @param {string} name To evaluate
|
|
* @returns {boolean} True if its present
|
|
* @private
|
|
*/
|
|
function findIdentifier(scope, name) {
|
|
return astUtils.getVariableByName(scope, name) !== null;
|
|
}
|
|
|
|
//--------------------------------------------------------------------------
|
|
// Public API
|
|
//--------------------------------------------------------------------------
|
|
|
|
return {
|
|
|
|
LabeledStatement(node) {
|
|
|
|
// Fetch the innermost scope.
|
|
const scope = context.getScope();
|
|
|
|
// Recursively find the identifier walking up the scope, starting
|
|
// with the innermost scope.
|
|
if (findIdentifier(scope, node.label.name)) {
|
|
context.report({ node, message: "Found identifier with same name as label." });
|
|
}
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
};
|