B
;Ôð‰'B¢Sã @ s
d Z ddlZddlZddlZddlZddlZddlZddlZddlm Z ddl
mZmZm
Z
ddlmZ ddlmZmZ ddlmZ d d
d„ZG dd
„ d
eƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZG dd„ deƒZG dd„ deƒZG dd„ deƒZ G dd„ deƒZ!dS )!z#Guido van Rossum é N)Úchainé )ÚdriverÚtokenizeÚtoken)Ú find_root)ÚpytreeÚpygram)Úbtm_matcherTc C sX t | g g dgƒ}g }x>t |j¡D ].\}}}| d¡r"|rF|dd … }| |¡ q"W |S )NÚ*Úfix_é )Ú
__import__ÚpkgutilZiter_modulesÚ__path__Ú
startswithÚappend)Z fixer_pkgZ
remove_prefixZpkgZ fix_namesÚfinderÚnameZispkg© r ú5/opt/alt/python37/lib64/python3.7/lib2to3/refactor.pyÚget_all_fix_names s
r c @ s e Zd ZdS )Ú
_EveryNodeN)Ú__name__Ú
__module__Ú__qualname__r r r r r + s r c C sš t | tjtjfƒr(| jd kr t‚| jhS t | tjƒrH| jrDt| jƒS t‚t | tj ƒrŠt
ƒ }x*| jD ] }x|D ]}| t|ƒ¡ qlW qbW |S td| ƒ‚d S )Nz$Oh no! I don't understand pattern %s)
Ú
isinstancer ZNodePatternZLeafPatternÚtyper ZNegatedPatternZcontentÚ_get_head_typesZWildcardPatternÚsetÚupdateÚ Exception)ZpatÚrÚpÚxr r r r / s
r c C sÊ t t¡}g }x„| D ]|}|jrjyt|jƒ}W n tk
rJ | |¡ Y qX xB|D ]}|| |¡ qRW q|jd k r†||j |¡ q| |¡ qW x,tt j
j ¡ t j
j
ƒD ]}|| |¡ q¬W t|ƒS )N)ÚcollectionsÚdefaultdictÚlistÚpatternr r r Z_accept_typer r Úpython_grammarZ
symbol2numberÚvaluesÚtokensÚextendÚdict)Z
fixer_listZ
head_nodesZeveryÚfixerZheadsZ node_typer r r Ú_get_headnode_dictK s"
r/ c s ‡ fdd„t ˆ dƒD ƒS )Nc s g | ]}ˆ d | ‘qS )Ú.r )Ú.0Úfix_name)Úpkg_namer r ú
h s z+get_fixers_from_package..F)r )r3 r )r3 r Úget_fixers_from_packaged s
r5 c C s | S )Nr )Úobjr r r Ú _identityk s r7 c sV d}t t | ¡j¡‰ ‡ fdd„}ttjt jtj hƒ}t
ƒ }yúxô|ƒ \}}||krVq@q@|tjkrl|rfP d}q@|tjkr.|dkr.|ƒ \}}|tjksž|dkr P |ƒ \}}|tjks¼|dkr¾P |ƒ \}}|tj
krä|dkrä|ƒ \}}xJ|tjkr*| |¡ |ƒ \}}|tj
ks|d krP |ƒ \}}qæW q@P q@W W n tk
rL Y nX t|ƒS )
NFc s t ˆ ƒ} | d | d fS )Nr r )Únext)Útok)Úgenr r Úadvancer s z(_detect_future_features..advanceTÚfromZ
__future__Úimportú(ú,)r Úgenerate_tokensÚioÚStringIOÚreadlineÚ frozensetr ÚNEWLINEÚNLÚCOMMENTr ÚSTRINGÚNAMEÚOPÚaddÚ
StopIteration)ÚsourceZhave_docstringr; ÚignoreÚfeaturesÚtpÚvaluer )r: r Ú_detect_future_featureso sD
rR c @ s e Zd ZdS )Ú
FixerErrorN)r r r r r r r rS — s rS c @ sä e Zd ZdddœZdZdZd4dd„Zdd „ Zd
d„ Zdd
„ Z dd„ Z
dd„ Zd5dd„Zd6dd„Z
dd„ Zd7dd„Zdd„ Zd8dd„Zdd„ Zd d!„ Zd9d"d#„Zd:d$d%„Zd&Zd'Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ ZdS );ÚRefactoringToolF)Úprint_functionÚwrite_unchanged_filesZFixr Nc C s2 || _ |pg | _| j ¡ | _|d k r0| j |¡ | jd rDtj| _ntj | _| j
d¡| _g | _t
d¡| _g | _d| _tj| jtj| jd| _| ¡ \| _| _g | _t ¡ | _g | _g | _xXt| j| jƒD ]F}|j rä| j !|¡ qÌ|| jkrü| j "|¡ qÌ|| jkrÌ| j "|¡ qÌW t#| jƒ| _$t#| jƒ| _%d S )NrU rV rT F)ÚconvertÚlogger)&ÚfixersÚexplicitÚ_default_optionsÚcopyÚoptionsr r Ú!python_grammar_no_print_statementÚgrammarr) ÚgetrV ÚerrorsÚloggingZ getLoggerrX Ú fixer_logÚwroter ZDriverr rW Ú
get_fixersÚ pre_orderÚ
post_orderÚfilesÚbmZ
BottomMatcherÚBMZ
bmi_pre_orderZbmi_post_orderr Z
BM_compatibleZ add_fixerr r/ Úbmi_pre_order_headsÚbmi_post_order_heads)ÚselfZfixer_namesr] rZ r. r r r Ú__init__£ s<