.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / tslint / node_modules / tsutils / util / usage.js
1 "use strict";
2 Object.defineProperty(exports, "__esModule", { value: true });
3 var tslib_1 = require("tslib");
4 var util_1 = require("./util");
5 var ts = require("typescript");
6 var DeclarationDomain;
7 (function (DeclarationDomain) {
8     DeclarationDomain[DeclarationDomain["Namespace"] = 1] = "Namespace";
9     DeclarationDomain[DeclarationDomain["Type"] = 2] = "Type";
10     DeclarationDomain[DeclarationDomain["Value"] = 4] = "Value";
11     DeclarationDomain[DeclarationDomain["Import"] = 8] = "Import";
12     DeclarationDomain[DeclarationDomain["Any"] = 7] = "Any";
13 })(DeclarationDomain = exports.DeclarationDomain || (exports.DeclarationDomain = {}));
14 var UsageDomain;
15 (function (UsageDomain) {
16     UsageDomain[UsageDomain["Namespace"] = 1] = "Namespace";
17     UsageDomain[UsageDomain["Type"] = 2] = "Type";
18     UsageDomain[UsageDomain["Value"] = 4] = "Value";
19     UsageDomain[UsageDomain["ValueOrNamespace"] = 5] = "ValueOrNamespace";
20     UsageDomain[UsageDomain["Any"] = 7] = "Any";
21     UsageDomain[UsageDomain["TypeQuery"] = 8] = "TypeQuery";
22 })(UsageDomain = exports.UsageDomain || (exports.UsageDomain = {}));
23 function getUsageDomain(node) {
24     var parent = node.parent;
25     switch (parent.kind) {
26         case ts.SyntaxKind.TypeReference:
27             return 2;
28         case ts.SyntaxKind.ExpressionWithTypeArguments:
29             return parent.parent.token === ts.SyntaxKind.ImplementsKeyword ||
30                 parent.parent.parent.kind === ts.SyntaxKind.InterfaceDeclaration
31                 ? 2
32                 : 4;
33         case ts.SyntaxKind.TypeQuery:
34             return 5 | 8;
35         case ts.SyntaxKind.QualifiedName:
36             if (parent.left === node) {
37                 if (getEntityNameParent(parent).kind === ts.SyntaxKind.TypeQuery)
38                     return 1 | 8;
39                 return 1;
40             }
41             break;
42         case ts.SyntaxKind.ExportSpecifier:
43             if (parent.propertyName === undefined ||
44                 parent.propertyName === node)
45                 return 7;
46             break;
47         case ts.SyntaxKind.ExportAssignment:
48             return 7;
49         case ts.SyntaxKind.BindingElement:
50             if (parent.initializer === node)
51                 return 5;
52             break;
53         case ts.SyntaxKind.Parameter:
54         case ts.SyntaxKind.EnumMember:
55         case ts.SyntaxKind.PropertyDeclaration:
56         case ts.SyntaxKind.VariableDeclaration:
57         case ts.SyntaxKind.PropertyAssignment:
58         case ts.SyntaxKind.PropertyAccessExpression:
59         case ts.SyntaxKind.ImportEqualsDeclaration:
60             if (parent.name !== node)
61                 return 5;
62             break;
63         case ts.SyntaxKind.JsxAttribute:
64         case ts.SyntaxKind.FunctionDeclaration:
65         case ts.SyntaxKind.FunctionExpression:
66         case ts.SyntaxKind.NamespaceImport:
67         case ts.SyntaxKind.ClassDeclaration:
68         case ts.SyntaxKind.ClassExpression:
69         case ts.SyntaxKind.ModuleDeclaration:
70         case ts.SyntaxKind.MethodDeclaration:
71         case ts.SyntaxKind.EnumDeclaration:
72         case ts.SyntaxKind.GetAccessor:
73         case ts.SyntaxKind.SetAccessor:
74         case ts.SyntaxKind.LabeledStatement:
75         case ts.SyntaxKind.BreakStatement:
76         case ts.SyntaxKind.ContinueStatement:
77         case ts.SyntaxKind.ImportClause:
78         case ts.SyntaxKind.ImportSpecifier:
79         case ts.SyntaxKind.TypePredicate:
80         case ts.SyntaxKind.MethodSignature:
81         case ts.SyntaxKind.PropertySignature:
82         case ts.SyntaxKind.NamespaceExportDeclaration:
83         case ts.SyntaxKind.InterfaceDeclaration:
84         case ts.SyntaxKind.TypeAliasDeclaration:
85         case ts.SyntaxKind.TypeParameter:
86             break;
87         default:
88             return 5;
89     }
90 }
91 exports.getUsageDomain = getUsageDomain;
92 function getDeclarationDomain(node) {
93     switch (node.parent.kind) {
94         case ts.SyntaxKind.TypeParameter:
95         case ts.SyntaxKind.InterfaceDeclaration:
96         case ts.SyntaxKind.TypeAliasDeclaration:
97             return 2;
98         case ts.SyntaxKind.ClassDeclaration:
99         case ts.SyntaxKind.ClassExpression:
100             return 2 | 4;
101         case ts.SyntaxKind.EnumDeclaration:
102             return 7;
103         case ts.SyntaxKind.NamespaceImport:
104         case ts.SyntaxKind.ImportClause:
105             return 7 | 8;
106         case ts.SyntaxKind.ImportEqualsDeclaration:
107         case ts.SyntaxKind.ImportSpecifier:
108             return node.parent.name === node
109                 ? 7 | 8
110                 : undefined;
111         case ts.SyntaxKind.ModuleDeclaration:
112             return 1;
113         case ts.SyntaxKind.Parameter:
114             if (node.parent.parent.kind === ts.SyntaxKind.IndexSignature)
115                 return;
116         case ts.SyntaxKind.BindingElement:
117         case ts.SyntaxKind.VariableDeclaration:
118             return node.parent.name === node ? 4 : undefined;
119         case ts.SyntaxKind.FunctionDeclaration:
120         case ts.SyntaxKind.FunctionExpression:
121             return 4;
122     }
123 }
124 exports.getDeclarationDomain = getDeclarationDomain;
125 function collectVariableUsage(sourceFile) {
126     return new UsageWalker().getUsage(sourceFile);
127 }
128 exports.collectVariableUsage = collectVariableUsage;
129 var AbstractScope = (function () {
130     function AbstractScope(_global) {
131         this._global = _global;
132         this._variables = new Map();
133         this._uses = [];
134         this._namespaceScopes = undefined;
135         this._enumScopes = undefined;
136     }
137     AbstractScope.prototype.addVariable = function (identifier, name, blockScoped, exported, domain) {
138         var variables = this._getDestinationScope(blockScoped).getVariables();
139         var declaration = {
140             domain: domain,
141             exported: exported,
142             declaration: name,
143         };
144         var variable = variables.get(identifier);
145         if (variable === undefined) {
146             variables.set(identifier, {
147                 domain: domain,
148                 declarations: [declaration],
149                 uses: [],
150             });
151         }
152         else {
153             variable.domain |= domain;
154             variable.declarations.push(declaration);
155         }
156     };
157     AbstractScope.prototype.addUse = function (use) {
158         this._uses.push(use);
159     };
160     AbstractScope.prototype.getVariables = function () {
161         return this._variables;
162     };
163     AbstractScope.prototype.getFunctionScope = function () {
164         return this;
165     };
166     AbstractScope.prototype.end = function (cb) {
167         var _this = this;
168         if (this._namespaceScopes !== undefined)
169             this._namespaceScopes.forEach(function (value) { return value.finish(cb); });
170         this._namespaceScopes = this._enumScopes = undefined;
171         this._applyUses();
172         this._variables.forEach(function (variable) {
173             for (var _i = 0, _a = variable.declarations; _i < _a.length; _i++) {
174                 var declaration = _a[_i];
175                 var result = {
176                     declarations: [],
177                     domain: declaration.domain,
178                     exported: declaration.exported,
179                     inGlobalScope: _this._global,
180                     uses: [],
181                 };
182                 for (var _b = 0, _c = variable.declarations; _b < _c.length; _b++) {
183                     var other = _c[_b];
184                     if (other.domain & declaration.domain)
185                         result.declarations.push(other.declaration);
186                 }
187                 for (var _d = 0, _e = variable.uses; _d < _e.length; _d++) {
188                     var use = _e[_d];
189                     if (use.domain & declaration.domain)
190                         result.uses.push(use);
191                 }
192                 cb(result, declaration.declaration, _this);
193             }
194         });
195     };
196     AbstractScope.prototype.markExported = function (_name) { };
197     AbstractScope.prototype.createOrReuseNamespaceScope = function (name, _exported, ambient, hasExportStatement) {
198         var scope;
199         if (this._namespaceScopes === undefined) {
200             this._namespaceScopes = new Map();
201         }
202         else {
203             scope = this._namespaceScopes.get(name);
204         }
205         if (scope === undefined) {
206             scope = new NamespaceScope(ambient, hasExportStatement, this);
207             this._namespaceScopes.set(name, scope);
208         }
209         else {
210             scope.refresh(ambient, hasExportStatement);
211         }
212         return scope;
213     };
214     AbstractScope.prototype.createOrReuseEnumScope = function (name, _exported) {
215         var scope;
216         if (this._enumScopes === undefined) {
217             this._enumScopes = new Map();
218         }
219         else {
220             scope = this._enumScopes.get(name);
221         }
222         if (scope === undefined) {
223             scope = new EnumScope(this);
224             this._enumScopes.set(name, scope);
225         }
226         return scope;
227     };
228     AbstractScope.prototype._applyUses = function () {
229         for (var _i = 0, _a = this._uses; _i < _a.length; _i++) {
230             var use = _a[_i];
231             if (!this._applyUse(use))
232                 this._addUseToParent(use);
233         }
234         this._uses = [];
235     };
236     AbstractScope.prototype._applyUse = function (use, variables) {
237         if (variables === void 0) { variables = this._variables; }
238         var variable = variables.get(util_1.getIdentifierText(use.location));
239         if (variable === undefined || (variable.domain & use.domain) === 0)
240             return false;
241         variable.uses.push(use);
242         return true;
243     };
244     AbstractScope.prototype._getDestinationScope = function (_blockScoped) {
245         return this;
246     };
247     AbstractScope.prototype._addUseToParent = function (_use) { };
248     return AbstractScope;
249 }());
250 var RootScope = (function (_super) {
251     tslib_1.__extends(RootScope, _super);
252     function RootScope(_exportAll, global) {
253         var _this = _super.call(this, global) || this;
254         _this._exportAll = _exportAll;
255         _this._exports = undefined;
256         _this._innerScope = new NonRootScope(_this);
257         return _this;
258     }
259     RootScope.prototype.addVariable = function (identifier, name, blockScoped, exported, domain) {
260         if (domain & 8)
261             return _super.prototype.addVariable.call(this, identifier, name, blockScoped, exported, domain);
262         return this._innerScope.addVariable(identifier, name, blockScoped, exported, domain);
263     };
264     RootScope.prototype.addUse = function (use, origin) {
265         if (origin === this._innerScope)
266             return _super.prototype.addUse.call(this, use);
267         return this._innerScope.addUse(use);
268     };
269     RootScope.prototype.markExported = function (id) {
270         var text = util_1.getIdentifierText(id);
271         if (this._exports === undefined) {
272             this._exports = [text];
273         }
274         else {
275             this._exports.push(text);
276         }
277     };
278     RootScope.prototype.end = function (cb) {
279         var _this = this;
280         this._innerScope.end(function (value, key) {
281             value.exported = value.exported || _this._exportAll
282                 || _this._exports !== undefined && _this._exports.indexOf(util_1.getIdentifierText(key)) !== -1;
283             value.inGlobalScope = _this._global;
284             return cb(value, key, _this);
285         });
286         return _super.prototype.end.call(this, function (value, key, scope) {
287             value.exported = value.exported || scope === _this
288                 && _this._exports !== undefined && _this._exports.indexOf(util_1.getIdentifierText(key)) !== -1;
289             return cb(value, key, scope);
290         });
291     };
292     return RootScope;
293 }(AbstractScope));
294 var NonRootScope = (function (_super) {
295     tslib_1.__extends(NonRootScope, _super);
296     function NonRootScope(_parent) {
297         var _this = _super.call(this, false) || this;
298         _this._parent = _parent;
299         return _this;
300     }
301     NonRootScope.prototype._addUseToParent = function (use) {
302         return this._parent.addUse(use, this);
303     };
304     return NonRootScope;
305 }(AbstractScope));
306 var EnumScope = (function (_super) {
307     tslib_1.__extends(EnumScope, _super);
308     function EnumScope() {
309         return _super !== null && _super.apply(this, arguments) || this;
310     }
311     EnumScope.prototype.end = function () {
312         this._applyUses();
313     };
314     return EnumScope;
315 }(NonRootScope));
316 var ConditionalTypeScopeState;
317 (function (ConditionalTypeScopeState) {
318     ConditionalTypeScopeState[ConditionalTypeScopeState["Initial"] = 0] = "Initial";
319     ConditionalTypeScopeState[ConditionalTypeScopeState["Extends"] = 1] = "Extends";
320     ConditionalTypeScopeState[ConditionalTypeScopeState["TrueType"] = 2] = "TrueType";
321     ConditionalTypeScopeState[ConditionalTypeScopeState["FalseType"] = 3] = "FalseType";
322 })(ConditionalTypeScopeState || (ConditionalTypeScopeState = {}));
323 var ConditionalTypeScope = (function (_super) {
324     tslib_1.__extends(ConditionalTypeScope, _super);
325     function ConditionalTypeScope() {
326         var _this = _super !== null && _super.apply(this, arguments) || this;
327         _this._state = 0;
328         return _this;
329     }
330     ConditionalTypeScope.prototype.updateState = function (newState) {
331         this._state = newState;
332     };
333     ConditionalTypeScope.prototype.addUse = function (use) {
334         if (this._state === 2)
335             return void this._uses.push(use);
336         return this._parent.addUse(use, this);
337     };
338     return ConditionalTypeScope;
339 }(NonRootScope));
340 var FunctionScope = (function (_super) {
341     tslib_1.__extends(FunctionScope, _super);
342     function FunctionScope() {
343         return _super !== null && _super.apply(this, arguments) || this;
344     }
345     FunctionScope.prototype.beginBody = function () {
346         this._applyUses();
347     };
348     return FunctionScope;
349 }(NonRootScope));
350 var AbstractNamedExpressionScope = (function (_super) {
351     tslib_1.__extends(AbstractNamedExpressionScope, _super);
352     function AbstractNamedExpressionScope(_name, _domain, parent) {
353         var _this = _super.call(this, parent) || this;
354         _this._name = _name;
355         _this._domain = _domain;
356         return _this;
357     }
358     AbstractNamedExpressionScope.prototype.end = function (cb) {
359         this._innerScope.end(cb);
360         return cb({
361             declarations: [this._name],
362             domain: this._domain,
363             exported: false,
364             uses: this._uses,
365             inGlobalScope: false,
366         }, this._name, this);
367     };
368     AbstractNamedExpressionScope.prototype.addUse = function (use, source) {
369         if (source !== this._innerScope)
370             return this._innerScope.addUse(use);
371         if (use.domain & this._domain && util_1.getIdentifierText(use.location) === util_1.getIdentifierText(this._name)) {
372             this._uses.push(use);
373         }
374         else {
375             return this._parent.addUse(use, this);
376         }
377     };
378     AbstractNamedExpressionScope.prototype.getFunctionScope = function () {
379         return this._innerScope;
380     };
381     AbstractNamedExpressionScope.prototype._getDestinationScope = function () {
382         return this._innerScope;
383     };
384     return AbstractNamedExpressionScope;
385 }(NonRootScope));
386 var FunctionExpressionScope = (function (_super) {
387     tslib_1.__extends(FunctionExpressionScope, _super);
388     function FunctionExpressionScope(name, parent) {
389         var _this = _super.call(this, name, 4, parent) || this;
390         _this._innerScope = new FunctionScope(_this);
391         return _this;
392     }
393     FunctionExpressionScope.prototype.beginBody = function () {
394         return this._innerScope.beginBody();
395     };
396     return FunctionExpressionScope;
397 }(AbstractNamedExpressionScope));
398 var ClassExpressionScope = (function (_super) {
399     tslib_1.__extends(ClassExpressionScope, _super);
400     function ClassExpressionScope(name, parent) {
401         var _this = _super.call(this, name, 4 | 2, parent) || this;
402         _this._innerScope = new NonRootScope(_this);
403         return _this;
404     }
405     return ClassExpressionScope;
406 }(AbstractNamedExpressionScope));
407 var BlockScope = (function (_super) {
408     tslib_1.__extends(BlockScope, _super);
409     function BlockScope(_functionScope, parent) {
410         var _this = _super.call(this, parent) || this;
411         _this._functionScope = _functionScope;
412         return _this;
413     }
414     BlockScope.prototype.getFunctionScope = function () {
415         return this._functionScope;
416     };
417     BlockScope.prototype._getDestinationScope = function (blockScoped) {
418         return blockScoped ? this : this._functionScope;
419     };
420     return BlockScope;
421 }(NonRootScope));
422 function mapDeclaration(declaration) {
423     return {
424         declaration: declaration,
425         exported: true,
426         domain: getDeclarationDomain(declaration),
427     };
428 }
429 var NamespaceScope = (function (_super) {
430     tslib_1.__extends(NamespaceScope, _super);
431     function NamespaceScope(_ambient, _hasExport, parent) {
432         var _this = _super.call(this, parent) || this;
433         _this._ambient = _ambient;
434         _this._hasExport = _hasExport;
435         _this._innerScope = new NonRootScope(_this);
436         _this._exports = undefined;
437         return _this;
438     }
439     NamespaceScope.prototype.finish = function (cb) {
440         return _super.prototype.end.call(this, cb);
441     };
442     NamespaceScope.prototype.end = function (cb) {
443         var _this = this;
444         this._innerScope.end(function (variable, key, scope) {
445             if (scope !== _this._innerScope ||
446                 !variable.exported && (!_this._ambient || _this._exports !== undefined && !_this._exports.has(util_1.getIdentifierText(key))))
447                 return cb(variable, key, scope);
448             var namespaceVar = _this._variables.get(util_1.getIdentifierText(key));
449             if (namespaceVar === undefined) {
450                 _this._variables.set(util_1.getIdentifierText(key), {
451                     declarations: variable.declarations.map(mapDeclaration),
452                     domain: variable.domain,
453                     uses: variable.uses.slice(),
454                 });
455             }
456             else {
457                 outer: for (var _i = 0, _a = variable.declarations; _i < _a.length; _i++) {
458                     var declaration = _a[_i];
459                     for (var _b = 0, _c = namespaceVar.declarations; _b < _c.length; _b++) {
460                         var existing = _c[_b];
461                         if (existing.declaration === declaration)
462                             continue outer;
463                     }
464                     namespaceVar.declarations.push(mapDeclaration(declaration));
465                 }
466                 namespaceVar.domain |= variable.domain;
467                 for (var _d = 0, _e = variable.uses; _d < _e.length; _d++) {
468                     var use = _e[_d];
469                     if (namespaceVar.uses.indexOf(use) !== -1)
470                         continue;
471                     namespaceVar.uses.push(use);
472                 }
473             }
474         });
475         this._applyUses();
476         this._innerScope = new NonRootScope(this);
477     };
478     NamespaceScope.prototype.createOrReuseNamespaceScope = function (name, exported, ambient, hasExportStatement) {
479         if (!exported && (!this._ambient || this._hasExport))
480             return this._innerScope.createOrReuseNamespaceScope(name, exported, ambient || this._ambient, hasExportStatement);
481         return _super.prototype.createOrReuseNamespaceScope.call(this, name, exported, ambient || this._ambient, hasExportStatement);
482     };
483     NamespaceScope.prototype.createOrReuseEnumScope = function (name, exported) {
484         if (!exported && (!this._ambient || this._hasExport))
485             return this._innerScope.createOrReuseEnumScope(name, exported);
486         return _super.prototype.createOrReuseEnumScope.call(this, name, exported);
487     };
488     NamespaceScope.prototype.addUse = function (use, source) {
489         if (source !== this._innerScope)
490             return this._innerScope.addUse(use);
491         this._uses.push(use);
492     };
493     NamespaceScope.prototype.refresh = function (ambient, hasExport) {
494         this._ambient = ambient;
495         this._hasExport = hasExport;
496     };
497     NamespaceScope.prototype.markExported = function (name, _as) {
498         if (this._exports === undefined)
499             this._exports = new Set();
500         this._exports.add(util_1.getIdentifierText(name));
501     };
502     NamespaceScope.prototype._getDestinationScope = function () {
503         return this._innerScope;
504     };
505     return NamespaceScope;
506 }(NonRootScope));
507 function getEntityNameParent(name) {
508     var parent = name.parent;
509     while (parent.kind === ts.SyntaxKind.QualifiedName)
510         parent = parent.parent;
511     return parent;
512 }
513 var UsageWalker = (function () {
514     function UsageWalker() {
515         this._result = new Map();
516     }
517     UsageWalker.prototype.getUsage = function (sourceFile) {
518         var _this = this;
519         var variableCallback = function (variable, key) {
520             _this._result.set(key, variable);
521         };
522         var isModule = ts.isExternalModule(sourceFile);
523         this._scope = new RootScope(sourceFile.isDeclarationFile && isModule && !containsExportStatement(sourceFile), !isModule);
524         var cb = function (node) {
525             if (util_1.isBlockScopeBoundary(node))
526                 return continueWithScope(node, new BlockScope(_this._scope.getFunctionScope(), _this._scope), handleBlockScope);
527             switch (node.kind) {
528                 case ts.SyntaxKind.ClassExpression:
529                     return continueWithScope(node, node.name !== undefined
530                         ? new ClassExpressionScope(node.name, _this._scope)
531                         : new NonRootScope(_this._scope));
532                 case ts.SyntaxKind.ClassDeclaration:
533                     _this._handleDeclaration(node, true, 4 | 2);
534                     return continueWithScope(node, new NonRootScope(_this._scope));
535                 case ts.SyntaxKind.InterfaceDeclaration:
536                 case ts.SyntaxKind.TypeAliasDeclaration:
537                     _this._handleDeclaration(node, true, 2);
538                     return continueWithScope(node, new NonRootScope(_this._scope));
539                 case ts.SyntaxKind.EnumDeclaration:
540                     _this._handleDeclaration(node, true, 7);
541                     return continueWithScope(node, _this._scope.createOrReuseEnumScope(util_1.getIdentifierText(node.name), util_1.hasModifier(node.modifiers, ts.SyntaxKind.ExportKeyword)));
542                 case ts.SyntaxKind.ModuleDeclaration:
543                     return _this._handleModule(node, continueWithScope);
544                 case ts.SyntaxKind.MappedType:
545                     return continueWithScope(node, new NonRootScope(_this._scope));
546                 case ts.SyntaxKind.FunctionExpression:
547                 case ts.SyntaxKind.ArrowFunction:
548                 case ts.SyntaxKind.Constructor:
549                 case ts.SyntaxKind.MethodDeclaration:
550                 case ts.SyntaxKind.FunctionDeclaration:
551                 case ts.SyntaxKind.GetAccessor:
552                 case ts.SyntaxKind.SetAccessor:
553                 case ts.SyntaxKind.MethodSignature:
554                 case ts.SyntaxKind.CallSignature:
555                 case ts.SyntaxKind.ConstructSignature:
556                 case ts.SyntaxKind.ConstructorType:
557                 case ts.SyntaxKind.FunctionType:
558                     return _this._handleFunctionLikeDeclaration(node, cb, variableCallback);
559                 case ts.SyntaxKind.ConditionalType:
560                     return _this._handleConditionalType(node, cb, variableCallback);
561                 case ts.SyntaxKind.VariableDeclarationList:
562                     _this._handleVariableDeclaration(node);
563                     break;
564                 case ts.SyntaxKind.Parameter:
565                     if (node.parent.kind !== ts.SyntaxKind.IndexSignature &&
566                         (node.name.kind !== ts.SyntaxKind.Identifier ||
567                             node.name.originalKeywordKind !== ts.SyntaxKind.ThisKeyword))
568                         _this._handleBindingName(node.name, false, false);
569                     break;
570                 case ts.SyntaxKind.EnumMember:
571                     _this._scope.addVariable(util_1.getPropertyName(node.name), node.name, false, true, 4);
572                     break;
573                 case ts.SyntaxKind.ImportClause:
574                 case ts.SyntaxKind.ImportSpecifier:
575                 case ts.SyntaxKind.NamespaceImport:
576                 case ts.SyntaxKind.ImportEqualsDeclaration:
577                     _this._handleDeclaration(node, false, 7 | 8);
578                     break;
579                 case ts.SyntaxKind.TypeParameter:
580                     _this._scope.addVariable(util_1.getIdentifierText(node.name), node.name, true, false, 2);
581                     break;
582                 case ts.SyntaxKind.ExportSpecifier:
583                     if (node.propertyName !== undefined)
584                         return _this._scope.markExported(node.propertyName, node.name);
585                     return _this._scope.markExported(node.name);
586                 case ts.SyntaxKind.ExportAssignment:
587                     if (node.expression.kind === ts.SyntaxKind.Identifier)
588                         return _this._scope.markExported(node.expression);
589                     break;
590                 case ts.SyntaxKind.Identifier:
591                     var domain = getUsageDomain(node);
592                     if (domain !== undefined)
593                         _this._scope.addUse({ domain: domain, location: node });
594                     return;
595             }
596             return ts.forEachChild(node, cb);
597         };
598         var continueWithScope = function (node, scope, next) {
599             if (next === void 0) { next = forEachChild; }
600             var savedScope = _this._scope;
601             _this._scope = scope;
602             next(node);
603             _this._scope.end(variableCallback);
604             _this._scope = savedScope;
605         };
606         var handleBlockScope = function (node) {
607             if (node.kind === ts.SyntaxKind.CatchClause && node.variableDeclaration !== undefined)
608                 _this._handleBindingName(node.variableDeclaration.name, true, false);
609             return ts.forEachChild(node, cb);
610         };
611         ts.forEachChild(sourceFile, cb);
612         this._scope.end(variableCallback);
613         return this._result;
614         function forEachChild(node) {
615             return ts.forEachChild(node, cb);
616         }
617     };
618     UsageWalker.prototype._handleConditionalType = function (node, cb, varCb) {
619         var savedScope = this._scope;
620         var scope = this._scope = new ConditionalTypeScope(savedScope);
621         cb(node.checkType);
622         scope.updateState(1);
623         cb(node.extendsType);
624         scope.updateState(2);
625         cb(node.trueType);
626         scope.updateState(3);
627         cb(node.falseType);
628         scope.end(varCb);
629         this._scope = savedScope;
630     };
631     UsageWalker.prototype._handleFunctionLikeDeclaration = function (node, cb, varCb) {
632         if (node.decorators !== undefined)
633             node.decorators.forEach(cb);
634         var savedScope = this._scope;
635         if (node.kind === ts.SyntaxKind.FunctionDeclaration)
636             this._handleDeclaration(node, false, 4);
637         var scope = this._scope = node.kind === ts.SyntaxKind.FunctionExpression && node.name !== undefined
638             ? new FunctionExpressionScope(node.name, savedScope)
639             : new FunctionScope(savedScope);
640         if (node.name !== undefined)
641             cb(node.name);
642         if (node.typeParameters !== undefined)
643             node.typeParameters.forEach(cb);
644         node.parameters.forEach(cb);
645         if (node.type !== undefined)
646             cb(node.type);
647         if (node.body !== undefined) {
648             scope.beginBody();
649             cb(node.body);
650         }
651         scope.end(varCb);
652         this._scope = savedScope;
653     };
654     UsageWalker.prototype._handleModule = function (node, next) {
655         if (node.flags & ts.NodeFlags.GlobalAugmentation)
656             return next(node, this._scope.createOrReuseNamespaceScope('-global', false, true, false));
657         if (node.name.kind === ts.SyntaxKind.Identifier) {
658             var exported = isNamespaceExported(node);
659             this._scope.addVariable(util_1.getIdentifierText(node.name), node.name, false, exported, 1 | 4);
660             var ambient = util_1.hasModifier(node.modifiers, ts.SyntaxKind.DeclareKeyword);
661             return next(node, this._scope.createOrReuseNamespaceScope(util_1.getIdentifierText(node.name), exported, ambient, ambient && namespaceHasExportStatement(node)));
662         }
663         return next(node, this._scope.createOrReuseNamespaceScope("\"" + node.name.text + "\"", false, true, namespaceHasExportStatement(node)));
664     };
665     UsageWalker.prototype._handleDeclaration = function (node, blockScoped, domain) {
666         if (node.name !== undefined)
667             this._scope.addVariable(util_1.getIdentifierText(node.name), node.name, blockScoped, util_1.hasModifier(node.modifiers, ts.SyntaxKind.ExportKeyword), domain);
668     };
669     UsageWalker.prototype._handleBindingName = function (name, blockScoped, exported) {
670         var _this = this;
671         if (name.kind === ts.SyntaxKind.Identifier)
672             return this._scope.addVariable(util_1.getIdentifierText(name), name, blockScoped, exported, 4);
673         util_1.forEachDestructuringIdentifier(name, function (declaration) {
674             _this._scope.addVariable(util_1.getIdentifierText(declaration.name), declaration.name, blockScoped, exported, 4);
675         });
676     };
677     UsageWalker.prototype._handleVariableDeclaration = function (declarationList) {
678         var blockScoped = util_1.isBlockScopedVariableDeclarationList(declarationList);
679         var exported = declarationList.parent.kind === ts.SyntaxKind.VariableStatement &&
680             util_1.hasModifier(declarationList.parent.modifiers, ts.SyntaxKind.ExportKeyword);
681         for (var _i = 0, _a = declarationList.declarations; _i < _a.length; _i++) {
682             var declaration = _a[_i];
683             this._handleBindingName(declaration.name, blockScoped, exported);
684         }
685     };
686     return UsageWalker;
687 }());
688 function isNamespaceExported(node) {
689     return node.parent.kind === ts.SyntaxKind.ModuleDeclaration || util_1.hasModifier(node.modifiers, ts.SyntaxKind.ExportKeyword);
690 }
691 function namespaceHasExportStatement(ns) {
692     if (ns.body === undefined || ns.body.kind !== ts.SyntaxKind.ModuleBlock)
693         return false;
694     return containsExportStatement(ns.body);
695 }
696 function containsExportStatement(block) {
697     for (var _i = 0, _a = block.statements; _i < _a.length; _i++) {
698         var statement = _a[_i];
699         if (statement.kind === ts.SyntaxKind.ExportDeclaration || statement.kind === ts.SyntaxKind.ExportAssignment)
700             return true;
701     }
702     return false;
703 }
704 //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1c2FnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFPZ0I7QUFDaEIsK0JBQWlDO0FBMkJqQyxJQUFrQixpQkFNakI7QUFORCxXQUFrQixpQkFBaUI7SUFDL0IsbUVBQWEsQ0FBQTtJQUNiLHlEQUFRLENBQUE7SUFDUiwyREFBUyxDQUFBO0lBQ1QsNkRBQVUsQ0FBQTtJQUNWLHVEQUE4QixDQUFBO0FBQ2xDLENBQUMsRUFOaUIsaUJBQWlCLEdBQWpCLHlCQUFpQixLQUFqQix5QkFBaUIsUUFNbEM7QUFFRCxJQUFrQixXQU9qQjtBQVBELFdBQWtCLFdBQVc7SUFDekIsdURBQWEsQ0FBQTtJQUNiLDZDQUFRLENBQUE7SUFDUiwrQ0FBUyxDQUFBO0lBQ1QscUVBQW9DLENBQUE7SUFDcEMsMkNBQThCLENBQUE7SUFDOUIsdURBQWEsQ0FBQTtBQUNqQixDQUFDLEVBUGlCLFdBQVcsR0FBWCxtQkFBVyxLQUFYLG1CQUFXLFFBTzVCO0FBRUQsU0FBZ0IsY0FBYyxDQUFDLElBQW1CO0lBQzlDLElBQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFPLENBQUM7SUFDNUIsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFO1FBQ2pCLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhO1lBQzVCLFNBQXdCO1FBQzVCLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQywyQkFBMkI7WUFDMUMsT0FBMkIsTUFBTSxDQUFDLE1BQU8sQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUI7Z0JBQy9FLE1BQU0sQ0FBQyxNQUFPLENBQUMsTUFBTyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLG9CQUFvQjtnQkFDbEUsQ0FBQztnQkFDRCxDQUFDLEVBQWtCLENBQUM7UUFDNUIsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVM7WUFDeEIsT0FBTyxLQUFvRCxDQUFD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