abingham / traad

An JSON+HTTP server for the rope Python refactoring library
MIT License
107 stars 20 forks source link

Iterator / context manager extraction #95

Open talwrii opened 6 years ago

talwrii commented 6 years ago

So yeah, I don't seem to be a good beta tester: you might not want to immediately implement this. But this struck me as an interesting idea and this project feels like the correct community for useable python refactoring tools, so I thought I'd throw this idea up here.

Sometimes I don't want to extract a region... so much as everything apart from a region.

An example:

def f():
    for x in blah():
        if filter(x):
           continue
        do_stuff(x)

# should become

def iterate_x():
     for x in blah:
         if filter(x):
             continue
         else:
               yield x

def f():
     for x in iterate_x():
          do_stuff(x)

The same idea applies to context managers.

abingham commented 6 years ago

It's an interesting idea. I definitely see the value of the specific refactoring you made above, separating the sequence generation from the element handling. If that could be defined in terms of existing rope refactorings then I'd be happy to include it in traad.

If if turns out that this would require a new form of refactoring, though, you probably need to talk with the rope project.