]> Cypherpunks repositories - gostls13.git/commitdiff
allow godoc to match on regular expressions.
authorRob Pike <r@golang.org>
Wed, 22 Apr 2009 05:46:19 +0000 (22:46 -0700)
committerRob Pike <r@golang.org>
Wed, 22 Apr 2009 05:46:19 +0000 (22:46 -0700)
if the name contains a metacharacter, use regexp matching;
otherwise require strict equality.

now
godoc flag '.*Var'
can give you all the FooVar functions.

R=gri
DELTA=19  (19 added, 0 deleted, 0 changed)
OCL=27711
CL=27713

usr/gri/pretty/docprinter.go

index 87b973e275796046e41ac0cf3873504c59783ed9..88651b288fe449f487795b39ef1361ec5222f4bb 100644 (file)
@@ -453,8 +453,26 @@ func (doc *DocReader) Doc() *PackageDoc {
 // ----------------------------------------------------------------------------
 // Filtering by name
 
+// Does s look like a regular expression?
+func isRegexp(s string) bool {
+       metachars := ".(|)*+?^$[]";
+       for i, c := range s {
+               for j, m := range metachars {
+                       if c == m {
+                               return true
+                       }
+               }
+       }
+       return false
+}
+
 func match(s string, a []string) bool {
        for i, t := range a {
+               if isRegexp(t) {
+                       if matched, err := regexp.Match(t, s); matched {
+                               return true;
+                       }
+               }
                if s == t {
                        return true;
                }
@@ -516,6 +534,7 @@ func filterFuncDocs(a []*FuncDoc, names []string) []*FuncDoc {
 // Filter eliminates information from d that is not
 // about one of the given names.
 // TODO: Recognize "Type.Method" as a name.
+// TODO(r): maybe precompile the regexps.
 func (p *PackageDoc) Filter(names []string) {
        p.Consts = filterValueDocs(p.Consts, names);
        p.Vars = filterValueDocs(p.Vars, names);