49 lines
1.6 KiB
JavaScript
49 lines
1.6 KiB
JavaScript
var ts = require('typescript');
|
|
var LEADING_STAR = /^[^\S\r\n]*\*[^\S\n\r]?/gm;
|
|
|
|
module.exports = function getContent() {
|
|
return function(symbol) {
|
|
|
|
var content = "";
|
|
|
|
if (!symbol.declarations) return content;
|
|
|
|
symbol.declarations.forEach(function(declaration) {
|
|
|
|
// If this is left side of dotted module declaration, there is no doc comment associated with this declaration
|
|
if (declaration.kind === ts.SyntaxKind.ModuleDeclaration && declaration.body.kind === ts.SyntaxKind.ModuleDeclaration) {
|
|
return content;
|
|
}
|
|
|
|
// If this is dotted module name, get the doc comments from the parent
|
|
while (declaration.kind === ts.SyntaxKind.ModuleDeclaration && declaration.parent.kind === ts.SyntaxKind.ModuleDeclaration) {
|
|
declaration = declaration.parent;
|
|
}
|
|
|
|
// If this is a variable declaration then we get the doc comments from the grand parent
|
|
if (declaration.kind === ts.SyntaxKind.VariableDeclaration) {
|
|
declaration = declaration.parent.parent;
|
|
}
|
|
|
|
// Get the source file of this declaration
|
|
var sourceFile = ts.getSourceFileOfNode(declaration);
|
|
var commentRanges = ts.getJsDocComments(declaration, sourceFile);
|
|
|
|
if (commentRanges) {
|
|
commentRanges.forEach(function(commentRange) {
|
|
content += sourceFile.text
|
|
.substring(commentRange.pos+ '/**'.length, commentRange.end - '*/'.length)
|
|
.replace(LEADING_STAR, '')
|
|
.trim();
|
|
if (commentRange.hasTrailingNewLine) {
|
|
content += '\n';
|
|
}
|
|
});
|
|
}
|
|
|
|
content += '\n';
|
|
});
|
|
|
|
return content;
|
|
};
|
|
}; |