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  }