17db96d56Sopenharmony_ci"""Fix "for x in f.xreadlines()" -> "for x in f".
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ciThis fixer will also convert g(f.xreadlines) into g(f.__iter__)."""
47db96d56Sopenharmony_ci# Author: Collin Winter
57db96d56Sopenharmony_ci
67db96d56Sopenharmony_ci# Local imports
77db96d56Sopenharmony_cifrom .. import fixer_base
87db96d56Sopenharmony_cifrom ..fixer_util import Name
97db96d56Sopenharmony_ci
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ciclass FixXreadlines(fixer_base.BaseFix):
127db96d56Sopenharmony_ci    BM_compatible = True
137db96d56Sopenharmony_ci    PATTERN = """
147db96d56Sopenharmony_ci    power< call=any+ trailer< '.' 'xreadlines' > trailer< '(' ')' > >
157db96d56Sopenharmony_ci    |
167db96d56Sopenharmony_ci    power< any+ trailer< '.' no_call='xreadlines' > >
177db96d56Sopenharmony_ci    """
187db96d56Sopenharmony_ci
197db96d56Sopenharmony_ci    def transform(self, node, results):
207db96d56Sopenharmony_ci        no_call = results.get("no_call")
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_ci        if no_call:
237db96d56Sopenharmony_ci            no_call.replace(Name("__iter__", prefix=no_call.prefix))
247db96d56Sopenharmony_ci        else:
257db96d56Sopenharmony_ci            node.replace([x.clone() for x in results["call"]])
26