1 """Fix "for x in f.xreadlines()" -> "for x in f".
2
3 This fixer will also convert g(f.xreadlines) into g(f.__iter__)."""
4 # Author: Collin Winter
5
6 # Local imports
7 from .. import fixer_base
8 from ..fixer_util import Name
9
10
11 class ESC[4;38;5;81mFixXreadlines(ESC[4;38;5;149mfixer_baseESC[4;38;5;149m.ESC[4;38;5;149mBaseFix):
12 BM_compatible = True
13 PATTERN = """
14 power< call=any+ trailer< '.' 'xreadlines' > trailer< '(' ')' > >
15 |
16 power< any+ trailer< '.' no_call='xreadlines' > >
17 """
18
19 def transform(self, node, results):
20 no_call = results.get("no_call")
21
22 if no_call:
23 no_call.replace(Name("__iter__", prefix=no_call.prefix))
24 else:
25 node.replace([x.clone() for x in results["call"]])