|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- /**
- * @fileoverview Rule to flag labels that are the same as an identifier
- * @author Ian Christian Myers
- */
-
- "use strict";
-
- //------------------------------------------------------------------------------
- // Requirements
- //------------------------------------------------------------------------------
-
- const astUtils = require("../util/ast-utils");
-
- //------------------------------------------------------------------------------
- // Rule Definition
- //------------------------------------------------------------------------------
-
- module.exports = {
- meta: {
- type: "suggestion",
-
- docs: {
- description: "disallow labels that share a name with a variable",
- category: "Variables",
- recommended: false,
- url: "https://eslint.org/docs/rules/no-label-var"
- },
-
- 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." });
- }
- }
-
- };
-
- }
- };
|