
    Æe z                         d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	  ej                  d      ZddZddZd Zd Z G d	 d
e	j                         Z G d d      Z G d d      Zy)    N)chain)astcodeanalyze
exceptionsz\(.*?\)|(,)c                 B    t        t        j                  |       | |      S )zAdds ``region`` and ``sorted_children`` fields to nodes

    Adds ``sorted_children`` field only if `sorted_children` is True.

    )	patch_astr   parse)sourcesorted_childrens     :/usr/lib/python3/dist-packages/rope/refactor/patchedast.pyget_patched_astr      s     SYYv&@@    c                 L    t        | d      r| S t        ||      } ||        | S )a  Patches the given node

    After calling, each node in `node` will have a new field named
    `region` that is a tuple containing the start and end offsets
    of the code that generated it.

    If `sorted_children` is true, a `sorted_children` field will
    be created for each node, too.  It is a list containing child
    nodes as well as whitespaces and comments that occur between
    them.

    region)children)hasattr_PatchingASTWalker)noder
   r   walkers       r   r   r      s+     tXAF
4LKr   c                     | j                   S )z$Get the region of a patched ast node)r   )patched_ast_nodes    r   node_regionr   )   s    """r   c                     g }| j                   D ]H  }t        |t        j                        r|j	                  t        |             8|j	                  |       J dj                  |      S )zExtract source form a patched AST node with `sorted_children` field

    If the node is patched with sorted_children turned off you can use
    `node_region` function for obtaining code using module source code.
     )r   
isinstancer   ASTappend	write_astjoin)r   resultchilds      r   r   r   .   sY     F!11 !eSWW%MM)E*+MM% 	!
 776?r   c                       e Zd Zy)MismatchedTokenErrorN)__name__
__module____qualname__ r   r   r#   r#   =   s    r   r#   c                      e Zd ZddZ e       Z e       Z e       Z e       Zd Z	ddZ
d Zd Zd Zd Zd Zd	 Zd
 Zi dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,ddd-d.d/d0d1d2d3d4d5d6d7Zd8 Zd9 Zd: Zd; Zd< Zd= Zd> Zd? Zd@ ZdA ZdB ZdC ZdD ZdE Z dF Z!dG Z"dH Z#dI Z$dJ Z%dK Z&dL Z'dM Z(dN Z)dO Z*dP Z+dQ Z,dR Z-dS Z.dT Z/dU Z0dV Z1dW Z2dX Z3dY Z4dZ Z5d[ Z6d\ Z7d] Z8d^ Z9d_ Z:d` Z;da Z<db Z=dc Z>dd Z?de Z@df ZAdg ZBdh ZCdi ZDdj ZEdk ZFdl ZGdm ZHdn ZIdo ZJdp ZKdq ZLdr ZMds ZNdt ZOdu ZPdv ZQdw ZRdx ZSdy ZTdz ZUd{ ZVd| ZWd} ZXd~ ZYd ZZd Z[d Z\d Z]d Z^d Z_d Z`d Zad Zbd Zcd Zdd Zey)r   c                 t    t        |      | _        || _        t        j                  |      | _        g | _        y N)_Sourcer
   r   r   SourceLinesAdapterlineschildren_stack)selfr
   r   s      r   __init__z_PatchingASTWalker.__init__B   s.    fo  33F;
 r   c                    t        | d|j                  j                  z   d       }| ||      S t        j                  d|j                  j                  z  t
               | j                  j                  | j                  j                  f|_        | j                  r.t        j                  |      D cg c]  \  }}|	 c}}|_        y y c c}}w )N_z&Unknown node type <%s>; please report!)getattr	__class__r$   warningswarnRuntimeWarningr
   offsetr   r   r   iter_fieldsr   )r/   r   methodfieldr!   s        r   __call__z_PatchingASTWalker.__call__M   s    sT^^%<%<<dC$<4t~~7N7NN	
 {{))4;;+=+=>==>Aood>S#TleUE#TD  #Ts   5Cc                 j   t        |d      r2t        j                  d|j                  j                  z  t
               y t        j                  |      }| j                  j                  |       t        j                         }g }| j                  j                  }|}d}	|r|j                         }
|
| j                  j                  }t        |
t        j                        r | |
       |
j                   d   }n1|
| j"                  u r+| j                  j%                  | j'                               }n|
| j(                  u r| j                  j+                         }n|
| j,                  k(  r| j                  j/                         }n|
| j0                  k(  r| j                  j3                         }nat        |t        j4                  t        j6                  f      r| j                  j9                  |
      }n| j                  j;                  |
      }| j                  |d   |d    }
|d   }|	sct        |t        j4                        s|j                  | j                  ||        | j<                  r#|j                  | j                  ||        nd}	|}| j<                  r|j                  |
       |r| j?                  |||      }|r| jA                  |||      }|r| j<                  r|jC                  | j                  d|        | j                  | j                  j                  d  }| j                  j;                  |       | j<                  r|j                  |       d}| j<                  r||_"        || j                  j                  f|_        | j                  jG                          y )Nr   z2Node <%s> has been already patched; please report!Tr   end   F)$r   r5   r6   r4   r$   r7   collectionsdequer.   r   r
   r8   popleftr   r   r   r   Stringconsume_string_find_next_statement_startNumberconsume_numberempty_tupleconsume_empty_tuplewith_or_comma_context_manager%consume_with_or_comma_context_manager	JoinedStrFormattedValueconsume_joined_stringconsumer   _handle_parens_eat_surrounding_parens
appendleftr   pop)r/   r   base_children
eat_parens
eat_spacesr   formatssuspected_startstartfirst_tokenr!   r8   token_startr   
end_spacess                  r   _handlez_PatchingASTWalker._handleZ   s   4"MMD..))*
 #))-8""=1$$&++,,!))+E}[[''F%)U#ll1oDKK'![[77 ;;= 8 F dkk)![[779Fd...![[<<>Fd@@@![[NNPFs}}c6H6H&IJ![[>>uEF![[007FF1Iq	:$Qi!$6NN4;;vk#BC==OODKK{$CD##}}&E F ##HeW=00?ERE}}##DKK%$89T[[%7%7%9:JKK
+}}
+E==#+D dkk001!r   c                    | j                  |      \  }}| j                  j                  }d}t        |      D ]   }| j                  j	                  d      d   }" |*| j
                  r|j                  | j                  ||        |}	t        |      D ]  }| j                  j                  dd|	      }	! |	|k7  r,| j
                  r|j                  | j                  |	|        |	}|S )z(Changes `children` and returns new startN)r@   (r   )	_count_needed_parensr
   r8   rangerP   r   r   rfind_tokenrS   )
r/   r   rZ   rX   opensclosesold_endnew_endi	new_starts
             r   rQ   z!_PatchingASTWalker._handle_parens   s    11':v++$$v 	2Akk))#.q1G	24==OODKK89	u 	CA//Q	BI	C}}##DKK	%$@AEr   c                    | j                   j                  d||      }||}| j                   j                  }|}| j                  r2|j	                  | j                   |dz   |        |j	                  d       | j                   j                  d      \  }}| j                  r/|j                  | j                   ||        |j                  d       |S )Nra   r@   r`   )r
   rd   r8   r   rS   rP   r   )	r/   r   rY   rZ   index	old_start
old_offsetr\   	token_ends	            r   rR   z*_PatchingASTWalker._eat_surrounding_parens   s    ''_eDI++JE}}##DKK	I$FG##C(%)[[%8%8%="K}}J{ CD$r   c                 P   d}d}|D ]  }t        |t        t        f      s|dk(  s|d   dv r'd}|t        |      k  s8||   dk(  r|dkD  r|dz  }n|dz  }||   dk(  r|dz  }||   dk(  r	 |j	                  d|      }|dz  }|t        |      k  rT ||fS # t
        $ r Y w xY w)	Nr   r   z'"r`   r@   ra   #
)r   strbyteslenrl   
ValueError)r/   r   rZ   re   r!   rl   s         r   rb   z'_PatchingASTWalker._count_needed_parens   s     	Eec5\2{eAh%/E#e*$<3&qy

<3&QJE<3& %D% 8 
 #e*$	( e| & s   -B	B%$B%c                 "   t        | j                        D ]Y  }|D ]R  }t        |t        j                        s|j
                  | j                  j                  |j                        z   c c S  [ t        | j                  j                        S r*   )reversedr.   r   r   stmt
col_offsetr-   get_line_startlinenoru   r
   )r/   r   r!   s      r   rF   z-_PatchingASTWalker._find_next_statement_start   sx     !4!45 	VH! VeSXX. ++djj.G.G.UUUV	V 4;;%%&&r   c              #   z   K   t        |      }	 t        |       |D ]
  }| |  y # t        $ r Y y w xY wwr*   )iternextStopIteration)r/   iterable	separatorr!   s       r   _joinz_PatchingASTWalker._join   sL     >	x.   	EOK	  		s   ;, ;	8;8;c                 f    d |D        }| j                  |dg      }t        j                  |      S )Nc              3   ,   K   | ]  \  }}|d |g  yw)=Nr'   ).0attrpatterns      r   	<genexpr>z7_PatchingASTWalker._flatten_keywords.<locals>.<genexpr>   s     G]T7T3(Gs   ,r   )r   r   from_iterable)r/   r   s     r   _flatten_keywordsz$_PatchingASTWalker._flatten_keywords   s1    GhG::h3%:8""8,,r   c                 :    t        | j                  ||            S )Nr   )listr   )r/   nodesr   s      r   _child_nodesz_PatchingASTWalker._child_nodes   s    DJJu	J:;;r   AndandOrorAdd+Sub-Mult*Div/Mod%Pow**MatMult@LShiftz<<RShiftz>>BitOr|BitAnd&BitXor^FloorDivz//Invert~Notnotz==z!=<z<=>z>=iszis notinznot in)UAddUSubEqNotEqLtLtEGtGtEIsIsNotInNotInc                 f    | j                   |j                  j                     j                  d      S )N )
_operatorsr4   r$   splitr/   r   s     r   _get_opz_PatchingASTWalker._get_op  s&    t~~667==cBBr   c                 V    | j                  ||j                  d|j                  g       y )N.)r^   valuer   r   s     r   
_Attributez_PatchingASTWalker._Attribute  s    TDJJTYY78r   c                     d|j                   g}|j                  r,|j                  d       |j                  |j                         | j                  ||       y )Nassertr   )testmsgr   r^   r/   r   r   s      r   _Assertz_PatchingASTWalker._Assert  sA    dii(88OOC OODHH%T8$r   c                     g | j                  |j                  d      d|j                  }| j                  ||       y Nr   )r   targetsr   r^   r   s      r   _Assignz_PatchingASTWalker._Assign  s9    KT&&t||S9K3K

KT8$r   c                     |j                   g| j                  |j                        d|j                  }| j	                  ||       y r   )targetr   opr   r^   r   s      r   
_AugAssignz_PatchingASTWalker._AugAssign"  s<    KKI$,,tww"7IIdjjIT8$r   c                     |j                   d|j                  g}|j                  ,|j                  d       |j                  |j                         | j	                  ||       y )N:r   )r   
annotationr   r   r^   r   s      r   
_AnnAssignz_PatchingASTWalker._AnnAssign&  sJ    KKdoo6::!OOC OODJJ'T8$r   c                     |j                   g| j                  |j                        z   |j                  gz   }| j	                  ||       y r*   )leftr   r   rightr^   r   s      r   _BinOpz_PatchingASTWalker._BinOp-  s8    II;dgg!66$**ET8$r   c           	          | j                  || j                  |j                  | j                  |j                        d                y Nr   )r^   r   valuesr   r   r   s     r   _BoolOpz_PatchingASTWalker._BoolOp1  s4    T4,,T[[$,,tww:OPQ:RSTr   c                 *    | j                  |dg       y )Nbreakr^   r   s     r   _Breakz_PatchingASTWalker._Break4  s    TG9%r   c                     d }|j                   dg}t        g |j                  |j                  |      }|j	                  | j                  |d             |j                  d       | j                  ||       y )Nc                     t        | t        j                        r,| j                  j                  | j                  j
                  fS | j                  | j
                  fS r*   )r   r   keywordr   r|   rz   )r   s    r   _arg_sort_keyz/_PatchingASTWalker._Call.<locals>._arg_sort_key8  sB    $,

))4::+@+@AAKK11r   ra   )keyr   r`   )funcsortedargskeywordsextendr   r   r^   )r/   r   r   r   r   s        r   _Callz_PatchingASTWalker._Call7  si    	2
 IIs#2		2DMM2F))$45T8$r   c                    g }|j                   D ]  }|j                  d|f        |j                  d|j                  g       |j                  rM|j	                  d       |j                  | j                  |j                  d             |j	                  d       |j	                  d       |j                  |j                         | j                  ||       y )Nr   classra   r   r`   r   )decorator_listr   namebasesr   r   bodyr^   )r/   r   r   	decorators       r   	_ClassDefz_PatchingASTWalker._ClassDefC  s    ,, 	.IOOS),-	.$)),-::OOC OOD--djj#>?OOC 		"T8$r   c                    g }|j                  |j                         t        |j                  |j                        D ]6  \  }}|j                  | j                  |             |j                  |       8 | j                  ||       y r*   )r   r   zipopscomparatorsr   r   r^   )r/   r   r   r   exprs        r   _Comparez_PatchingASTWalker._CompareP  sl    		"DHHd&6&67 	"HBOODLL,-OOD!	" 	T8$r   c                 d    | j                  |dg| j                  |j                  d      z          y )Ndelr   )r^   r   r   r   s     r   _Deletez_PatchingASTWalker._DeleteX  s(    TE7T%6%6t||S%IIJr   c                    t        j                  t        t        f      r| j	                  | j
                  g       y t        fddD              r'| j	                  t        j                        g       y t        j                  t        j                        r| j	                  | j                  g       y j                  t        u r| j	                  dg       y J )Nc              3   :   K   | ]  }j                   |u   y wr*   )r   )r   vr   s     r   r   z/_PatchingASTWalker._Constant.<locals>.<genexpr>`  s     <1tzzQ<s   )TFN...)
r   r   rs   rt   r^   rD   anynumbersrG   Ellipsisr   s    `r   	_Constantz_PatchingASTWalker._Constant[  s    djj3,/LL}-<(;<<LLDJJ01djj'..1LL}-::!LLw'ur   c                 >    | j                  || j                  g       y r*   )r^   rG   r   s     r   _Numz_PatchingASTWalker._Numn      TDKK=)r   c                 >    | j                  || j                  g       y r*   r^   rD   r   s     r   _Strz_PatchingASTWalker._Strq  r  r   c                 >    | j                  || j                  g       y r*   r  r   s     r   _Bytesz_PatchingASTWalker._Bytest  r  r   c                    	  	fd} 	fd}g d j                   j                  } j                   j                   j                               \  	| j                   _        g }|j	                   |              |j
                  D ].  }t        |t        j                        s|j	                  |       0 |j	                   |               j                  ||       y )Nc                      D  cg c]+  } j                   j                   j                  |       | f- }} t        d |D              \  }}j                   |t        |      z    S c c} w )Nc              3   6   K   | ]  \  }}|d k7  s||f  ywNr'   r   posqs      r   r   zJ_PatchingASTWalker._JoinedStr.<locals>.start_quote_char.<locals>.<genexpr>|  s#      (#S!#)a(s   	)r
   findminru   )r  possible_quotes	quote_pos
quote_charQUOTE_CHARSr?   r/   rZ   s       r   start_quote_charz7_PatchingASTWalker._JoinedStr.<locals>.start_quote_charx  sz    EP@A##((E37;O  %( ('6( %!Iz ;;uy3z?'BCCs   0A(c                      t              D  cg c]+  } j                  j                  j                  |       | f- }} t        d |D              \  }}}j                  t	        |      z
   S c c} w )Nc              3   J   K   | ]  \  }}|d k7  st        |      ||f  ywr  )ru   r  s      r   r   zH_PatchingASTWalker._JoinedStr.<locals>.end_quote_char.<locals>.<genexpr>  s*      +%+S!#)Qa +s   ##)rx   r
   rfindmaxru   )	r  r   r2   r!  r"  r#  r?   r/   rZ   s	        r   end_quote_charz5_PatchingASTWalker._JoinedStr.<locals>.end_quote_char  s     "+. ##))!UC8!<O  (+ +/>+ ($Ay* ;;sS_4s;;s   0A2)z"""z'''"'r>   )
r
   r8   rE   rF   r   r   r   r   rN   r^   )
r/   r   r$  r)  r8   r   partr#  r?   rZ   s
   `      @@@r   
_JoinedStrz_PatchingASTWalker._JoinedStrw  s    	D	< /##[[////1 0 

s $(*+KK 	&D$ 2 23%	& 	()T8$r   c                 L   g }|j                  d       |j                  |j                         |j                  rG|j                  d       |j                  j                  D ]  }|j                  |j                          |j                  d       | j	                  ||       y N{r   })r   r   format_specr   r^   )r/   r   r   vals       r   _FormattedValuez"_PatchingASTWalker._FormattedValue  s}    

#OOC ''.. +		*+T8$r   c                 *    | j                  |dg       y )Ncontinuer   r   s     r   	_Continuez_PatchingASTWalker._Continue  s    TJ<(r   c                    g }|j                  d       |j                  rt        t        |j                  |j                              D ]_  \  }\  }}||j                  d|g       n|j                  |d|g       |t        |j                        dz
  k  sO|j                  d       a |j                  d       | j                  ||       y )Nr0  r   r   r@   r   r1  )r   keys	enumerater   r   r   ru   r^   r/   r   r   rl   r   r   s         r   _Dictz_PatchingASTWalker._Dict  s    99'0TYY1L'M )#|U;OOT5M2OOS#u$563tyy>A--OOC() 	T8$r   c                 *    | j                  |dg       y )Nr	  r   r   s     r   	_Ellipsisz_PatchingASTWalker._Ellipsis  s    TE7#r   c                 >    | j                  ||j                  g       y r*   r^   r   r   s     r   _Exprz_PatchingASTWalker._Expr      TDJJ<(r   c                 Z    |j                   d|j                  g}| j                  ||       y )Nz:=)r   r   r^   r   s      r   
_NamedExprz_PatchingASTWalker._NamedExpr  s$    KKtzz2T8$r   c                     g }t        |j                        D ],  \  }}|dkD  r|j                  d       |j                  |       . | j                  ||       y )Nr   r   )r:  dimsr   r^   )r/   r   r   rl   dims        r   	_ExtSlicez_PatchingASTWalker._ExtSlice  sR    #DII. 	!JE3qy$OOC 	! 	T8$r   c                 6   |rddgndg}|j                  |j                  d|j                  dg       |j                  |j                         |j                  r.|j                  ddg       |j                  |j                         | j                  ||       y )Nasyncforr   r   else)r   r   r~   r   orelser^   )r/   r   is_asyncr   s       r   _handle_for_loop_nodez(_PatchingASTWalker._handle_for_loop_node  st    '/GU#eWdDIIs;<		";;OOVSM*OODKK(T8$r   c                 *    | j                  |d       y NFrN  rO  r   s     r   _Forz_PatchingASTWalker._For  s    ""4%"8r   c                 *    | j                  |d       y NTrR  rS  r   s     r   	_AsyncForz_PatchingASTWalker._AsyncFor  s    ""4$"7r   c                 f   dg}|j                   r|j                  d|j                   z         |j                  r*|j                  |j                  j                  d             |j	                  d       |j                  | j                  |j                  d             | j                  ||       y )Nfromr   importr   )levelr   moduler   r   r   namesr^   r   s      r   _ImportFromz_PatchingASTWalker._ImportFrom  s~    8::OOC$**,-;;OODKK--c23!))$**c:;T8$r   c                     |j                   j                  d      }|j                  r|j                  d|j                  g       | j	                  ||       y )Nr   as)r   r   asnamer   r^   r   s      r   _aliasz_PatchingASTWalker._alias  s>    99??3';;OOT4;;/0T8$r   c                 n   g }|j                   D ]  }|j                  d|f        |j                  |rddgndg       |j                  |j                         |j                  d|j                  dg       |j                  d       |j                  |j
                         | j                  ||       y )Nr   rJ  defra   r`   r   )r   r   r   r   r   r   r^   )r/   r   rN  r   r   s        r   _handle_function_def_nodez,_PatchingASTWalker._handle_function_def_node  s    ,, 	.IOOS),-	.H%(5'B		"dii-.		"T8$r   c                 *    | j                  |d       y rQ  re  r   s     r   _FunctionDefz_PatchingASTWalker._FunctionDef  s    &&te&<r   c                 *    | j                  |d       y rV  rg  r   s     r   _AsyncFunctionDefz$_PatchingASTWalker._AsyncFunctionDef  s    &&td&;r   c                    g }t        |j                        }d gt        |      t        |j                        z
  z  t        |j                        z   }t	        t        ||            D ]1  \  }\  }}|dkD  r|j                  d       | j                  |||       3 |j                  :|r|j                  d       |j                  d|j                  j                  g       |j                  F|s|j                  |j                  d       |j                  d|j                  j                  g       | j                  ||       y )Nr   r   r   r   )r   r   ru   defaultsr:  r   r   _add_args_to_childrenvarargr   argkwargr^   )r/   r   r   r   rl  rl   ro  defaults           r   
_argumentsz_PatchingASTWalker._arguments  s   DII6SYT]]);;<tDMM?RR%.s4/B%C 	?!E>Cqy$&&xg>	? ;;"$OOS$++//23::!t{{.$OOT4::>>23T8$r   c                     t        |t        t        f      r| j                  ||       n|j	                  |       |#|j	                  d       |j	                  |       y y r   )r   r   tuple_add_tuple_parameterr   )r/   r   ro  rq  s       r   rm  z(_PatchingASTWalker._add_args_to_children  sO    cD%=)%%h4OOC OOC OOG$ r   c                    |j                  d       t        |      D ]U  \  }}|dkD  r|j                  d       t        |t        t        f      r| j                  ||       E|j                  |       W |j                  d       y )Nra   r   r   r`   )r   r:  r   r   rt  ru  )r/   r   ro  rl   tokens        r   ru  z'_PatchingASTWalker._add_tuple_parameter  sp    %cN 	'LE5qy$%$/))(E:&	' 	r   c                 ^    |j                   g|j                  }| j                  ||d       y )NTrV   elt
generatorsr^   r   s      r   _GeneratorExpz _PatchingASTWalker._GeneratorExp  s)    HH/t/T85r   c                     d|j                   d|j                  g}|j                  D ]  }|j                  d|g        | j	                  ||       y )NrK  r   if)r   r~   ifsr   r^   )r/   r   r   if_s       r   _comprehensionz!_PatchingASTWalker._comprehension#  sI    4;;dii888 	)COOT3K(	)T8$r   c                 f    dg| j                  |j                  d      }| j                  ||       y )Nglobalr   r   r]  r^   r   s      r   _Globalz_PatchingASTWalker._Global)  .    Bt00SABT8$r   c                 f    dg| j                  |j                  d      }| j                  ||       y )Nnonlocalr   r  r   s      r   	_Nonlocalz_PatchingASTWalker._Nonlocal-  s.    D!2!24::s!CDT8$r   c                    | j                  |      rdgndg}|j                  |j                  dg       |j                  |j                         |j                  ret        |j                        dk(  r| j                  |j                  d         rn|j                  ddg       |j                  |j                         | j                  ||       y )Nelifr  r   r@   r   rL  )_is_elifr   r   r   rM  ru   r^   r   s      r   _Ifz_PatchingASTWalker._If1  s    #}}T2F8C()		";;4;;1$t{{1~)F.OODKK(T8$r   c                     t        |t        j                        sy| j                  j	                  |j
                        |j                  z   }| j                  ||dz    }| j                  |dz
  |dz
   }d||fv S )NF      r@   r  )r   r   Ifr-   r{   r|   rz   r
   )r/   r   r8   wordalt_words        r   r  z_PatchingASTWalker._is_elif=  sp    $'**4;;7$//I{{6FQJ/;;vzFQJ7$)))r   c                 l    | j                  ||j                  d|j                  d|j                  g      S )Nr  rL  )r^   r   r   rM  r   s     r   _IfExpz_PatchingASTWalker._IfExpF  s*    ||D499dDIIvt{{"STTr   c                 f    dg| j                  |j                  d      }| j                  ||       y )NrZ  r   r  r   s      r   _Importz_PatchingASTWalker._ImportI  r  r   c                     |j                   |j                  g}n|j                   d|j                  g}| j                  ||       y r   )ro  r   r^   r   s      r   _keywordz_PatchingASTWalker._keywordM  s9    88

|H#tzz2HT8$r   c                 X    | j                  |d|j                  d|j                  g       y )Nlambdar   )r^   r   r   r   s     r   _Lambdaz_PatchingASTWalker._LambdaT  s!    THdiidii@Ar   c                 f    | j                  |dg| j                  |j                  d      d       y )N[r   ])r^   r   eltsr   s     r   _Listz_PatchingASTWalker._ListW  s.    TCI$"3"3DIIs"CISIJr   c                 `    d|j                   g|j                  d}| j                  ||       y Nr  r  rz  r   s      r   	_ListCompz_PatchingASTWalker._ListCompZ  ,    9DOO9S9T8$r   c                     |j                   r2| j                  |dg| j                  |j                   d      d       y t        j                  dt
               | j                  |ddg       y )Nr0  r   r1  z3Tried to handle empty <Set> literal; please report!zset(r`   )r  r^   r   r5   r6   r7   r   s     r   _Setz_PatchingASTWalker._Set^  s]    99LLMd&7&7		3&GMMNA>	
 	TFC=)r   c                 `    d|j                   g|j                  d}| j                  ||       y )Nr0  r1  rz  r   s      r   _SetCompz_PatchingASTWalker._SetComph  r  r   c                 |    dg|j                   d|j                  g|j                  d}| j                  ||       y r/  )r   r   r|  r^   r   s      r   	_DictCompz_PatchingASTWalker._DictCompl  s:    M488S$**5MMMT8$r   c                 R    | j                  |t        |j                        d       y )NT)rW   )r^   r   r   r   s     r   _Modulez_PatchingASTWalker._Modulep  s    T4		?t<r   c                 >    | j                  ||j                  g       y r*   )r^   idr   s     r   _Namez_PatchingASTWalker._Names  s    TDGG9%r   c                 P    | j                  |t        |j                        g       y r*   )r^   rs   r   r   s     r   _NameConstantz _PatchingASTWalker._NameConstantv  s    TC

O,-r   c                 >    | j                  ||j                  g       y r*   )r^   ro  r   s     r   _argz_PatchingASTWalker._argy  s    TDHH:&r   c                 *    | j                  |dg       y )Npassr   r   s     r   _Passz_PatchingASTWalker._Pass|  s    TF8$r   c                     dg}|j                   r|j                  |j                          |j                  r,|j                  d       |j                  |j                         | j                  ||       y )NraiserY  )excr   causer^   r   s      r   _Raisez_PatchingASTWalker._Raise  sQ    988OODHH%::OOF#OODJJ'T8$r   c                 |    dg}|j                   r|j                  |j                          | j                  ||       y )Nreturnr   r   r^   r   s      r   _Returnz_PatchingASTWalker._Return  s.    :::OODJJ'T8$r   c                 >    | j                  ||j                  g       y r*   r@  r   s     r   _Indexz_PatchingASTWalker._Index  rB  r   c                 X    | j                  ||j                  d|j                  dg       y r  )r^   r   slicer   s     r   
_Subscriptz_PatchingASTWalker._Subscript  s!    TDJJTZZ=>r   c                 Z   g }|j                   r|j                  |j                          |j                  d       |j                  r|j                  |j                         |j                  r,|j                  d       |j                  |j                         | j	                  ||       y )Nr   )lowerr   upperstepr^   r   s      r   _Slicez_PatchingASTWalker._Slice  sr    ::OODJJ'::OODJJ'99OOC OODII&T8$r   c                    d}d}t        |j                        dk(  r*	 t        |j                  d   t        j
                        }d}g }|s|s|j                  ddg       |j                  |j                         |j                  |j                         |j                  ddg       |j                  |j                         | j                  ||       y # t        $ r Y w xY w)NFTr@   r   tryr   finally)
ru   	finalbodyr   handlersr   ExceptHandler
IndexErrorr   r   r^   )r/   r   is_there_except_handlernot_empty_bodyr   s        r   _TryFinallyz_PatchingASTWalker._TryFinally  s    "'t~~!#*4MM!$c&7&7+' "& !8OOUCL)		"&C()'T8$  s   )C 	C#"C#c                    ddg}|j                  |j                         |j                  |j                         |j                  r.|j                  ddg       |j                  |j                         | j	                  ||       y )Nr  r   rL  )r   r   r  rM  r^   r   s      r   
_TryExceptz_PatchingASTWalker._TryExcept  s`    3<		"&;;OOVSM*OODKK(T8$r   c                 t    t        |j                        r| j                  |       y | j                  |       y r*   )ru   r  r  r  r   s     r   _Tryz_PatchingASTWalker._Try  s(    t~~T"OOD!r   c                 &    | j                  |       y r*   )r  r   s     r   _TryStarz_PatchingASTWalker._TryStar  s    		$r   c                 &    | j                  |       y r*   )_excepthandlerr   s     r   _ExceptHandlerz!_PatchingASTWalker._ExceptHandler  s    D!r   c                 D   dg}|j                   r|j                  |j                          |j                  r,|j                  d       |j                  |j                         |j                  d       |j                  |j                         | j                  ||       y )Nexceptr`  r   )typer   r   r   r   r^   r   s      r   r  z!_PatchingASTWalker._excepthandler  sm    :99OODII&99OOD!OODII&		"T8$r   c                     |j                   r/| j                  || j                  |j                   d      d       y | j                  || j                  g       y )Nr   Try  )r  r^   r   rI   r   s     r   _Tuplez_PatchingASTWalker._Tuple  sC    99LLt00C@TLRLL 0 012r   c                     | j                  |j                        }|j                  |j                         | j	                  ||       y r*   )r   r   r   operandr^   r   s      r   _UnaryOpz_PatchingASTWalker._UnaryOp  s2    <<(%T8$r   c                 |    dg}|j                   r|j                  |j                          | j                  ||       y )Nawaitr  r   s      r   _Awaitz_PatchingASTWalker._Await  .    9::OODJJ'T8$r   c                 |    dg}|j                   r|j                  |j                          | j                  ||       y )Nyieldr  r   s      r   _Yieldz_PatchingASTWalker._Yield  r  r   c                 F    dd|j                   g}| j                  ||       y )Nr  rY  )r   r^   r   s      r   
_YieldFromz_PatchingASTWalker._YieldFrom  s     VTZZ0T8$r   c                     d|j                   dg}|j                  |j                         |j                  r.|j                  ddg       |j                  |j                         | j	                  ||       y )Nwhiler   rL  )r   r   r   rM  r^   r   s      r   _Whilez_PatchingASTWalker._While  sW    TYY,		";;OOVSM*OODKK(T8$r   c                 p   g }|r|j                  dg       |j                  D ]S  }|j                  | j                  |j                  g       |j                  s7|j                  d|j                  g       U |j                  d       |j                  |j                         | j                  ||       y )NrJ  r`  r   )r   itemsrK   context_exproptional_varsr   r   r^   )r/   r   rN  r   items        r   _handle_with_nodez$_PatchingASTWalker._handle_with_node  s    OOWI&JJ 	<DOOT??ARARST!!t'9'9 :;	< 			"T8$r   c                 *    | j                  |d       y rQ  r  r   s     r   _Withz_PatchingASTWalker._With  s    te4r   c                 *    | j                  |d       y rV  r  r   s     r   
_AsyncWithz_PatchingASTWalker._AsyncWith	  s    td3r   c                 >    | j                  ||j                  g       y r*   r@  r   s     r   _Starredz_PatchingASTWalker._Starred  rB  r   c                 |    d|j                   dg}|j                  |j                         | j                  ||       y )Nmatchr   )subjectr   casesr^   r   s      r   _Matchz_PatchingASTWalker._Match  s0    T\\3/

#T8$r   c                     d|j                   g}|j                  r|j                  d|j                  g       |j                  d       |j                  |j                         | j                  ||       y )Ncaser  r   )r   guardr   r   r   r^   r   s      r   _match_casez_PatchingASTWalker._match_case  sV    DLL)::OOT4::./		"T8$r   c                     |j                   r|j                   d|j                  g}n|j                  dg}n|j                  g}| j                  ||       y )Nr`  r2   )r   r   r^   r   s      r   _MatchAsz_PatchingASTWalker._MatchAs  sG    <<dDII6HYYuH		{HT8$r   c                     |j                   dg| j                  |j                  d      | j                  t	        |j
                  |j                              d}| j                  ||       y )Nra   r   r`   )clsr   patternsr   r   	kwd_attrskwd_patternsr^   r   s      r   _MatchClassz_PatchingASTWalker._MatchClass%  sn    HH
 t}}c2
 ##C8I8I$JK	

 
 	T8$r   c                 >    | j                  ||j                  g       y r*   r@  r   s     r   _MatchValuez_PatchingASTWalker._MatchValue/  rB  r   c                 Z   g }|j                  d       t        t        |j                  |j                              D ]I  \  }\  }}|j                  |d|g       |t        |j                        dz
  k  s9|j                  d       K |j                  d       | j                  ||       y )Nr0  r   r@   r   r1  )r   r:  r   r9  r  r   ru   r^   r;  s         r   _MatchMappingz _PatchingASTWalker._MatchMapping2  s    #,SDMM-J#K 	%E<COOS#u-.s499~))$	% 	T8$r   NF)FF)fr$   r%   r&   r0   objectrG   rD   rK   rI   r<   r^   rQ   rR   rb   rF   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r-  r4  r7  r<  r>  rA  rD  rH  rO  rT  rW  r^  rb  re  rh  rj  rr  rm  ru  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r'   r   r   r   r   A   s   ! XFXF$*H!(KUB"H$2'-
<ud 	s 	s	
 	 	s 	s 	t 	3 	$ 	$ 	 	# 	# 	D  	#!" 	u#$ ;J@C9%%%%%U&
%%%K&***!%F	%)%$)%%%98%%	%=<%$%	6%%%
%*U%%BK%*%%=&.'%%%)?
%%*%""
%3%
%%%%%54)%
%%%)%r   r   c                       e Zd Zd ZddZd ZddZd Zd Zd Z	dd	Z
d
 Zd ZddZd Zd Zd Zd Zd Zd Zd ZdZdZy)r+   c                      || _         d| _        y r   )r
   r8   )r/   r
   s     r   r0   z_Source.__init__>  s    r   c                 H   	 	 | j                   j                  || j                        }| j                  ||      s|sn| j	                          L	 |t        |      z   | _        || j                  fS # t
        t        f$ r! t        d| d| j                          d      w xY w)NzToken <z> at z cannot be matched)
r
   rl   r8   _good_token_skip_commentrv   	TypeErrorr#   _get_locationru   )r/   rw  skip_comment
new_offsets       r   rP   z_Source.consumeB  s    
	![[..udkkB
##E:6l&&(   !3u:-DKK(( I& 	&%d&8&8&:%;;MN 	s   AA1 10B!c                     | j                   j                  || j                        }|t        |      z   | _        || j                  fS r*   )r
   rl   r8   ru   r/   rw  r  s      r   rO   z_Source.consume_joined_stringQ  s;    [[&&udkk:
 3u:-DKK((r   Nc                 :   t         j                  jt        j                         }t        j                         }dj                  ||      }dj                  ||      }t        j                  |      t         _        t         j                  }| j                  ||      S )Nz(?:{})|(?:{})z({})((\s|\\\n|#[^\n]*\n)*({}))*)	r+   _string_patternr   get_string_patternget_formatted_string_patternformatrecompile_consume_pattern)r/   r?   string_patternformatted_string_patternoriginalr   	repatterns          r   rE   z_Source.consume_stringV  s    ""*(;;=N'2'O'O'Q$'..(H 9??G ')jj&9G#++	$$Y44r   c                     t         j                  ,t        j                  | j	                               t         _        t         j                  }| j                  |      S r*   )r+   _number_patternr'  r(  _get_number_patternr)  r/   r-  s     r   rH   z_Source.consume_numberf  sD    ""*&(jj1I1I1K&LG#++	$$Y//r   c                 J    | j                  t        j                  d            S )Nz\(\s*\))r)  r'  r(  r/   s    r   rJ   z_Source.consume_empty_tuplel  s    $$RZZ
%;<<r   c                 N    t        j                  d      }| j                  |      S )Nzwith|,)r'  r(  r)  r1  s     r   rL   z-_Source.consume_with_or_comma_context_managero  s!    JJy)	$$Y//r   c                     || j                   }	 | j                  j                  d||      }	 | j                  j                  d||      }||k  S # t        $ r Y yw xY w# t        $ r Y yw xY w)z,Checks whether consumed token is in commentsrq   Trr   F)r8   r
   rindexrv   )r/   rw  r8   rZ   comment_indexnew_line_indexs         r   r  z_Source._good_tokens  s~    =KKE	 KK..sE6BM	![[//eVDN ~--  		  		s"   A A 	AA	A+*A+c                 `    | j                   j                  d| j                  dz         | _        y )Nrr   r@   r
   rl   r8   r3  s    r   r  z_Source._skip_comment  s"    kk''dkkAo>r   c                     | j                   d | j                   j                  d      }t        |      t        |d         fS )Nrr   r  )r
   r8   r   ru   )r/   r-   s     r   r  z_Source._get_location  s8    Mdkk*006E
Cb	N++r   c                 j   	 |t        | j                        }|j                  | j                  | j                  |      }| j	                  |j                         |j                               rn| j                          ~|j                         | _        |j                         |j                         fS r*   )	ru   r
   searchr8   r  grouprZ   r  r?   )r/   r-  r?   r  s       r   r)  z_Source._consume_pattern  s    {$++&$$T[[$++sCEu{{}=""$  iik{{}eiik))r   c                 l    | j                   j                  || j                        }| | j                  | S r*   r:  r!  s      r   
till_tokenz_Source.till_token  s-    [[&&udkk:
DKK*--r   c                     |}	 	 | j                   j                  |||      }| j                  |||      r|S |}	 8# t        $ r Y y w xY w)N)rZ   )r
   r6  r  rv   )r/   rw  rZ   r?   rl   s        r   rd   z_Source.rfind_token  s_    **5%=##E5#> LC   s   2< < 	AAc                      | || j                    S r*   )r8   )r/   r8   s     r   from_offsetz_Source.from_offset  s    FT[[))r   c                 <    | j                   j                  |d|      S r   )r
   r6  )r/   r   r8   s      r   find_backwardsz_Source.find_backwards  s    {{!!'1f55r   c                      | j                   |   S r*   r
   )r/   rl   s     r   __getitem__z_Source.__getitem__  s    {{5!!r   c                      | j                   || S r*   rG  )r/   ri   js      r   __getslice__z_Source.__getslice__  s    {{1Qr   c                     d}d|z  S )Nz\-?(0[xo][\da-fA-F]+|\d+)z((%s(\.\d*)?|(\.\d+))([eE][-+]?\d+)?[jJ]?r'   )r/   integers     r   r0  z_Source._get_number_pattern  s    .:WDDr   )Tr*   )r$   r%   r&   r0   rP   rO   rE   rH   rJ   rL   r  r  r  r)  r@  rd   rC  rE  rH  rK  r0  r#  r/  r'   r   r   r+   r+   =  si    ))
5 0=0.?,
*.
*6" E
 OOr   r+   r  )rA   r  r'  r5   	itertoolsr   	rope.baser   r   r   r(  COMMA_IN_WITH_PATTERNr   r   r   r   	RopeErrorr#   r   r+   r'   r   r   <module>rR     sk      	   2 2"

>2 A(#
	:// 	y% y%xy yr   