gen.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package docgen
  2. import (
  3. "errors"
  4. "fmt"
  5. "os"
  6. "path/filepath"
  7. "strings"
  8. "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. p, err := parser.NewParser(f)
  27. if err != nil {
  28. return errors.New(fmt.Sprintf("parse file: %s, err: %s", f, err.Error()))
  29. }
  30. api, err := p.Parse()
  31. if err != nil {
  32. return err
  33. }
  34. index := strings.Index(f, dir)
  35. if index < 0 {
  36. continue
  37. }
  38. dst := dir + "/" + docDir + f[index+len(dir):]
  39. index = strings.LastIndex(dst, "/")
  40. if index < 0 {
  41. continue
  42. }
  43. dir := dst[:index]
  44. genDoc(api, dir, strings.Replace(dst[index+1:], ".api", ".md", 1))
  45. }
  46. return nil
  47. }
  48. func filePathWalkDir(root string) ([]string, error) {
  49. var files []string
  50. err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
  51. if !info.IsDir() && strings.HasSuffix(path, ".api") {
  52. files = append(files, path)
  53. }
  54. return nil
  55. })
  56. return files, err
  57. }