func Main()

in cmd/celfmt/main.go [48:110]


func Main() int {
	in := flag.String("i", "", "input file stdin if empty")
	out := flag.String("o", "", "output file stdout if empty")
	agent := flag.Bool("agent", false, "format agent config")
	flag.Parse()

	var r io.Reader
	if *in == "" {
		r = os.Stdin
	} else {
		f, err := os.Open(*in)
		if err != nil {
			log.Printf("could not open input file: %v", err)
			return 1
		}
		defer f.Close()
		r = f
	}
	var buf bytes.Buffer
	_, err := io.Copy(&buf, r)
	if err != nil {
		log.Printf("could not read input: %v", err)
		return 1
	}

	var w io.Writer
	if *out == "" {
		w = os.Stdout
	} else {
		f, err := os.Create(*out)
		if err != nil {
			log.Printf("could not open output file: %v", err)
			return 1
		}
		defer func() {
			f.Sync()
			f.Close()
		}()
		w = f
	}

	if !*agent {
		err = celFmt(w, buf.String())
		if err != nil {
			log.Printf("failed to format program: %v", err)
			return 1
		}
		fmt.Fprintln(w)
	} else {
		ast, err := parser.Parse(buf.String())
		if err != nil {
			panic(err)
		}
		v := &visitor{}
		ast.Accept(v)
		if v.err != nil {
			log.Fatal(v.err)
		}
		fmt.Fprint(w, strings.ReplaceAll(buf.String(), v.old, v.new))
	}

	return 0
}