d2/d2cli/fmt.go

41 lines
846 B
Go
Raw Normal View History

package d2cli
import (
"bytes"
"context"
2022-12-01 19:32:57 +00:00
"oss.terrastruct.com/util-go/xdefer"
2022-12-01 19:19:39 +00:00
"oss.terrastruct.com/util-go/xmain"
"oss.terrastruct.com/d2/d2format"
"oss.terrastruct.com/d2/d2parser"
)
2022-12-01 17:21:16 +00:00
func fmtCmd(ctx context.Context, ms *xmain.State) (err error) {
defer xdefer.Errorf(&err, "failed to fmt")
ms.Opts = xmain.NewOpts(ms.Env, ms.Log, ms.Opts.Flags.Args()[1:])
if len(ms.Opts.Args) == 0 {
return xmain.UsageErrorf("fmt must be passed at least one file to be formatted")
}
for _, inputPath := range ms.Opts.Args {
input, err := ms.ReadPath(inputPath)
if err != nil {
return err
}
m, err := d2parser.Parse(inputPath, bytes.NewReader(input), nil)
if err != nil {
return err
}
output := []byte(d2format.Format(m))
if !bytes.Equal(output, input) {
return ms.WritePath(inputPath, output)
}
}
2022-12-19 21:20:41 +00:00
return nil
}