github.com/yaegashi/msgraph.go@v0.1.4/gen/generator_format.go (about) 1 package main 2 3 import ( 4 "bytes" 5 "io/ioutil" 6 "log" 7 "runtime" 8 "sync" 9 10 "golang.org/x/tools/imports" 11 ) 12 13 func (g *Generator) Format() error { 14 var wgErr error 15 wg := &sync.WaitGroup{} 16 q := make(chan struct{}, runtime.NumCPU()) 17 for path := range g.Created { 18 if wgErr != nil { 19 break 20 } 21 q <- struct{}{} 22 wg.Add(1) 23 go func(path string) { 24 defer wg.Done() 25 log.Printf("Formatting %s", path) 26 err := func() error { 27 inB, err := ioutil.ReadFile(path) 28 if err != nil { 29 return err 30 } 31 outB, err := imports.Process(path, inB, nil) 32 if err != nil { 33 return err 34 } 35 if bytes.Equal(inB, outB) { 36 return nil 37 } 38 return ioutil.WriteFile(path, outB, 0644) 39 }() 40 if err != nil && wgErr == nil { 41 wgErr = err 42 } 43 <-q 44 }(path) 45 } 46 wg.Wait() 47 return wgErr 48 }