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;
 | 
						|
  };
 | 
						|
}; |