JOJ3/internal/parsers/clangtidy/score.go
张泊明518370910136 bb63cb65ba
All checks were successful
build / build (push) Successful in 1m21s
build / trigger-build-image (push) Successful in 6s
fix: clangtidy parser get result
2024-10-06 07:59:04 -04:00

62 lines
1.4 KiB
Go

package clangtidy
import (
"fmt"
"strings"
)
func GetResult(jsonMessages []JsonMessage, conf Conf) (int, string) {
score := conf.Score
comment := "### Test results summary\n\n"
keys := [...]string{
"codequality-unchecked-malloc-result",
"codequality-no-global-variables",
"codequality-no-header-guard",
"codequality-no-fflush-stdin",
"readability-function-size",
"readability-duplicate-include",
"readability-identifier-naming",
"readability-redundant",
"readability-misleading-indentation",
"readability-misplaced-array-index",
"cppcoreguidelines-init-variables",
"bugprone-suspicious-string-compare",
"google-global-names-in-headers",
"clang-diagnostic",
"clang-analyzer",
"misc",
"performance",
"others",
}
mapping := map[string]int{}
for _, key := range keys {
mapping[key] = 0
}
for _, jsonMessage := range jsonMessages {
checkName := jsonMessage.CheckName
for _, match := range conf.Matches {
for _, keyword := range match.Keywords {
// TODO: The keyword in json report might also be an array, need to split it
if strings.Contains(checkName, keyword) {
score -= match.Score
}
}
}
listed := false
for key := range mapping {
if strings.Contains(checkName, key) {
mapping[key] += 1
listed = true
}
}
if !listed {
mapping["others"] += 1
}
}
for i, key := range keys {
comment = fmt.Sprintf("%s%d. %s: %d\n", comment, i+1, key, mapping[key])
}
return score, comment
}