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

import (
P
Phodal Huang 已提交
4 5
	"coca/core/domain/bs"
	"coca/core/support"
P
Phodal Huang 已提交
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
	"encoding/json"
	"github.com/spf13/cobra"
	"strings"
)

var badsmellCmd *cobra.Command = &cobra.Command{
	Use:   "bs",
	Short: "Bad Code Smell",
	Long:  ``,
	Run: func(cmd *cobra.Command, args []string) {
		importPath := cmd.Flag("path").Value.String()
		ignoreStr := cmd.Flag("ignore").Value.String()
		sortType := cmd.Flag("sort").Value.String()

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

		if importPath != "" {
			bsApp := new(bs.BadSmellApp)
			bsList := bsApp.AnalysisPath(importPath, ignoreRules)

			bsModel, _ := json.MarshalIndent(bsList, "", "\t")

			if sortType == "type" {
				sortSmells := sortSmellByType(bsList)
				bsModel, _ = json.MarshalIndent(sortSmells, "", "\t")
			}

P
Phodal Huang 已提交
33
			support.WriteToFile("bs.json", string(bsModel))
P
Phodal Huang 已提交
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
		}
	},
}

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 已提交
50
	badsmellCmd.PersistentFlags().StringP("path", "p", "", "example -p core/main")
P
Phodal Huang 已提交
51 52 53
	badsmellCmd.PersistentFlags().StringP("ignore", "x", "", "-x=dataClass,lazyElement,longMethod,refusedBequest")
	badsmellCmd.PersistentFlags().StringP("sort", "s", "", "sort bad smell -s=type")
}