fsk> dZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z m Z m Z ddlmZddlmZmZddlmZdd ZGd d eZd ZdZdZdZdZGddeZGddeZGddeZ GddeZ!dS)z#Guido van Rossum N)chain)drivertokenizetoken) find_root)pytreepygram) btm_matcherTc t|ggdg}g}tj|jD]<\}}}|dr!|r |dd}||=|S)N*fix_) __import__pkgutil iter_modules__path__ startswithappend) fixer_pkg remove_prefixpkg fix_namesfindernameispkgs 7/opt/alt/python311/lib64/python3.11/lib2to3/refactor.pyget_all_fix_namesrsO YB . .CI&3CLAA##e ??6 " " # ABBx   T " " " ceZdZdS) _EveryNodeN__name__ __module__ __qualname__rrr!r!+Drr!c t|tjtjfr|jt |jhSt|tjr"|jrt|jSt t|tj rAt}|jD])}|D]$}| t|%*|Std|z)Nz$Oh no! I don't understand pattern %s) isinstancer NodePattern LeafPatterntyper!NegatedPatterncontent_get_head_typesWildcardPatternsetupdate Exception)patrpxs rr/r//s9#*F,>?@@ 8  z#v,-- ; 0"3;// /#v-.. EE - -A - -++,,,, - :SA B BBrc\ tjt}g}|D]}|jr[ t |j}|D]}|||?#t $r||Y`wxYw|j!||j|||ttj j tj j D]}|||t|SN) collections defaultdictlistpatternr/rr! _accept_typerr python_grammar symbol2numbervaluestokensextenddict) fixer_list head_nodeseveryfixerheads node_types r_get_headnode_dictrKKsO/(..J E $ $ = $ 8' 66"'88Iy)0077778 $ $ $ U##### $ !-5-.55e<<<< U####60>EEGG!0799,, 9$$U++++   sAB?Bc> fdtdDS)Nc g|] }dz|z S.r&).0fix_namepkg_names r z+get_fixers_from_package..hs8 @ @ @ sNX % @ @ @rF)r)rRs`rget_fixers_from_packagerTdsE @ @ @ @-h>> @ @ @@rc|Sr9r&)objs r _identityrWks Jrchd}tjtj|jfd}t t jtjt j h}t} |\}}||vr|t j kr|rnd}n|t j kr|dkr|\}}|t j ks|dkrn|\}}|t j ks|dkrn|\}}|t j kr|dkr |\}}|t j krV|||\}}|t j ks|dkrn|\}}|t j kVnn n#t$rYnwxYwt |S) NFcBt}|d|dfS)Nrr)next)tokgens radvancez(_detect_future_features..advancers 3ii1vs1v~rTfrom __future__import(,)rgenerate_tokensioStringIOreadline frozensetrNEWLINENLCOMMENTr1STRINGNAMEOPadd StopIteration)sourcehave_docstringr]ignorefeaturestpvaluer\s @r_detect_future_featuresrvosN  "2;v#6#6#? @ @C x{EMB C CFuuH   IBV||u|##!!%uz!!evoo#GII E##u '<'<#GII E##u'8'8#GII E>>esll ' IBEJ&&LL''' ' IBUX~~# ' IB EJ&&3 4      X  s3D!F F"!F"ceZdZdS) FixerErrorNr"r&rrrxrxs&&rrxceZdZddddZdZdZddZdZdZd Z d Z d Z dd Z dd Z dZddZdZd dZdZdZ d!dZd"dZdZdZdZdZdZdZdZdZdS)#RefactoringToolF)print_function exec_functionwrite_unchanged_filesFixrNcR ||_|pg|_|j|_||j|t j|_|jdr|jj d=n|jdr |jj d=|j d|_ g|_ tjd|_g|_d|_t%j|jt(j|j|_|\|_|_g|_t5j|_g|_g|_t?|j|jD]k}|j r|j!|$||jvr|j"|H||jvr|j"|ltG|j|_$tG|j|_%dS) Nr{printr|execr}rzF)convertlogger)&fixersexplicit_default_optionscopyoptionsr2r r?grammarkeywordsgetr}errorslogging getLoggerr fixer_logwroterDriverr r get_fixers pre_order post_orderfilesbm BottomMatcherBM bmi_pre_orderbmi_post_orderr BM_compatible add_fixerrrKbmi_pre_order_headsbmi_post_order_heads)self fixer_namesrrrHs r__init__zRefactoringTool.__init__s "  B ,1133   L   ( ( (,1133 <( ) . %g.. \/ * . %f- &*\%5%56M%N%N" '(9::  mDL,2N+/;888 +///*;*;' "$$ 4?DN;; 2 2E" 2!!%(((($.(("))%0000$/))#**5111#5d6H#I#I $6t7J$K$K!!!rc g}g}|jD]}t|iidg}|ddd}||jr|t |jd}|d}|jdd|Dz} t||}n$#t$rtd|d|dwxYw||j |j } | jr*|jd ur!||jvr|d |!|d || jd kr|| Y| jd kr|| {td| jzt'jd} || || ||fS)Nr rOr_c6g|]}|Sr&)title)rPr6s rrSz.RefactoringTool.get_fixers..s 5O5O5OAaggii5O5O5Orz Can't find TzSkipping optional fixer: %szAdding transformation: %sprepostzIllegal fixer order: %r run_orderkey)rrrsplitr FILE_PREFIXlensplit CLASS_PREFIXjoingetattrAttributeErrorrxrrr log_message log_debugorderroperator attrgettersort) rpre_order_fixerspost_order_fixers fix_mod_pathmodrQparts class_name fix_classrHkey_funcs rrzRefactoringTool.get_fixerss'  K J JL\2rC599C#**32226H""4#344 <#C(8$9$9$:$:;NN3''E*RWW5O5O5O5O5O-P-PPJ X#C44 ! X X X jxxx!LMMSWW XIdlDN;;E~ $-t";";  55  !>III NN6 A A A{e## ''....&&!((//// !:U[!HIII&{33(+++8,,, "344s 2C!C$c r9r&)rmsgargskwdss r log_errorzRefactoringTool.log_errors* rcJ |r||z}|j|dSr9)rinforrrs rrzRefactoringTool.log_messages2$  *C rcH|r||z}|j|dSr9)rdebugrs rrzRefactoringTool.log_debug s/  *C #rc dSr9r&)rold_textnew_textfilenameequals r print_outputzRefactoringTool.print_outputs   rc |D]P}tj|r||||9||||QdSr9)ospathisdir refactor_dir refactor_file)ritemswrite doctests_only dir_or_files rrefactorzRefactoringTool.refactorso7  F FKw}}[)) F!!+umDDDD"";}EEEE  F Frc tjdz}tj|D]\}}}|d||||D]w}|ds`tj|d|kr7tj||} | | ||xd|D|dd<dS)NpyzDescending into %srOrc<g|]}|d|SrN)r)rPdns rrSz0RefactoringTool.refactor_dir..2s)KKK" c8J8JK2KKKr) rextsepwalkrrrrsplitextrr) rdir_namerrpy_extdirpathdirnames filenamesrfullnames rrzRefactoringTool.refactor_dir s T!,.GH,=,= L L (GXy NN/ 9 9 9 MMOOO NN   ! G G,,GG$$T**1-77!w||GT::H&&x FFFKKKKKHQQQKK L Lrc t|d}n/#t$r"}|d||Yd}~dSd}~wwxYw tj|jd}|n#|wxYwtj|d|d5}||fcdddS#1swxYwYdS)NrbzCan't open %s: %sNNrr5rencodingnewline) openOSErrorrrdetect_encodingrfcloserdread)rrferrrs r_read_python_sourcez#RefactoringTool._read_python_source4s'  Xt$$AA    NN.# > > >:::::  / ;;A>H GGIIIIAGGIIII WXsXr B B B &a6688X% & & & & & & & & & & & & & & & & & &s0 A;AA88B)C  CCc ||\}}|dS|dz }|rl|d||||}|js||kr||||||dS|d|dS|||}|js |r7|jr0|t|dd|||dS|d|dS)N zRefactoring doctests in %szNo doctest changes in %sr)rrzNo changes in %s)rrrefactor_docstringr}processed_filerefactor_string was_changedstr)rrrrinputroutputtrees rrzRefactoringTool.refactor_fileDsC228<<x = F    = NN7 B B B,,UH==F) EVu__##FHeUHMMMMM98DDDDD''x88D) =d =t7G =##CIIcrcNH*/($DDDDD18<<<<}|d||jj |Yd}~|j|j_dSd}~wwxYw |j|j_n#|j|j_wxYw||_ | d|| |||S)Nr{zCan't parse %s: %s: %szRefactoring %s) rvr !python_grammar_no_print_statementrr parse_stringr3r __class__r#future_featuresr refactor_tree)rdatarrsrrs rrzRefactoringTool.refactor_string[s +400 x ' '"("JDK  /;++D11DD    NN3!7 > > > FFF"&,DK       #',DK  $,DK  . . . .' '... 4&&& s/AB% B"B 3B% BB%%B8ctj}|rh|d||d}|js||kr||d|dS|ddS||d}|js |r-|jr&|t|d|dS|ddS)NzRefactoring doctests in stdinzzNo doctest changes in stdinzNo changes in stdin) sysstdinrrrr}rrrr)rrrrrs rrefactor_stdinzRefactoringTool.refactor_stdinvs     6 NN: ; ; ;,,UI>>F) >Vu__##FIu=====<=====''y99D) 6d 6t7G 6##CIIy%@@@@@455555rc  t|j|jD]}|||||j|||j||j| }t| r|jj D]}||vr||r|| tjjd|jr+|| tjjt'||D]8}|||vr||| t+|n#t,$rYEwxYw|jr ||jvrZ||}|r|||}||||D]*}|jsg|_|j|+|j| }|D],} | |vrg|| <|| || -:t| t|j|jD]}||||jS)NT)rreverser)rrr start_tree traverse_byrrrrunleavesanyrArrr Basedepthkeep_line_order get_linenor<remover ValueErrorfixers_appliedmatch transformreplacerrC finish_treer) rrrrH match_setnoderesultsnew new_matchesfxrs rrzRefactoringTool.refactor_trees* 4>4?;; ) )E   T4 ( ( ( ( 14>>3C3CDDD 2DOO4E4EFFFGKK .. )""$$%%/ L. L. LI%%)E*:%e$))fk.?)NNN,J"%(--&+2H-III $Yu%5 6 6$L$L9U#333%e,33D999%%dOOOO)%%%%H%  .%5D%A>@(;$($7$>$>u$E$E$E$E/3gkk#**,,.G.G +6!L!LC+.)+;+;79 #$-cN$9$9+c:J$K$K$K$K_)""$$%%/ Lb4>4?;; * *E   dD ) ) ) )sF&& F32F3c |sdS|D]X}||jD]H}||}|r/|||}||||}IYdSr9)r,rrr)rr traversalr!rHr"r#s rrzRefactoringTool.traverse_bys   F # #D * # #++d++#//$88C S)))"  # # #rc` |j||||d}|dS||k}||||||r|d||jsdS|r|||||dS|d|dS)NrzNo changes to %szNot writing changes to %s)rrrrrr} write_file)rrrrrrrs rrzRefactoringTool.processed_files  (###  //99!>>   NN-x 8 8 8-   B OOHh( C C C C C NN6 A A A A Arc tj|d|d}n/#t$r"}|d||Yd}~dSd}~wwxYw|5 ||n.#t$r!}|d||Yd}~nd}~wwxYwdddn #1swxYwY|d|d|_dS)NwrrzCan't create %s: %szCan't write %s: %szWrote changes to %sT)rdrrrrrr)rrrrrfprs rr)zRefactoringTool.write_files]  32FFFBB    NN0(C @ @ @ FFFFF  D D D"""" D D D3XsCCCCCCCC D D D D D D D D D D D D D D D D ,h777 sP AAA BA%$B% B/B B BBB#&B#z>>> z... c  g}d}d}d}d}|dD])}|dz }||jrW|+|||||||}|g}||j} |d| }|V|||jzs#|||jzdzkr| ||+||||||d}d}| |+|+||||||d |S)NrTkeependsrrr) splitlineslstriprPS1rCrefactor_doctestfindPS2rstriprr) rrrresultblock block_linenoindentlinenolineis rrz"RefactoringTool.refactor_docstrings  $$d$33 $ $D aKF{{}}''11 $$MM$"7"7|8>#J#JKKK% IIdh''bqb$??6DH#455%6DHOO$5$55<<< T""""$MM$"7"7|8>#J#JKKK d####   MM$//|06BB C C Cwwvrc ||}n#t$r}jtjr.|D]+}d|d,d|||j j ||cYd}~Sd}~wwxYw ||rt| d}|d|dz ||dz d}} |dds|dxxdz cc<jz|dzg}|r|fd |Dz }|S) Nz Source: %srz+Can't parse docstring in %s line %s: %s: %sTr.rrrc*g|]}jz|zSr&)r5)rPr<r:rs rrSz4RefactoringTool.refactor_doctest..^s%CCCt&48+d2CCCr) parse_blockr3r isEnabledForrDEBUGrr6rrr#rrr0endswithr2pop) rr8r;r:rrrr<r#clippeds ` ` rr3z RefactoringTool.refactor_doctestDs  ##E66::DD   {'' 66 D!DDDNN<T1B1BCCCC NNH#VS]-CS J J JLLLLLL     dH - - Dd))&&&55Cyqy>3vaxyy>SGr7##D)) B4dh&34E DCCCCCsCCCC s B(A6B#B(#B(c6|jrd}nd}|js|d|n5|d||jD]}|||jr4|d|jD]}|||jrut |jdkr|dn(|dt |j|jD]\}}}|j|g|Ri|dSdS) Nwerez need to bezNo files %s modified.zFiles that %s modified:z$Warnings/messages while refactoring:rzThere was 1 error:zThere were %d errors:)rrrrrr)rrGfilemessagerrrs r summarizezRefactoringTool.summarizeask : DDDz '   4d ; ; ; ;   6 = = =  ' '  &&&& > *   C D D D> * *  )))) ; 54;1$$  !56666  !8#dk:J:JKKK#'; 5 5T4  4t444t4444  5 5  5 5rc |j||||}t|_|Sr9)r parse_tokens wrap_toksrgr)rr8r;r:rs rr@zRefactoringTool.parse_blockxs? {''uff(M(MNN({{ rc#K tj|||j}|D]+\}}\}}\} } } ||dz z }| |dz z } ||||f| | f| fV,dS)Nr)rrc gen_lines__next__) rr8r;r:rBr,ruline0col0line1col1 line_texts rrMzRefactoringTool.wrap_tokssI)$..*G*G*PQQDJ G G @D%% y VaZ E VaZ E t}udmYF F F F F G Grc#K ||jz}||jz}|}|D]h}||r|t|dVn5||dzkrdVnt d|d||}i dV)Nrzline=z , prefix=Tr)r2r5rrr6AssertionError)rr8r:prefix1prefix2prefixr<s rrOzRefactoringTool.gen_liness 48#48#  Dv&& L3v;;<<(((((4/// $nTTT66%JKKKFF HHH rr)FF)F)NFNr9)r#r$r%rrrrrrrrrrrrrrr rrrr)r2r5rr3rJr@rMrOr&rrrzrzs+0).2799LK3L3L3L3Ln&5&5&5P     FFFFLLLL(&&& ====.66666 M M M ^###.GL $BBBB** C C)))V:555. G G GrrzceZdZdS)MultiprocessingUnsupportedNr"r&rrr\r\r'rr\cBeZdZfdZ dfd ZfdZfdZxZS)MultiprocessRefactoringToolcdtt|j|i|d|_d|_dSr9)superr^rqueue output_lockrrkwargsrs rrz$MultiprocessRefactoringTool.__init__s;9)40094J6JJJ rFrc|dkr*tt|||S ddln#t$rt wxYwjtd_ _ fdt|D} |D]}| tt|||j t|D]}jd|D]*}|r| +d_dS#j t|D]}jd|D]*}|r| +d_wxYw)Nrrz already doing multiple processescFg|]}jS))target)Process_child)rPr=multiprocessingrs rrSz8MultiprocessRefactoringTool.refactor..s<444%,,DK,@@444r)r`r^rrj ImportErrorr\ra RuntimeError JoinableQueueLockrbrangestartrputis_alive) rrrr num_processes processesr6r=rjrs ` @rrz$MultiprocessRefactoringTool.refactors/ A  4d;;DDum-- - - " " " " " - - -, , - : !ABB B$2244 *//1144444#M22444     -t 4 4 = =eU>K M M M JOO   =)) % % t$$$$  ::<<FFHHHDJJJ JOO   =)) % % t$$$$  ::<<FFHHHDJ    s:A 4AE22A;G-c4|j}|{|\}} tt|j|i||jn#|jwxYw|j}|ydSdSr9)rarr`r^r task_done)rtaskrrdrs rriz"MultiprocessRefactoringTool._childsz~~LD& 'F1488F%#%%% $$&&&& $$&&&&:>>##Ds AA8c|j|j||fdStt|j|i|Sr9)rarqr`r^rrcs rrz)MultiprocessRefactoringTool.refactor_filesV : ! JNND&> * * * * *I54d;;I!!! !r)FFr)r#r$r%rrrir __classcell__)rs@rr^r^s     :? : $ $ $ $ $!!!!!!!!!rr^)T)" __author__rdrrr rrr: itertoolsrpgen2rrr fixer_utilrrr r r rrr3r!r/rKrTrWrvrxobjectrzr\r^r&rrrs3   +*********!!!!!!            CCC82@@@%%%P''''''''FFFFFfFFFR        4!4!4!4!4!/4!4!4!4!4!r