o ?Ogskã@s  dZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z m Z m Z ddlmZddlmZmZddlmZd d d „ZGd d „d eƒZdd„Zdd„Zdd„Zdd„Zdd„ZGdd„deƒZGdd„deƒZGdd„deƒZ Gdd„deƒZ!dS)!z#Guido van Rossum éN)Úchainé)ÚdriverÚtokenizeÚtoken)Ú find_root)ÚpytreeÚpygram)Ú btm_matcherTcCsV t|ggdgƒ}g}t |j¡D]\}}}| d¡r(|r#|dd…}| |¡q|S)NÚ*Úfix_é)Ú __import__ÚpkgutilZ iter_modulesÚ__path__Ú startswithÚappend)Z fixer_pkgZ remove_prefixZpkgZ fix_namesÚfinderÚnameZispkg©rú7/opt/alt/python310/lib64/python3.10/lib2to3/refactor.pyÚget_all_fix_namess   €rc@ó eZdZdS)Ú _EveryNodeN©Ú__name__Ú __module__Ú __qualname__rrrrr+órcCs t|tjtjfƒr|jdurt‚|jhSt|tjƒr%|jr#t|jƒSt‚t|tj ƒrBt ƒ}|jD]}|D] }|  t|ƒ¡q5q1|St d|ƒ‚)Nz$Oh no! I don't understand pattern %s) Ú isinstancerZ NodePatternZ LeafPatternÚtyperZNegatedPatternZcontentÚ_get_head_typesZWildcardPatternÚsetÚupdateÚ Exception)ZpatÚrÚpÚxrrrr!/s"     ÿ r!c Cs¾ t t¡}g}|D];}|jr2zt|jƒ}Wnty$| |¡Yq w|D] }|| |¡q'q |jdur@||j |¡q | |¡q tt j j   ¡t j j ƒD] }|| |¡qQt|ƒS©N)Ú collectionsÚ defaultdictÚlistÚpatternr!rrZ _accept_typerr Úpython_grammarZ symbol2numberÚvaluesÚtokensÚextendÚdict)Z fixer_listZ head_nodesZeveryÚfixerZheadsZ node_typerrrÚ_get_headnode_dictKs*  ÿÿ   ÿr3cs ‡fdd„tˆdƒDƒS)Ncsg|]}ˆd|‘qS©Ú.r)Ú.0Úfix_name©Zpkg_namerrÚ hsÿz+get_fixers_from_package..F)rr8rr8rÚget_fixers_from_packageds ÿr:cCs|Sr(r)ÚobjrrrÚ _identityksr<csjd}t t |¡j¡‰‡fdd„}ttjtjtj hƒ}t ƒ}zŠ |ƒ\}}||vr*q|tj kr5|r2ncd}n_|tj kr“|dkr“|ƒ\}}|tj ksL|dkrMnR|ƒ\}}|tj ks[|dkr\nH|ƒ\}}|tj kro|dkro|ƒ\}}|tj kr’| |¡|ƒ\}}|tj ks‡|d krˆn |ƒ\}}|tj kstnnq Wt|ƒSWt|ƒSWt|ƒSWt|ƒSty´Yt|ƒSw) NFcstˆƒ}|d|dfS)Nrr)Únext)Útok©ÚgenrrÚadvancersz(_detect_future_features..advanceTÚfromZ __future__Úimportú(ú,)rÚgenerate_tokensÚioÚStringIOÚreadlineÚ frozensetrÚNEWLINEÚNLÚCOMMENTr"ÚSTRINGÚNAMEÚOPÚaddÚ StopIteration)ÚsourceZhave_docstringrAÚignoreÚfeaturesÚtpÚvaluerr?rÚ_detect_future_featuresos\            û€çýïò þþrXc@r)Ú FixerErrorNrrrrrrY—rrYc@sêeZdZddddœZdZdZd4dd„Zdd „Zd d „Zd d „Z dd„Z dd„Z d5dd„Z d5dd„Z dd„Zd5dd„Zdd„Zd6dd„Zdd„Zd d!„Z  d7d"d#„Zd8d$d%„Zd&Zd'Zd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„Zd2d3„ZdS)9ÚRefactoringToolF)Úprint_functionÚ exec_functionÚwrite_unchanged_filesZFixr NcCsJ ||_|pg|_|j ¡|_|dur|j |¡tj ¡|_|jdr*|jj d=n |jdr4|jj d=|j  d¡|_ g|_ t  d¡|_g|_d|_tj|jtj|jd|_| ¡\|_|_g|_t ¡|_g|_g|_t|j|jƒD]#}|j r|j !|¡qs||jvr‹|j "|¡qs||jvr–|j "|¡qst#|jƒ|_$t#|jƒ|_%dS) Nr[Úprintr\Úexecr]rZF)ÚconvertÚlogger)&ÚfixersÚexplicitÚ_default_optionsÚcopyÚoptionsr#r r-ÚgrammarÚkeywordsÚgetr]ÚerrorsÚloggingZ getLoggerraÚ fixer_logÚwroterZDriverrr`Ú get_fixersÚ pre_orderÚ post_orderÚfilesÚbmZ BottomMatcherÚBMZ bmi_pre_orderZbmi_post_orderrZ BM_compatibleZ add_fixerrr3Úbmi_pre_order_headsÚbmi_post_order_heads)ÚselfZ fixer_namesrfrcr2rrrÚ__init__¤sF         þ    € zRefactoringTool.__init__c CsL g}g}|jD]ˆ}t|iidgƒ}| dd¡d}| |j¡r)|t|jƒd…}| d¡}|jd dd„|Dƒ¡}zt ||ƒ}Wnt yRt d ||fƒd‚w||j |j ƒ} | jrn|jd urn||jvrn| d |¡q| d |¡| jd kr| | ¡q| jdkrŠ| | ¡qt d| jƒ‚t d¡} |j| d|j| d||fS)Nr r5réÿÿÿÿÚ_ÚcSsg|]}| ¡‘qSr)Útitle)r6r&rrrr9ësz.RefactoringTool.get_fixers..zCan't find %s.%sTzSkipping optional fixer: %szAdding transformation: %sZpreZpostzIllegal fixer order: %rZ run_order©Úkey)rbrÚrsplitrÚ FILE_PREFIXÚlenÚsplitÚ CLASS_PREFIXÚjoinÚgetattrÚAttributeErrorrYrfrlrcÚ log_messageÚ log_debugZorderrÚoperatorÚ attrgetterÚsort) rvZpre_order_fixersZpost_order_fixersZ fix_mod_pathÚmodr7ÚpartsÚ class_nameZ fix_classr2Zkey_funcrrrrnÛs<    ÿ          zRefactoringTool.get_fixerscOs ‚r(r)rvÚmsgÚargsÚkwdsrrrÚ log_errorszRefactoringTool.log_errorcGs |r||}|j |¡dSr()raÚinfo©rvrŽrrrrr†szRefactoringTool.log_messagecGs|r||}|j |¡dSr()raÚdebugr“rrrr‡ szRefactoringTool.log_debugcCs dSr(r)rvÚold_textÚnew_textÚfilenameÚequalrrrÚ print_outputszRefactoringTool.print_outputcCs: |D]}tj |¡r| |||¡q| |||¡qdSr()ÚosÚpathÚisdirÚ refactor_dirÚ refactor_file)rvÚitemsÚwriteÚ doctests_onlyZ dir_or_filerrrÚrefactors  üzRefactoringTool.refactorc Csœ tjd}t |¡D]@\}}}| d|¡| ¡| ¡|D]}| d¡s?tj |¡d|kr?tj ||¡} |  | ||¡q dd„|Dƒ|dd…<q dS)NÚpyzDescending into %sr5rcSsg|] }| d¡s|‘qSr4)r)r6Zdnrrrr92óz0RefactoringTool.refactor_dir..) ršÚextsepÚwalkr‡rŠrr›Úsplitextrƒrž) rvZdir_namer r¡Zpy_extÚdirpathZdirnamesÚ filenamesrÚfullnamerrrr s   €özRefactoringTool.refactor_dirc Cs° zt|dƒ}Wnty"}z| d||¡WYd}~dSd}~wwzt |j¡d}W| ¡n| ¡wtj|d|dd}| ¡|fWdƒS1sQwYdS)NÚrbzCan't open %s: %s©NNrr%rz©ÚencodingÚnewline) ÚopenÚOSErrorr‘rÚdetect_encodingrIÚcloserGÚread)rvr—ÚfÚerrr®rrrÚ_read_python_source4s€þ $ÿz#RefactoringTool._read_python_sourcecCs | |¡\}}|durdS|d7}|r:| d|¡| ||¡}|js'||kr2| |||||¡dS| d|¡dS| ||¡}|jsH|rY|jrY|jt|ƒdd…|||ddS| d|¡dS)NÚ zRefactoring doctests in %szNo doctest changes in %srx)r r®zNo changes in %s)r·r‡Úrefactor_docstringr]Úprocessed_fileÚrefactor_stringÚ was_changedÚstr)rvr—r r¡Úinputr®ÚoutputÚtreerrrržDs"    ÿzRefactoringTool.refactor_filec Cs² t|ƒ}d|vrtj|j_z3z|j |¡}Wn#ty:}z| d||jj |¡WYd}~W|j|j_dSd}~wwW|j|j_n|j|j_w||_ |  d|¡|  ||¡|S)Nr[zCan't parse %s: %s: %szRefactoring %s) rXr Z!python_grammar_no_print_statementrrgZ parse_stringr$r‘Ú __class__rÚfuture_featuresr‡Ú refactor_tree)rvÚdatarrUrÀr¶rrrr»[s(   ÿ €ûÿ  zRefactoringTool.refactor_stringcCs’tj ¡}|r)| d¡| |d¡}|js||kr"| |d|¡dS| d¡dS| |d¡}|js7|rB|jrB| t |ƒd|¡dS| d¡dS)NzRefactoring doctests in stdinzzNo doctest changes in stdinzNo changes in stdin) ÚsysÚstdinr´r‡r¹r]rºr»r¼r½)rvr¡r¾r¿rÀrrrÚrefactor_stdinvs    zRefactoringTool.refactor_stdinc CsÎ t|j|jƒD]}| ||¡q| |j| ¡¡| |j| ¡¡|j |  ¡¡}t |  ¡ƒrÔ|jj D]˜}||vrÍ||rÍ||j tjjdd|jrW||j tjjdt||ƒD]o}|||vrl|| |¡zt|ƒWn ty{Yq]w|jr…||jvr…q]| |¡}|rÌ| ||¡}|durÌ| |¡| ¡D]}|js§g|_|j |¡qŸ|j |  ¡¡}|D]} | |vrÂg|| <||  || ¡q¸q]q5t |  ¡ƒs1t|j|jƒD]}| ||¡qÛ|jS)NT)r}Úreverser|)rrorpZ start_treeÚ traverse_byrtrursÚrunZleavesÚanyr.rbrŠrZBaseZdepthZkeep_line_orderZ get_linenor+ÚremoverÚ ValueErrorZfixers_appliedÚmatchÚ transformÚreplacerr0Z finish_treer¼) rvrÀrr2Z match_setÚnodeÚresultsÚnewZ new_matchesZfxrrrrrÆsR     ý    € Ñ1zRefactoringTool.refactor_treecCsX |sdS|D]"}||jD]}| |¡}|r(| ||¡}|dur(| |¡|}qqdSr()r rÎrÏrÐ)rvrbZ traversalrÑr2rÒrÓrrrrÉÕs    €úÿzRefactoringTool.traverse_bycCsŠ |j |¡|dur| |¡d}|durdS||k}| ||||¡|r1| d|¡|js1dS|r=| ||||¡dS| d|¡dS)NrzNo changes to %szNot writing changes to %s)rqrr·r™r‡r]Ú write_file)rvr–r—r•r r®r˜rrrrºìs  zRefactoringTool.processed_filec CsÊ z tj|d|dd}Wnty&}z| d||¡WYd}~dSd}~ww|)z| |¡WntyJ}z | d||¡WYd}~nd}~wwWdƒn1sUwY| d|¡d|_dS)NÚwrzr­zCan't create %s: %szCan't write %s: %szWrote changes to %sT)rGr°r±r‘r r‡rm)rvr–r—r•r®Úfpr¶rrrrÔs&€þ€ÿ€ý  zRefactoringTool.write_filez>>> z... c Cs g}d}d}d}d}|jddD]d}|d7}| ¡ |j¡r@|dur.| | ||||¡¡|}|g}| |j¡} |d| …}q|dur]| ||j¡sW|||j ¡dkr]|  |¡q|durl| | ||||¡¡d}d}|  |¡q|dur…| | ||||¡¡d  |¡S)NrT©Úkeependsrr¸rz) Ú splitlinesÚlstriprÚPS1r0Úrefactor_doctestÚfindÚPS2Úrstriprrƒ) rvr¾r—ÚresultÚblockZ block_linenoÚindentÚlinenoÚlineÚirrrr¹sD  ÿ ÿ  ÿ  ÿ z"RefactoringTool.refactor_docstringc s z ˆ ||ˆ¡}Wn4ty>}z(ˆj tj¡r'|D] }ˆ d| d¡¡qˆ d|||j j |¡|WYd}~Sd}~wwˆ  ||¡r†t |ƒj dd}|d|d…||dd…} }|d d¡sm|dd7<ˆˆj| d¡g}|r†|‡‡fd d „|Dƒ7}|S) Nz Source: %sr¸z+Can't parse docstring in %s line %s: %s: %sTr×rrxrcsg|] }ˆˆj|‘qSr)rÞ)r6rä©rârvrrr9^r¤z4RefactoringTool.refactor_doctest..)Ú parse_blockr$raZ isEnabledForrkÚDEBUGr‡rßr‘rÁrrÃr½rÙÚendswithrÛÚpop) rvrárãrâr—rÀr¶rärÓZclippedrrærrÜDs, ÿ€ú "z RefactoringTool.refactor_doctestcCsÐ|jrd}nd}|js| d|¡n| d|¡|jD]}| |¡q|jr6| d¡|jD]}| |¡q.|jrdt|jƒdkrF| d¡n | dt|jƒ¡|jD]\}}}|j|g|¢Ri|¤ŽqRdSdS) NÚwerez need to bezNo files %s modified.zFiles that %s modified:z$Warnings/messages while refactoring:rzThere was 1 error:zThere were %d errors:)rmrqr†rlrjr€)rvrëÚfileÚmessagerŽrrrrrÚ summarizeas(       úzRefactoringTool.summarizecCs$ |j | |||¡¡}tƒ|_|Sr()rZ parse_tokensÚ wrap_toksrJrÂ)rvrárãrârÀrrrrçxszRefactoringTool.parse_blockc csh t | ||¡j¡}|D]#\}}\}}\} } } ||d7}| |d7} ||||f| | f| fVqdS)Nr)rrFÚ gen_linesÚ__next__) rvrárãrâr/r rWZline0Zcol0Zline1Zcol1Z line_textrrrrï‚s€  øzRefactoringTool.wrap_toksccsz ||j}||j}|}|D]'}| |¡r!|t|ƒd…Vn|| ¡dkr-dVntd||fƒ‚|}q dVq9)Nr¸zline=%r, prefix=%rTrz)rÛrÞrr€rßÚAssertionError)rvrárâÚprefix1Zprefix2Úprefixrärrrrðs€   ÿzRefactoringTool.gen_linesr¬)FF)F)NFNr()rrrrdr‚rrwrnr‘r†r‡r™r¢rr·ržr»rÇrÃrÉrºrÔrÛrÞr¹rÜrîrçrïrðrrrrrZ›sBþ 7(    O ÿ + rZc@r)ÚMultiprocessingUnsupportedNrrrrrrõ¤rrõcsFeZdZ‡fdd„Z  d ‡fdd„ Z‡fdd„Z‡fd d „Z‡ZS) ÚMultiprocessRefactoringToolcs&tt|ƒj|i|¤Žd|_d|_dSr()ÚsuperrörwÚqueueÚ output_lock©rvrÚkwargs©rÁrrrwªs z$MultiprocessRefactoringTool.__init__Frc s2|dkrttˆƒ |||¡Szddl‰Wn tyt‚wˆjdur'tdƒ‚ˆ ¡ˆ_ˆ  ¡ˆ_ ‡‡fdd„t |ƒDƒ}z8|D]}|  ¡q@ttˆƒ |||¡Wˆj  ¡t |ƒD]}ˆj d¡q[|D] }| ¡rp|  ¡qfdˆ_dSˆj  ¡t |ƒD]}ˆj d¡q|D] }| ¡r”|  ¡qŠdˆ_w)Nrrz already doing multiple processescsg|] }ˆjˆjd‘qS))Útarget)ZProcessÚ_child)r6rå©Úmultiprocessingrvrrr9¼sÿz8MultiprocessRefactoringTool.refactor..)r÷rör¢rÚ ImportErrorrõrøÚ RuntimeErrorZ JoinableQueueZLockrùÚrangeÚstartrƒÚputZis_alive)rvrŸr r¡Z num_processesZ processesr&rårürÿrr¢¯sL ÿ  ÿ    ÿ ÿ  €  ú €z$MultiprocessRefactoringTool.refactorcsf|j ¡}|dur1|\}}ztt|ƒj|i|¤ŽW|j ¡n|j ¡w|j ¡}|dus dSdSr()rørir÷röržZ task_done)rvZtaskrrûrürrrþÌs  ÿÿ ùz"MultiprocessRefactoringTool._childcs4|jdur|j ||f¡dStt|ƒj|i|¤ŽSr()rørr÷röržrúrürrrž×s  ÿÿz)MultiprocessRefactoringTool.refactor_file)FFr)rrrrwr¢rþržÚ __classcell__rrrürrö¨s ÿ  rö)T)"Ú __author__rGršrrÅrkrˆr)Ú itertoolsrZpgen2rrrZ fixer_utilrrzrr r rrrr$rr!r3r:r<rXrYÚobjectrZrõrörrrrÚs:     (