UNPKG

1.46 kBJavaScriptView Raw
1"use strict";
2
3exports.__esModule = true;
4
5exports.default = function (_ref) {
6 var messages = _ref.messages;
7
8 return {
9 visitor: {
10 ReferencedIdentifier: function ReferencedIdentifier(path) {
11 var node = path.node,
12 scope = path.scope;
13
14
15 var binding = scope.getBinding(node.name);
16 if (binding && binding.kind === "type" && !path.parentPath.isFlow()) {
17 throw path.buildCodeFrameError(messages.get("undeclaredVariableType", node.name), ReferenceError);
18 }
19
20 if (scope.hasBinding(node.name)) return;
21
22 var bindings = scope.getAllBindings();
23
24 var closest = void 0;
25 var shortest = -1;
26
27 for (var name in bindings) {
28 var distance = (0, _leven2.default)(node.name, name);
29 if (distance <= 0 || distance > 3) continue;
30 if (distance <= shortest) continue;
31
32 closest = name;
33 shortest = distance;
34 }
35
36 var msg = void 0;
37 if (closest) {
38 msg = messages.get("undeclaredVariableSuggestion", node.name, closest);
39 } else {
40 msg = messages.get("undeclaredVariable", node.name);
41 }
42
43 throw path.buildCodeFrameError(msg, ReferenceError);
44 }
45 }
46 };
47};
48
49var _leven = require("leven");
50
51var _leven2 = _interopRequireDefault(_leven);
52
53function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
54
55module.exports = exports["default"];
\No newline at end of file