func RewriteGeneratedGogoProtobufFile(name string, extractFn ExtractFunc, optionalFn OptionalFunc, header []byte) error { return rewriteFile(name, header, func(fset *token.FileSet, file *ast.File) error { cmap := ast.NewCommentMap(fset, file, file.Comments) // transform methods that point to optional maps or slices for _, d := range file.Decls { rewriteOptionalMethods(d, optionalFn) } // remove types that are already declared decls := []ast.Decl{} for _, d := range file.Decls { if dropExistingTypeDeclarations(d, extractFn) { continue } if dropEmptyImportDeclarations(d) { continue } decls = append(decls, d) } file.Decls = decls // remove unmapped comments file.Comments = cmap.Filter(file).Comments() return nil }) }
func RewriteGeneratedGogoProtobufFile(name string, packageName string, typeExistsFn func(string) bool, header []byte) error { fset := token.NewFileSet() src, err := ioutil.ReadFile(name) if err != nil { return err } file, err := parser.ParseFile(fset, name, src, parser.DeclarationErrors|parser.ParseComments) if err != nil { return err } cmap := ast.NewCommentMap(fset, file, file.Comments) // remove types that are already declared decls := []ast.Decl{} for _, d := range file.Decls { if !dropExistingTypeDeclarations(d, typeExistsFn) { decls = append(decls, d) } } file.Decls = decls // remove unmapped comments file.Comments = cmap.Filter(file).Comments() b := &bytes.Buffer{} b.Write(header) if err := printer.Fprint(b, fset, file); err != nil { return err } body, err := format.Source(b.Bytes()) if err != nil { return err } f, err := os.OpenFile(name, os.O_WRONLY|os.O_TRUNC, 0644) if err != nil { return err } defer f.Close() if _, err := f.Write(body); err != nil { return err } return f.Close() }
func RewriteGeneratedGogoProtobufFile(name string, extractFn ExtractFunc, header []byte) error { return rewriteFile(name, header, func(fset *token.FileSet, file *ast.File) error { cmap := ast.NewCommentMap(fset, file, file.Comments) // remove types that are already declared decls := []ast.Decl{} for _, d := range file.Decls { if !dropExistingTypeDeclarations(d, extractFn) { decls = append(decls, d) } } file.Decls = decls // remove unmapped comments file.Comments = cmap.Filter(file).Comments() return nil }) }