-
Notifications
You must be signed in to change notification settings - Fork 384
/
Copy pathmain.go
59 lines (52 loc) · 1.09 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// Copyright 2018 Google Inc. All Rights Reserved.
// This file is available under the Apache license.
/*
Command mfmt formats mtail programs.
*/
package main
import (
"flag"
"fmt"
"io"
"os"
"github.com/golang/glog"
"github.com/google/mtail/internal/runtime/compiler/checker"
"github.com/google/mtail/internal/runtime/compiler/parser"
)
var (
prog = flag.String("prog", "", "Name of the mtail program text to format.")
write = flag.Bool("write", false, "Write results to original file.")
)
func main() {
flag.Parse()
if *prog == "" {
glog.Exitf("No -prog given")
}
f, err := os.OpenFile(*prog, os.O_RDWR, 0)
if err != nil {
glog.Exit(err)
}
ast, err := parser.Parse(*prog, f)
if err != nil {
glog.Exit(err)
}
ast, err = checker.Check(ast, 0, 0)
if err != nil {
glog.Exit(err)
}
up := parser.Unparser{}
out := up.Unparse(ast)
if *write {
if err := f.Truncate(0); err != nil {
glog.Exit(err)
}
if _, err := f.Seek(0, io.SeekStart); err != nil {
glog.Exit(err)
}
if _, err := f.WriteString(out); err != nil {
glog.Exit(err)
}
} else {
fmt.Print(out)
}
}