.gitignore added
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / mvdan.cc / xurls / v2@v2.2.0 / generate / schemesgen / main.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/mvdan.cc/xurls/v2@v2.2.0/generate/schemesgen/main.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/mvdan.cc/xurls/v2@v2.2.0/generate/schemesgen/main.go
new file mode 100644 (file)
index 0000000..5bb4a73
--- /dev/null
@@ -0,0 +1,71 @@
+// Copyright (c) 2017, Shreyas Khare <skhare@rapid7.com>
+// See LICENSE for licensing information
+
+package main
+
+import (
+       "encoding/csv"
+       "io"
+       "log"
+       "net/http"
+       "os"
+       "text/template"
+)
+
+const path = "schemes.go"
+
+var schemesTmpl = template.Must(template.New("schemes").Parse(`// Generated by schemesgen
+
+package xurls
+
+// Schemes is a sorted list of all IANA assigned schemes.
+//
+// Source:
+//   https://www.iana.org/assignments/uri-schemes/uri-schemes-1.csv
+var Schemes = []string{
+{{range $scheme := .Schemes}}` + "\t`" + `{{$scheme}}` + "`" + `,
+{{end}}}
+`))
+
+func schemeList() []string {
+       resp, err := http.Get("https://www.iana.org/assignments/uri-schemes/uri-schemes-1.csv")
+       if err != nil {
+               log.Fatal(err)
+       }
+       defer resp.Body.Close()
+       r := csv.NewReader(resp.Body)
+       r.Read() // ignore headers
+       schemes := make([]string, 0)
+       for {
+               record, err := r.Read()
+               if err == io.EOF {
+                       break
+               }
+               if err != nil {
+                       log.Fatal(err)
+               }
+               schemes = append(schemes, record[0])
+       }
+       return schemes
+}
+
+func writeSchemes(schemes []string) error {
+       f, err := os.Create(path)
+       if err != nil {
+               return err
+       }
+       defer f.Close()
+       return schemesTmpl.Execute(f, struct {
+               Schemes []string
+       }{
+               Schemes: schemes,
+       })
+}
+
+func main() {
+       schemes := schemeList()
+       log.Printf("Generating %s...", path)
+       if err := writeSchemes(schemes); err != nil {
+               log.Fatalf("Could not write path: %v", err)
+       }
+}