// doQuery poses query q to the guru and writes its response and // error (if any) to out. func doQuery(out io.Writer, q *query, useJson bool) { fmt.Fprintf(out, "-------- @%s %s --------\n", q.verb, q.id) var buildContext = build.Default buildContext.GOPATH = "testdata" query := guru.Query{ Mode: q.verb, Pos: q.queryPos, Build: &buildContext, Scope: []string{q.filename}, Reflection: true, } if err := guru.Run(&query); err != nil { fmt.Fprintf(out, "\nError: %s\n", err) return } if useJson { // JSON output b, err := json.MarshalIndent(query.Serial(), "", "\t") if err != nil { fmt.Fprintf(out, "JSON error: %s\n", err.Error()) return } out.Write(b) fmt.Fprintln(out) } else { // "plain" (compiler diagnostic format) output WriteResult(out, &query) } }