github.com/blaisereilly/goreporter@v0.0.0-20240129165232-a6e9a46234bd/engine/strategy_spellcheck.go (about)

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