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