gopkg.in/alecthomas/gometalinter.v3@v3.0.0/_linters/src/github.com/BurntSushi/toml/cmd/tomlv/main.go (about) 1 // Command tomlv validates TOML documents and prints each key's type. 2 package main 3 4 import ( 5 "flag" 6 "fmt" 7 "log" 8 "os" 9 "path" 10 "strings" 11 "text/tabwriter" 12 13 "github.com/BurntSushi/toml" 14 ) 15 16 var ( 17 flagTypes = false 18 ) 19 20 func init() { 21 log.SetFlags(0) 22 23 flag.BoolVar(&flagTypes, "types", flagTypes, 24 "When set, the types of every defined key will be shown.") 25 26 flag.Usage = usage 27 flag.Parse() 28 } 29 30 func usage() { 31 log.Printf("Usage: %s toml-file [ toml-file ... ]\n", 32 path.Base(os.Args[0])) 33 flag.PrintDefaults() 34 35 os.Exit(1) 36 } 37 38 func main() { 39 if flag.NArg() < 1 { 40 flag.Usage() 41 } 42 for _, f := range flag.Args() { 43 var tmp interface{} 44 md, err := toml.DecodeFile(f, &tmp) 45 if err != nil { 46 log.Fatalf("Error in '%s': %s", f, err) 47 } 48 if flagTypes { 49 printTypes(md) 50 } 51 } 52 } 53 54 func printTypes(md toml.MetaData) { 55 tabw := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0) 56 for _, key := range md.Keys() { 57 fmt.Fprintf(tabw, "%s%s\t%s\n", 58 strings.Repeat(" ", len(key)-1), key, md.Type(key...)) 59 } 60 tabw.Flush() 61 }