in bugbot/multi_autofixers.py [0:0]
def _merge_changes_from_rules(self) -> Dict[str, dict]:
all_changes: Dict[str, dict] = defaultdict(dict)
for rule in self.rules:
for bugid, changes in rule.autofix_changes.items():
all_changes[bugid][rule.__class__] = changes
for bugid, rules in all_changes.items():
merged_changes = {}
common_fields = (
field
for field, count in Counter(
field for changes in rules.values() for field in changes.keys()
).items()
if count > 1
)
for field in common_fields:
if field not in self.merge_functions:
raise MissingMergeFunctionError(field)
rules_with_common_field = {
rule: changes for rule, changes in rules.items() if field in changes
}
merged_changes[field] = self.merge_functions[field](
rules_with_common_field
)
all_changes[bugid] = dict(ChainMap(merged_changes, *rules.values()))
return all_changes