var dumpTree … var dumpJSON … var warn … type Test … // collect extracts test metadata from a file. // If src is nil, it reads filename for the code, otherwise it // uses src (which may be a string, byte[], or io.Reader). func collect(filename string, src interface{ … } // funcName converts a selectorExpr with two idents into a string, // x.y -> "x.y" func funcName(n ast.Expr) string { … } // isSprintf returns whether the given node is a call to fmt.Sprintf func isSprintf(n ast.Expr) bool { … } type walker … func makeWalker(path string, fset *token.FileSet, tests *[]Test) *walker { … } // clone creates a new walker with the given string extending the path. func (w *walker) clone(ext string) *walker { … } // firstArg attempts to statically determine the value of the first // argument. It only handles strings, and converts any unknown values // (fmt.Sprintf interpolations) into *. func (w *walker) firstArg(n *ast.CallExpr) string { … } // describeName returns the first argument of a function if it's // a Ginkgo-relevant function (Describe/SIGDescribe/Context), // and the empty string otherwise. func (w *walker) describeName(n *ast.CallExpr) string { … } // itName returns the first argument if it's a call to It(), else "". func (w *walker) itName(n *ast.CallExpr) string { … } // Visit walks the AST, following Ginkgo context and collecting tests. // See the documentation for ast.Walk for more details. func (w *walker) Visit(n ast.Node) ast.Visitor { … } type testList … // handlePath walks the filesystem recursively, collecting tests // from files with paths *e2e*.go and *_test.go, ignoring third_party // and staging directories. func (t *testList) handlePath(path string, info os.FileInfo, err error) error { … } func main() { … }