babel-plugin-undeclared-variables-check
Version:
Throw a compile-time error on references to undeclared variables
55 lines (39 loc) • 1.46 kB
JavaScript
;
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"];