package main import ( "encoding/json" "fmt" "os" "github.com/invopop/jsonschema" "go.balki.me/tss/app" ) func fix(s string) string { // s := "go.balki.me/tss/home/balki/projects/tss/app.Config.Proxy" return fmt.Sprintf("%s%s", s[:16], s[40:]) } type config struct { app.Config // Placeholder to put any yaml anchors to use elsewhere, E.g. // refs: // myvpsproxy: &myvpsproxy "socks5://vps.example.com:1080" // twiceaday: &twiceaday "00 1,13 * * *" Refs map[string]any `yaml:"refs" jsonschema:"refs"` } func main() { // "go.balki.me/tss/app.FeedCfg.Channel": "Telegram channel name in the form \"@foobar\" or \"-1004242442\"", //s go.balki.me/tss/app.FeedCfg.Channel // foo() // return fmt.Println("vim-go") cmmap := map[string]string{} err := jsonschema.ExtractGoComments("go.balki.me/tss", "/home/balki/projects/tss", cmmap) cmmapF := map[string]string{} for k, v := range cmmap { cmmapF[fix(k)] = v } cmmap = cmmapF fmt.Println("err", err) d, err := json.Marshal(cmmap) fmt.Printf("%s\n", string(d)) os.WriteFile("/tmp/cmmap.json", d, 0644) var c config r := jsonschema.Reflector{ RequiredFromJSONSchemaTags: true, DoNotReference: true, ExpandedStruct: true, CommentMap: cmmap, } s := r.Reflect(c) j, _ := json.Marshal(s) os.WriteFile("/home/balki/projects/tss/docs/schema.json", j, 0644) fmt.Println(string(j)) }