³ò
C3IHc           @   s©  d  d k  l Z d  d k  l Z d  d k l Z d  d k Td  d k l Z d  d k l	 Z	 l
 Z
 h  Z x+ d d d	 d
 d g D] Z d e d e <q| Wd e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d e f d „  ƒ  YZ d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d e f d „  ƒ  YZ d e f d  „  ƒ  YZ d! e f d" „  ƒ  YZ h  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 d0 <d d1 <d2 d3 <d d4 <d# d5 <d2 d6 <d# d7 <d d- <d# d& <d d8 <d# d9 <d: d; <d2 d< <d# d= <d# d> <d# d? <d# d@ <d# dA <d# dB <d# dC <d# dD <d# dE <d# dF <d# dG <d# dH <d# dI <d# dJ <d# dK <d# dL <d# dM <d# dN <d# dO <d# dP <d# dQ <d# dR <d# dS <d# dT <d# dU <d# dV <d# dW <d# dX <d# dY <d# dZ <d# d[ <d# d\ <d# d] <d# d^ <d# d_ <d d` <d da <d db <d dc <d dd <d de <d df <d dg <d dh <d di <d# dj <d~ dk <d dl <d dm <d dn <d# do <d dp <d dq <d# dr <d# ds <d~ dt <d2 du <d# dv <Z dw „  Z  dx e f dy „  ƒ  YZ! dz e f d{ „  ƒ  YZ" d| e f d} „  ƒ  YZ# d~ S(   iÿÿÿÿ(   t   Check(   t   Warning(   t   symbols(   t   *(   t   mangle(   t   astt   walkt   reprt   dictt   classt   doct   stri   s   __%s__t   GetDefsc           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   sA   Record definitions of a attribute of self, who's name is providedc         C   s   | |  _  h  |  _ d  S(   N(   t   selfnamet   result(   t   selft   name(    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyt   __init__   s    	c         C   sc   t  | i t i ƒ oI | i i |  i j o3 t  | i t i t i f ƒ o | |  i	 | i
 <n d  S(   N(   t
   isinstancet   exprR   t   NameR   R   t   parentt   Assignt   AssTupleR   t   attrname(   R   t   node(    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyt   visitAssAttr   s    c         C   s   d  S(   N(    (   R   R   (    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyt
   visitClass   s    (   t   __name__t
   __module__t   __doc__R   R   R   (    (    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyR      s   		t   GetRefsc           B   s2   e  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   s@   Record references to a attribute of self, who's name is providedc         C   s   | |  _  h  |  _ d  S(   N(   R   R   (   R   R   (    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyR      s    	c         C   sq   t  | i t i ƒ oJ | i i |  i j o4 t  | i t i t i f ƒ o | |  i	 | i
 <n |  i | ƒ d  S(   N(   R   R   R   R   R   R   R   R   R   R   R   t   visitChildren(   R   R   (    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyR   "   s
     c         C   sQ   t  | i t i ƒ o* | i i |  i j o | |  i | i <n |  i | ƒ d  S(   N(	   R   R   R   R   R   R   R   R   R    (   R   R   (    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyt   visitGetattr)   s    c         C   s   d  S(   N(    (   R   R   (    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyR   /   s    (   R   R   R   R   R   R!   R   (    (    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyR      s
   			c         C   s   t  |  i ƒ  t i ƒ S(   N(   t   type_filtert   get_childrenR   t   FunctionScope(   t   class_scope(    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyt   _get_methods3   s    t   NotSimpleNamec           B   s   e  Z RS(    (   R   R   (    (    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyR'   6   s    c         C   sY   t  |  t i ƒ o t |  i ƒ |  i f Sn( t  |  t i ƒ o |  i f Sn t ‚ d  S(   N(	   R   R   t   Getattrt   get_nameR   R   R   R   R'   (   R   (    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyR)   9   s
    c         C   sN   g  } xA |  i  i D]3 } y | i t | ƒ ƒ Wq t j
 o q Xq W| S(   N(   R   t   basest   appendR)   R'   (   t   scopet   namest   b(    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyt   get_base_namesA   s     	c      	   C   s  | p8 | i  |  ƒ } | o t | i | g | ƒ Sn d  Sn y( |  i } t | t ƒ  h  d g ƒ } Wn t j
 o |  } n X| o | d | 7} n t | | d d  ƒ } t	 | ƒ t	 t
 ƒ j o t | d  | d | ƒ Sn | i  | ƒ } | o t | i | | ƒ Sn d  S(   Nt    t   .i    i   (   t   check_modulet   find_scope_going_downt
   root_scopet   NoneR   t
   __import__t   globalst   AttributeErrort   getattrt   typeR   t   find_in_module(   t   packaget
   remotenameR-   t   checkert   fR   t   modulet	   submodule(    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyR;   J   s&    	c         C   sz   xd |  i  ƒ  D]V } t | d d ƒ | d j o3 t | ƒ d j o | Sn t | | d | ƒ Sq q Wt |  i | | ƒ S(   s-   Drill down scopes to find definition of x.y.zR   R0   i    i   (   R#   R9   t   lenR3   t   find_imported_classt   imports(   R,   R-   R>   t   c(    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyR3   g   s     c         C   s“   xŒ t  d t | ƒ d ƒ D]q } yO d i | |  ƒ } |  | } t | i | i | | | ƒ } | o | Sn Wq t t f j
 o q Xq Wd  S(   Ni   R1   (	   t   rangeRB   t   joinR;   R@   R=   t   KeyErrort   ImportErrorR5   (   RD   R-   R>   t   iR   t   refR   (    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyRC   q   s     
	c      
   C   s…   x? t  |  ƒ D]1 } | i i | d ƒ o t | | | ƒ Sq q Wy% t | i | d i d | | ƒ SWn t j
 o d Sn Xd S(   s+   Search up to find scope defining x of x.y.zi    N(	   t   parentst   defst   has_keyR3   R;   RD   R@   R5   RH   (   R,   R-   R>   t   p(    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyt   find_scope_going_up€   s     %c         C   sa   g  } xT t  |  ƒ D]F } t |  | | ƒ } | o' | i | ƒ | i t | | ƒ ƒ q q W| S(   N(   R/   RP   R+   t   extendt   get_base_classes(   R,   R>   R   R   t   base(    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyRR   ‹   s     c         C   s«   t  |  i i ƒ } t  | i i ƒ } | | j o> |  i i | i i j o! |  i i | i i j o d Sqo n |  i i o+ | d | j o |  i i | i i j Sn d  S(   Ni   (   RB   R   t   argnamest   kwargst   varargsR5   (   t   aR.   t   alent   blen(    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyt
   conformsTo”   s    2t   AttributeCheckc           B   sb   e  Z d  Z e d d ƒ Z e d d ƒ Z e d d ƒ Z e d d ƒ Z e d	 d
 ƒ Z d „  Z	 RS(   s&   check `self.attr' expressions for attrs+   Report unknown object attributes in methodss   Class %s has no attribute %ss#   Report attributes unused in methodss$   Attribute %s is not used in class %ss(   Report the redefinition of class methodss   Method %s in class %s redefineds?   Report methods whose signatures do not match base class methodss3   Signature does not match method %s in base class %ss-   Report attributes not initialized in __init__s+   Attribute %s is not initialized in __init__c         C   s.  d „  } x| i  ƒ  D]\ } } d  } h  } h  } xc t | ƒ D]U }	 | t |	 ƒ }
 |	 i d j o
 |
 } n | i |
 ƒ |	 | t |	 i | i ƒ <qA W| d  j	 o@ x= t | | ƒ i ƒ  D]" \ } } | i	 | |  i
 | ƒ q½ Wn | i i ƒ  } | i ƒ  } xÒ t | | ƒ D]Á } x¨ t | ƒ D]š }	 | i | t |	 ƒ ƒ t |	 i | i ƒ } |	 i d j oO | i | ƒ o? t | | |	 ƒ o* | i	 | | i |  i |	 i | i ƒ q%|	 | | <q%W| i | i ƒ qWt | | ƒ } x6 | i ƒ  D]( \ } } | i	 | |  i | | i ƒ qóWh  } x* t | ƒ D] }	 | i | t |	 ƒ ƒ q2Wt | | ƒ } t | t ƒ } t | | i ƒ } t | | ƒ } x6 | i ƒ  D]( \ } } | i	 | |  i | i | ƒ qžWt | | ƒ } xJ | i ƒ  D]< \ } } | i d ƒ o  | i	 | |  i | | i ƒ qæqæWq Wd  S(   Nc         S   s8   | i  i p h  Sn t | i  |  | i  i d ƒ ƒ i S(   Ni    (   R   RT   R   R   (   t   Visitort   method(    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyt   visit_with_self´   s    R   t   __(   t   class_scopesR5   R&   R   R   t   updateR   t
   dict_minust   itemst   warningt   attributeInitializedRM   t   copyRR   RN   RZ   R   t   signatureChangedt   dict_intersectt   methodRedefinedR   t
   _ignorablet   unknownAttributet
   startswitht   unusedAttribute(   R   t   fileR>   R^   R   R,   t   init_attributest
   attributest   methodst   mRM   R   t   inherited_methodst   inherited_attributesRS   t   mnamet   botht   refst   unknownt   unused(    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyt   check³   sh    	  
         (
   R   R   R   R   Rk   Rm   Ri   Rg   Re   Rz   (    (    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyR[   ¢   s   					t
   GetReturnsc           B   s)   e  Z d  „  Z d „  Z d „  Z e Z RS(   c         C   s   g  |  _  d  S(   N(   R   (   R   (    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyR   ö   s    c         C   s   |  i  i | ƒ d  S(   N(   R   R+   (   R   R   (    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyt   visitReturnù   s    c         C   s   d  S(   N(    (   R   R   (    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyt   visitFunctionü   s    (   R   R   R   R|   R}   R   (    (    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyR{   ô   s   			t	   InitCheckc           B   s    e  Z e d  d ƒ Z d „  Z RS(   s#   Report value returned from __init__s)   Method __init__ should not return a valuec         C   så   xÞ | i  ƒ  D]Ð \ } } xÁ t | ƒ D]³ } | i d j o xš t | i i t ƒ  ƒ i D]y } t | i	 t
 i ƒ o | i	 i	 d  j o qX n t | i	 t
 i ƒ o | i	 i d j o qX n | i | |  i ƒ qX Wq& q& Wq Wd  S(   NR   R5   (   R`   R&   R   R   R   t   codeR{   R   R   t   valueR   t   ConstR5   R   Rd   t   initReturnsValue(   R   Rn   t   unused_checkerR   R,   Rr   t   r(    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyRz     s       (   R   R   R   R‚   Rz   (    (    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyR~   ÿ   s   	i   t   __cmp__t   __del__t   __delitem__t   __eq__t   __ge__t   __getitem__t   __gt__t   __hash__t   __le__t   __len__t   __lt__t   __ne__t   __nonzero__t   __repr__i   t   __setitem__t   __str__t   __getattr__t   __setattr__t   __delattr__t   __iter__t   __contains__i   t   __setslice__t   __delslice__t   __add__t   __sub__t   __mul__t   __floordiv__t   __mod__t
   __divmod__t
   __lshift__t
   __rshift__t   __and__t   __xor__t   __or__t   __div__t   __truediv__t   __radd__t   __rsub__t   __rmul__t   __rdiv__t   __rmod__t   __rdivmod__t   __rpow__t   __rlshift__t   __rrshift__t   __rand__t   __rxor__t   __ror__t   __iadd__t   __isub__t   __imul__t   __idiv__t   __imod__t   __ilshift__t   __irshift__t   __iand__t   __ixor__t   __ior__t   __neg__t   __pos__t   __abs__t
   __invert__t   __complex__t   __int__t   __long__t	   __float__t   __oct__t   __hex__t
   __coerce__t   __new__t   __getinitargs__t
   __reduce__t   __getstate__t   __setstate__t   __copy__t   __deepcopy__t   __pow__t   __ipow__t   __call__t   __getslice__t   __getattribute__c         C   s–   y| t  |  i } t |  i i ƒ } | t |  i i ƒ } | | j p' | | j  p |  i i p |  i i o t  |  i Sn Wn t j
 o n Xd  S(   N(
   t   specialR   RB   R   RT   t   defaultsRV   RU   RH   R5   (   R,   t   countt   max_argst   min_args(    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyt   check_special2  s    t   SpecialCheckc           B   s/   e  Z e d  d ƒ Z e d d ƒ Z d „  Z RS(   s9   Report special methods with incorrect number of argumentss4   The %s method requires %d argument%s, including selfsS   Report methods with "__" prefix and suffix which are not defined as special methodss7   The method %s is not a special method, but is reserved.c      	   C   sé   xâ | i  ƒ  D]Ô \ } } xÅ t | ƒ D]· } t | ƒ } | o: | i | i |  i | i | | d j o d p d ƒ n | i } | i d ƒ oK | i d ƒ o; | d j o. t	 i
 | ƒ o | i | i |  i | ƒ q& q& Wq Wd  S(   Ni   t   sR0   R_   R   (   R`   R&   RÛ   Rd   R   t   specialMethodR   Rl   t   endswithRÖ   RN   t
   notSpecial(   R   Rn   Rƒ   R   R,   Rr   t   nR   (    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyRz   J  s      	 (   R   R   R   RÞ   Rà   Rz   (    (    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyRÜ   >  s
   		t	   BackQuotec           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   g  |  _  | |  _ d  S(   N(   t   resultsR   (   R   R   (    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyR   Y  s    	c         C   sD   t  | i t i ƒ o* | i i |  i j o |  i i | ƒ n d  S(   N(   R   R   R   R   R   R   Rã   R+   (   R   R   (    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyt   visitBackquote]  s    ,(   R   R   R   Rä   (    (    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyRâ   W  s   	t	   ReprCheckc           B   s    e  Z e d  d ƒ Z d „  Z RS(   s(   Report use of `self` in __repr__ methodss   Using `self` in __repr__c         C   s¥   xž | i  ƒ  D] \ } } x t | ƒ D]s } | i d j o] | i i oP t | i i d ƒ } x7 t | i i | ƒ i D] } | i	 | |  i
 ƒ qx Wq& q& Wq Wd  S(   NR’   i    (   R`   R&   R   R   RT   Râ   R   R   Rã   Rd   t   backquoteSelf(   R   Rn   Rƒ   R   R,   Rr   t   visitorRá   (    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyRz   e  s       (   R   R   R   Ræ   Rz   (    (    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pyRå   a  s   	N($   t   pychecker2.CheckR    R   t
   pychecker2R   t   pychecker2.utilt   compiler.miscR   t   compilerR   R   Rj   t   ignoret   BaseVisitorR   R   R&   t	   ExceptionR'   R)   R/   R;   R3   RC   RP   RR   RZ   R[   R{   R~   R5   RÖ   RÛ   RÜ   Râ   Rå   (    (    (    s,   C:\py\_spe\plugins\pychecker2\ClassChecks.pys   <module>   sp   
 						
					R$$$$$$$$$$$$$$$				
