ó �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