� �fc@s�dZd ZddlZddlZddlZddlZdad�Zd�Zd�Z e d�\Z Z Z ZZd d d ��YZed kr�e�ndS(s�checkappend.py -- search for multi-argument .append() calls. Usage: specify one or more file or directory paths: checkappend [-v] file_or_dir [file_or_dir] ... Each file_or_dir is checked for multi-argument .append() calls. When a directory, all .py files in the directory, and recursively in its subdirectories, are checked. Use -v for status msgs. Use -vv for more status msgs. In the absence of -v, the only output is pairs of the form filename(linenumber): line containing the suspicious append Note that this finds multi-argument append calls regardless of whether they're attached to list objects. If a module defines a class with an append method that takes more than one argument, calls to that method will be listed. Note that this will not find multi-argument list.append calls made via a bound method object. For example, this is not caught: somelist = [] push = somelist.append push(1, 2, 3) iii����NcGs3dj|�}tjj|�tjjd�dS(Nt s (tjointsyststderrtwrite(targstmsg((s1/usr/lib64/python2.7/Tools/scripts/checkappend.pyterrprint+scCs�tjd}y#tjtjdd�\}}Wn/tjk ra}tt|�dt�dSXx-|D]%\}}|dkritdaqiqiW|s�tt�dSx|D]}t|�q�WdS(Nitvs s-v( RtargvtgetoptterrorRtstrt__doc__tverbosetcheck(RtoptsRtopttoptargtarg((s1/usr/lib64/python2.7/Tools/scripts/checkappend.pytmain0s #   cCsKtjj|�r�tjj|� r�tr:d|fGHntj|�}xq|D]i}tjj||�}tjj|�r�tjj|� s�tjj|d�dkrPt|�qPqPWdSyt |�}Wn(t k r�}t d||f�dSXtdkrd|fGHnt ||�j �}trG|rGd|fGHndS(Ns%r: listing directoryi����s.pys%r: I/O Error: %sischecking %r ...s%r: Clean bill of health.(tostpathtisdirtislinkRtlistdirRtnormcaseRtopentIOErrorRt AppendCheckertrun(tfiletnamestnametfullnametfRtok((s1/usr/lib64/python2.7/Tools/scripts/checkappend.pyRAs*%   iRcBsDeZd�Zd�Zejejejfejej d�Z RS(cCs(||_||_t|_d|_dS(Ni(tfnameRtFIND_DOTtstatetnerrors(tselfR%R((s1/usr/lib64/python2.7/Tools/scripts/checkappend.pyt__init__bs   cCsjytj|jj|j�Wn=tjk r\}td|j|f�|jd|_nX|jdkS(Ns%r: Token Error: %sii(ttokenizeRtreadlinet tokeneatert TokenErrorRR%R((R)R((s1/usr/lib64/python2.7/Tools/scripts/checkappend.pyRhs c Cs�|j} ||krn�| tkrH||kr�|dkr�t} q�n�| tkr�|| kr�|dkr�||_|d|_t} q�t} n9| tkr�||kr�|dkr�d|_t} q�t} n�| tkr�||kr�|dkr |jd|_q�|dkrA|jd|_|jdkr�t} q�q�|d kr�|jdkr�|jd|_d |j |j|jfGHt } q�q�n7| t kr�||kr�t} q�nt d | f��| |_dS(Nt.tappendit(it{t[t)t}t]t,s %s(%d): %ssunknown internal state '%r'(R1R2R3(R4R5R6( R'R&t FIND_APPENDtlinetlinenot FIND_LPARENtlevelt FIND_COMMAR(R%t FIND_STMTt SystemError( R)ttypettokentstarttendR9tNEWLINEtJUNKtOPtNAMER'((s1/usr/lib64/python2.7/Tools/scripts/checkappend.pyR-psF                      ( t__name__t __module__R*RR+RDtCOMMENTtNLRFRGR-(((s1/usr/lib64/python2.7/Tools/scripts/checkappend.pyRas   t__main__(iii((R t __version__RRR R+RRRRtrangeR&R8R;R=R>RRH(((s1/usr/lib64/python2.7/Tools/scripts/checkappend.pyt s       E