golang/go

go/format: non-idempotent format

dvyukov opened this issue · 2 comments

Repeated invocations of format.Source alter source:

package main

import (
    "bytes"
    "fmt"
    "go/format"
)

func main() {
    for _, data := range []string{"\n", "  "} {
        data1, err := format.Source([]byte(data))
        if err != nil {
            panic(err)
        }
        data2, err := format.Source(data1)
        if err != nil {
            panic(err)
        }
        if !bytes.Equal(data1, data2) {
            fmt.Printf("non-idempotent format: %q -> %q -> %q\n", data, data1, data2)
        }
    }
}
non-idempotent format: "\n" -> "\n\n" -> "\n\n\n\n"
non-idempotent format: "  " -> "\t  " -> "\t\t  "

go version devel +514014c Thu Jun 18 15:54:35 2015 +0200 linux/amd64

May be an issue when using go/format to format partial code snippets, e.g. inside editors.

CL https://golang.org/cl/15154 mentions this issue.