bs.go 1.4 KB
Newer Older
P
Phodal Huang 已提交
1 2 3
package cmd

import (
P
Phodal Huang 已提交
4
	"coca/core/adapter/bs"
P
Phodal Huang 已提交
5
	"coca/core/support"
P
Phodal Huang 已提交
6 7 8 9 10
	"encoding/json"
	"github.com/spf13/cobra"
	"strings"
)

P
Phodal Huang 已提交
11 12 13 14 15 16 17 18
type BsCmdConfig struct {
	Path string
}

var (
	bsCmdConfig BsCmdConfig
)

P
Phodal Huang 已提交
19
var badsmellCmd = &cobra.Command{
P
Phodal Huang 已提交
20
	Use:   "bs",
P
Phodal Huang 已提交
21
	Short: "bad smell analysis",
P
Phodal Huang 已提交
22 23
	Long:  ``,
	Run: func(cmd *cobra.Command, args []string) {
P
Phodal Huang 已提交
24
		importPath := *&bsCmdConfig.Path
P
Phodal Huang 已提交
25 26 27 28 29
		ignoreStr := cmd.Flag("ignore").Value.String()
		sortType := cmd.Flag("sort").Value.String()

		ignoreRules := strings.Split(ignoreStr, ",")

P
Phodal Huang 已提交
30 31
		bsApp := new(bs.BadSmellApp)
		bsList := bsApp.AnalysisPath(importPath, ignoreRules)
P
Phodal Huang 已提交
32

P
Phodal Huang 已提交
33
		bsModel, _ := json.MarshalIndent(bsList, "", "\t")
P
Phodal Huang 已提交
34

P
Phodal Huang 已提交
35 36 37
		if sortType == "type" {
			sortSmells := sortSmellByType(bsList)
			bsModel, _ = json.MarshalIndent(sortSmells, "", "\t")
P
Phodal Huang 已提交
38
		}
P
Phodal Huang 已提交
39 40

		support.WriteToFile("bs.json", string(bsModel))
P
Phodal Huang 已提交
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
	},
}

func sortSmellByType(models []bs.BadSmellModel) map[string][]bs.BadSmellModel {
	sortSmells := make(map[string][]bs.BadSmellModel)
	for _, model := range models {
		sortSmells[model.Bs] = append(sortSmells[model.Bs], model)
	}

	return sortSmells
}

func init() {
	rootCmd.AddCommand(badsmellCmd)

P
Phodal Huang 已提交
56
	badsmellCmd.PersistentFlags().StringVarP(&bsCmdConfig.Path, "path", "p", ".", "example -p core/main")
P
Phodal Huang 已提交
57 58 59
	badsmellCmd.PersistentFlags().StringP("ignore", "x", "", "-x=dataClass,lazyElement,longMethod,refusedBequest")
	badsmellCmd.PersistentFlags().StringP("sort", "s", "", "sort bad smell -s=type")
}