jsdoc-parser-extended
Version:
Extended JSDoc parser.
58 lines (49 loc) • 1.43 kB
JavaScript
var K = require('./constants');
var findWhere = require('lodash').findWhere;
function extractIdInfo(tags, config = {}) {
var { inferNamespaces = true } = config;
var name, id;
var namespace = getNameFromTag(tags, 'namespace');
var fqid = id = getNameFromTag(tags, 'module') || getNameFromTag(tags, 'class');
// check for inline namespaces found in a module id string
if (inferNamespaces && fqid && fqid.indexOf(K.NAMESPACE_SEP) > -1) {
if (namespace) {
console.warn(
"Document '%s' already has a namespace specified using the " +
"@namespace tag, it should not have a namespace in its name as well.",
fqid
);
}
namespace = fqid
.split(K.NAMESPACE_SEP)
.slice(0, -1)
.join(K.NAMESPACE_SEP)
;
}
// try getting the ID from other tags, but these do not allow implicit
// namespacing:
if (!id) {
id = (
getNameFromTag(tags, 'name') ||
getNameFromTag(tags, 'method') ||
getNameFromTag(tags, 'property')
);
}
if (id && namespace && id.indexOf(namespace + K.NAMESPACE_SEP) === 0) {
name = id.substr(namespace.length + 1);
}
else {
name = id;
}
return {
name: name,
namespace: namespace
};
}
module.exports = extractIdInfo;
function getNameFromTag(tags, tagType) {
var tag = findWhere(tags, { type: tagType });
if (tag && tag.typeInfo.name) {
return tag.typeInfo.name;
}
}