From: Rob Pike Date: Wed, 22 Apr 2009 05:46:19 +0000 (-0700) Subject: allow godoc to match on regular expressions. X-Git-Tag: weekly.2009-11-06~1772 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=9d70646fcf09df481e81514ae241e383efae3a77;p=gostls13.git allow godoc to match on regular expressions. 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 --- diff --git a/usr/gri/pretty/docprinter.go b/usr/gri/pretty/docprinter.go index 87b973e275..88651b288f 100644 --- a/usr/gri/pretty/docprinter.go +++ b/usr/gri/pretty/docprinter.go @@ -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);