github.com/NeowayLabs/nash@v0.2.2-0.20200127205349-a227041ffd50/cmd/nashfmt/main.go (about) 1 package main 2 3 import ( 4 "flag" 5 "fmt" 6 "io" 7 "io/ioutil" 8 "os" 9 10 "github.com/madlambda/nash/parser" 11 ) 12 13 var ( 14 overwrite bool 15 version bool 16 // version is set at build time 17 VersionString = "No version provided" 18 ) 19 20 func init() { 21 flag.BoolVar(&overwrite, "w", false, "overwrite file") 22 flag.BoolVar(&version, "version", false, "Show version") 23 } 24 25 func main() { 26 var ( 27 file io.ReadCloser 28 err error 29 ) 30 31 flag.Parse() 32 33 if version { 34 fmt.Printf("build tag: %s\n", VersionString) 35 return 36 } 37 38 if len(flag.Args()) <= 0 { 39 flag.PrintDefaults() 40 return 41 } 42 43 fname := flag.Args()[0] 44 45 file, err = os.Open(fname) 46 47 if err != nil { 48 fmt.Fprintf(os.Stderr, "error: %s\n", err.Error()) 49 os.Exit(1) 50 } 51 52 content, err := ioutil.ReadAll(file) 53 54 if err != nil { 55 file.Close() 56 fmt.Fprintf(os.Stderr, "error: %s\n", err.Error()) 57 os.Exit(1) 58 } 59 60 parser := parser.NewParser("nashfmt", string(content)) 61 62 ast, err := parser.Parse() 63 64 if err != nil { 65 fmt.Fprintf(os.Stderr, "%s\n", err.Error()) 66 file.Close() 67 os.Exit(1) 68 } 69 70 file.Close() 71 72 if !overwrite { 73 fmt.Printf("%s\n", ast.String()) 74 return 75 } 76 77 if ast.String() != string(content) { 78 err = ioutil.WriteFile(fname, []byte(fmt.Sprintf("%s\n", ast.String())), 0666) 79 80 if err != nil { 81 fmt.Fprintf(os.Stderr, "error: %s\n", err.Error()) 82 return 83 } 84 } 85 }