File: //lib64/python2.7/Tools/scripts/checkappend.pyo
�
{�fc           @   s�   d  Z  d Z d d l Z d d l Z d d l Z d d l Z d a d �  Z d �  Z d �  Z	 e
 d � \ Z Z Z
 Z Z d	 d
 d
 �  �  YZ e d k r� e �  n  d S(   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)
i   i    i����Nc          G   s3   d j  |  � } t j j | � t j j d � d  S(   Nt    s   
(   t   joint   syst   stderrt   write(   t   argst   msg(    (    s1   /usr/lib64/python2.7/Tools/scripts/checkappend.pyt   errprint+   s    c          C   s�   t  j d }  y# t j t  j d d � \ } }  Wn/ t j k
 ra } t t | � d t � d  SXx- | D]% \ } } | d k ri t d a qi qi W|  s� t t � d  Sx |  D] } t | � q� Wd  S(   Ni   t   vs   
s   -v(	   R   t   argvt   getoptt   errorR   t   strt   __doc__t   verboset   check(   R   t   optsR   t   optt   optargt   arg(    (    s1   /usr/lib64/python2.7/Tools/scripts/checkappend.pyt   main0   s    
#
c         C   sK  t  j j |  � r� t  j j |  � r� t r: d |  f GHn  t  j |  � } xq | D]i } t  j j |  | � } t  j j | � r� t  j j | � s� t  j j | d � d k rP t | � qP qP Wd  Sy t	 |  � } Wn( t
 k
 r� } t d |  | f � d  SXt d k rd |  f GHn  t |  | � j
 �  } t rG| rGd |  f GHn  d  S(   Ns   %r: listing directoryi����s   .pys   %r: I/O Error: %si   s   checking %r ...s   %r: Clean bill of health.(   t   ost   patht   isdirt   islinkR   t   listdirR   t   normcaseR   t   opent   IOErrorR   t
   AppendCheckert   run(   t   filet   namest   namet   fullnamet   fR   t   ok(    (    s1   /usr/lib64/python2.7/Tools/scripts/checkappend.pyR   A   s*    %
i   R   c           B   sD   e  Z d  �  Z d �  Z e j e j e j f e j e j	 d � Z
 RS(   c         C   s(   | |  _  | |  _ t |  _ d |  _ d  S(   Ni    (   t   fnameR   t   FIND_DOTt   statet   nerrors(   t   selfR%   R   (    (    s1   /usr/lib64/python2.7/Tools/scripts/checkappend.pyt   __init__b   s    			c         C   sj   y t  j  |  j j |  j � Wn= t  j k
 r\ } t d |  j | f � |  j d |  _ n X|  j d k S(   Ns   %r: Token Error: %si   i    (   t   tokenizeR   t   readlinet
   tokeneatert
   TokenErrorR   R%   R(   (   R)   R   (    (    s1   /usr/lib64/python2.7/Tools/scripts/checkappend.pyR   h   s    c
         C   s�  |  j  }
 | | k r n�|
 t k rH | | k r�| d k r�t }
 q�n�|
 t k r� | |	 k r� | d k r� | |  _ | d |  _ t }
 q�t }
 n9|
 t k r� | | k r� | d k r� d |  _ t }
 q�t }
 n� |
 t k r�| | k r�| d k r
|  j d |  _ q�| d k rA|  j d |  _ |  j d k r�t }
 q�q�| d k r�|  j d k r�|  j d |  _ d |  j	 |  j |  j f GHt
 }
 q�q�n7 |
 t
 k r�| | k r�t }
 q�n t d
 |
 f � � |
 |  _  d  S(   Nt   .t   appendi    t   (i   t   {t   [t   )t   }t   ]t   ,s
   %s(%d):
%ss   unknown internal state '%r'(   R1   R2   R3   (   R4   R5   R6   (   R'