def _merge_changes_from_rules()

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