gen.go 1.5 KB

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