I'm trying to modify a source file and replace some function parameters 
based on their names.  I was able to get some basics working by following this 
tutorial <https://zupzup.org/go-ast-traversal/>, however when I write the 
new file, it's deleting the existing comments.

It looks like just the act of reading in the source and rewriting it is 
stripping the comments:


func main() {

      // --------------- Start test file contents

        testFileContents := `

      //  Licensed under the Apache License...

      package main

      const (

        kMaxRecentSequences = 20 // Maximum number of sequences stored in 
RecentSequences before pruning is triggered

      )

      //////// READING DOCUMENTS:

      func fakeFunc(docid string) string {

        return docid

      }

      func main() {

        fakeFunc("foo")  // Call fakeFunc

      }`

      // --------------- End test file contents

        err := ioutil.WriteFile("/tmp/source.go", []byte(testFileContents), 
0644)

        if err != nil {

                log.Fatal(err)

        }

        fset := token.NewFileSet()

        node, err := parser.ParseFile(fset, "/tmp/source.go", nil, 0)

        if err != nil {

                log.Fatal(err)

        }

        ast.Inspect(node, func(n ast.Node) bool {

                return true

        })

        f, err := os.Create("/tmp/source_modified.go")

        defer f.Close()

        if err := printer.Fprint(f, fset, node); err != nil {

                log.Fatal(err)

        }

}


The rewritten source code in /tmp/source_modified.go is:


package main

const (

        kMaxRecentSequences = 20

)

func fakeFunc(docid string) string {

        return docid

}

func main() {

        fakeFunc("foo")

}



What's the best way to manipulate the AST while preserving comments?  Would 
using https://godoc.org/golang.org/x/tools/go/ast/astutil#Apply improve the 
situation?


-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to