def create_fixer()

in bowler/query.py [0:0]


    def create_fixer(self, transform):
        if transform.fixer:
            bm_compat = transform.fixer.BM_compatible
            pattern = transform.fixer.PATTERN

        else:
            bm_compat = False
            log.debug(f"select {transform.selector}[{transform.kwargs}]")
            pattern = SELECTORS[transform.selector].format(**transform.kwargs)

            pattern = " ".join(
                line
                for wholeline in pattern.splitlines()
                for line in (wholeline.strip(),)
                if line
            )

            log.debug(f"generated pattern: {pattern}")

        filters = transform.filters
        callbacks = transform.callbacks

        log.debug(f"registered {len(filters)} filters: {filters}")
        log.debug(f"registered {len(callbacks)} callbacks: {callbacks}")

        class Fixer(BaseFix):
            PATTERN = pattern  # type: ignore
            BM_compatible = bm_compat

            def transform(self, node: LN, capture: Capture) -> Optional[LN]:
                filename = cast(Filename, self.filename)
                returned_node = None
                if not filters or all(f(node, capture, filename) for f in filters):
                    if transform.fixer:
                        returned_node = transform.fixer().transform(node, capture)
                    for callback in callbacks:
                        if returned_node and returned_node is not node:
                            raise BowlerException(
                                "Only the last fixer/callback may return "
                                "a different node.  See "
                                "https://pybowler.io/docs/api-modifiers"
                            )
                        returned_node = callback(node, capture, filename)
                return returned_node

        return Fixer