gen.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package docgen
  2. import (
  3. "errors"
  4. "fmt"
  5. "os"
  6. "path/filepath"
  7. "strings"
  8. "github.com/tal-tech/go-zero/tools/goctl/api/parser"
  9. "github.com/urfave/cli"
  10. )
  11. var docDir = "doc"
  12. func DocCommand(c *cli.Context) error {
  13. dir := c.String("dir")
  14. if len(dir) == 0 {
  15. return errors.New("missing -dir")
  16. }
  17. files, err := filePathWalkDir(dir)
  18. if err != nil {
  19. return errors.New(fmt.Sprintf("dir %s not exist", dir))
  20. }
  21. err = os.RemoveAll(dir + "/" + docDir + "/")
  22. if err != nil {
  23. return err
  24. }
  25. for _, f := range files {
  26. api, err := parser.Parse(f)
  27. if err != nil {
  28. return errors.New(fmt.Sprintf("parse file: %s, err: %s", f, err.Error()))
  29. }
  30. index := strings.Index(f, dir)
  31. if index < 0 {
  32. continue
  33. }
  34. dst := dir + "/" + docDir + f[index+len(dir):]
  35. index = strings.LastIndex(dst, "/")
  36. if index < 0 {
  37. continue
  38. }
  39. dir := dst[:index]
  40. genDoc(api, dir, strings.Replace(dst[index+1:], ".api", ".md", 1))
  41. }
  42. return nil
  43. }
  44. func filePathWalkDir(root string) ([]string, error) {
  45. var files []string
  46. err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
  47. if !info.IsDir() && strings.HasSuffix(path, ".api") {
  48. files = append(files, path)
  49. }
  50. return nil
  51. })
  52. return files, err
  53. }