746 lines
65 KiB
JavaScript
746 lines
65 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var tslib_1 = require("tslib");
|
|
var util_1 = require("./util");
|
|
var ts = require("typescript");
|
|
var DeclarationDomain;
|
|
(function (DeclarationDomain) {
|
|
DeclarationDomain[DeclarationDomain["Namespace"] = 1] = "Namespace";
|
|
DeclarationDomain[DeclarationDomain["Type"] = 2] = "Type";
|
|
DeclarationDomain[DeclarationDomain["Value"] = 4] = "Value";
|
|
DeclarationDomain[DeclarationDomain["Import"] = 8] = "Import";
|
|
DeclarationDomain[DeclarationDomain["Any"] = 7] = "Any";
|
|
})(DeclarationDomain = exports.DeclarationDomain || (exports.DeclarationDomain = {}));
|
|
var UsageDomain;
|
|
(function (UsageDomain) {
|
|
UsageDomain[UsageDomain["Namespace"] = 1] = "Namespace";
|
|
UsageDomain[UsageDomain["Type"] = 2] = "Type";
|
|
UsageDomain[UsageDomain["Value"] = 4] = "Value";
|
|
UsageDomain[UsageDomain["ValueOrNamespace"] = 5] = "ValueOrNamespace";
|
|
UsageDomain[UsageDomain["Any"] = 7] = "Any";
|
|
UsageDomain[UsageDomain["TypeQuery"] = 8] = "TypeQuery";
|
|
})(UsageDomain = exports.UsageDomain || (exports.UsageDomain = {}));
|
|
function getUsageDomain(node) {
|
|
var parent = node.parent;
|
|
switch (parent.kind) {
|
|
case ts.SyntaxKind.TypeReference:
|
|
return 2;
|
|
case ts.SyntaxKind.ExpressionWithTypeArguments:
|
|
return parent.parent.token === ts.SyntaxKind.ImplementsKeyword ||
|
|
parent.parent.parent.kind === ts.SyntaxKind.InterfaceDeclaration
|
|
? 2
|
|
: 4;
|
|
case ts.SyntaxKind.TypeQuery:
|
|
return 5 | 8;
|
|
case ts.SyntaxKind.QualifiedName:
|
|
if (parent.left === node) {
|
|
if (getEntityNameParent(parent).kind === ts.SyntaxKind.TypeQuery)
|
|
return 1 | 8;
|
|
return 1;
|
|
}
|
|
break;
|
|
case ts.SyntaxKind.ExportSpecifier:
|
|
if (parent.propertyName === undefined ||
|
|
parent.propertyName === node)
|
|
return 7;
|
|
break;
|
|
case ts.SyntaxKind.ExportAssignment:
|
|
return 7;
|
|
case ts.SyntaxKind.BindingElement:
|
|
if (parent.initializer === node)
|
|
return 5;
|
|
break;
|
|
case ts.SyntaxKind.Parameter:
|
|
case ts.SyntaxKind.EnumMember:
|
|
case ts.SyntaxKind.PropertyDeclaration:
|
|
case ts.SyntaxKind.VariableDeclaration:
|
|
case ts.SyntaxKind.PropertyAssignment:
|
|
case ts.SyntaxKind.PropertyAccessExpression:
|
|
case ts.SyntaxKind.ImportEqualsDeclaration:
|
|
if (parent.name !== node)
|
|
return 5;
|
|
break;
|
|
case ts.SyntaxKind.JsxAttribute:
|
|
case ts.SyntaxKind.FunctionDeclaration:
|
|
case ts.SyntaxKind.FunctionExpression:
|
|
case ts.SyntaxKind.NamespaceImport:
|
|
case ts.SyntaxKind.ClassDeclaration:
|
|
case ts.SyntaxKind.ClassExpression:
|
|
case ts.SyntaxKind.ModuleDeclaration:
|
|
case ts.SyntaxKind.MethodDeclaration:
|
|
case ts.SyntaxKind.EnumDeclaration:
|
|
case ts.SyntaxKind.GetAccessor:
|
|
case ts.SyntaxKind.SetAccessor:
|
|
case ts.SyntaxKind.LabeledStatement:
|
|
case ts.SyntaxKind.BreakStatement:
|
|
case ts.SyntaxKind.ContinueStatement:
|
|
case ts.SyntaxKind.ImportClause:
|
|
case ts.SyntaxKind.ImportSpecifier:
|
|
case ts.SyntaxKind.TypePredicate:
|
|
case ts.SyntaxKind.MethodSignature:
|
|
case ts.SyntaxKind.PropertySignature:
|
|
case ts.SyntaxKind.NamespaceExportDeclaration:
|
|
case ts.SyntaxKind.InterfaceDeclaration:
|
|
case ts.SyntaxKind.TypeAliasDeclaration:
|
|
case ts.SyntaxKind.TypeParameter:
|
|
break;
|
|
default:
|
|
return 5;
|
|
}
|
|
}
|
|
exports.getUsageDomain = getUsageDomain;
|
|
function getDeclarationDomain(node) {
|
|
switch (node.parent.kind) {
|
|
case ts.SyntaxKind.TypeParameter:
|
|
case ts.SyntaxKind.InterfaceDeclaration:
|
|
case ts.SyntaxKind.TypeAliasDeclaration:
|
|
return 2;
|
|
case ts.SyntaxKind.ClassDeclaration:
|
|
case ts.SyntaxKind.ClassExpression:
|
|
return 2 | 4;
|
|
case ts.SyntaxKind.EnumDeclaration:
|
|
return 7;
|
|
case ts.SyntaxKind.NamespaceImport:
|
|
case ts.SyntaxKind.ImportClause:
|
|
return 7 | 8;
|
|
case ts.SyntaxKind.ImportEqualsDeclaration:
|
|
case ts.SyntaxKind.ImportSpecifier:
|
|
return node.parent.name === node
|
|
? 7 | 8
|
|
: undefined;
|
|
case ts.SyntaxKind.ModuleDeclaration:
|
|
return 1;
|
|
case ts.SyntaxKind.Parameter:
|
|
if (node.parent.parent.kind === ts.SyntaxKind.IndexSignature)
|
|
return;
|
|
case ts.SyntaxKind.BindingElement:
|
|
case ts.SyntaxKind.VariableDeclaration:
|
|
return node.parent.name === node ? 4 : undefined;
|
|
case ts.SyntaxKind.FunctionDeclaration:
|
|
case ts.SyntaxKind.FunctionExpression:
|
|
return 4;
|
|
}
|
|
}
|
|
exports.getDeclarationDomain = getDeclarationDomain;
|
|
function collectVariableUsage(sourceFile) {
|
|
return new UsageWalker().getUsage(sourceFile);
|
|
}
|
|
exports.collectVariableUsage = collectVariableUsage;
|
|
var AbstractScope = (function () {
|
|
function AbstractScope(_global) {
|
|
this._global = _global;
|
|
this._variables = new Map();
|
|
this._uses = [];
|
|
this._namespaceScopes = undefined;
|
|
this._enumScopes = undefined;
|
|
}
|
|
AbstractScope.prototype.addVariable = function (identifier, name, blockScoped, exported, domain) {
|
|
var variables = this._getDestinationScope(blockScoped).getVariables();
|
|
var declaration = {
|
|
domain: domain,
|
|
exported: exported,
|
|
declaration: name,
|
|
};
|
|
var variable = variables.get(identifier);
|
|
if (variable === undefined) {
|
|
variables.set(identifier, {
|
|
domain: domain,
|
|
declarations: [declaration],
|
|
uses: [],
|
|
});
|
|
}
|
|
else {
|
|
variable.domain |= domain;
|
|
variable.declarations.push(declaration);
|
|
}
|
|
};
|
|
AbstractScope.prototype.addUse = function (use) {
|
|
this._uses.push(use);
|
|
};
|
|
AbstractScope.prototype.getVariables = function () {
|
|
return this._variables;
|
|
};
|
|
AbstractScope.prototype.getFunctionScope = function () {
|
|
return this;
|
|
};
|
|
AbstractScope.prototype.end = function (cb) {
|
|
var _this = this;
|
|
if (this._namespaceScopes !== undefined)
|
|
this._namespaceScopes.forEach(function (value) { return value.finish(cb); });
|
|
this._namespaceScopes = this._enumScopes = undefined;
|
|
this._applyUses();
|
|
this._variables.forEach(function (variable) {
|
|
for (var _i = 0, _a = variable.declarations; _i < _a.length; _i++) {
|
|
var declaration = _a[_i];
|
|
var result = {
|
|
declarations: [],
|
|
domain: declaration.domain,
|
|
exported: declaration.exported,
|
|
inGlobalScope: _this._global,
|
|
uses: [],
|
|
};
|
|
for (var _b = 0, _c = variable.declarations; _b < _c.length; _b++) {
|
|
var other = _c[_b];
|
|
if (other.domain & declaration.domain)
|
|
result.declarations.push(other.declaration);
|
|
}
|
|
for (var _d = 0, _e = variable.uses; _d < _e.length; _d++) {
|
|
var use = _e[_d];
|
|
if (use.domain & declaration.domain)
|
|
result.uses.push(use);
|
|
}
|
|
cb(result, declaration.declaration, _this);
|
|
}
|
|
});
|
|
};
|
|
AbstractScope.prototype.markExported = function (_name) { };
|
|
AbstractScope.prototype.createOrReuseNamespaceScope = function (name, _exported, ambient, hasExportStatement) {
|
|
var scope;
|
|
if (this._namespaceScopes === undefined) {
|
|
this._namespaceScopes = new Map();
|
|
}
|
|
else {
|
|
scope = this._namespaceScopes.get(name);
|
|
}
|
|
if (scope === undefined) {
|
|
scope = new NamespaceScope(ambient, hasExportStatement, this);
|
|
this._namespaceScopes.set(name, scope);
|
|
}
|
|
else {
|
|
scope.refresh(ambient, hasExportStatement);
|
|
}
|
|
return scope;
|
|
};
|
|
AbstractScope.prototype.createOrReuseEnumScope = function (name, _exported) {
|
|
var scope;
|
|
if (this._enumScopes === undefined) {
|
|
this._enumScopes = new Map();
|
|
}
|
|
else {
|
|
scope = this._enumScopes.get(name);
|
|
}
|
|
if (scope === undefined) {
|
|
scope = new EnumScope(this);
|
|
this._enumScopes.set(name, scope);
|
|
}
|
|
return scope;
|
|
};
|
|
AbstractScope.prototype._applyUses = function () {
|
|
for (var _i = 0, _a = this._uses; _i < _a.length; _i++) {
|
|
var use = _a[_i];
|
|
if (!this._applyUse(use))
|
|
this._addUseToParent(use);
|
|
}
|
|
};
|
|
AbstractScope.prototype._applyUse = function (use, variables) {
|
|
if (variables === void 0) { variables = this._variables; }
|
|
var variable = variables.get(util_1.getIdentifierText(use.location));
|
|
if (variable === undefined || (variable.domain & use.domain) === 0)
|
|
return false;
|
|
variable.uses.push(use);
|
|
return true;
|
|
};
|
|
AbstractScope.prototype._getDestinationScope = function (_blockScoped) {
|
|
return this;
|
|
};
|
|
AbstractScope.prototype._addUseToParent = function (_use) { };
|
|
return AbstractScope;
|
|
}());
|
|
var RootScope = (function (_super) {
|
|
tslib_1.__extends(RootScope, _super);
|
|
function RootScope(_exportAll, global) {
|
|
var _this = _super.call(this, global) || this;
|
|
_this._exportAll = _exportAll;
|
|
_this._exports = undefined;
|
|
_this._innerScope = new NonRootScope(_this);
|
|
return _this;
|
|
}
|
|
RootScope.prototype.addVariable = function (identifier, name, blockScoped, exported, domain) {
|
|
if (domain & 8)
|
|
return _super.prototype.addVariable.call(this, identifier, name, blockScoped, exported, domain);
|
|
return this._innerScope.addVariable(identifier, name, blockScoped, exported, domain);
|
|
};
|
|
RootScope.prototype.addUse = function (use, origin) {
|
|
if (origin === this._innerScope)
|
|
return _super.prototype.addUse.call(this, use);
|
|
return this._innerScope.addUse(use);
|
|
};
|
|
RootScope.prototype.markExported = function (id) {
|
|
var text = util_1.getIdentifierText(id);
|
|
if (this._exports === undefined) {
|
|
this._exports = [text];
|
|
}
|
|
else {
|
|
this._exports.push(text);
|
|
}
|
|
};
|
|
RootScope.prototype.end = function (cb) {
|
|
var _this = this;
|
|
this._innerScope.end(function (value, key) {
|
|
value.exported = value.exported || _this._exportAll
|
|
|| _this._exports !== undefined && _this._exports.indexOf(util_1.getIdentifierText(key)) !== -1;
|
|
value.inGlobalScope = _this._global;
|
|
return cb(value, key, _this);
|
|
});
|
|
return _super.prototype.end.call(this, function (value, key, scope) {
|
|
value.exported = value.exported || scope === _this
|
|
&& _this._exports !== undefined && _this._exports.indexOf(util_1.getIdentifierText(key)) !== -1;
|
|
return cb(value, key, scope);
|
|
});
|
|
};
|
|
return RootScope;
|
|
}(AbstractScope));
|
|
var NonRootScope = (function (_super) {
|
|
tslib_1.__extends(NonRootScope, _super);
|
|
function NonRootScope(_parent) {
|
|
var _this = _super.call(this, false) || this;
|
|
_this._parent = _parent;
|
|
return _this;
|
|
}
|
|
NonRootScope.prototype._addUseToParent = function (use) {
|
|
return this._parent.addUse(use, this);
|
|
};
|
|
return NonRootScope;
|
|
}(AbstractScope));
|
|
var EnumScope = (function (_super) {
|
|
tslib_1.__extends(EnumScope, _super);
|
|
function EnumScope() {
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
}
|
|
EnumScope.prototype.end = function () {
|
|
this._applyUses();
|
|
this._uses = [];
|
|
};
|
|
return EnumScope;
|
|
}(NonRootScope));
|
|
var ConditionalTypeScopeState;
|
|
(function (ConditionalTypeScopeState) {
|
|
ConditionalTypeScopeState[ConditionalTypeScopeState["Initial"] = 0] = "Initial";
|
|
ConditionalTypeScopeState[ConditionalTypeScopeState["Extends"] = 1] = "Extends";
|
|
ConditionalTypeScopeState[ConditionalTypeScopeState["TrueType"] = 2] = "TrueType";
|
|
ConditionalTypeScopeState[ConditionalTypeScopeState["FalseType"] = 3] = "FalseType";
|
|
})(ConditionalTypeScopeState || (ConditionalTypeScopeState = {}));
|
|
var ConditionalTypeScope = (function (_super) {
|
|
tslib_1.__extends(ConditionalTypeScope, _super);
|
|
function ConditionalTypeScope() {
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
_this._state = 0;
|
|
return _this;
|
|
}
|
|
ConditionalTypeScope.prototype.updateState = function (newState) {
|
|
this._state = newState;
|
|
};
|
|
ConditionalTypeScope.prototype.addUse = function (use) {
|
|
if (this._state === 2)
|
|
return void this._uses.push(use);
|
|
return this._parent.addUse(use, this);
|
|
};
|
|
return ConditionalTypeScope;
|
|
}(NonRootScope));
|
|
var FunctionScopeState;
|
|
(function (FunctionScopeState) {
|
|
FunctionScopeState[FunctionScopeState["Initial"] = 0] = "Initial";
|
|
FunctionScopeState[FunctionScopeState["Parameter"] = 1] = "Parameter";
|
|
FunctionScopeState[FunctionScopeState["ReturnType"] = 2] = "ReturnType";
|
|
FunctionScopeState[FunctionScopeState["Body"] = 3] = "Body";
|
|
})(FunctionScopeState || (FunctionScopeState = {}));
|
|
var FunctionScope = (function (_super) {
|
|
tslib_1.__extends(FunctionScope, _super);
|
|
function FunctionScope() {
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
_this._innerScope = new NonRootScope(_this);
|
|
_this._state = 0;
|
|
return _this;
|
|
}
|
|
FunctionScope.prototype.end = function (cb) {
|
|
this._innerScope.end(cb);
|
|
_super.prototype.end.call(this, cb);
|
|
};
|
|
FunctionScope.prototype.updateState = function (newState) {
|
|
this._state = newState;
|
|
};
|
|
FunctionScope.prototype.addUse = function (use, source) {
|
|
if (source === this._innerScope)
|
|
return void this._uses.push(use);
|
|
switch (this._state) {
|
|
case 1:
|
|
if ((use.domain & 4) === 0 || use.domain & 8)
|
|
return void this._uses.push(use);
|
|
if (this._applyUse(use) || this._applyUse(use, this._innerScope.getVariables()))
|
|
return;
|
|
break;
|
|
case 2:
|
|
if (this._applyUse(use))
|
|
return;
|
|
break;
|
|
case 3:
|
|
return this._innerScope.addUse(use);
|
|
case 0:
|
|
return void this._uses.push(use);
|
|
}
|
|
return this._parent.addUse(use, this);
|
|
};
|
|
FunctionScope.prototype._getDestinationScope = function (blockScoped) {
|
|
return blockScoped ? this._innerScope : this;
|
|
};
|
|
return FunctionScope;
|
|
}(NonRootScope));
|
|
var AbstractNamedExpressionScope = (function (_super) {
|
|
tslib_1.__extends(AbstractNamedExpressionScope, _super);
|
|
function AbstractNamedExpressionScope(_name, _domain, parent) {
|
|
var _this = _super.call(this, parent) || this;
|
|
_this._name = _name;
|
|
_this._domain = _domain;
|
|
return _this;
|
|
}
|
|
AbstractNamedExpressionScope.prototype.end = function (cb) {
|
|
this._innerScope.end(cb);
|
|
return cb({
|
|
declarations: [this._name],
|
|
domain: this._domain,
|
|
exported: false,
|
|
uses: this._uses,
|
|
inGlobalScope: false,
|
|
}, this._name, this);
|
|
};
|
|
AbstractNamedExpressionScope.prototype.addUse = function (use, source) {
|
|
if (source !== this._innerScope)
|
|
return this._innerScope.addUse(use);
|
|
if (use.domain & this._domain && util_1.getIdentifierText(use.location) === util_1.getIdentifierText(this._name)) {
|
|
this._uses.push(use);
|
|
}
|
|
else {
|
|
return this._parent.addUse(use, this);
|
|
}
|
|
};
|
|
AbstractNamedExpressionScope.prototype.getFunctionScope = function () {
|
|
return this._innerScope;
|
|
};
|
|
AbstractNamedExpressionScope.prototype._getDestinationScope = function () {
|
|
return this._innerScope;
|
|
};
|
|
return AbstractNamedExpressionScope;
|
|
}(NonRootScope));
|
|
var FunctionExpressionScope = (function (_super) {
|
|
tslib_1.__extends(FunctionExpressionScope, _super);
|
|
function FunctionExpressionScope(name, parent) {
|
|
var _this = _super.call(this, name, 4, parent) || this;
|
|
_this._innerScope = new FunctionScope(_this);
|
|
return _this;
|
|
}
|
|
FunctionExpressionScope.prototype.updateState = function (newState) {
|
|
return this._innerScope.updateState(newState);
|
|
};
|
|
return FunctionExpressionScope;
|
|
}(AbstractNamedExpressionScope));
|
|
var ClassExpressionScope = (function (_super) {
|
|
tslib_1.__extends(ClassExpressionScope, _super);
|
|
function ClassExpressionScope(name, parent) {
|
|
var _this = _super.call(this, name, 4 | 2, parent) || this;
|
|
_this._innerScope = new NonRootScope(_this);
|
|
return _this;
|
|
}
|
|
return ClassExpressionScope;
|
|
}(AbstractNamedExpressionScope));
|
|
var BlockScope = (function (_super) {
|
|
tslib_1.__extends(BlockScope, _super);
|
|
function BlockScope(_functionScope, parent) {
|
|
var _this = _super.call(this, parent) || this;
|
|
_this._functionScope = _functionScope;
|
|
return _this;
|
|
}
|
|
BlockScope.prototype.getFunctionScope = function () {
|
|
return this._functionScope;
|
|
};
|
|
BlockScope.prototype._getDestinationScope = function (blockScoped) {
|
|
return blockScoped ? this : this._functionScope;
|
|
};
|
|
return BlockScope;
|
|
}(NonRootScope));
|
|
function mapDeclaration(declaration) {
|
|
return {
|
|
declaration: declaration,
|
|
exported: true,
|
|
domain: getDeclarationDomain(declaration),
|
|
};
|
|
}
|
|
var NamespaceScope = (function (_super) {
|
|
tslib_1.__extends(NamespaceScope, _super);
|
|
function NamespaceScope(_ambient, _hasExport, parent) {
|
|
var _this = _super.call(this, parent) || this;
|
|
_this._ambient = _ambient;
|
|
_this._hasExport = _hasExport;
|
|
_this._innerScope = new NonRootScope(_this);
|
|
_this._exports = undefined;
|
|
return _this;
|
|
}
|
|
NamespaceScope.prototype.finish = function (cb) {
|
|
return _super.prototype.end.call(this, cb);
|
|
};
|
|
NamespaceScope.prototype.end = function (cb) {
|
|
var _this = this;
|
|
this._innerScope.end(function (variable, key, scope) {
|
|
if (scope !== _this._innerScope ||
|
|
!variable.exported && (!_this._ambient || _this._exports !== undefined && !_this._exports.has(util_1.getIdentifierText(key))))
|
|
return cb(variable, key, scope);
|
|
var namespaceVar = _this._variables.get(util_1.getIdentifierText(key));
|
|
if (namespaceVar === undefined) {
|
|
_this._variables.set(util_1.getIdentifierText(key), {
|
|
declarations: variable.declarations.map(mapDeclaration),
|
|
domain: variable.domain,
|
|
uses: variable.uses.slice(),
|
|
});
|
|
}
|
|
else {
|
|
outer: for (var _i = 0, _a = variable.declarations; _i < _a.length; _i++) {
|
|
var declaration = _a[_i];
|
|
for (var _b = 0, _c = namespaceVar.declarations; _b < _c.length; _b++) {
|
|
var existing = _c[_b];
|
|
if (existing.declaration === declaration)
|
|
continue outer;
|
|
}
|
|
namespaceVar.declarations.push(mapDeclaration(declaration));
|
|
}
|
|
namespaceVar.domain |= variable.domain;
|
|
for (var _d = 0, _e = variable.uses; _d < _e.length; _d++) {
|
|
var use = _e[_d];
|
|
if (namespaceVar.uses.indexOf(use) !== -1)
|
|
continue;
|
|
namespaceVar.uses.push(use);
|
|
}
|
|
}
|
|
});
|
|
this._applyUses();
|
|
this._innerScope = new NonRootScope(this);
|
|
this._uses = [];
|
|
};
|
|
NamespaceScope.prototype.createOrReuseNamespaceScope = function (name, exported, ambient, hasExportStatement) {
|
|
if (!exported && (!this._ambient || this._hasExport))
|
|
return this._innerScope.createOrReuseNamespaceScope(name, exported, ambient || this._ambient, hasExportStatement);
|
|
return _super.prototype.createOrReuseNamespaceScope.call(this, name, exported, ambient || this._ambient, hasExportStatement);
|
|
};
|
|
NamespaceScope.prototype.createOrReuseEnumScope = function (name, exported) {
|
|
if (!exported && (!this._ambient || this._hasExport))
|
|
return this._innerScope.createOrReuseEnumScope(name, exported);
|
|
return _super.prototype.createOrReuseEnumScope.call(this, name, exported);
|
|
};
|
|
NamespaceScope.prototype.addUse = function (use, source) {
|
|
if (source !== this._innerScope)
|
|
return this._innerScope.addUse(use);
|
|
this._uses.push(use);
|
|
};
|
|
NamespaceScope.prototype.refresh = function (ambient, hasExport) {
|
|
this._ambient = ambient;
|
|
this._hasExport = hasExport;
|
|
};
|
|
NamespaceScope.prototype.markExported = function (name, _as) {
|
|
if (this._exports === undefined)
|
|
this._exports = new Set();
|
|
this._exports.add(util_1.getIdentifierText(name));
|
|
};
|
|
NamespaceScope.prototype._getDestinationScope = function () {
|
|
return this._innerScope;
|
|
};
|
|
return NamespaceScope;
|
|
}(NonRootScope));
|
|
function getEntityNameParent(name) {
|
|
var parent = name.parent;
|
|
while (parent.kind === ts.SyntaxKind.QualifiedName)
|
|
parent = parent.parent;
|
|
return parent;
|
|
}
|
|
var UsageWalker = (function () {
|
|
function UsageWalker() {
|
|
this._result = new Map();
|
|
}
|
|
UsageWalker.prototype.getUsage = function (sourceFile) {
|
|
var _this = this;
|
|
var variableCallback = function (variable, key) {
|
|
_this._result.set(key, variable);
|
|
};
|
|
var isModule = ts.isExternalModule(sourceFile);
|
|
this._scope = new RootScope(sourceFile.isDeclarationFile && isModule && !containsExportStatement(sourceFile), !isModule);
|
|
var cb = function (node) {
|
|
if (util_1.isBlockScopeBoundary(node))
|
|
return continueWithScope(node, new BlockScope(_this._scope.getFunctionScope(), _this._scope), handleBlockScope);
|
|
switch (node.kind) {
|
|
case ts.SyntaxKind.ClassExpression:
|
|
return continueWithScope(node, node.name !== undefined
|
|
? new ClassExpressionScope(node.name, _this._scope)
|
|
: new NonRootScope(_this._scope));
|
|
case ts.SyntaxKind.ClassDeclaration:
|
|
_this._handleDeclaration(node, true, 4 | 2);
|
|
return continueWithScope(node, new NonRootScope(_this._scope));
|
|
case ts.SyntaxKind.InterfaceDeclaration:
|
|
case ts.SyntaxKind.TypeAliasDeclaration:
|
|
_this._handleDeclaration(node, true, 2);
|
|
return continueWithScope(node, new NonRootScope(_this._scope));
|
|
case ts.SyntaxKind.EnumDeclaration:
|
|
_this._handleDeclaration(node, true, 7);
|
|
return continueWithScope(node, _this._scope.createOrReuseEnumScope(util_1.getIdentifierText(node.name), util_1.hasModifier(node.modifiers, ts.SyntaxKind.ExportKeyword)));
|
|
case ts.SyntaxKind.ModuleDeclaration:
|
|
return _this._handleModule(node, continueWithScope);
|
|
case ts.SyntaxKind.MappedType:
|
|
return continueWithScope(node, new NonRootScope(_this._scope));
|
|
case ts.SyntaxKind.FunctionExpression:
|
|
case ts.SyntaxKind.ArrowFunction:
|
|
case ts.SyntaxKind.Constructor:
|
|
case ts.SyntaxKind.MethodDeclaration:
|
|
case ts.SyntaxKind.FunctionDeclaration:
|
|
case ts.SyntaxKind.GetAccessor:
|
|
case ts.SyntaxKind.SetAccessor:
|
|
case ts.SyntaxKind.MethodSignature:
|
|
case ts.SyntaxKind.CallSignature:
|
|
case ts.SyntaxKind.ConstructSignature:
|
|
case ts.SyntaxKind.ConstructorType:
|
|
case ts.SyntaxKind.FunctionType:
|
|
return _this._handleFunctionLikeDeclaration(node, cb, variableCallback);
|
|
case ts.SyntaxKind.ConditionalType:
|
|
return _this._handleConditionalType(node, cb, variableCallback);
|
|
case ts.SyntaxKind.VariableDeclarationList:
|
|
_this._handleVariableDeclaration(node);
|
|
break;
|
|
case ts.SyntaxKind.Parameter:
|
|
if (node.parent.kind !== ts.SyntaxKind.IndexSignature &&
|
|
(node.name.kind !== ts.SyntaxKind.Identifier ||
|
|
node.name.originalKeywordKind !== ts.SyntaxKind.ThisKeyword))
|
|
_this._handleBindingName(node.name, false, false, true);
|
|
break;
|
|
case ts.SyntaxKind.EnumMember:
|
|
_this._scope.addVariable(util_1.getPropertyName(node.name), node.name, false, true, 4);
|
|
break;
|
|
case ts.SyntaxKind.ImportClause:
|
|
case ts.SyntaxKind.ImportSpecifier:
|
|
case ts.SyntaxKind.NamespaceImport:
|
|
case ts.SyntaxKind.ImportEqualsDeclaration:
|
|
_this._handleDeclaration(node, false, 7 | 8);
|
|
break;
|
|
case ts.SyntaxKind.TypeParameter:
|
|
_this._scope.addVariable(util_1.getIdentifierText(node.name), node.name, false, false, 2);
|
|
break;
|
|
case ts.SyntaxKind.ExportSpecifier:
|
|
if (node.propertyName !== undefined)
|
|
return _this._scope.markExported(node.propertyName, node.name);
|
|
return _this._scope.markExported(node.name);
|
|
case ts.SyntaxKind.ExportAssignment:
|
|
if (node.expression.kind === ts.SyntaxKind.Identifier)
|
|
return _this._scope.markExported(node.expression);
|
|
break;
|
|
case ts.SyntaxKind.Identifier:
|
|
var domain = getUsageDomain(node);
|
|
if (domain !== undefined)
|
|
_this._scope.addUse({ domain: domain, location: node });
|
|
return;
|
|
}
|
|
return ts.forEachChild(node, cb);
|
|
};
|
|
var continueWithScope = function (node, scope, next) {
|
|
if (next === void 0) { next = forEachChild; }
|
|
var savedScope = _this._scope;
|
|
_this._scope = scope;
|
|
next(node);
|
|
_this._scope.end(variableCallback);
|
|
_this._scope = savedScope;
|
|
};
|
|
var handleBlockScope = function (node) {
|
|
if (node.kind === ts.SyntaxKind.CatchClause && node.variableDeclaration !== undefined)
|
|
_this._handleBindingName(node.variableDeclaration.name, true, false);
|
|
return ts.forEachChild(node, cb);
|
|
};
|
|
ts.forEachChild(sourceFile, cb);
|
|
this._scope.end(variableCallback);
|
|
return this._result;
|
|
function forEachChild(node) {
|
|
return ts.forEachChild(node, cb);
|
|
}
|
|
};
|
|
UsageWalker.prototype._handleConditionalType = function (node, cb, varCb) {
|
|
var savedScope = this._scope;
|
|
var scope = this._scope = new ConditionalTypeScope(savedScope);
|
|
cb(node.checkType);
|
|
scope.updateState(1);
|
|
cb(node.extendsType);
|
|
scope.updateState(2);
|
|
cb(node.trueType);
|
|
scope.updateState(3);
|
|
cb(node.falseType);
|
|
scope.end(varCb);
|
|
this._scope = savedScope;
|
|
};
|
|
UsageWalker.prototype._handleFunctionLikeDeclaration = function (node, cb, varCb) {
|
|
if (node.decorators !== undefined)
|
|
node.decorators.forEach(cb);
|
|
var savedScope = this._scope;
|
|
if (node.kind === ts.SyntaxKind.FunctionDeclaration)
|
|
this._handleDeclaration(node, false, 4);
|
|
var scope = this._scope = node.kind === ts.SyntaxKind.FunctionExpression && node.name !== undefined
|
|
? new FunctionExpressionScope(node.name, savedScope)
|
|
: new FunctionScope(savedScope);
|
|
if (node.name !== undefined)
|
|
cb(node.name);
|
|
if (node.typeParameters !== undefined)
|
|
node.typeParameters.forEach(cb);
|
|
scope.updateState(1);
|
|
node.parameters.forEach(cb);
|
|
if (node.type !== undefined) {
|
|
scope.updateState(2);
|
|
cb(node.type);
|
|
}
|
|
if (node.body !== undefined) {
|
|
scope.updateState(3);
|
|
cb(node.body);
|
|
}
|
|
scope.end(varCb);
|
|
this._scope = savedScope;
|
|
};
|
|
UsageWalker.prototype._handleModule = function (node, next) {
|
|
if (node.flags & ts.NodeFlags.GlobalAugmentation)
|
|
return next(node, this._scope.createOrReuseNamespaceScope('-global', false, true, false));
|
|
if (node.name.kind === ts.SyntaxKind.Identifier) {
|
|
var exported = isNamespaceExported(node);
|
|
this._scope.addVariable(util_1.getIdentifierText(node.name), node.name, false, exported, 1 | 4);
|
|
var ambient = util_1.hasModifier(node.modifiers, ts.SyntaxKind.DeclareKeyword);
|
|
return next(node, this._scope.createOrReuseNamespaceScope(util_1.getIdentifierText(node.name), exported, ambient, ambient && namespaceHasExportStatement(node)));
|
|
}
|
|
return next(node, this._scope.createOrReuseNamespaceScope("\"" + node.name.text + "\"", false, true, namespaceHasExportStatement(node)));
|
|
};
|
|
UsageWalker.prototype._handleDeclaration = function (node, blockScoped, domain) {
|
|
if (node.name !== undefined)
|
|
this._scope.addVariable(util_1.getIdentifierText(node.name), node.name, blockScoped, util_1.hasModifier(node.modifiers, ts.SyntaxKind.ExportKeyword), domain);
|
|
};
|
|
UsageWalker.prototype._handleBindingName = function (name, blockScoped, exported, isParameter) {
|
|
var _this = this;
|
|
if (name.kind === ts.SyntaxKind.Identifier)
|
|
return this._scope.addVariable(util_1.getIdentifierText(name), name, blockScoped, exported, 4);
|
|
util_1.forEachDestructuringIdentifier(name, function (declaration) {
|
|
_this._scope.addVariable(util_1.getIdentifierText(declaration.name), declaration.name, isParameter || blockScoped, exported, 4);
|
|
});
|
|
};
|
|
UsageWalker.prototype._handleVariableDeclaration = function (declarationList) {
|
|
var blockScoped = util_1.isBlockScopedVariableDeclarationList(declarationList);
|
|
var exported = declarationList.parent.kind === ts.SyntaxKind.VariableStatement &&
|
|
util_1.hasModifier(declarationList.parent.modifiers, ts.SyntaxKind.ExportKeyword);
|
|
for (var _i = 0, _a = declarationList.declarations; _i < _a.length; _i++) {
|
|
var declaration = _a[_i];
|
|
this._handleBindingName(declaration.name, blockScoped, exported);
|
|
}
|
|
};
|
|
return UsageWalker;
|
|
}());
|
|
function isNamespaceExported(node) {
|
|
return node.parent.kind === ts.SyntaxKind.ModuleDeclaration || util_1.hasModifier(node.modifiers, ts.SyntaxKind.ExportKeyword);
|
|
}
|
|
function namespaceHasExportStatement(ns) {
|
|
if (ns.body === undefined || ns.body.kind !== ts.SyntaxKind.ModuleBlock)
|
|
return false;
|
|
return containsExportStatement(ns.body);
|
|
}
|
|
function containsExportStatement(block) {
|
|
for (var _i = 0, _a = block.statements; _i < _a.length; _i++) {
|
|
var statement = _a[_i];
|
|
if (statement.kind === ts.SyntaxKind.ExportDeclaration || statement.kind === ts.SyntaxKind.ExportAssignment)
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1c2FnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFPZ0I7QUFDaEIsK0JBQWlDO0FBMkJqQyxJQUFrQixpQkFNakI7QUFORCxXQUFrQixpQkFBaUI7SUFDL0IsbUVBQWEsQ0FBQTtJQUNiLHlEQUFRLENBQUE7SUFDUiwyREFBUyxDQUFBO0lBQ1QsNkRBQVUsQ0FBQTtJQUNWLHVEQUE4QixDQUFBO0FBQ2xDLENBQUMsRUFOaUIsaUJBQWlCLEdBQWpCLHlCQUFpQixLQUFqQix5QkFBaUIsUUFNbEM7QUFFRCxJQUFrQixXQU9qQjtBQVBELFdBQWtCLFdBQVc7SUFDekIsdURBQWEsQ0FBQTtJQUNiLDZDQUFRLENBQUE7SUFDUiwrQ0FBUyxDQUFBO0lBQ1QscUVBQW9DLENBQUE7SUFDcEMsMkNBQThCLENBQUE7SUFDOUIsdURBQWEsQ0FBQTtBQUNqQixDQUFDLEVBUGlCLFdBQVcsR0FBWCxtQkFBVyxLQUFYLG1CQUFXLFFBTzVCO0FBRUQsd0JBQStCLElBQW1CO0lBQzlDLElBQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFPLENBQUM7SUFDNUIsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFO1FBQ2pCLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhO1lBQzVCLFNBQXdCO1FBQzVCLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQywyQkFBMkI7WUFDMUMsT0FBMkIsTUFBTSxDQUFDLE1BQU8sQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUI7Z0JBQy9FLE1BQU0sQ0FBQyxNQUFPLENBQUMsTUFBTyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLG9CQUFvQjtnQkFDbEUsQ0FBQztnQkFDRCxDQUFDLEVBQWtCLENBQUM7UUFDNUIsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVM7WUFDeEIsT0FBTyxLQUFvRCxDQUFDO1FBQ2hFLEtB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
|