ó
OçõZc           @   sS  d  d l  Z d  d l m Z d  d l m Z m Z m Z m Z m Z m	 Z	 d  d l
 m Z m Z m Z m Z d „  Z d d „ Z d d „ Z d e f d	 „  ƒ  YZ d
 e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   iÿÿÿÿN(   t   libutils(   t   changet	   pyobjectst
   exceptionst   pynamest   wordert   codeanalyze(   t   sourceutilst   importutilst   functionutilst   suitesc         C   s&   t  d |  j ƒ  ƒ } | | | | ƒ S(   s~   A factory for creating `Generate` objects

    `kind` can be 'variable', 'function', 'class', 'module' or
    'package'.

    t   Generate(   t   evalt   title(   t   kindt   projectt   resourcet   offsett   generate(    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyt   create_generate   s    c         C   sf   | d k r |  j } n  | j d ƒ } | } x! | d  D] } | j | ƒ } q8 W| j | d d ƒ S(   s9   Creates a module and returns a `rope.base.resources.File`t   .iÿÿÿÿs   .pyN(   t   Nonet   roott   splitt	   get_childt   create_file(   R   t   namet   sourcefoldert   packagest   parentt   package(    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyt   create_module   s    c         C   su   | d k r |  j } n  | j d ƒ } | } x! | d  D] } | j | ƒ } q8 W| j | d ƒ } | j d ƒ | S(   s<   Creates a package and returns a `rope.base.resources.Folder`R   iÿÿÿÿs   __init__.pyN(   R   R   R   R   t   create_folderR   (   R   R   R   R   R   R   t   made_packages(    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyt   create_package   s    t	   _Generatec           B   sJ   e  Z d d  „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   c         C   sS   | |  _  | |  _ | |  _ |  j | | | ƒ |  _ |  j j ƒ  |  _ |  j ƒ  d  S(   N(   R   R   t   goal_resourcet   _generate_infot   infot   get_nameR   t   _check_exceptional_conditions(   t   selfR   R   R   R$   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyt   __init__-   s    			c         C   s   t  | j | | |  j ƒ S(   N(   t   _GenerationInfot   pycoreR$   (   R)   R   R   R   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR%   5   s    c         C   sT   |  j  j ƒ  r( t j d |  j ƒ ‚ n  |  j  j ƒ  sP t j d |  j ƒ ‚ n  d  S(   Ns   Element <%s> already exists.s5   Cannot determine the scope <%s> should be defined in.(   R&   t   element_already_existsR   t   RefactoringErrorR   t   primary_is_found(   R)   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR(   8   s    c         C   s  t  j d |  j ƒ  |  j f ƒ } |  j j ƒ  } |  j j ƒ  } t j |  j	 ƒ  | ƒ } d | d | d | d } |  j j
 ƒ  } |  j j ƒ  \ } } t j | j ƒ  ƒ }	 |	 j | | | ƒ | j t  j | |	 j ƒ  ƒ ƒ |  j rt |  j |  j |  j |  j ƒ }
 | j |
 ƒ n  | S(   Ns   Generate %s <%s>s   
i    i   (   R   t	   ChangeSett   _get_element_kindR   R&   t   get_scope_indentst   get_blank_linesR   t   fix_indentationt   _get_elementt   get_insertion_resourcet   get_insertion_offsetsR   t   ChangeCollectort   readt
   add_changet   ChangeContentst   get_changedR$   t   _add_relative_import_to_moduleR   R   (   R)   t   changest   indentst   blankst   base_definitiont
   definitionR   t   startt   endt	   collectort   relative_import(    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyt   get_changesA   s"    			!c         C   s   |  j  j ƒ  |  j  j ƒ  f S(   N(   R&   R6   t   get_insertion_lineno(   R)   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyt   get_locationV   s    c         C   s   t  ƒ  ‚ d  S(   N(   t   NotImplementedError(   R)   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR1   Z   s    c         C   s   t  ƒ  ‚ d  S(   N(   RJ   (   R)   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR5   ]   s    N(
   t   __name__t
   __module__R   R*   R%   R(   RG   RI   R1   R5   (    (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR#   +   s   						t   GenerateFunctionc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s   t  | j | | ƒ S(   N(   t   _FunctionGenerationInfoR,   (   R)   R   R   R   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR%   c   s    c         C   sš   d } g  } |  j  j ƒ  r$ d } n  |  j  j ƒ  sQ |  j  j ƒ  sQ |  j  j ƒ  ra | j d ƒ n  | j |  j  j ƒ  ƒ d | |  j d j	 | ƒ f } | S(   Nt    s   @staticmethod
R)   s   %sdef %s(%s):
    pass
s   , (
   R&   t   is_static_methodt	   is_methodt   is_constructort   is_instancet   appendt   extendt   get_passed_argsR   t   join(   R)   t	   decoratort   argsRB   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR5   f   s    	c         C   s   d S(   Nt   Function(    (   R)   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR1   s   s    (   RK   RL   R%   R5   R1   (    (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyRM   a   s   		t   GenerateVariablec           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   d |  j  S(   Ns
   %s = None
(   R   (   R)   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR5   y   s    c         C   s   d S(   Nt   Variable(    (   R)   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR1   |   s    (   RK   RL   R5   R1   (    (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR[   w   s   	t   GenerateClassc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   d |  j  S(   Ns   class %s(object):
    pass
(   R   (   R)   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR5   ‚   s    c         C   s   d S(   Nt   Class(    (   R)   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR1   …   s    (   RK   RL   R5   R1   (    (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR]   €   s   	t   GenerateModulec           B   s   e  Z d  „  Z d „  Z RS(   c         C   s¥   |  j  j ƒ  } t j d |  j ƒ } |  j j d | j |  j f ƒ } | j ƒ  rl t	 j
 d | j ƒ ‚ n  | j t j | ƒ ƒ | j t |  j |  j | ƒ ƒ | S(   Ns   Generate Module <%s>s   %s/%s.pys   Module <%s> already exists(   R&   t   get_packageR   R0   R   R   t   get_filet   patht   existsR   R.   R:   t   CreateResourcet   _add_import_to_moduleR   (   R)   R   R>   t   new_resource(    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyRG   ‹   s    	c         C   s)   |  j  j ƒ  } | j d |  j ƒ d f S(   Ns   %s.pyi   (   R&   R`   R   R   (   R)   R   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyRI   ˜   s    (   RK   RL   RG   RI   (    (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR_   ‰   s   	t   GeneratePackagec           B   s   e  Z d  „  Z d „  Z RS(   c         C   sÞ   |  j  j ƒ  } t j d |  j ƒ } |  j j d | j |  j f ƒ } | j ƒ  rl t	 j
 d | j ƒ ‚ n  | j t j | ƒ ƒ | j t |  j |  j | ƒ ƒ |  j j | j d |  j ƒ } | j t j | d ƒ ƒ | S(   Ns   Generate Package <%s>s   %s/%ss   Package <%s> already existst   /s   __init__.py(   R&   R`   R   R0   R   R   t
   get_folderRb   Rc   R   R.   R:   Rd   Re   R   t
   CreateFile(   R)   R   R>   Rf   t   child(    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyRG   Ÿ   s    	 c         C   s4   |  j  j ƒ  } | j |  j ƒ } | j d ƒ d f S(   Ns   __init__.pyi   (   R&   R`   R   R   (   R)   R   Rk   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyRI   ®   s    (   RK   RL   RG   RI   (    (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyRg      s   	c         C   sw   |  j  | ƒ } t j |  ƒ } | j | ƒ } t j | ƒ } t j | d  f f ƒ } | j | ƒ t	 j
 | | j ƒ  ƒ S(   N(   t   get_pymoduleR   t   ImportToolst   module_importsR    t   modnamet   NormalImportR   t
   add_importR   R;   t   get_changed_source(   R   R   t   importedt   pymodulet   import_toolsRn   t   module_namet
   new_import(    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyRe   ´   s    c         C   sb   |  j  | ƒ } t j |  ƒ } | j | ƒ } | j | | ƒ } | j | ƒ t j | | j ƒ  ƒ S(   N(	   Rl   R   Rm   Rn   t   get_from_importRq   R   R;   Rr   (   R   R   Rs   R   Rt   Ru   Rn   Rw   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR=   ¾   s    R+   c           B   s‰   e  Z d d  „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z RS(   c         C   s}   | |  _  | |  _ | |  _ | |  _ |  j  j j | ƒ |  _ t j j	 j
 |  j ƒ } | j | ƒ \ |  _ |  _ |  j ƒ  d  S(   N(   R,   R   R   R$   R   Rl   t   source_pymodulet   ropet   baset   evaluatet   ScopeNameFindert   get_primary_and_pyname_att   primaryt   pynamet   _init_fields(   R)   R,   R   R   R$   t   finder(    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR*   É   s    				c         C   s7   |  j  ƒ  |  _ |  j ƒ  |  _ |  j |  j ƒ |  _ d  S(   N(   t   _get_source_scopet   source_scopet   _get_goal_scopet
   goal_scopet   _get_goal_modulet   goal_pymodule(   R)   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR   Ó   s    c         C   s˜   |  j  d  k rA |  j r4 |  j j j |  j ƒ j ƒ  S|  j ƒ  Sn  |  j  j ƒ  } t	 | t
 j ƒ rl | j ƒ  St	 | j ƒ  t
 j ƒ r” | j ƒ  j ƒ  Sd  S(   N(   R   R   R$   R,   R   Rl   t	   get_scopeRƒ   t
   get_objectt
   isinstanceR   t   PyDefinedObjectt   get_typet   PyClass(   R)   t   pyobject(    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR…   Ø   s    	
c         C   s6   | d  k r d  Sx | j d  k	 r. | j } q W| j S(   N(   R   R   R   (   R)   t   scope(    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR‡   ä   s
    c         C   s4   |  j  j ƒ  } |  j  j j |  j ƒ } | j | ƒ S(   N(   Ry   R‰   t   linest   get_line_numberR   t   get_inner_scope_for_line(   R)   t   module_scopet   lineno(    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyRƒ   ë   s    c         C   só   |  j  j } |  j |  j k rÏ |  j  j } | j |  j ƒ } | j | ƒ d } t j	 |  j j
 j ƒ  ƒ } | j | ƒ } t j | | ƒ } x= |  j ƒ  | k  rÊ | j ƒ  } t j | | ƒ } | j } qŽ W| St |  j j ƒ  d | j ƒ  ƒ Sd  S(   Ni    i   (   Rˆ   R‘   R†   R„   t   logical_linesR’   R   t   logical_line_inR
   t   ast_suite_treeR   t   get_astt
   find_suiteR   t   get_indentsR2   t	   get_startR   t   mint   get_endt   length(   R)   R‘   t   line_finderR•   R   t   suiteR?   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyRH   ð   s    c         C   s   |  j  j ƒ  S(   N(   Rˆ   t   get_resource(   R)   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR6     s    c         C   s‡   |  j  j ƒ  d k r\ t j |  j  j ƒ \ } } |  j j | | !j ƒ  d k r\ | | f Sn  |  j j } | j	 |  j
 ƒ  ƒ } | | f S(   NR^   t   pass(   R†   t   get_kindR   t   get_body_regionR   Rˆ   t   source_codet   stripR‘   t   get_line_startRH   (   R)   RC   RD   R‘   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR7     s    c         C   s<   |  j  j ƒ  d k r d St j |  j j |  j  j ƒ  ƒ d S(   Nt   Modulei    i   (   R†   R¤   R   R›   Rˆ   R‘   Rœ   (   R)   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR2     s    c         C   s¡   |  j  j ƒ  d k r? d } |  j j j ƒ  d k r? d } q? n  |  j  j ƒ  d k r] d } n  |  j  j ƒ  d k r{ d } n  |  j  |  j k r— d | f S| d f S(   NR©   i   RO   i    R^   i   RZ   (   R†   R¤   Rˆ   R¦   R§   R„   (   R)   t   base_blanks(    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR3     s    		
c         C   sg   |  j  } |  j  d  k r, |  j j j ƒ  d St | j ƒ  t j ƒ rT | j ƒ  j	 ƒ  St
 j d ƒ ‚ d  S(   Ni    s2   A module/package can be only created in a package.(   R   R   R,   R   t   get_source_foldersR‹   RŠ   R   t	   PyPackageR¢   R   R.   (   R)   R   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR`      s    	c         C   s   |  j  d  k	 S(   N(   R†   R   (   R)   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR/   )  s    c         C   sA   |  j  d  k s$ t |  j  t j ƒ r( t S|  j ƒ  |  j j ƒ  k S(   N(	   R€   R   R‹   R   t   UnboundNamet   FalseR'   R†   t   get_defined_names(   R)   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR-   ,  s    $c         C   s   t  j |  j |  j ƒ S(   N(   R   t   get_name_atR   R   (   R)   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR'   1  s    N(   RK   RL   R   R*   R   R…   R‡   Rƒ   RH   R6   R7   R2   R3   R`   R/   R-   R'   (    (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR+   Ç   s   
														RN   c           B   sY   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 RS(	   c         C   s´   |  j  ƒ  r |  j j ƒ  j ƒ  S|  j ƒ  rD |  j j ƒ  j ƒ  j ƒ  S|  j d  k r] |  j ƒ  S|  j j ƒ  } t	 | t
 j ƒ rˆ | j ƒ  St	 | j ƒ  t
 j ƒ r° | j ƒ  j ƒ  Sd  S(   N(   RR   R€   RŠ   R‰   RS   R   R   R   Rƒ   R‹   R   RŒ   RŽ   (   R)   R   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR…   7  s    

c         C   sA   |  j  d  k s$ t |  j  t j ƒ r( t S|  j ƒ  |  j j ƒ  k S(   N(	   R€   R   R‹   R   R­   R®   R'   R†   R¯   (   R)   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR-   D  s    $c         C   s(   |  j  d  k	 o' t |  j  j ƒ  t j ƒ S(   N(   R   R   R‹   RŠ   R   RŽ   (   R)   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyRP   I  s    c         C   s.   |  j  d  k	 o- t |  j  j ƒ  j ƒ  t j ƒ S(   N(   R   R   R‹   RŠ   R   R   RŽ   (   R)   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyRQ   M  s    c         C   s(   |  j  d  k	 o' t |  j  j ƒ  t j ƒ S(   N(   R€   R   R‹   RŠ   R   RŽ   (   R)   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyRR   Q  s    c         C   s8   |  j  d  k r t S|  j  j ƒ  } t | j ƒ  t j ƒ S(   N(   R€   R   R®   RŠ   R‹   R   R   RŽ   (   R)   R   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyRS   U  s    c         C   s6   |  j  ƒ  r d S|  j ƒ  r  d St j |  j |  j ƒ S(   NR*   t   __call__(   RR   RS   R   R°   R   R   (   R)   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR'   [  s
    c         C   s  g  } |  j  j } t j | ƒ } | j |  j ƒ r| j |  j ƒ \ } } | j | d ƒ \ } } | | | !} t j	 | t
 ƒ }	 |	 j ƒ  \ }
 } xD |
 D]< } |  j | ƒ rÁ | j | ƒ qœ | j d t | ƒ ƒ qœ Wx$ | D] \ } } | j | ƒ qã Wn  | S(   Ni   s   arg%d(   Ry   R¦   R   t   Wordert   is_a_function_being_calledR   t   get_primary_ranget   get_word_parens_rangeR	   t   _FunctionParserR®   t   get_parameterst   _is_idRT   t   len(   R)   t   resultt   sourceR‚   RC   RD   t   parens_startt
   parens_endt   callt   parserRY   t   keywordst   argR   t   value(    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyRV   b  s     c         C   sF   d „  } x, | D]$ } | | ƒ r | j  ƒ  r t Sq W| | d ƒ S(   Nc         S   s   |  j  ƒ  p |  d k S(   Nt   _(   t   isalpha(   t   c(    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyt   id_or_underlinev  s    i    (   t   isdigitR®   (   R)   RÁ   RÆ   RÅ   (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyR¸   u  s
    	(   RK   RL   R…   R-   RP   RQ   RR   RS   R'   RV   R¸   (    (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyRN   5  s   								(   t   rope.base.evaluateRz   t	   rope.baseR    R   R   R   R   R   R   t   rope.refactorR   R   R	   R
   R   R   R   R"   t   objectR#   RM   R[   R]   R_   Rg   Re   R=   R+   RN   (    (    (    s4   lib/python2.7/site-packages/rope/contrib/generate.pyt   <module>   s    ."	6			
		n