Commit 11df49c4 authored by Russ Cox's avatar Russ Cox

publish doc.CommentText

R=gri
DELTA=29  (10 added, 12 deleted, 7 changed)
OCL=34709
CL=34712
parent 127368d2
......@@ -8,6 +8,7 @@ package doc
import (
"fmt";
"go/ast";
"io";
"once";
"regexp";
......@@ -39,8 +40,17 @@ func setupRegexps() {
comment_junk = makeRex("^[ \t]*(/\\*|\\*/)[ \t]*$");
}
// Aggregate comment text, without comment markers.
func commentText(comments []string) string {
// CommentText returns the text of comment,
// with the comment markers - //, /*, and */ - removed.
func CommentText(comment *ast.CommentGroup) string {
if comment == nil {
return "";
}
comments := make([]string, len(comment.List));
for i, c := range comment.List {
comments[i] = string(c.Text);
}
once.Do(setupRegexps);
lines := make([]string, 0, 20);
for _, c := range comments {
......
......@@ -304,18 +304,6 @@ func NewPackageDoc(pkg *ast.Package, importpath string) *PackageDoc {
// ----------------------------------------------------------------------------
// Conversion to external representation
func astComment(comment *ast.CommentGroup) string {
if comment != nil {
text := make([]string, len(comment.List));
for i, c := range comment.List {
text[i] = string(c.Text);
}
return commentText(text);
}
return "";
}
// ValueDoc is the documentation for a group of declared
// values, either vars or consts.
//
......@@ -363,7 +351,7 @@ func makeValueDocs(v *vector.Vector, tok token.Token) []*ValueDoc {
for i := range d {
decl := v.At(i).(*ast.GenDecl);
if decl.Tok == tok {
d[n] = &ValueDoc{astComment(decl.Doc), decl, i};
d[n] = &ValueDoc{CommentText(decl.Doc), decl, i};
n++;
decl.Doc = nil; // doc consumed - removed from AST
}
......@@ -395,7 +383,7 @@ func makeFuncDocs(m map[string] *ast.FuncDecl) []*FuncDoc {
i := 0;
for _, f := range m {
doc := new(FuncDoc);
doc.Doc = astComment(f.Doc);
doc.Doc = CommentText(f.Doc);
f.Doc = nil; // doc consumed - remove from ast.FuncDecl node
if f.Recv != nil {
doc.Recv = f.Recv.Type;
......@@ -459,7 +447,7 @@ func (doc *docReader) makeTypeDocs(m map[string] *typeDoc) []*TypeDoc {
doc = decl.Doc;
}
decl.Doc = nil; // doc consumed - remove from ast.Decl node
t.Doc = astComment(doc);
t.Doc = CommentText(doc);
t.Type = typespec;
t.Consts = makeValueDocs(old.values, token.CONST);
t.Vars = makeValueDocs(old.values, token.VAR);
......@@ -499,7 +487,7 @@ func (doc *docReader) makeTypeDocs(m map[string] *typeDoc) []*TypeDoc {
func makeBugDocs(v *vector.Vector) []string {
d := make([]string, v.Len());
for i := 0; i < v.Len(); i++ {
d[i] = astComment(v.At(i).(*ast.CommentGroup));
d[i] = CommentText(v.At(i).(*ast.CommentGroup));
}
return d;
}
......@@ -530,7 +518,7 @@ func (doc *docReader) newDoc(pkgname, importpath, filepath string, filenames []s
p.FilePath = filepath;
sort.SortStrings(filenames);
p.Filenames = filenames;
p.Doc = astComment(doc.doc);
p.Doc = CommentText(doc.doc);
// makeTypeDocs may extend the list of doc.values and
// doc.funcs and thus must be called before any other
// function consuming those lists
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment