Parcourir la source

Append ordered rules when extending (#1304)

Jarek Porzucek il y a 1 an
Parent
commit
59c0cc7183
2 fichiers modifiés avec 10 ajouts et 5 suppressions
  1. 9 4
      config/config.go
  2. 1 1
      report/sarif.go

+ 9 - 4
config/config.go

@@ -4,6 +4,7 @@ import (
 	_ "embed"
 	"fmt"
 	"regexp"
+	"sort"
 	"strings"
 
 	"github.com/rs/zerolog/log"
@@ -62,7 +63,7 @@ type Config struct {
 	Keywords    []string
 
 	// used to keep sarif results consistent
-	orderedRules []string
+	OrderedRules []string
 }
 
 // Extend is a struct that allows users to define how they want their
@@ -158,7 +159,7 @@ func (vc *ViperConfig) Translate() (Config, error) {
 			StopWords:   vc.Allowlist.StopWords,
 		},
 		Keywords:     keywords,
-		orderedRules: orderedRules,
+		OrderedRules: orderedRules,
 	}
 
 	if maxExtendDepth != extendDepth {
@@ -177,9 +178,9 @@ func (vc *ViperConfig) Translate() (Config, error) {
 	return c, nil
 }
 
-func (c *Config) OrderedRules() []Rule {
+func (c *Config) GetOrderedRules() []Rule {
 	var orderedRules []Rule
-	for _, id := range c.orderedRules {
+	for _, id := range c.OrderedRules {
 		if _, ok := c.Rules[id]; ok {
 			orderedRules = append(orderedRules, c.Rules[id])
 		}
@@ -240,6 +241,7 @@ func (c *Config) extend(extensionConfig Config) {
 			log.Trace().Msgf("adding %s to base config", ruleID)
 			c.Rules[ruleID] = rule
 			c.Keywords = append(c.Keywords, rule.Keywords...)
+			c.OrderedRules = append(c.OrderedRules, ruleID)
 		}
 	}
 
@@ -250,4 +252,7 @@ func (c *Config) extend(extensionConfig Config) {
 		extensionConfig.Allowlist.Paths...)
 	c.Allowlist.Regexes = append(c.Allowlist.Regexes,
 		extensionConfig.Allowlist.Regexes...)
+
+	// sort to keep extended rules in order
+	sort.Strings(c.OrderedRules)
 }

+ 1 - 1
report/sarif.go

@@ -55,7 +55,7 @@ func hasEmptyRules(tool Tool) bool {
 func getRules(cfg config.Config) []Rules {
 	// TODO	for _, rule := range cfg.Rules {
 	var rules []Rules
-	for _, rule := range cfg.OrderedRules() {
+	for _, rule := range cfg.GetOrderedRules() {
 		shortDescription := ShortDescription{
 			Text: rule.Description,
 		}