ðÕYf½ã@sÃdZddlmZddlmZddlmZddlmZmZm Z m Z m Z m Z dd„Z Gdd „d ejƒZd d „Zd d „Zgddd„Zdd„ZdS)a:Fixer for function definitions with tuple parameters. def func(((a, b), c), d): ... -> def func(x, d): ((a, b), c) = x ... It will also support lambdas: lambda (x, y): x + y -> lambda t: t[0] + t[1] # The parens are a syntax error in Python 3 lambda (x): x + y -> lambda x: x + y é)Úpytree)Útoken)Ú fixer_base)ÚAssignÚNameÚNewlineÚNumberÚ SubscriptÚsymscCs)t|tjƒo(|jdjtjkS)Né)Ú isinstancerÚNodeÚchildrenÚtyperÚSTRING)Ústmt©rúC/opt/alt/python35/lib64/python3.5/lib2to3/fixes/fix_tuple_params.pyÚ is_docstringsrc@s:eZdZdZdZdZdd„Zdd„ZdS) ÚFixTupleParamséTa funcdef< 'def' any parameters< '(' args=any ')' > ['->' any] ':' suite=any+ > | lambda= lambdef< 'lambda' args=vfpdef< '(' inner=any ')' > ':' body=any > c s-d|krˆj||ƒSg‰|d}|d}|djdjtjkryd}|djdj}tƒ‰n!d}d}tjtjdƒ‰d ‡‡‡fd d †}|jt j krÔ||ƒnZ|jt j kr.xEt |jƒD]4\}} | jt j krö|| d |dkƒqöWˆs8dSxˆD]} |d| _ q?W|} |dkrxd ˆd_n.t|dj|ƒr¦|ˆd_|d} xˆD]} |d| _ q­Wˆ|dj| | ….handle_tupler"r)Útransform_lambdarrrÚINDENTÚvaluerrZLeafr ZtfpdefZ typedargslistÚ enumerateÚparentrrÚrangeÚlenZchanged) r'ÚnodeÚresultsrrÚstartÚindentr(Úir$ÚlineÚafterr)r%r&r'rÚ transform.sF           (zFixTupleParams.transformc Cs?|d}|d}t|dƒ}|jtjkr\|jƒ}d|_|j|ƒdSt|ƒ}t|ƒ}|j t |ƒƒ}t |ddƒ} |j| jƒƒxŠ|j ƒD]|} | jtjkr»| j |kr»dd„|| j Dƒ} tjtj| jƒg| ƒ} | j| _| j| ƒq»WdS)NrÚbodyÚinnerrrcSsg|]}|jƒ‘qSr)r)Ú.0Úcrrrú ‚s z3FixTupleParams.transform_lambda..)Ú simplify_argsrrÚNAMErrr Ú find_paramsÚ map_to_indexrÚ tuple_namerZ post_orderr+rr r Zpower) r'r0r1rr8r9ZparamsZto_indexZtup_nameZ new_paramr#Z subscriptsÚnewrrrr)ns(       !  zFixTupleParams.transform_lambdaN)Ú__name__Ú __module__Ú __qualname__Z run_orderZ BM_compatibleZPATTERNr7r)rrrrrs   @rcCso|jtjtjfkr|S|jtjkr[x#|jtjkrV|jd}q4W|Std|ƒ‚dS)NrzReceived unexpected node %s)rr Zvfplistrr>ÚvfpdefrÚ RuntimeError)r0rrrr=‹sr=cCsP|jtjkr#t|jdƒS|jtjkr<|jSdd„|jDƒS)NrcSs.g|]$}|jtjkrt|ƒ‘qSr)rrÚCOMMAr?)r:r;rrrr<›s zfind_params..)rr rFr?rrr>r+)r0rrrr?–s r?NcCs�|dkri}xht|ƒD]Z\}}ttt|ƒƒƒg}t|tƒrkt||d|ƒq||||s. l