gen.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package docgen
  2. import (
  3. "errors"
  4. "fmt"
  5. "os"
  6. "path/filepath"
  7. "strings"
  8. "github.com/urfave/cli"
  9. "github.com/zeromicro/go-zero/tools/goctl/api/parser"
  10. "github.com/zeromicro/go-zero/tools/goctl/util/pathx"
  11. )
  12. // DocCommand generate markdown doc file
  13. func DocCommand(c *cli.Context) error {
  14. dir := c.String("dir")
  15. if len(dir) == 0 {
  16. return errors.New("missing -dir")
  17. }
  18. outputDir := c.String("o")
  19. if len(outputDir) == 0 {
  20. var err error
  21. outputDir, err = os.Getwd()
  22. if err != nil {
  23. return err
  24. }
  25. }
  26. if !pathx.FileExists(dir) {
  27. return fmt.Errorf("dir %s not exsit", dir)
  28. }
  29. dir, err := filepath.Abs(dir)
  30. if err != nil {
  31. return err
  32. }
  33. files, err := filePathWalkDir(dir)
  34. if err != nil {
  35. return err
  36. }
  37. for _, p := range files {
  38. api, err := parser.Parse(p)
  39. if err != nil {
  40. return fmt.Errorf("parse file: %s, err: %s", p, err.Error())
  41. }
  42. api.Service = api.Service.JoinPrefix()
  43. err = genDoc(api, filepath.Dir(filepath.Join(outputDir, p[len(dir):])),
  44. strings.Replace(p[len(filepath.Dir(p)):], ".api", ".md", 1))
  45. if err != nil {
  46. return err
  47. }
  48. }
  49. return nil
  50. }
  51. func filePathWalkDir(root string) ([]string, error) {
  52. var files []string
  53. err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
  54. if !info.IsDir() && strings.HasSuffix(path, ".api") {
  55. files = append(files, path)
  56. }
  57. return nil
  58. })
  59. return files, err
  60. }