github.com/serversong/goreporter@v0.0.0-20200325104552-3cfaf44fd178/engine/strategy_simplecode.go (about)

     1  package engine
     2  
     3  import (
     4  	"strconv"
     5  	"strings"
     6  
     7  	"github.com/360EntSecGroup-Skylar/goreporter/linters/simplecode"
     8  	"github.com/360EntSecGroup-Skylar/goreporter/utils"
     9  )
    10  
    11  type StrategySimpleCode struct {
    12  	Sync *Synchronizer `inject:""`
    13  }
    14  
    15  func (s *StrategySimpleCode) GetName() string {
    16  	return "Simple"
    17  }
    18  
    19  func (s *StrategySimpleCode) GetDescription() string {
    20  	return "All golang code hints that can be optimized and give suggestions for changes."
    21  }
    22  
    23  func (s *StrategySimpleCode) GetWeight() float64 {
    24  	return 0.05
    25  }
    26  
    27  func (s *StrategySimpleCode) Compute(parameters StrategyParameter) (summaries *Summaries) {
    28  	summaries = NewSummaries()
    29  
    30  	simples := simplecode.Simple(parameters.AllDirs, parameters.ExceptPackages)
    31  	sumProcessNumber := int64(10)
    32  	processUnit := utils.GetProcessUnit(sumProcessNumber, len(simples))
    33  	for _, simpleTip := range simples {
    34  		simpleTips := strings.Split(simpleTip, ":")
    35  		if len(simpleTips) == 4 {
    36  			packageName := utils.PackageNameFromGoPath(simpleTips[0])
    37  			line, _ := strconv.Atoi(simpleTips[1])
    38  			erroru := Error{
    39  				LineNumber:  line,
    40  				ErrorString: utils.AbsPath(simpleTips[0]) + ":" + strings.Join(simpleTips[1:], ":"),
    41  			}
    42  			summaries.Lock()
    43  			if summarie, ok := summaries.Summaries[packageName]; ok {
    44  				summarie.Errors = append(summarie.Errors, erroru)
    45  				summaries.Summaries[packageName] = summarie
    46  			} else {
    47  				summarie := Summary{
    48  					Name:   packageName,
    49  					Errors: make([]Error, 0),
    50  				}
    51  				summarie.Errors = append(summarie.Errors, erroru)
    52  				summaries.Summaries[packageName] = summarie
    53  			}
    54  			summaries.Unlock()
    55  		}
    56  		if sumProcessNumber > 0 {
    57  			s.Sync.LintersProcessChans <- processUnit
    58  			sumProcessNumber = sumProcessNumber - processUnit
    59  		}
    60  	}
    61  
    62  	return summaries
    63  }
    64  
    65  func (s *StrategySimpleCode) Percentage(summaries *Summaries) float64 {
    66  	summaries.RLock()
    67  	defer summaries.RUnlock()
    68  	return utils.CountPercentage(len(summaries.Summaries))
    69  }