blob: 9a9bda3ed45dfee945ee1f05c0001841519c94c1 [file] [edit]
// Copyright 2020-2026 Buf Technologies, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package bufcheck
import (
"buf.build/go/bufplugin/check"
"buf.build/go/standard/xslices"
)
var _ check.Rule = &rule{}
var _ Rule = &rule{}
var _ RuleOrCategory = &rule{}
type rule struct {
check.Rule
pluginName string
policyName string
}
func newRule(checkRule check.Rule, pluginName string, policyName string) *rule {
return &rule{
Rule: checkRule,
pluginName: pluginName,
policyName: policyName,
}
}
func (r *rule) BufcheckCategories() []Category {
return xslices.Map(
r.Rule.Categories(),
func(checkCategory check.Category) Category {
return newCategory(checkCategory, r.pluginName, r.policyName)
},
)
}
func (r *rule) PluginName() string {
return r.pluginName
}
func (r *rule) PolicyName() string {
return r.policyName
}
func (*rule) isRule() {}
func (*rule) isRuleOrCategory() {}
// Returns Rules in same order as in allRules.
func rulesForType[R check.Rule](allRules []R, ruleType check.RuleType) []R {
return xslices.Filter(allRules, func(rule R) bool { return rule.Type() == ruleType })
}
// Returns Rules in same order as in allRules.
func rulesForRuleIDs[R check.Rule](allRules []R, ruleIDs []string) []R {
rules := make([]R, 0, len(allRules))
ruleIDMap := xslices.ToStructMap(ruleIDs)
for _, rule := range allRules {
if _, ok := ruleIDMap[rule.ID()]; ok {
rules = append(rules, rule)
}
}
return rules
}