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  }