Skip to content

Commit

Permalink
go/doc: move Example code from go/ast to go/doc.
Browse files Browse the repository at this point in the history
Fixes #3048.

R=rsc
CC=golang-dev
https://golang.org/cl/5672081
  • Loading branch information
griesemer committed Feb 17, 2012
1 parent c4c92eb commit b6e2d6b
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 13 deletions.
2 changes: 2 additions & 0 deletions src/cmd/dist/build.c
Expand Up @@ -1126,6 +1126,7 @@ static char *buildorder[] = {
"pkg/net/url",
"pkg/text/template/parse",
"pkg/text/template",
"pkg/go/doc",
"cmd/go",
};

Expand Down Expand Up @@ -1165,6 +1166,7 @@ static char *cleantab[] = {
"pkg/fmt",
"pkg/go/ast",
"pkg/go/build",
"pkg/go/doc",
"pkg/go/parser",
"pkg/go/scanner",
"pkg/go/token",
Expand Down
3 changes: 2 additions & 1 deletion src/cmd/go/test.go
Expand Up @@ -9,6 +9,7 @@ import (
"fmt"
"go/ast"
"go/build"
"go/doc"
"go/parser"
"go/token"
"os"
Expand Down Expand Up @@ -719,7 +720,7 @@ func (t *testFuncs) load(filename, pkg string, seen *bool) error {
*seen = true
}
}
for _, e := range ast.Examples(f) {
for _, e := range doc.Examples(f) {
if e.Output == "" {
// Don't run examples with no output.
continue
Expand Down
8 changes: 4 additions & 4 deletions src/cmd/godoc/godoc.go
Expand Up @@ -501,7 +501,7 @@ func startsWithUppercase(s string) bool {

var exampleOutputRx = regexp.MustCompile(`(?i)//[[:space:]]*output:`)

func example_htmlFunc(funcName string, examples []*ast.Example, fset *token.FileSet) string {
func example_htmlFunc(funcName string, examples []*doc.Example, fset *token.FileSet) string {
var buf bytes.Buffer
for _, eg := range examples {
name := eg.Name
Expand Down Expand Up @@ -979,7 +979,7 @@ type PageInfo struct {
FSet *token.FileSet // corresponding file set
PAst *ast.File // nil if no single AST with package exports
PDoc *doc.Package // nil if no single package documentation
Examples []*ast.Example // nil if no example code
Examples []*doc.Example // nil if no example code
Dirs *DirList // nil if no directory information
DirTime time.Time // directory time stamp
DirFlat bool // if set, show directory in a flat (non-indented) manner
Expand Down Expand Up @@ -1128,7 +1128,7 @@ func (h *httpHandler) getPageInfo(abspath, relpath, pkgname string, mode PageInf
}

// get examples from *_test.go files
var examples []*ast.Example
var examples []*doc.Example
filter = func(d os.FileInfo) bool {
return isGoFile(d) && strings.HasSuffix(d.Name(), "_test.go")
}
Expand All @@ -1140,7 +1140,7 @@ func (h *httpHandler) getPageInfo(abspath, relpath, pkgname string, mode PageInf
for _, f := range testpkg.Files {
files = append(files, f)
}
examples = append(examples, ast.Examples(files...)...)
examples = append(examples, doc.Examples(files...)...)
}
}

Expand Down
17 changes: 9 additions & 8 deletions src/pkg/go/ast/example.go → src/pkg/go/doc/example.go
Expand Up @@ -4,9 +4,10 @@

// Extract example functions from file ASTs.

package ast
package doc

import (
"go/ast"
"go/token"
"regexp"
"sort"
Expand All @@ -18,23 +19,23 @@ import (
type Example struct {
Name string // name of the item being exemplified
Doc string // example function doc string
Code Node
Comments []*CommentGroup
Code ast.Node
Comments []*ast.CommentGroup
Output string // expected output
}

func Examples(files ...*File) []*Example {
func Examples(files ...*ast.File) []*Example {
var list []*Example
for _, file := range files {
hasTests := false // file contains tests or benchmarks
numDecl := 0 // number of non-import declarations in the file
var flist []*Example
for _, decl := range file.Decls {
if g, ok := decl.(*GenDecl); ok && g.Tok != token.IMPORT {
if g, ok := decl.(*ast.GenDecl); ok && g.Tok != token.IMPORT {
numDecl++
continue
}
f, ok := decl.(*FuncDecl)
f, ok := decl.(*ast.FuncDecl)
if !ok {
continue
}
Expand Down Expand Up @@ -73,9 +74,9 @@ func Examples(files ...*File) []*Example {

var outputPrefix = regexp.MustCompile(`(?i)^[[:space:]]*output:`)

func exampleOutput(fun *FuncDecl, comments []*CommentGroup) string {
func exampleOutput(fun *ast.FuncDecl, comments []*ast.CommentGroup) string {
// find the last comment in the function
var last *CommentGroup
var last *ast.CommentGroup
for _, cg := range comments {
if cg.Pos() < fun.Pos() {
continue
Expand Down

0 comments on commit b6e2d6b

Please sign in to comment.