]> Cypherpunks repositories - gostls13.git/commitdiff
- do not collect BUG comments w/o bug description
authorRobert Griesemer <gri@golang.org>
Wed, 15 Jul 2009 17:12:57 +0000 (10:12 -0700)
committerRobert Griesemer <gri@golang.org>
Wed, 15 Jul 2009 17:12:57 +0000 (10:12 -0700)
R=rsc
DELTA=17  (8 added, 0 deleted, 9 changed)
OCL=31670
CL=31674

src/pkg/go/doc/doc.go

index ce58e52f9f33ff8564a5bd375f0e751368e2a607..0e09a4d5d7aa49d6bc04f69861a6f4c7a830cfb4 100644 (file)
@@ -174,14 +174,20 @@ func copyCommentList(list []*ast.Comment) []*ast.Comment {
 }
 
 
-var bug_markers *regexp.Regexp;  // Regexp constructor needs threads - cannot use init expression
+var (
+       // Regexp constructor needs threads - cannot use init expressions
+       bug_markers *regexp.Regexp;
+       bug_content *regexp.Regexp;
+)
+
 
 // AddProgram adds the AST for a source file to the DocReader.
 // Adding the same AST multiple times is a no-op.
 //
 func (doc *DocReader) AddProgram(prog *ast.Program) {
        if bug_markers == nil {
-               bug_markers = makeRex("^/[/*][ \t]*BUG(\\([^)]*\\))?:?[ \t]*");
+               bug_markers = makeRex("^/[/*][ \t]*BUG\\(.*\\):[ \t]*");  // BUG(uid):
+               bug_content = makeRex("[^ \n\r\t]+");  // at least one non-whitespace char
        }
 
        if doc.name != prog.Name.Value {
@@ -202,13 +208,15 @@ func (doc *DocReader) AddProgram(prog *ast.Program) {
        // collect BUG(...) comments
        for _, c := range prog.Comments {
                text := c.List[0].Text;
-               m := bug_markers.Execute(string(text));
-               if len(m) > 0 {
-                       // found a BUG comment;
-                       // push a copy of the comment w/o the BUG prefix
-                       list := copyCommentList(c.List);
-                       list[0].Text = text[m[1] : len(text)];
-                       doc.bugs.Push(&ast.CommentGroup{list, c.EndLine});
+               cstr := string(text);
+               if m := bug_markers.Execute(cstr); len(m) > 0 {
+                       // found a BUG comment; maybe empty
+                       if bstr := cstr[m[1] : len(cstr)]; bug_content.Match(bstr) {
+                               // non-empty BUG comment; collect comment without BUG prefix
+                               list := copyCommentList(c.List);
+                               list[0].Text = text[m[1] : len(text)];
+                               doc.bugs.Push(&ast.CommentGroup{list, c.EndLine});
+                       }
                }
        }
 }