ž zyMa½c@sΓdZddlmZddlmZddlmZddlmZmZm Z m Z m Z m Z dd„Z Gdd „d ejƒZd d „Zd d „Zgddd„Zdd„ZdS(u: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 i(upytree(utoken(u fixer_base(uAssignuNameuNewlineuNumberu SubscriptusymscCs)t|tjƒo(|jdjtjkS(Ni(u isinstanceupytreeuNodeuchildrenutypeutokenuSTRING(ustmt((uC/opt/alt/python33/lib64/python3.3/lib2to3/fixes/fix_tuple_params.pyu is_docstringsu is_docstringcBs>|EeZdZdZdZdZdd„Zdd„ZdS( uFixTupleParamsiu funcdef< 'def' any parameters< '(' args=any ')' > ['->' any] ':' suite=any+ > | lambda= lambdef< 'lambda' args=vfpdef< '(' inner=any ')' > ':' body=any > c s6d|krˆj||ƒSg‰|d}|d}|djdjtjkryd}|djdj}tƒ‰n!d}d}tjtjdƒ‰d ‡‡‡fd d †}|jt j krΤ||ƒn`|jt j kr4xKt |jƒD]7\}} | jt j krφ|| d |dkƒqφqφWnˆs>dSxˆD]} |d| _qEW|} |dkr~d ˆd_n1t|dj|ƒr―|ˆd_|d} nxˆD]} |d| _qΆWˆ|dj| | ….handle_tupleu add_prefixu F(utransform_lambdauchildrenutypeutokenuINDENTuvalueuNewlineupytreeuLeafuFalseusymsutfpdefu typedargslistu enumerateuparentuprefixu is_docstringurangeulenuchanged( uselfunodeuresultsusuiteuargsustartuindentu handle_tupleuiuargulineuafter((uendu new_linesuselfuC/opt/alt/python33/lib64/python3.3/lib2to3/fixes/fix_tuple_params.pyu transform.sF            (uFixTupleParams.transformc CsB|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»q»WdS(Nuargsubodyuinneru uprefixcSsg|]}|jƒ‘qS((uclone(u.0uc((uC/opt/alt/python33/lib64/python3.3/lib2to3/fixes/fix_tuple_params.pyu ‚s u3FixTupleParams.transform_lambda..(u simplify_argsutypeutokenuNAMEucloneuprefixureplaceu find_paramsu map_to_indexunew_nameu tuple_nameuNameu post_orderuvalueupytreeuNodeusymsupower( uselfunodeuresultsuargsubodyuinneruparamsuto_indexutup_nameu new_paramunu subscriptsunew((uC/opt/alt/python33/lib64/python3.3/lib2to3/fixes/fix_tuple_params.pyutransform_lambdans(       !  uFixTupleParams.transform_lambdaNT( u__name__u __module__u __qualname__u run_orderuTrueu BM_compatibleuPATTERNu transformutransform_lambda(u __locals__((uC/opt/alt/python33/lib64/python3.3/lib2to3/fixes/fix_tuple_params.pyuFixTupleParamss   @uFixTupleParamscCso|jtjtjfkr|S|jtjkr[x#|jtjkrV|jd}q4W|Std|ƒ‚dS(NiuReceived unexpected node %s(utypeusymsuvfplistutokenuNAMEuvfpdefuchildrenu RuntimeError(unode((uC/opt/alt/python33/lib64/python3.3/lib2to3/fixes/fix_tuple_params.pyu simplify_args‹su simplify_argscCsP|jtjkr#t|jdƒS|jtjkr<|jSdd„|jDƒS(NicSs.g|]$}|jtjkrt|ƒ‘qS((utypeutokenuCOMMAu find_params(u.0uc((uC/opt/alt/python33/lib64/python3.3/lib2to3/fixes/fix_tuple_params.pyu ›s ufind_params..(utypeusymsuvfpdefu find_paramsuchildrenutokenuNAMEuvalue(unode((uC/opt/alt/python33/lib64/python3.3/lib2to3/fixes/fix_tuple_params.pyu find_params–s u find_paramscCs„|dkri}nxht|ƒD]Z\}}ttt|ƒƒƒg}t|tƒrnt||d|ƒq"||||s. l