mirror of
https://github.com/golang/go
synced 2024-11-22 08:44:41 -07:00
go/doc: move Example code from go/ast to go/doc.
Fixes #3048. R=rsc CC=golang-dev https://golang.org/cl/5672081
This commit is contained in:
parent
c4c92ebeb6
commit
b6e2d6b778
2
src/cmd/dist/build.c
vendored
2
src/cmd/dist/build.c
vendored
@ -1126,6 +1126,7 @@ static char *buildorder[] = {
|
|||||||
"pkg/net/url",
|
"pkg/net/url",
|
||||||
"pkg/text/template/parse",
|
"pkg/text/template/parse",
|
||||||
"pkg/text/template",
|
"pkg/text/template",
|
||||||
|
"pkg/go/doc",
|
||||||
"cmd/go",
|
"cmd/go",
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1165,6 +1166,7 @@ static char *cleantab[] = {
|
|||||||
"pkg/fmt",
|
"pkg/fmt",
|
||||||
"pkg/go/ast",
|
"pkg/go/ast",
|
||||||
"pkg/go/build",
|
"pkg/go/build",
|
||||||
|
"pkg/go/doc",
|
||||||
"pkg/go/parser",
|
"pkg/go/parser",
|
||||||
"pkg/go/scanner",
|
"pkg/go/scanner",
|
||||||
"pkg/go/token",
|
"pkg/go/token",
|
||||||
|
@ -9,6 +9,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"go/ast"
|
"go/ast"
|
||||||
"go/build"
|
"go/build"
|
||||||
|
"go/doc"
|
||||||
"go/parser"
|
"go/parser"
|
||||||
"go/token"
|
"go/token"
|
||||||
"os"
|
"os"
|
||||||
@ -719,7 +720,7 @@ func (t *testFuncs) load(filename, pkg string, seen *bool) error {
|
|||||||
*seen = true
|
*seen = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, e := range ast.Examples(f) {
|
for _, e := range doc.Examples(f) {
|
||||||
if e.Output == "" {
|
if e.Output == "" {
|
||||||
// Don't run examples with no output.
|
// Don't run examples with no output.
|
||||||
continue
|
continue
|
||||||
|
@ -501,7 +501,7 @@ func startsWithUppercase(s string) bool {
|
|||||||
|
|
||||||
var exampleOutputRx = regexp.MustCompile(`(?i)//[[:space:]]*output:`)
|
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
|
var buf bytes.Buffer
|
||||||
for _, eg := range examples {
|
for _, eg := range examples {
|
||||||
name := eg.Name
|
name := eg.Name
|
||||||
@ -979,7 +979,7 @@ type PageInfo struct {
|
|||||||
FSet *token.FileSet // corresponding file set
|
FSet *token.FileSet // corresponding file set
|
||||||
PAst *ast.File // nil if no single AST with package exports
|
PAst *ast.File // nil if no single AST with package exports
|
||||||
PDoc *doc.Package // nil if no single package documentation
|
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
|
Dirs *DirList // nil if no directory information
|
||||||
DirTime time.Time // directory time stamp
|
DirTime time.Time // directory time stamp
|
||||||
DirFlat bool // if set, show directory in a flat (non-indented) manner
|
DirFlat bool // if set, show directory in a flat (non-indented) manner
|
||||||
@ -1128,7 +1128,7 @@ func (h *httpHandler) getPageInfo(abspath, relpath, pkgname string, mode PageInf
|
|||||||
}
|
}
|
||||||
|
|
||||||
// get examples from *_test.go files
|
// get examples from *_test.go files
|
||||||
var examples []*ast.Example
|
var examples []*doc.Example
|
||||||
filter = func(d os.FileInfo) bool {
|
filter = func(d os.FileInfo) bool {
|
||||||
return isGoFile(d) && strings.HasSuffix(d.Name(), "_test.go")
|
return isGoFile(d) && strings.HasSuffix(d.Name(), "_test.go")
|
||||||
}
|
}
|
||||||
@ -1140,7 +1140,7 @@ func (h *httpHandler) getPageInfo(abspath, relpath, pkgname string, mode PageInf
|
|||||||
for _, f := range testpkg.Files {
|
for _, f := range testpkg.Files {
|
||||||
files = append(files, f)
|
files = append(files, f)
|
||||||
}
|
}
|
||||||
examples = append(examples, ast.Examples(files...)...)
|
examples = append(examples, doc.Examples(files...)...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,9 +4,10 @@
|
|||||||
|
|
||||||
// Extract example functions from file ASTs.
|
// Extract example functions from file ASTs.
|
||||||
|
|
||||||
package ast
|
package doc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"go/ast"
|
||||||
"go/token"
|
"go/token"
|
||||||
"regexp"
|
"regexp"
|
||||||
"sort"
|
"sort"
|
||||||
@ -18,23 +19,23 @@ import (
|
|||||||
type Example struct {
|
type Example struct {
|
||||||
Name string // name of the item being exemplified
|
Name string // name of the item being exemplified
|
||||||
Doc string // example function doc string
|
Doc string // example function doc string
|
||||||
Code Node
|
Code ast.Node
|
||||||
Comments []*CommentGroup
|
Comments []*ast.CommentGroup
|
||||||
Output string // expected output
|
Output string // expected output
|
||||||
}
|
}
|
||||||
|
|
||||||
func Examples(files ...*File) []*Example {
|
func Examples(files ...*ast.File) []*Example {
|
||||||
var list []*Example
|
var list []*Example
|
||||||
for _, file := range files {
|
for _, file := range files {
|
||||||
hasTests := false // file contains tests or benchmarks
|
hasTests := false // file contains tests or benchmarks
|
||||||
numDecl := 0 // number of non-import declarations in the file
|
numDecl := 0 // number of non-import declarations in the file
|
||||||
var flist []*Example
|
var flist []*Example
|
||||||
for _, decl := range file.Decls {
|
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++
|
numDecl++
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
f, ok := decl.(*FuncDecl)
|
f, ok := decl.(*ast.FuncDecl)
|
||||||
if !ok {
|
if !ok {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@ -73,9 +74,9 @@ func Examples(files ...*File) []*Example {
|
|||||||
|
|
||||||
var outputPrefix = regexp.MustCompile(`(?i)^[[:space:]]*output:`)
|
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
|
// find the last comment in the function
|
||||||
var last *CommentGroup
|
var last *ast.CommentGroup
|
||||||
for _, cg := range comments {
|
for _, cg := range comments {
|
||||||
if cg.Pos() < fun.Pos() {
|
if cg.Pos() < fun.Pos() {
|
||||||
continue
|
continue
|
Loading…
Reference in New Issue
Block a user