diff --git a/build/rule.go b/build/rule.go index 44bb161ea..650d95aef 100644 --- a/build/rule.go +++ b/build/rule.go @@ -226,6 +226,19 @@ func (r *Rule) AttrKeys() []string { return keys } +// AttrMap returns the map of attribute keys to values. +func (r *Rule) AttrMap() map[string]Expr { + m := make(map[string]Expr) + for _, expr := range r.Call.List { + if as, ok := expr.(*AssignExpr); ok { + if keyExpr, ok := as.LHS.(*Ident); ok { + m[keyExpr.Name] = as.RHS + } + } + } + return m +} + // AttrDefn returns the AssignExpr defining the rule's attribute with the given key. // If the rule has no such attribute, AttrDefn returns nil. func (r *Rule) AttrDefn(key string) *AssignExpr {