github.com/grafana/pyroscope@v1.18.0/pkg/frontend/vcs/source/golang/gen.go (about) 1 //go:build ignore 2 3 package main 4 5 import ( 6 "bytes" 7 "context" 8 "html/template" 9 "io" 10 "log" 11 "os" 12 13 "github.com/github/go-pipe/pipe" 14 15 "github.com/grafana/pyroscope/pkg/querier/golang" 16 ) 17 18 func main() { 19 // todo: In the future we might want to support more than one version 20 // Or even list all files from standard packages to improve matching. 21 packages, err := golang.StdPackages("") 22 if err != nil { 23 log.Fatal(err) 24 } 25 t := template.Must(template.New("packages").Parse(packagesTemplate)) 26 var buff bytes.Buffer 27 p := pipe.New(pipe.WithStdout(&buff)) 28 p.Add( 29 pipe.Function("", func(ctx context.Context, env pipe.Env, stdin io.Reader, stdout io.Writer) error { 30 err = t.Execute(stdout, packages) 31 if err != nil { 32 log.Fatal(err) 33 } 34 return nil 35 }), 36 // This might be a bit overkill, but it's nice to have a consistent format. 37 // todo: We could use "go/format" package only that will simplify the code but also remove the needs 38 // for expected installed binaries. 39 pipe.Command("gofmt"), 40 pipe.Command("goimports"), 41 ) 42 p.Run(context.Background()) 43 err = os.WriteFile("packages_gen.go", buff.Bytes(), 0666) 44 if err != nil { 45 log.Fatal(err) 46 } 47 } 48 49 var packagesTemplate = ` 50 package golang 51 // Code generated. DO NOT EDIT. 52 53 var StandardPackages = map[string]struct{}{ 54 {{- range $key, $value := .}} 55 "{{$key}}": {}, 56 {{- end}} 57 } 58 `