main.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package main
  2. import (
  3. "flag"
  4. "os"
  5. "path/filepath"
  6. "strings"
  7. "go-common/app/tool/bgr/log"
  8. )
  9. var (
  10. _flagType string
  11. _flagScript string
  12. _flagDebug bool
  13. _flagHit string
  14. _log *log.Logger
  15. )
  16. func init() {
  17. flag.StringVar(&_flagType, "type", "file", "args type, file or dir")
  18. flag.StringVar(&_flagScript, "script", defaultDir(), "input script dir")
  19. flag.BoolVar(&_flagDebug, "debug", false, "set true, if need print debug info")
  20. flag.StringVar(&_flagHit, "hit", "", "filter hit key")
  21. flag.Parse()
  22. _log = log.New(os.Stdout, _flagDebug)
  23. }
  24. func defaultDir() string {
  25. dir, err := os.Getwd()
  26. if err != nil {
  27. panic(err)
  28. }
  29. return dir
  30. }
  31. func main() {
  32. targets := flag.Args()
  33. switch _flagType {
  34. case "file":
  35. targets = filterFiles(targets)
  36. targets = combineDirs(targets)
  37. }
  38. _log.Debugf("check targets: %+v", targets)
  39. walkScript(_flagScript)
  40. for _, dir := range targets {
  41. if strings.HasSuffix(dir, "...") {
  42. walkDir(strings.TrimRight(dir, "..."))
  43. } else {
  44. if err := AstInspect(dir); err != nil {
  45. _log.Fatalf("%+v", err)
  46. }
  47. }
  48. }
  49. for _, desc := range _warns {
  50. _log.Warn(desc)
  51. }
  52. for _, desc := range _errors {
  53. _log.Error(desc)
  54. }
  55. if len(_errors) > 0 {
  56. os.Exit(1)
  57. }
  58. }
  59. func walkDir(dir string) {
  60. filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
  61. if info.IsDir() {
  62. if err := AstInspect(path); err != nil {
  63. _log.Fatalf("%+v", err)
  64. }
  65. }
  66. return nil
  67. })
  68. }
  69. func combineDirs(files []string) (fs []string) {
  70. fmap := make(map[string]struct{})
  71. for _, f := range files {
  72. index := strings.LastIndex(f, "/")
  73. if index > 0 {
  74. fmap[f[:index]] = struct{}{}
  75. }
  76. }
  77. for k := range fmap {
  78. fs = append(fs, k)
  79. }
  80. return
  81. }
  82. func filterFiles(files []string) (fs []string) {
  83. for _, f := range files {
  84. if strings.Contains(f, _flagHit) {
  85. fs = append(fs, f)
  86. }
  87. }
  88. return
  89. }