
4\c           @   s  d  Z  d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l	 Z	 d d l
 Z
 d d l m Z e	 j dR k  Z e	 j dS k Z e	 j dT k Z e	 j dU k Z y e	 j e Z Wn e k
 r e Z n Xe e e rd	 n d
   Z e r%e
 j Z n	 e
 j
 Z e rId   Z d   Z n d   Z d   Z e Z e rsd   Z  n	 d   Z  e re j! e j" f Z# e j$ e j! e j" f Z% n e j! f Z# e j$ e j! f Z% e j& d  Z' e j& e' j( d  Z) e j& d  Z* d e+ f d     YZ, d   Z- d e,   d  Z/ d   Z0 d   Z1 d e2 f d     YZ3 d e3 f d     YZ4 d e4 f d     YZ5 d  e2 f d!     YZ6 d" e2 f d#     YZ7 d$ e4 f d%     YZ8 d& e8 f d'     YZ9 d( e8 f d)     YZ: d* e8 f d+     YZ; d, e: f d-     YZ< d. e3 f d/     YZ= d0 e3 f d1     YZ> d2 e4 f d3     YZ? d4 e4 f d5     YZ@ d6 e3 f d7     YZA d8 e+ f d9     YZB d: eB f d;     YZC d< eB f d=     YZD d> eB f d?     YZE d@ eB f dA     YZF dB eF f dC     YZG dD e2 f dE     YZH dF dG dH g ZI e rMeI jJ dI  n  dJ   ZK dK   ZL dL   ZM dM e jN f dN     YZO dO   ZP dP e2 f dQ     YZQ d S(V   s]   
Main module.

Implement the central Checker class.
Also, it models the Bindings and Scopes.
iN(   t   messagesi   i    i   i   i   t   __builtin__t   builtinsc         C   s   t  t |  j  j    S(   N(   t   strt   unicodet   __name__t   upper(   t
   node_class(    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   getNodeType&   s    c         C   s   |  j  S(   N(   t   type(   t   node(    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   get_raise_argument*   s    c         C   s   |  j  j   S(   N(   R   R   (   R   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR   .   s    c         C   s   |  j  S(   N(   t   exc(   R
   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR   1   s    c         C   si   t  |  t j t j f  r% |  j g St  |  t j  re |  j |  j g g  |  j D] } | g ^ qQ Sd  S(   N(   t
   isinstancet   astt   Ift
   TryFinallyt   bodyt	   TryExceptt   orelset   handlers(   t   nt   hdl(    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   getAlternatives9   s    
c         C   s`   t  |  t j  r |  j g St  |  t j  r\ |  j |  j g g  |  j D] } | g ^ qH Sd  S(   N(   R   R   R   R   t   TryR   R   (   R   R   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR   ?   s    
s   ^#\s*type:\s*s   ignore\s*(#|$)s   ^(\(.*?\))\s*->\s*(.*)$t   _FieldsOrderc           B   s    e  Z d  Z d   Z d   Z RS(   s   Fix order of AST node fields.c         C   s^   | j  } d | k r! d j } n! d | k r9 d j } n	 d j } t t | d | d t  S(   Nt   itert
   generatorst   valuet   keyt   reverse(   t   _fieldst   findt   tuplet   sortedt   True(   t   selfR   t   fieldst	   key_first(    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   _get_fieldsW   s    		c         C   s   |  j  |  |  | <} | S(   N(   R'   (   R$   R   R%   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   __missing__b   s    (   R   t
   __module__t   __doc__R'   R(   (    (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR   T   s   	c         C   s5   i  } x( |  D]  } | j  | d  d | | <q W| S(   s|   
    Simplest required implementation of collections.Counter. Required as 2.6
    does not have Counter in collections.
    i    i   (   t   get(   t   itemst   resultst   item(    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   counterg   s    c         c   s   x | |  j  D]r } | r, | | k r, q n  t |  | d  } t | t j  rX | Vq t | t  r x | D] } | Vqn Wq q Wd S(   s  
    Yield all direct child nodes of *node*, that is, all fields that
    are nodes and all items of fields that are lists of nodes.

    :param node:          AST node to be iterated upon
    :param omit:          String or tuple of strings denoting the
                          attributes of the node to be omitted from
                          further parsing
    :param _fields_order: Order of AST node fields
    N(   t	   __class__t   getattrt   NoneR   R   t   ASTt   list(   R
   t   omitt   _fields_ordert   namet   fieldR.   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   iter_child_nodesr   s    c         C   s   t  |  t j  r |  j St t d  rA t  |  t j  rA |  j St  |  t j  rj t d   |  j D  St  |  t j	  r |  j
 St  |  t j  r t d |   } i t d 6t d 6d  d 6} | j | j |  St r t  |  t j  r |  j St   Sd  S(   Nt   Bytesc         s   s   |  ] } t  |  Vq d  S(   N(   t   convert_to_value(   t   .0t   i(    (    s/   lib/python2.7/site-packages/pyflakes/checker.pys	   <genexpr>   s    R.   R#   t   FalseR2   (   R   R   t   Strt   st   hasattrR:   t   TupleR!   t   eltst   NumR   t   Namet   VariableKeyR#   R>   R2   R+   R7   t   PY2t   NameConstantR   t   UnhandledKeyType(   R.   t   resultt   constants_lookup(    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR;      s(    !
c         C   s"   t  |  t j  o! t |   d k S(   Nt   NotImplemented(   R   R   RE   t   getNodeName(   R
   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   is_notimplemented_name_node   s    t   Bindingc           B   s2   e  Z d  Z d   Z d   Z d   Z d   Z RS(   sr  
    Represents the binding of a value to a name.

    The checker uses this to keep track of which names have been bound and
    which names have not. See L{Assignment} for a special type of binding that
    is checked with stricter rules.

    @ivar used: pair of (L{Scope}, node) indicating the scope and
                the node that this binding was last used.
    c         C   s   | |  _  | |  _ t |  _ d  S(   N(   R7   t   sourceR>   t   used(   R$   R7   RP   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   __init__   s    		c         C   s   |  j  S(   N(   R7   (   R$   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   __str__   s    c         C   s)   d |  j  j |  j |  j j t |   f S(   Ns#   <%s object %r from line %r at 0x%x>(   R0   R   R7   RP   t   linenot   id(   R$   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   __repr__   s    	c         C   s   t  | t  o |  j | j k S(   N(   R   t
   DefinitionR7   (   R$   t   other(    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt	   redefines   s    (   R   R)   R*   RR   RS   RV   RY   (    (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRO      s
   
			RW   c           B   s   e  Z d  Z RS(   s7   
    A binding that defines a function or a class.
    (   R   R)   R*   (    (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRW      s   t   Builtinc           B   s    e  Z d  Z d   Z d   Z RS(   s-   A definition created for all Python builtins.c         C   s   t  t |   j | d   d  S(   N(   t   superRZ   RR   R2   (   R$   R7   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRR      s    c         C   s    d |  j  j |  j t |   f S(   Ns   <%s object %r at 0x%x>(   R0   R   R7   RU   (   R$   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRV      s    (   R   R)   R*   RR   RV   (    (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRZ      s   	RI   c           B   s   e  Z d  Z RS(   sS   
    A dictionary key of a type that we cannot or do not check for duplicates.
    (   R   R)   R*   (    (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRI      s   RF   c           B   s)   e  Z d  Z d   Z d   Z d   Z RS(   sY   
    A dictionary key which is a variable.

    @ivar item: The variable AST object.
    c         C   s   | j  |  _ d  S(   N(   RU   R7   (   R$   R.   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRR      s    c         C   s"   | j  |  j  k o! | j |  j k S(   N(   R0   R7   (   R$   t   compare(    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   __eq__   s    c         C   s   t  |  j  S(   N(   t   hashR7   (   R$   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   __hash__   s    (   R   R)   R*   RR   R]   R_   (    (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRF      s   		t   Importationc           B   sD   e  Z d  Z d d  Z d   Z d   Z e d    Z d   Z	 RS(   s   
    A binding created by an import statement.

    @ivar fullName: The complete name given to the import statement,
        possibly including multiple dotted components.
    @type fullName: C{str}
    c         C   s5   | p	 | |  _  g  |  _ t t |   j | |  d  S(   N(   t   fullNamet	   redefinedR[   R`   RR   (   R$   R7   RP   t	   full_name(    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRR      s    	c         C   s>   t  | t  r |  j | j k St  | t  o= |  j | j k S(   N(   R   t   SubmoduleImportationRa   RW   R7   (   R$   RX   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRY      s    c         C   s   |  j  j d  d |  j k S(   s.   Return whether importation needs an as clause.t   .i(   Ra   t   splitR7   (   R$   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt
   _has_alias  s    c         C   s/   |  j    r  d |  j |  j f Sd |  j Sd S(   s5   Generate a source statement equivalent to the import.s   import %s as %ss	   import %sN(   Rg   Ra   R7   (   R$   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   source_statement  s    c         C   s)   |  j    r |  j d |  j S|  j Sd S(   s#   Return import full name with alias.s    as N(   Rg   Ra   R7   (   R$   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRS     s    N(
   R   R)   R*   R2   RR   RY   Rg   t   propertyRh   RS   (    (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR`      s   		Rd   c           B   s8   e  Z d  Z d   Z d   Z d   Z e d    Z RS(   s  
    A binding created by a submodule import statement.

    A submodule import is a special case where the root module is implicitly
    imported, without an 'as' clause, and the submodule is also imported.
    Python does not restrict which attributes of the root module may be used.

    This class is only used when the submodule import is without an 'as' clause.

    pyflakes handles this case by registering the root module name in the scope,
    allowing any attribute of the root module to be accessed.

    RedefinedWhileUnused is suppressed in `redefines` unless the submodule
    name is also the same, to avoid false positives.
    c         C   sd   d | k r% | s+ t  | t j  s+ t  | j d  d } t t |   j | |  | |  _ d  S(   NRe   i    (	   R   R   t   Importt   AssertionErrorRf   R[   Rd   RR   Ra   (   R$   R7   RP   t   package_name(    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRR   )  s    +c         C   s5   t  | t  r |  j | j k St t |   j |  S(   N(   R   R`   Ra   R[   Rd   RY   (   R$   RX   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRY   0  s    c         C   s   |  j  S(   N(   Ra   (   R$   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRS   5  s    c         C   s   d |  j  S(   Ns   import (   Ra   (   R$   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRh   8  s    (   R   R)   R*   RR   RY   RS   Ri   Rh   (    (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRd     s
   			t   ImportationFromc           B   s,   e  Z d d   Z d   Z e d    Z RS(   c         C   sh   | |  _  | p | |  _ | j d  r7 | |  j } n | d |  j } t t |   j | | |  d  S(   NRe   (   t   modulet	   real_namet   endswithR[   Rm   RR   (   R$   R7   RP   Rn   Ro   Rc   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRR   ?  s    	c         C   s/   |  j  |  j k r$ |  j d |  j S|  j Sd S(   s#   Return import full name with alias.s    as N(   Ro   R7   Ra   (   R$   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRS   J  s    c         C   sD   |  j  |  j k r, d |  j |  j  |  j f Sd |  j |  j f Sd  S(   Ns   from %s import %s as %ss   from %s import %s(   Ro   R7   Rn   (   R$   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRh   Q  s
    	N(   R   R)   R2   RR   RS   Ri   Rh   (    (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRm   =  s   	t   StarImportationc           B   s/   e  Z d  Z d   Z e d    Z d   Z RS(   s3   A binding created by a 'from x import *' statement.c         C   s3   t  t |   j d |  | d |  _ | |  _ d  S(   Nt   *s   .*(   R[   Rq   RR   R7   Ra   (   R$   R7   RP   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRR   ^  s    c         C   s   d |  j  d S(   Ns   from s	    import *(   Ra   (   R$   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRh   e  s    c         C   s$   |  j  j d  r |  j S|  j Sd  S(   NRe   (   Ra   Rp   Rh   R7   (   R$   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRS   i  s    (   R   R)   R*   RR   Ri   Rh   RS   (    (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRq   [  s   	t   FutureImportationc           B   s   e  Z d  Z d   Z RS(   ss   
    A binding created by a from `__future__` import statement.

    `__future__` imports are implicitly used.
    c         C   s/   t  t |   j | | d  | | f |  _ d  S(   Nt
   __future__(   R[   Rs   RR   RQ   (   R$   R7   RP   t   scope(    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRR   x  s    (   R   R)   R*   RR   (    (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRs   q  s   t   Argumentc           B   s   e  Z d  Z RS(   s3   
    Represents binding a name as an argument.
    (   R   R)   R*   (    (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRv   }  s   t
   Assignmentc           B   s   e  Z d  Z RS(   s  
    Represents binding a name with an explicit assignment.

    The checker will raise warnings for any Assignment that isn't used. Also,
    the checker does not consider assignments in tuple/list unpacking to be
    Assignments, rather it treats them as simple Bindings.
    (   R   R)   R*   (    (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRw     s   t   FunctionDefinitionc           B   s   e  Z RS(    (   R   R)   (    (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRx     s   t   ClassDefinitionc           B   s   e  Z RS(    (   R   R)   (    (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRy     s   t   ExportBindingc           B   s   e  Z d  Z d   Z RS(   s  
    A binding created by an C{__all__} assignment.  If the names in the list
    can be determined statically, they will be treated as names for export and
    additional checking applied to them.

    The only recognized C{__all__} assignment via list concatenation is in the
    following format:

        __all__ = ['a'] + ['b'] + ['c']

    Names which are imported and not otherwise used but appear in the value of
    C{__all__} will not have an unused import warning reported for them.
    c            s/  d | k r7 t  | t j  r7 t | d j    _ n	 g    _   f d   } t  | j t j t j f  r} | | j  n t  | j t j  r| j } xt t  | j	 t j  r| j
 } | j	 } | |  t  | t j  r | } q t  | t j  r
| |  Pq Pq Wn  t t    j | |  d  S(   Nt   __all__c            s@   x9 |  j  D]. } t | t j  r
   j j | j  q
 q
 Wd  S(   N(   RC   R   R   R?   t   namest   appendR@   (   t	   containerR
   (   R$   (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   _add_to_names  s    (   R   R   t	   AugAssignR4   R|   R   t   ListRB   t   BinOpt   rightt   leftR[   Rz   RR   (   R$   R7   RP   Ru   R   t   currentValueR   R   (    (   R$   s/   lib/python2.7/site-packages/pyflakes/checker.pyRR     s&    				
	
(   R   R)   R*   RR   (    (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRz     s   t   Scopec           B   s   e  Z e Z d    Z RS(   c         C   s,   |  j  j } d | t |   t j |   f S(   Ns   <%s at 0x%x %s>(   R0   R   RU   t   dictRV   (   R$   t	   scope_cls(    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRV     s    (   R   R)   R>   t   importStarredRV   (    (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR     s   t
   ClassScopec           B   s   e  Z RS(    (   R   R)   (    (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR     s   t   FunctionScopec           B   s5   e  Z d  Z e Z d d d h Z d   Z d   Z RS(   sp   
    I represent a name scope for a function.

    @ivar globals: Names declared 'global' in this function.
    t   __tracebackhide__t   __traceback_info__t   __traceback_supplement__c         C   s;   t  t |   j   |  j j   |  _ d  |  _ t |  _	 d  S(   N(
   R[   R   RR   t
   alwaysUsedt   copyt   globalsR2   t   returnValueR>   t   isGenerator(   R$   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRR     s    	c         c   sm   xf |  j    D]X \ } } | j r | d k r | |  j k r |  j r t | t  r | | f Vq q Wd S(   sR   
        Return a generator for the assignments which have not been used.
        t   _N(   R,   RQ   R   t
   usesLocalsR   Rw   (   R$   R7   t   binding(    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   unusedAssignments  s    

(   R   R)   R*   R>   R   R   RR   R   (    (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR     s   		t   GeneratorScopec           B   s   e  Z RS(    (   R   R)   (    (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR     s   t   ModuleScopec           B   s   e  Z d  Z e Z e Z RS(   s   Scope for a module.(   R   R)   R*   R#   t   _futures_allowedR>   t   _annotations_future_enabled(    (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR     s   t   DoctestScopec           B   s   e  Z d  Z RS(   s   Scope for a doctest.(   R   R)   R*   (    (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR     s   t	   DummyNodec           B   s   e  Z d  Z d   Z RS(   s<   Used in place of an `ast.AST` to set error message positionsc         C   s   | |  _  | |  _ d  S(   N(   RT   t
   col_offset(   R$   RT   R   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRR      s    	(   R   R)   R*   RR   (    (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR     s   t   __file__t   __builtins__t   WindowsErrort   __annotations__c         C   s0   t  |  d  r |  j St  |  d  r, |  j Sd  S(   NRU   R7   (   RA   RU   R7   (   R
   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRM     s    c            sP     f d   } t  |  j t j  oO t |  j j  d k oO | |  j j d  S(   Nc            s   t  |  t j  rM |  j   k rM t    |  j t  rM   |  j j d k p t  |  t j  o t  |  j t j  o |  j j d k o |  j d k S(   Ns   typing.overloadt   typingt   overload(	   R   R   RE   RU   Rm   Ra   t	   AttributeR   t   attr(   R
   (   Ru   (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   is_typing_overload_decorator  s    i   i    (   R   RP   R   t   FunctionDeft   lent   decorator_list(   R   Ru   R   (    (   Ru   s/   lib/python2.7/site-packages/pyflakes/checker.pyt   is_typing_overload  s    c            sO   t  |  t  s! |  j d  }  n  t |  j t     t t   f d     S(   Ns   UTF-8c              s   t    d  S(   Nt    (   t   next(    (   t   lines(    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   <lambda>2  s    (   R   t   bytest   encodeR   t
   splitlinesR#   R!   t   tokenize_tokenize(   t   code(    (   R   s/   lib/python2.7/site-packages/pyflakes/checker.pyt   make_tokens,  s    t   _TypeableVisitorc           B   s@   e  Z d  Z d   Z d   Z e Z Z Z Z e Z	 Z
 Z RS(   s   Collect the line number and nodes which are deemed typeable by
    PEP 484

    https://www.python.org/dev/peps/pep-0484/#type-comments
    c         C   s   g  |  _  i  |  _ d  S(   N(   t   typeable_linest   typeable_nodes(   R$   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRR   ;  s    	c         C   s4   |  j  j | j  | |  j | j <|  j |  d  S(   N(   R   R}   RT   R   t   generic_visit(   R$   R
   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt	   _typeable?  s    (   R   R)   R*   RR   R   t   visit_Assignt	   visit_Fort   visit_FunctionDeft
   visit_Witht   visit_AsyncFort   visit_AsyncFunctionDeft   visit_AsyncWith(    (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR   5  s
   		c         C   s   t    } | j |   t j t  } x | D] \ } } } } } | t j k s, t j |  s, t	 j |  ru q, n  | \ } } t
 j | j |  }	 |	 d k r q, n  | j | j |	 d }
 | |
 j | | f  q, W| S(   Ni    i   (   R   t   visitt   collectionst   defaultdictR4   t   tokenizet   COMMENTt   TYPE_COMMENT_REt   matcht   TYPE_IGNORE_REt   bisectt   bisect_rightR   R   R}   (   t   treet   tokenst   visitort   type_commentst   tpt   textt   startR   RT   t   idxR
   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   _collect_type_commentsJ  s    	t   Checkerc           B   s  e  Z d  Z i e e j 6e e j 6e e j	 6e e j
 6e e j 6e e j 6e e j 6e e j 6Z e r{ e f e e j <n  d Z d? Z e Z e e  j e  Z e j j d  Z  e  r e j! e  j" d   n  [  d d? d e j k d@ d  Z# d   Z$ d   Z% d	   Z& d
   Z' e( d    Z) e) j* d    Z) e( d    Z+ e+ j* d    Z+ e( d    Z, d   Z- d   Z. e d  Z/ d   Z0 d   Z1 d   Z2 d   Z3 d   Z4 d   Z5 d   Z6 d   Z7 d   Z8 d   Z9 d   Z: d   Z; d   Z< d? d   Z= d!   Z> d"   Z? d#   Z@ d$   ZA eB jC   jD ZE d%   ZF d&   ZG d'   ZH d(   ZI e= ZJ ZK ZL ZM ZN ZO ZP ZQ ZR ZS ZT ZU ZV ZW eI ZX e= ZY ZZ Z[ Z\ Z] Z^ Z_ Z` Za Zb Zc eI Zd Ze Zf Zg Zh e= Zi Zj Zk eI Zl Zm Zn Zo Zp Zq eI Zr Zs Zt Zu Zv Zw Zx Zy Zz Z{ Z| Z} Z~ Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z d)   Z e= Z Z Z Z d*   Z d+   Z d,   Z e Z d-   Z e re= n e Z e Z Z d.   Z d/   Z e Z d0   Z d1   Z e Z Z d2   Z e Z d3   Z d4   Z d5   Z d6   Z d7   Z d8   Z e Z d9   Z d:   Z d;   Z e Z d<   Z d=   Z d>   Z RS(A   s  
    I check the cleanliness and sanity of Python code.

    @ivar _deferredFunctions: Tracking list used by L{deferFunction}.  Elements
        of the list are two-tuples.  The first element is the callable passed
        to L{deferFunction}.  The second element is a copy of the scope stack
        at the time L{deferFunction} was called.

    @ivar _deferredAssignments: Similar to C{_deferredFunctions}, but for
        callables which are deferred assignment checks.
    i    t   PYFLAKES_BUILTINSt   ,s   (none)t   PYFLAKES_DOCTESTc         C   sS  i  |  _  g  |  _ g  |  _ g  |  _ g  |  _ | |  _ | rT |  j j |  |  _ n  | |  _ y  t	 j
 t |    g |  _ Wn! t k
 r t d |   n Xd g |  _ | |  _ t | |  |  _ x' |  j D] } |  j d  t |   q W|  j |  |  j |  j  d  |  _ |  j |  j  d  |  _ |  j d 3|  j   |  j   d  S(   Ns$   No scope implemented for the node %ri   (    (   t   _nodeHandlerst   _deferredFunctionst   _deferredAssignmentst
   deadScopesR    t   filenamet   builtInst   uniont   withDoctestR   t   _ast_node_scopeR	   t
   scopeStackt   KeyErrort   RuntimeErrort   exceptHandlerst   rootR   t   _type_commentst
   addBindingR2   RZ   t   handleChildrent   runDeferredt   popScopet   checkDeadScopes(   R$   R   R   R   R   t   file_tokenst   builtin(    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRR     s4    							 			

c         C   s$   |  j  j | |  j |  j f  d S(   s{  
        Schedule a function handler to be called just before completion.

        This is used for handling function bodies, which must be deferred
        because code later in the file might modify the global scope. When
        `callable` is called, the scope at the time this is called will be
        restored, however it will contain any new bindings added to it.
        N(   R   R}   R   t   offset(   R$   t   callable(    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   deferFunction  s    	c         C   s$   |  j  j | |  j |  j f  d S(   sl   
        Schedule an assignment handler to be called just after deferred
        function handlers.
        N(   R   R}   R   R   (   R$   R   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   deferAssignment  s    c         C   s7   x0 | D]( \ } } } | |  _  | |  _ |   q Wd S(   sV   
        Run the callables in C{deferred} using their associated scope stack.
        N(   R   R   (   R$   t   deferredt   handlerRu   R   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR     s    		c         C   s)   t  |  j  d k o( t |  j d t  S(   Ni   i   (   R   R   R   R   (   R$   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   _in_doctest  s    c         C   s'   t  d   |  j D  s t S|  j j S(   Nc         s   s   |  ] } t  | t  Vq d  S(   N(   R   R   (   R<   Ru   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pys	   <genexpr>  s   (   t   allR   R>   Ru   R   (   R$   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   futuresAllowed  s    	c         C   s7   | t  k s t  t |  j t  r3 t  |  j _ n  d  S(   N(   R>   Rk   R   Ru   R   R   (   R$   R   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR     s    c         C   s'   |  j  d } t | t  s  t S| j S(   Ni    (   R   R   R   R>   R   (   R$   Ru   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   annotationsFutureEnabled  s    c         C   s:   | t  k s t  t |  j t  s* t  t  |  j _ d  S(   N(   R#   Rk   R   Ru   R   R   (   R$   R   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR     s    c         C   s   |  j  d S(   Ni(   R   (   R$   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRu     s    c         C   s   |  j  j |  j j    d  S(   N(   R   R}   R   t   pop(   R$   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR     s    c         C   s]  xV|  j  D]K} t | t  r% q
 n  | j d  } | rS t | t  rS d } n  | rz t | j  } | j |  } n
 g  } } | r}| j	 r t
 j j |  j  d k r x. | D]# } |  j t j | d j |  q Wn  | j	 r}g  } x? | j   D]1 } t | t  r | | _ | j | j  q q Wd j t |   } x1 | D]& } |  j t j | d j | |  qMWq}n  x | j   D] } t | t  r| j p| j | k }	 |	 st j }
 |  j |
 | j t |   n  xi | j D][ } t |  j |  t   rt j! }
 n |	 r%qn	 t j" }
 |  j |
 | | j | j  qWqqWq
 Wd S(   s   
        Look at scopes which have been fully examined and report names in them
        which were imported but unused.
        R{   s   __init__.pys   , N(#   R   R   R   R+   Rz   R2   t   setR|   t
   differenceR   t   ost   patht   basenameR   t   reportR    t   UndefinedExportRP   t   valuesRq   RQ   R}   Ra   t   joinR"   t   ImportStarUsageR`   R7   t   UnusedImportR   Rb   t	   getParentt	   FOR_TYPESt   ImportShadowedByLoopVart   RedefinedWhileUnused(   R$   Ru   t   all_bindingt	   all_namest	   undefinedR7   t	   from_listR   R   RQ   t   messgR
   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR     sN    	

				c         C   s   |  j  j |    d  S(   N(   R   R}   (   R$   t
   scopeClass(    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt	   pushScope'  s    c         O   s#   |  j  j | |  j | |   d  S(   N(   R    R}   R   (   R$   t   messageClasst   argst   kwargs(    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR   *  s    c         C   s>   x7 t  r9 | j } t | d  r t | d  r | Sq Wd  S(   NRC   t   ctx(   R#   t   parentRA   (   R$   R
   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR  -  s    		 c         C   s   | | | f k s1 t  | d  o- t  | d  r5 d  S| | k rE | S| j | j k rm |  j | j | |  S| j | j k  r |  j | | j |  S|  j | j | j |  S(   NR  (   RA   R2   t   deptht   getCommonAncestorR  (   R$   t   lnodet   rnodet   stop(    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR  4  s    !c         C   s.   x' | D] } |  j  | | |  r t Sq Wt S(   N(   R  R#   R>   (   R$   R
   t	   ancestorsR  t   a(    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   descendantOfA  s    c         C   sL   | } x? t  rG | |  j k r" d  S|  j |  } t | |  r	 | Sq	 Wd  S(   N(   R#   R   R2   R  R   (   R$   R
   t   ancestor_typeR  (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   _getAncestorG  s    	c         C   s   |  j  | t t j j     S(   N(   R  R!   R   R   t   keys(   R$   R
   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   getScopeNodeP  s    c         C   sn   |  j  | | |  j  } t |  } | rj x= | D]2 } |  j | | |  |  j | | |  Ar1 t Sq1 Wn  t S(   sA   True, if lnode and rnode are located on different forks of IF/TRY(   R  R   R   R  R#   R>   (   R$   R  R  t   ancestort   partsR,   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   differentForksS  s    c         C   s  x1 |  j  d d d  D] } | j | k r Pq q W| j | j  } | rt | t  r|  j | | j  r|  j | j  } t | t  r t | t	  r |  j
 t j | | j | j  q| |  j k rt | t j  r,t |  j | j  t	 t j f  r,|  j
 t j | | j | j  q| j r| j |  r| j d k sct | t  rt | |  j  s|  j
 t j | | j | j  qqqqt | t  r| j |  r| j j |  qn  | j |  j k r|  j | j j | _ n  | |  j | j <d S(   s   
        Called when a binding is altered.

        - `node` is the statement responsible for the change
        - `value` is the new value, a Binding instance
        NiR   (   R   R7   R+   R   RZ   R#  RP   R  R`   R  R   R    R  Ru   R   t   comprehensiont   RedefinedInListCompRQ   RY   R   R  Rb   R}   (   R$   R
   R   Ru   t   existingt   parent_stmt(    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR   ^  s4    c         C   sM   y |  j  | SWn t k
 r. t |  } n Xt |  |  |  j  | <} | S(   N(   R   R   R   R1   (   R$   R   t   nodeTypeR   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   getNodeHandler  s    c   
      C   s  t  |  } | s d  Sd  } d  } x|  j d d  d  D]o} t | t  rz t re | d k re d  S| t k rz q9 qz n  | d k r t | j | d   t  r |  j	 |  } t | t
 j  r t | j t
 j  r |  j t j |  q n  ys |  j | f | | _ | | } t | t  rb| j   rby |  j | f | | j _ Wqbt k
 r^qbXn  Wn t k
 rvn Xd  S| p| j } | t k	 r9 t | t  } q9 q9 W| rVg  } xi |  j d d  d  D]Q } xH | j   D]: }	 t |	 t  r|  j | f |	 _ | j |	 j  qqWqWd j t |   } |  j t j | | |  d  S| d k rt j  j! |  j"  d k rd  S| d k rt |  j t  rd  Sd |  j# d k r|  j t j$ | |  n  d  S(	   NiR0   t   prints   , t   __path__s   __init__.pyR)   t	   NameError(%   RM   R2   R   R   R   RG   R>   R+   RZ   R  R   R   t   opt   RShiftR   R    t   InvalidPrintSyntaxRu   RQ   R`   Rg   Ra   R   R   R   R  Rq   R}   R  R"   R  R   R   R   R   R   t   UndefinedName(
   R$   R
   R7   t   in_generatorsR   Ru   R  R   R  R   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   handleNodeLoad  s^    	
'c         C   s  t  |  } | s d  St |  j t  r | |  j k r x |  j d  D] } t | t t f  sf qE n  | | k o| | | j } | rE | d |  j k rE | |  j j k rE |  j t	 j
 | | j d | | | j  PqE qE Wn  |  j |  } t | t t j f  s&| | j k r8|  j |  r8t | |  } n | d k rqt |  j t  rqt | | j |  j  } nH t t | d d   t j  rt | |  j |   } n t | |  } |  j | |  d  S(   Nii    i   R{   R  (   RM   R   Ru   R   R   R   RQ   R   R   R    t   UndefinedLocalRP   R  R  R   R$  R  t   isLiteralTupleUnpackingRO   Rz   R1   R2   t   ParamRv   R   Rw   R   (   R$   R
   R7   Ru   RQ   R'  R   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   handleNodeStore  s.    !+c            s     f d   } t     } | s% d  S|   r2 d  St |  j t  rl | |  j j k rl |  j j j |  n8 y |  j | =Wn' t k
 r |  j t j	   |  n Xd  S(   Nc             sZ   t    d d  }  xA |  rU t |  t j t j t j f  r@ t St  |  d d  }  q Wt S(   sN   
            Return `True` if node is part of a conditional body.
            R  N(	   R1   R2   R   R   R   t   Whilet   IfExpR#   R>   (   t   current(   R
   (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   on_conditional_branch  s    	!(
   RM   R   Ru   R   R   t   removeR   R   R    R0  (   R$   R
   R:  R7   (    (   R
   s/   lib/python2.7/site-packages/pyflakes/checker.pyt   handleNodeDelete  s    	$c      
   C   s   x |  j  j | d  D] \ \ } } } | j d d  d j   } t j |  } | r | j d  j d d  | j d  j   f } n	 | f } x] | D]U } t r | j d d  } n  |  j	 t
 j |  j | t | |  | | t j   q Wq Wd  S(	   Nt   :i   Rr   R   i   s   ...t   Ellipsis(    (   R   R+   Rf   t   stript   TYPE_FUNC_RER   t   groupt   replaceRG   R   t	   functoolst   partialt   handleStringAnnotationR   R    t   CommentAnnotationSyntaxError(   R$   R
   RT   R   t   commentt
   func_matchR"  t   part(    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   _handle_type_comments  s    (	c         C   s>   |  j  |  x* t | d | D] } |  j | |  q  Wd  S(   NR5   (   RJ  R9   t
   handleNode(   R$   R   R5   R
   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR   .  s    c         C   sK   t  | t j  rG x. | j | j g D] } t | d  s& t Sq& Wt Sd  S(   NRC   (   R   R   t   Assignt   targetsR   RA   R>   R#   (   R$   R
   t   child(    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR4  3  s
    c         C   s7   t  | t j  p6 t  | t j  o6 t  | j t j  S(   s}   
        Determine if the given node is a docstring, as long as it is at the
        correct place in the node tree.
        (   R   R   R?   t   ExprR   (   R$   R
   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   isDocstring:  s    $c         C   sz   t  | t j  r | j } n  t  | t j  s4 d St s@ t rP | j d } n | j | j	 j
 d  d } | j	 | f S(   Ni   s   
(   NN(   R   R   RO  R   R?   R2   t   PYPYt	   PY38_PLUSRT   R@   t   count(   R$   R
   t   doctest_lineno(    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   getDocstringB  s    c         C   s:  | d  k r d  S|  j r` t | d d   d  k	 r` | j |  j d 7_ | j |  j d 7_ n  |  j r d |  j | j j GHn  |  j	 r t
 | t j  p |  j |  r t |  _	 n  |  j d 7_ |  j | _ | | _ z  |  j | j  } | |  Wd  |  j d 8_ X|  j r6d |  j d | j j GHn  d  S(   NRT   i    i   s     s   end (   R2   R   R1   RT   R   t	   traceTreet	   nodeDepthR0   R   R   R   R   t
   ImportFromRP  R>   R  R  R)  (   R$   R
   R  R   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRK  P  s&    !			c         C   s  y t  | d  rh | j } | j } t  | d  r t | g g  | j j D] } | j ^ qI  } q n |  j | j d  \ } } | o |  j |  } Wn t t	 f k
 r d  SX| s d  S|  j
 } |  j
 d g |  _
 |  j p d } |  j t  |  j d  t d   x | D] } y t j | j d  }	 Wn} t k
 rt j   d }
 t rk|
 j d 7_ n  | | j |
 j | j d |
 j pd f } |  j t j | |  qX| d | | j | d | j d f |  _ |  j |	  | |  _ qW|  j   | |  _
 d  S(	   Nt	   docstringR  i    R   s	   <doctest>i   i   (   i    i    (   RA   RY  RT   t   maxR  RU  R   t   _getDoctestExamplest
   ValueErrort
   IndexErrorR   R   R  R   R   R2   RZ   R   t   parseRP   t   SyntaxErrort   syst   exc_infoRQ  t   indentR   R    t   DoctestSyntaxErrorR   R   (   R$   R
   RY  t   node_linenot   argt   examplest   saved_stackt   node_offsett   exampleR   t   et   position(    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   handleDoctestsh  sD    			,	
c   
      C   s   y t  j |  } Wn% t k
 r: |  j | | |  d  SX| j } t |  d k sm t | d t  j  r |  j | | |  d  S| j d j } xJ t  j	 |  D]9 }	 d |	 j
 k r d |	 j
 k r | |	 _ | |	 _ q q W|  j | |  d  S(   Ni   i    RT   R   (   R   R^  R_  R   R   R   R   RO  R   t   walkt   _attributesRT   R   RK  (
   R$   R@   R
   t
   ref_linenot   ref_col_offsett   errR   R   t   parsed_annotationt
   descendant(    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyRE    s     	)	c            s   t    t j  rI  j t j  j   j    j   j	 t
 j   n8  j rq  j     f d    n  j     d  S(   Nc              s    j      S(   N(   RK  (    (   t
   annotationR
   R$   (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR     s    (   R   R   R?   R   RC  RD  RE  R@   RT   R   R    t   ForwardAnnotationSyntaxErrorR   RK  (   R$   Rt  R
   (    (   Rt  R
   R$   s/   lib/python2.7/site-packages/pyflakes/checker.pyt   handleAnnotation  s    	c         C   s   d  S(   N(    (   R$   R
   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   ignore  s    c         C   sy   |  j  |  t |  } t | t j  rS t | j  ru |  j t j	 |  qu n" t |  ru |  j t j	 |  n  d  S(   N(
   R   R   R   R   t   CallRN   t   funcR   R    t   RaiseNotImplemented(   R$   R
   Re  (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   RAISE  s    c            sL  g    j  D] } t |  ^ q
 } t |  } g  | j   D] \ } } | d k r; | ^ q; } x | D] } g  t |  D] \ } } | | k ry | ^ qy }	 t   f d   |	 D  }
 t d   |
 j   D  rf x_ |	 D]T }   j  | } t | t  r|  j t	 j
 | | j  q |  j t	 j | |  q Wqf qf W|  j    d  S(   Ni   c         3   s"   |  ] } t    j |  Vq d  S(   N(   R;   R  (   R<   t   index(   R
   (    s/   lib/python2.7/site-packages/pyflakes/checker.pys	   <genexpr>  s   c         s   s!   |  ] \ } } | d  k Vq d S(   i   N(    (   R<   R   RS  (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pys	   <genexpr>   s    (   R  R;   R/   R,   t	   enumeratet   anyR   RF   R   R    t   MultiValueRepeatedKeyVariableR7   t   MultiValueRepeatedKeyLiteralR   (   R$   R
   R   R  t
   key_countsRS  t   duplicate_keysR=   t   i_keyt   key_indicesR  t	   key_indext   key_node(    (   R
   s/   lib/python2.7/site-packages/pyflakes/checker.pyt   DICT  s*    "1c         C   sN   t  | j t j  r= | j j g  k r= |  j t j |  n  |  j |  d  S(   N(	   R   t   testR   RB   RC   R   R    t   AssertTupleR   (   R$   R
   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   ASSERT  s    'c         C   s   |  j    r d n d } |  j | } |  j | k	 r x | j D] } t | |  } g  |  j D]2 } t | t j  s | j d | k r] | ^ q] |  _ | j	 | |  | | f | _
 x# |  j | d D] } | | | <q Wq> Wn  d S(   s5   
        Keep track of globals declarations.
        i   i    N(   R   R   Ru   R|   Rw   R    R   R0  t   message_argst
   setdefaultRQ   (   R$   R
   t   global_scope_indext   global_scopet	   node_namet
   node_valuet   mRu   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   GLOBAL  s    "c         C   s(   |  j  t  |  j |  |  j   d  S(   N(   R  R   R   R   (   R$   R
   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   GENERATOREXP4  s    c         C   s   t  | j t j t j f  rs |  j |  | j d k r t  |  j t  r t  | j	 t j
  r t |  j _ q no t  | j t j t j t j f  r |  j |  n; t  | j t j  r |  j |  n t d | j f   d S(   sV   
        Handle occurrence of Name (which can be a load/store/delete access.)
        t   localss%   Got impossible expression context: %rN(   R   R  R   t   Loadt   AugLoadR2  RU   Ru   R   R  Rx  R#   R   t   Storet   AugStoreR5  R6  t   DelR<  R   (   R$   R
   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   NAME=  s    !$c         C   s   | } x t  | d  r | j | } } t | t  rM | | j k rM d  Sn  t | t j t j f  rl Pn  t  | d  r	 t | t j  r	 | | j	 k r |  j
 t j |  d  Sq	 q	 Wt | t j  r |  j
 t j |  n |  j
 t j |  d  S(   NR  t	   finalbody(   RA   R  R   t
   LOOP_TYPESR   R   R   t   ClassDeft   ContinueR  R   R    t   ContinueInFinallyt   ContinueOutsideLoopt   BreakOutsideLoop(   R$   R
   R   t   n_child(    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   CONTINUEP  s    !c         C   s   t  |  j t t f  r/ |  j t j |  d  S| j ri t |  j d  ri |  j j	 ri | j |  j _	 n  |  j
 | j |  d  S(   NR   (   R   Ru   R   R   R   R    t   ReturnOutsideFunctionR   RA   R   RK  (   R$   R
   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   RETURNi  s    	c         C   sR   t  |  j t t f  r/ |  j t j |  d  St |  j _ |  j	 | j
 |  d  S(   N(   R   Ru   R   R   R   R    t   YieldOutsideFunctionR#   R   RK  R   (   R$   R
   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   YIELDv  s
    c            s   x!   j  D] }  j |    q
 W j     j   t   j      j r  j   r t  j	 t
  r  j    f d    n  d  S(   Nc              s    j     S(   N(   Rl  (    (   R
   R$   (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR     s    (   R   RK  t   LAMBDAR   Rx   R7   R   R   R   Ru   R   R   (   R$   R
   t   deco(    (   R
   R$   s/   lib/python2.7/site-packages/pyflakes/checker.pyt   FUNCTIONDEF  s    	c            s  g   g  } t  rC    f d        j j   j j } nW x>  j j  j j D]& }  j | j  | j | j  qZ W j j  j j } t  d  } x d D] } t	  j |  } | s q n   j t  r | n | j  | r t  r"| d } | j t	  j |   q5| j | j  q q W| rR| j  j
  n  t t    t   k  rxF t   D]5 \ }	 } |  |	  k r} j t j  |  q}q}Wn  x | D] }
  j |
   qWx | D] }  j |   qW  f d   }  j |  d  S(   Nc            sG   x@ |  D]8 } t  | t j  r/   | j  q  j | j  q Wd  S(   N(   R   R   RB   RC   R}   RU   (   t   arglistRe  (   t   addArgsR  (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR    s    t   returnst   varargt   kwargRt  c             sl    j     j   d d  f d   }   j |   t r^  f d   }  j |  n   j   d  S(   NR5   R   c             s=   x6   j  j   D]% \ }  }   j t j | j |   q Wd S(   sU   
                Check to see if any assignments have not been used.
                N(   Ru   R   R   R    t   UnusedVariableRP   (   R7   R   (   R$   (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   checkUnusedAssignments  s    c              s8     j  j r4   j  j r4   j t j   j  j  n  d S(   s   
                    Check to see if there is any return statement with
                    arguments but the function is a generator.
                    N(   Ru   R   R   R   R    t   ReturnWithArgsInsideGenerator(    (   R$   (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt&   checkReturnWithArgumentInsideGenerator  s    (   R  R   R   RG   R   (   R  R  (   R
   R$   (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   runFunction  s    
(   R  R  (   RG   R  t   defaultst
   kwonlyargsR}   Re  Rt  t   kw_defaultsRA   R1   R  R   R   R}  R   R    t   DuplicateArgumentRv  RK  R   (   R$   R
   t   annotationsR  Re  t   is_py3_funct   arg_namet   wildcardt   argannotationR   Rt  t   defaultR  (    (   R  R  R
   R$   s/   lib/python2.7/site-packages/pyflakes/checker.pyR    sB    
 c         C   s   |  j  | d d t r{ |  j |  } | j rP |  j | t | j |   n  | j r{ |  j | t | j |   q{ n  d  S(   NR5   R  R  (   R  R  (   R   RG   R   R  R   Rv   R  (   R$   R
   t
   scope_node(    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt	   ARGUMENTS  s    		c         C   s)   |  j  | t | j |  j |    d  S(   N(   R   Rv   Re  R   (   R$   R
   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   ARG  s    c            s  x!   j  D] }  j |    q
 Wx!   j D] }  j |    q. Wt su x$   j D] }  j |    qX Wn   j t   j r  j   r t	  j
 t  r  j    f d    n  x!   j D] }  j |    q W j    j   t   j     d S(   s   
        Check names used in a class definition, including its decorators, base
        classes, and the body of its definition.  Additionally, add its name to
        the current scope.
        c              s    j     S(   N(   Rl  (    (   R
   R$   (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR     s    N(   R   RK  t   basesRG   t   keywordsR  R   R   R   R   Ru   R   R   R   R   R   Ry   R7   (   R$   R
   R  t   baseNodet   keywordNodet   stmt(    (   R
   R$   s/   lib/python2.7/site-packages/pyflakes/checker.pyt   CLASSDEF  s     	
c         C   s:   |  j  | j  |  j | j |  |  j | j |  d  S(   N(   R2  t   targetRK  R   (   R$   R
   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt	   AUGASSIGN  s    c         C   s   t  r t | j t j  r t } d } x[ t | j  D]J \ } } t | t j  r8 | rs |  j	 t
 j |  Pn  t } | } q8 q8 W| d k s t | j  | d d k r |  j	 t
 j |  q n  |  j |  d  S(   Nii   i   i   i   i   (   RG   R   R  R   R  R>   R}  RC   t   StarredR   R    t   TwoStarredExpressionsR#   R   t%   TooManyExpressionsInStarredAssignmentR   (   R$   R
   t   has_starredt   star_locR=   R   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   TUPLE  s    )c         C   s}   xv | j  D]k } d | j k r> | j r> t | j |  } n' | j pM | j } t | | | j  } |  j | |  q
 Wd  S(   NRe   (   R|   R7   t   asnameRd   R`   R   (   R$   R
   t   aliast   importationR7   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   IMPORT  s    c         C   s  | j  d k rM |  j sV |  j t j | g  | j D] } | j ^ q1  qV n	 t |  _ d | j | j  pl d } x4| j D])} | j	 p | j } | j  d k rt
 | | |  j  } | j t j k r |  j t j | | j  n  | j d k rt |  _ qn | j d k r{t rGt |  j t  rG|  j t j | |  qz n  t |  j _ |  j t j | |  t | |  } n t | | | | j  } |  j | |  qz Wd  S(   NRt   Re   R   R  Rr   (   Rn   R   R   R    t   LateFutureImportR|   R7   R>   t   levelR  Rs   Ru   Rt   t   all_feature_namest   FutureFeatureNotDefinedR#   R   RG   R   R   t   ImportStarNotPermittedR   t   ImportStarUsedRq   Rm   R   (   R$   R
   R   Rn   R  R7   R  (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt
   IMPORTFROM&  s4    	)	
	c         C   s   g  } x t  | j  D] \ } } t | j t j  rd xL | j j D] } | j t |   qD Wn" | j r | j t | j   n  | j d  k r | t
 | j  d k  r |  j t j |  q q W|  j j |  x! | j D] } |  j | |  q W|  j j   |  j | d d d  S(   Ni   R5   R   (   R}  R   R   R	   R   RB   RC   R}   RM   R2   R   R   R    t   DefaultExceptNotLastR   R   RK  R   R   (   R$   R
   t   handler_namesR=   R   t   exc_typeRN  (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   TRYH  s    	(c         C   s  t  s | j d  k r& |  j |  d  S| j |  j k rH |  j |  n  y |  j j | j  } Wn t k
 rz d  } n X|  j |  |  j |  y |  j j | j  } Wn t k
 r n& X| j s |  j	 t
 j | | j  n  | r | |  j | j <n  d  S(   N(   RG   R7   R2   R   Ru   R6  R   R   RQ   R   R    R  (   R$   R
   t   prev_definitionR   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   EXCEPTHANDLER^  s&    
	c         C   sU   | j  r |  j | j |  n  |  j | j |  | j  rQ |  j | j  |  n  d  S(   N(   R   RK  R  Rv  Rt  (   R$   R
   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt	   ANNASSIGN  s
    		c         C   s   t  j t  j f } t s+ | t  j f 7} n  | j } xx t | j | j  D]a \ } } t	 | t  j
 t  j f  r t	 | |  s t	 | |  r |  j t j |  n  | } qJ W|  j |  d  S(   N(   R   R?   RD   RG   R:   R   t   zipt   opst   comparatorsR   t   Ist   IsNotR   R    t	   IsLiteralR   (   R$   R
   t   literalsR   R-  R   (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   COMPARE  s    	"
N(    (   R   R)   R*   R   R   t   ModuleR   R  R   R   t   LambdaR   t   ListCompt   SetCompt   GeneratorExpt   DictCompR   t	   PY35_PLUSt   AsyncFunctionDefRW  R2   R   R>   RV  R   t   builtin_varsR   t   _MAGIC_GLOBALSR   R   t   environR+   t   _customBuiltInst   updateRf   RR   R   R   R   R   Ri   R   t   setterR   Ru   R   R   R  R   R  R  R  R  R   R#  R   R)  R2  R6  R<  RJ  R   R4  RP  RU  RK  t   doctestt   DocTestParsert   get_examplesR[  Rl  RE  Rv  Rw  t   DELETEt   PRINTt   FORt   ASYNCFORt   WHILEt   IFt   WITHt   WITHITEMt	   ASYNCWITHt   ASYNCWITHITEMt
   TRYFINALLYt   EXECt   EXPRt   ASSIGNt   PASSt   BOOLOPt   BINOPt   UNARYOPt   IFEXPt   SETt   CALLt   REPRt	   ATTRIBUTEt	   SUBSCRIPTt   STARREDt   NAMECONSTANTt   NUMt   STRt   BYTESt   ELLIPSISt   CONSTANTt   SLICEt   EXTSLICEt   INDEXt   LOADt   STOREt   DELt   AUGLOADt   AUGSTOREt   PARAMt   ANDt   ORt   ADDt   SUBt   MULTt   DIVt   MODt   POWt   LSHIFTt   RSHIFTt   BITORt   BITXORt   BITANDt   FLOORDIVt   INVERTt   NOTt   UADDt   USUBt   EQt   NOTEQt   LTt   LTEt   GTt   GTEt   ISt   ISNOTt   INt   NOTINt   MATMULTR{  t   COMPREHENSIONt   KEYWORDt   FORMATTEDVALUEt	   JOINEDSTRR  R  R  t   NONLOCALR  RG   t   LISTCOMPt   DICTCOMPt   SETCOMPR  R  t   BREAKR  R  t   AWAITt	   YIELDFROMR  t   ASYNCFUNCTIONDEFR  R  R  R  R  R  t   LISTR  R  R  t	   TRYEXCEPTR  R  R  (    (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyR   e  s   






 							9									*		J	!							/			:.v		$			
				
		L									"		-	(   i   i    (   i   i   (   i   i   (   i   i   (R   R*   Rt   R   R   R   R  RC  R   t   reR`  R   t   pyflakesR    t   version_infoRG   R  t	   PY36_PLUSRR  t   pypy_version_infoR#   RQ  t   AttributeErrorR>   t   dirt
   __import__R  t   generate_tokensR   R   R   R   R   R   t   Fort   AsyncForR  R7  R  t   compileR   t   patternR   R@  R   R   R/   R2   R9   R;   RN   t   objectRO   RW   RZ   RI   RF   R`   Rd   Rm   Rq   Rs   Rv   Rw   Rx   Ry   Rz   R   R   R   R   R   R   R   R  R}   RM   R   R   t   NodeVisitorR   R   R   (    (    (    s/   lib/python2.7/site-packages/pyflakes/checker.pyt   <module>   s   

								(%
1						