main.go 1.0 KB

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