diff --git a/class.go b/class.go index ee23314..05fe136 100644 --- a/class.go +++ b/class.go @@ -3,14 +3,13 @@ package main import ( _ "embed" "fmt" - "log" "os" "path/filepath" "strings" "text/template" + logger "git.site.quack-lab.dev/dave/cylogger" "github.com/PuerkitoBio/goquery" - "github.com/davecgh/go-spew/spew" ) //go:embed class.tmpl @@ -27,7 +26,7 @@ func init() { var err error classTemplate, err = template.New("class").Funcs(fns).Parse(templatestr) if err != nil { - Error.Printf("Error parsing template: %v", err) + logger.Error("Error parsing template: %v", err) return } } @@ -96,7 +95,8 @@ func (c *Class) Write(root string, tmpl *template.Template) error { } func ParseClass(file string) (*Class, error) { - log.Printf("Parsing file: '%s'", file) + log := logger.Default.WithPrefix(file) + log.Info("Parsing file") res := Class{ Fields: []Field{}, Methods: []Method{}, @@ -134,7 +134,7 @@ func ParseClass(file string) (*Class, error) { return nil, fmt.Errorf("error getting methods: %w", err) } - // spew.Dump(res) + log.Info("Parsing complete") return &res, nil } @@ -190,7 +190,7 @@ func getConstructors(doc *goquery.Document) ([]Constructor, error) { resConstructor.Comment = strings.TrimSpace(resConstructor.Comment) }) - spew.Dump(resConstructor) + logger.Dump("resConstructor", resConstructor) return append(res, resConstructor), nil } @@ -226,6 +226,9 @@ func getMethods(doc *goquery.Document) ([]Method, error) { types.Each(func(i int, s *goquery.Selection) { param := Param{} param.Name = strings.TrimSpace(parameters.Eq(i).Text()) + if IsReservedKeyword(param.Name) { + param.Name = fmt.Sprintf("__%s", param.Name) + } param.Type = strings.TrimSpace(types.Eq(i).Text()) param.Type = MapType(param.Type) method.Params = append(method.Params, param) diff --git a/go.mod b/go.mod index d8ea9fa..5f7ddd5 100644 --- a/go.mod +++ b/go.mod @@ -1,13 +1,20 @@ module avorion-docparser -go 1.23.0 +go 1.23.6 require ( + git.site.quack-lab.dev/dave/cylogger v1.3.0 + git.site.quack-lab.dev/dave/cyutils v1.0.0 github.com/PuerkitoBio/goquery v1.10.0 - github.com/davecgh/go-spew v1.1.1 ) require ( github.com/andybalholm/cascadia v1.3.2 // indirect + github.com/google/go-cmp v0.5.9 // indirect + github.com/hexops/valast v1.5.0 // indirect + golang.org/x/mod v0.8.0 // indirect golang.org/x/net v0.29.0 // indirect + golang.org/x/sys v0.25.0 // indirect + golang.org/x/tools v0.6.0 // indirect + mvdan.cc/gofumpt v0.4.0 // indirect ) diff --git a/go.sum b/go.sum index 5f08b21..41ccc97 100644 --- a/go.sum +++ b/go.sum @@ -1,13 +1,32 @@ +git.site.quack-lab.dev/dave/cylogger v1.3.0 h1:eTWPUD+ThVi8kGIsRcE0XDeoH3yFb5miFEODyKUdWJw= +git.site.quack-lab.dev/dave/cylogger v1.3.0/go.mod h1:wctgZplMvroA4X6p8f4B/LaCKtiBcT1Pp+L14kcS8jk= +git.site.quack-lab.dev/dave/cyutils v1.0.0 h1:yp/jkM2M7UZ+UIQuy+vPI7yDvTUdpbEdFL8h0lzUTvA= +git.site.quack-lab.dev/dave/cyutils v1.0.0/go.mod h1:luGNFimplFhkpRLebhkVTNjG2wYfPAs+pu+UIMhBYbE= github.com/PuerkitoBio/goquery v1.10.0 h1:6fiXdLuUvYs2OJSvNRqlNPoBm6YABE226xrbavY5Wv4= github.com/PuerkitoBio/goquery v1.10.0/go.mod h1:TjZZl68Q3eGHNBA8CWaxAN7rOU1EbDz3CWuolcO5Yu4= github.com/andybalholm/cascadia v1.3.2 h1:3Xi6Dw5lHF15JtdcmAHD3i1+T8plmv7BQ/nsViSLyss= github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/hexops/autogold v0.8.1 h1:wvyd/bAJ+Dy+DcE09BoLk6r4Fa5R5W+O+GUzmR985WM= +github.com/hexops/autogold v0.8.1/go.mod h1:97HLDXyG23akzAoRYJh/2OBs3kd80eHyKPvZw0S5ZBY= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= +github.com/hexops/valast v1.5.0 h1:FBTuvVi0wjTngtXJRZXMbkN/Dn6DgsUsBwch2DUJU8Y= +github.com/hexops/valast v1.5.0/go.mod h1:Jcy1pNH7LNraVaAZDLyv21hHg2WBv9Nf9FL6fGxU7o4= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= @@ -18,6 +37,7 @@ golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -26,6 +46,8 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= +golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= @@ -38,5 +60,8 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +mvdan.cc/gofumpt v0.4.0 h1:JVf4NN1mIpHogBj7ABpgOyZc65/UUOkKQFkoURsz4MM= +mvdan.cc/gofumpt v0.4.0/go.mod h1:PljLOHDeZqgS8opHRKLzp2It2VBuSdteAgqUfzMTxlQ= diff --git a/main.go b/main.go index cdfc09f..6b337ac 100644 --- a/main.go +++ b/main.go @@ -2,62 +2,36 @@ package main import ( "flag" - "fmt" - "io" - "log" - "os" - "sync" - - "github.com/davecgh/go-spew/spew" _ "embed" + + logger "git.site.quack-lab.dev/dave/cylogger" + utils "git.site.quack-lab.dev/dave/cyutils" ) -var Error *log.Logger -var Warning *log.Logger - -func init() { - log.SetFlags(log.Lmicroseconds | log.Lshortfile) - logger := io.MultiWriter(os.Stdout) - log.SetOutput(logger) - - Error = log.New(io.MultiWriter(os.Stderr, os.Stdout), - fmt.Sprintf("%sERROR:%s ", "\033[0;101m", "\033[0m"), - log.Lmicroseconds|log.Lshortfile) - Warning = log.New(io.MultiWriter(os.Stdout), - fmt.Sprintf("%sWarning:%s ", "\033[0;93m", "\033[0m"), - log.Lmicroseconds|log.Lshortfile) - - spew.Config.Indent = " " - spew.Config.SortKeys = true -} - func main() { outdir := flag.String("o", ".", "Output directory") flag.Parse() + logger.InitFlag() + logger.Info("Starting...") + files := flag.Args() if len(files) == 0 { - Error.Printf("No files specified") + logger.Error("No files specified") flag.Usage() return } // TODO: Implement parsing enums somehow // TODO: Implement some sort of switching (between a class and an enum) - wg := sync.WaitGroup{} - for _, file := range files { - wg.Add(1) - go func(file string) { - defer wg.Done() - class, err := ParseClass(file) - if err != nil { - Error.Printf("Error parsing file: %v", err) - return - } - class.Write(*outdir, classTemplate) - }(file) - } - wg.Wait() + utils.WithWorkers(10, files, func(worker int, file string) { + class, err := ParseClass(file) + if err != nil { + logger.Error("Error parsing file: %v", err) + return + } + class.Write(*outdir, classTemplate) + }) } func MapType(t string) string { @@ -78,3 +52,11 @@ func MapType(t string) string { return t } } + +func IsReservedKeyword(t string) bool { + switch t { + case "any", "boolean", "number", "string", "table", "function", "thread", "userdata", "nil", "var", "in": + return true + } + return false +}