UNPKG

babel-plugin-undeclared-variables-check

Version:

Throw a compile-time error on references to undeclared variables

55 lines (39 loc) 1.46 kB
"use strict"; exports.__esModule = true; exports.default = function (_ref) { var messages = _ref.messages; return { visitor: { ReferencedIdentifier: function ReferencedIdentifier(path) { var node = path.node, scope = path.scope; var binding = scope.getBinding(node.name); if (binding && binding.kind === "type" && !path.parentPath.isFlow()) { throw path.buildCodeFrameError(messages.get("undeclaredVariableType", node.name), ReferenceError); } if (scope.hasBinding(node.name)) return; var bindings = scope.getAllBindings(); var closest = void 0; var shortest = -1; for (var name in bindings) { var distance = (0, _leven2.default)(node.name, name); if (distance <= 0 || distance > 3) continue; if (distance <= shortest) continue; closest = name; shortest = distance; } var msg = void 0; if (closest) { msg = messages.get("undeclaredVariableSuggestion", node.name, closest); } else { msg = messages.get("undeclaredVariable", node.name); } throw path.buildCodeFrameError(msg, ReferenceError); } } }; }; var _leven = require("leven"); var _leven2 = _interopRequireDefault(_leven); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } module.exports = exports["default"];