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