escomplex-coffee
Version:
Software complexity analysis for CoffeeScript projects. CoffeeScript-specific wrapper around escomplex.
88 lines (72 loc) • 3.13 kB
JavaScript
// Generated by CoffeeScript 1.9.0
(function() {
var amdPathAliases, createDependency, getName, processAmdRequire, processAmdRequireConfig, processAmdRequireConfigProperty, processAmdRequireItem, processCommonJSRequire, processRequire, resolveAmdRequireDependency, resolveRequireDependency, setAmdPathAlias, stripString;
getName = require("./util").getName;
stripString = function(str) {
return str.replace(/['"]+/g, '');
};
amdPathAliases = {};
createDependency = function(node, path, type) {
return {
line: node.locationData.first_line,
path: path,
type: type
};
};
resolveRequireDependency = function(dependency, resolver) {
if (getName(dependency) === 'Value' && getName(dependency.base) === 'Literal') {
if (typeof resolver === 'function') {
return resolver(dependency.base.value);
}
return stripString(dependency.base.value);
}
return '* dynamic dependency *';
};
resolveAmdRequireDependency = function(dependency) {
dependency = stripString(dependency);
return amdPathAliases[dependency] || dependency;
};
processAmdRequireItem = function(node, item) {
return createDependency(node, resolveRequireDependency(item, resolveAmdRequireDependency), 'AMD');
};
processAmdRequire = function(node) {
if (getName(node.args[0]) === 'Value' && getName(node.args[0].base) === "Arr") {
return node.args[0].base.objects.map(processAmdRequireItem.bind(null, node));
}
if (getName(node.args[0]) === 'Value' && getName(node.args[0].base) === "Literal") {
return processAmdRequireItem(node, node.args[0]);
}
return createDependency(node, '* dynamic dependencies *', 'AMD');
};
processCommonJSRequire = function(node) {
return createDependency(node, resolveRequireDependency(node.args[0]), 'CommonJS');
};
setAmdPathAlias = function(alias) {
if (getName(alias.variable) === 'Value' && getName(alias.variable.base) === 'Literal' && getName(alias.value) === 'Value' && getName(alias.value.base) === 'Literal') {
amdPathAliases[stripString(alias.variable.base.value)] = stripString(alias.value.base.value);
}
};
processAmdRequireConfigProperty = function(property) {
if (getName(property.variable) === 'Value' && getName(property.variable.base) === 'Literal' && property.variable.base.value === 'paths' && getName(property.value) === 'Value' && getName(property.value.base) === 'Obj') {
property.value.base.properties.forEach(setAmdPathAlias);
}
};
processAmdRequireConfig = function(args) {
if (args.length === 1 && getName(args[0]) === 'Value' && getName(args[0].base) === 'Obj') {
args[0].base.properties.forEach(processAmdRequireConfigProperty);
}
};
processRequire = function(node) {
if (node.args.length === 1) {
return processCommonJSRequire(node);
}
if (node.args.length === 2) {
return processAmdRequire(node);
}
};
module.exports = {
amdPathAliases: amdPathAliases,
processAmdRequireConfig: processAmdRequireConfig,
processRequire: processRequire
};
}).call(this);