Bowler icon indicating copy to clipboard operation
Bowler copied to clipboard

Move `rename_transform` outside of `Query.rename`

Open orsinium opened this issue 5 years ago • 3 comments

For example, you want to rename node only if it matches some pattern. You can do this:

def modify(node: LN, capture: Capture, filename: Filename) -> None:
  if re.match(...):
    rename_transform(...)

However, rename_transform isn't available for import. BTW, it's can be really useful to have bowler.modifiers with some common modifiers to reuse them. Maybe, moving rename_transform in it is a good start. Same for add_argument_transform, encapsulate_transform etc

And what if use _modifier instead of _transform?

I can do PR for it if you agree with the point.

orsinium avatar Jun 26 '19 17:06 orsinium

That example would make a great filter, would that solve much of the use case?

thatch avatar Jul 03 '19 03:07 thatch

Filter can cover situation with choosing the right action, but not case with some simple preparation. For example, do relative imports if possible: make relative path if possible and pass it into rename_trfansform, otherwise use absolute import.

orsinium avatar Jul 03 '19 07:07 orsinium

Moving away from closures for these transforms will also be necessary to eventually support Windows (or Py3.8+ on Mac) where multiprocessing uses spawned processes.

amyreese avatar Jul 10 '19 22:07 amyreese