Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / github.com / !burnt!sushi / toml@v0.3.1 / cmd / tomlv / main.go
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 }