
V]c           @   sR  d  d l  Z  d  d l m Z d  d l m Z d  d l m Z m Z d  d l m	 Z	 d  d l
 m Z d  d l
 m Z d  d l m Z d  d	 l m Z d  d
 l m Z d  d l m Z d  d l m Z d  d l m Z m Z d  d l m Z d  d l m Z d  d l m Z m Z d   Z d   Z  d   Z! d   Z" d d d     YZ# d   Z$ d S(   iN(   t   PythonTokenTypes(   t   tree(   t   search_ancestort   Leaf(   t	   Parameter(   t   debug(   t   settings(   t   classes(   t   helpers(   t   keywords(   t   file_name_completions(   t   imports(   t   evaluate_call_of_leaft   parse_dotted_names(   t   get_global_filters(   t   convert_contexts(   t   get_statement_of_positiont   cut_value_at_positionc         c   sU   xN |  D]F } x= | j  D]2 } | j j   t j t j f k r | j Vq q Wq Wd  S(   N(   t   paramst   _namet   get_kindR   t   POSITIONAL_OR_KEYWORDt   KEYWORD_ONLY(   t   call_signaturest   call_sigt   p(    (    s2   lib/python2.7/site-packages/jedi/api/completion.pyt   get_call_signature_param_names   s
    c   	      c   s   i  } t  j r | j   } n  x | D] } | j } t  j rL | j   } n  | j |  r% t j |  | | t |   } | j | j	 f } | | k r t  j
 r | | j j |  q | | | <| Vq% q% Wd  S(   N(   R   t   case_insensitive_completiont   lowert   string_namet
   startswithR   t
   Completiont   lent   namet   completet   no_completion_duplicatest   _same_name_completionst   append(	   t	   evaluatort   completion_namest   stackt	   like_namet   comp_dctR!   t   stringt   newt   k(    (    s2   lib/python2.7/site-packages/jedi/api/completion.pyt   filter_names   s$    			
c            sm   t  |  j    } | d k r\    f d     |  j  } | rX |  j | d t S|  S|  j |  Sd S(   sK   
    Returns the scope in which the user resides. This includes flows.
    c            s   x |  j  D]~ } | j   k o- | j k n r
 t | t j t j f  s\ | j d k rl  |  pk | S| j d k r  |  Sq
 q
 Wd  S(   Nt
   async_stmtt   async_funcdeft   suitet	   decorated(   R/   R0   (   R1   R2   (	   t   childrent	   start_post   end_post
   isinstanceR   t   Scopet   Flowt   typet   None(   t   scopet   s(   t   positiont   scan(    s2   lib/python2.7/site-packages/jedi/api/completion.pyR>   =   s    "t   node_is_contextN(   R   t	   tree_nodeR:   t   create_contextt   True(   t   module_contextR=   t	   user_stmtt   scanned_node(    (   R=   R>   s2   lib/python2.7/site-packages/jedi/api/completion.pyt   get_user_scope7   s    
c         C   sD   |  j  | d t } x( t | t j t j f  s? | j } q W| S(   Nt   include_prefixes(   t   get_leaf_for_positionRB   R6   R   R7   R8   t   parent(   t   module_nodeR=   t   node(    (    s2   lib/python2.7/site-packages/jedi/api/completion.pyt   get_flow_scope_nodeO   s    R   c           B   sY   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d e d  Z	 e d  Z
 RS(	   c         C   s|   | |  _  | |  _ | j |  _ | |  _ t j |  j | |  |  _ | |  _ | d | d t	 |  j  f |  _
 | |  _ d  S(   Ni    i   (   t
   _evaluatort   _module_contextR@   t   _module_nodet   _code_linesR   t   get_on_completion_namet
   _like_namet   _original_positionR    t	   _positiont   _call_signatures_callback(   t   selfR&   t   modulet
   code_linesR=   t   call_signatures_callback(    (    s2   lib/python2.7/site-packages/jedi/api/completion.pyt   __init__X   s    				$c      
   C   s   |  j  j |  j d t } t | |  j  \ } } | d  k	 r t t |  j |  j	 | | |  j
 |  j |  j |  j   } | r | Sn  |  j |  } t |  j | |  j |  j
  } t | d d   S(   NRG   t   keyc         S   s.   |  j  j d  |  j  j d  |  j  j   f S(   Nt   __t   _(   R!   R   R   (   t   x(    (    s2   lib/python2.7/site-packages/jedi/api/completion.pyt   <lambda>w   s   (   RO   RH   RT   RB   t   _extract_string_while_in_stringR:   t   listR
   RM   RN   RR   RU   RP   RS   t   _get_context_completionsR.   R(   t   sorted(   RV   t   leafR+   t
   start_leaft   completionsR'   (    (    s2   lib/python2.7/site-packages/jedi/api/completion.pyRf   f   s    c            s  |  j  j } d |  _ } y) t j | |  j | |  j  |  _ } Wn9 t j k
 r} } | j	 j
 } | d k rs g  S|  j   SXt | j      d   k r|  j j |  j d t } | j   } |  j d } | j |  j k o | j k n s| j d } n  | d k	 r| } x t rt | d d d d d	  } | d k rKPn  | j }	 |	 d	 k r| j d
 }
 t |
 t  r|
 j
 d }	 qn  | j d | k r|	 d k r  d d g 7  q|	 d k r  d d d g 7  q|	 d k r  j d  qqqWqn  g  } |  j |  j d
 d |  j d  } | sL| d d k rb| |  j    7} n  t   f d   t j t j f D  rg  | D] } | j ^ q} g  } x6 | D]. } | j  j! d k rg  } q| | j" 7} qW| r| d d k rt |  j# d t   Sd | k rpt$ | d | k  \ } } d | k oMd | k } | |  j% | | d | 7} nw | d d  k r| d d k r|  j j |  j  } | |  j& | j    7} n& | |  j   7} | |  j# d t'  7} d | k r|  j(   } | t) |  7} qn  | S(!   s  
        Analyzes the context that a completion is made in and decides what to
        return.

        Technically this works by generating a parser stack and analysing the
        current stack for possible grammar nodes.

        Possible enhancements:
        - global/nonlocal search global
        - yield from / raise from <- could be only exceptions/generators
        - In args: */**: no completion
        - In params (also lambda): no completion before =
        t   .t   ifRG   i   t   if_stmtt   for_stmtt
   while_stmtt   try_stmtt
   error_nodei    t   _stmtt   elift   elset   exceptt   finallyis    	.;c         3   s   |  ] } |   k Vq d  S(   N(    (   t   .0t   t(   t   allowed_transitions(    s2   lib/python2.7/site-packages/jedi/api/completion.pys	   <genexpr>   s    t
   small_stmtt   ast   deft   classt   is_functiont   import_stmtt   import_fromt   importt   only_modulest   trailert   dotted_nameN(   Rw   Rx   Ry   (   R   R   (*   RM   t   grammarR:   R(   R   t   get_stack_at_positionRP   RT   t   OnErrorLeaft
   error_leaft   valuet   _global_completionsRa   t)   _allowed_transition_names_and_token_typesRO   RH   RB   t   get_previous_leafR4   R5   R   R9   R3   R6   R   R%   t   _get_keyword_completion_namest   anyR    t   NAMEt   INDENTt   nonterminalt   dfat	   from_rulet   nodest   _get_class_context_completionsR   t   _get_importer_namest   _trailer_completionst   FalseRU   R   (   RV   Rd   R   R(   t   eR   t   previous_leaft   indentt   stmtt   type_t   firstR'   t   current_linet
   stack_nodet   nonterminalsR   t   levelt   namesR~   t   dotR   (    (   Ru   s2   lib/python2.7/site-packages/jedi/api/completion.pyRb   {   s    #%			#		 c         c   sG   x@ | D]8 } t  | t  r | j   r t j |  j |  Vq q Wd  S(   N(   R6   t   strt   isalphaR	   t   KeywordNameRM   (   RV   Ru   R-   (    (    s2   lib/python2.7/site-packages/jedi/api/completion.pyR      s    c         C   s   t  |  j |  j  } t j d |  t |  j |  j  } t |  j | |  j d | } g  } x | D] } | | j	   7} qe W| S(   Ns   global completion scope: %st   origin_scope(
   RF   RN   RT   R   t   dbgRL   RO   R   RM   t   values(   RV   t   contextt   flow_scope_nodet   filtersR'   t   filter(    (    s2   lib/python2.7/site-packages/jedi/api/completion.pyR      s    		c   
      C   s  t  |  j |  j  } |  j j |  j |  } t | |  } g  } t j d | d d xD | D]< } x3 | j d t	 d | j
  D] } | | j   7} q Wq_ Wt |  } xS | D]K }	 |	 | k r x6 |	 j d t	 d | j
  D] } | | j   7} q Wq q W| S(   Ns   trailer completion contexts: %st   colort   MAGENTAt   search_globalR   (   RF   RN   RT   RM   RA   R   R   R   t   get_filtersR   R@   R   R   (
   RV   R   t   user_contextt   evaluation_contextt   contextsR'   R   R   t   python_contextst   c(    (    s2   lib/python2.7/site-packages/jedi/api/completion.pyR      s&    	i    c         C   sP   g  | D] } | j  ^ q } t j |  j | |  j |  } | j |  j d | S(   NR~   (   R   R   t   ImporterRM   RN   R'   (   RV   R   R   R~   t   nt   i(    (    s2   lib/python2.7/site-packages/jedi/api/completion.pyR     s    c         c   s   |  j  j |  j d t } t j | d  } t | t j t j f  rc |  j	 j
 | d t } n d S| j d | j d k r d S| j d t d t  } t |  xB | D]: } x1 | j   D]# } | j d k | k r | Vq q Wq Wd S(	   sP   
        Autocomplete inherited methods when overriding in child class.
        RG   t   classdefR?   Ni   R   t   is_instancet   function(   RO   RH   RT   RB   R   R   R6   t   Classt   FunctionRN   RA   R4   R   R   t   nextR   t   api_type(   RV   Rz   Rd   t   clst   random_contextR   R   R!   (    (    s2   lib/python2.7/site-packages/jedi/api/completion.pyR     s    	
(   t   __name__t
   __module__RZ   Rf   Rb   R   R   R   RB   R   R   (    (    (    s2   lib/python2.7/site-packages/jedi/api/completion.pyR   W   s   			o			c         C   sV  |  j  d k r t j d |  j  } | j d  } |  j | d k rg | d |  j | j   k  rg d
 S|  j	 d | d k r | d |  j	 d t
 |  k r d St |  |  | j   |  f Sg  } x |  d  k	 rQ|  j | d k rQ|  j  d k r2d |  j k sd |  j k r2d j d	   | D  |  f S| j d |   |  j   }  q Wd S(   NR+   s   ^\w*(\'{3}|"{3}|\'|")i   i    R   t   "t   't    c         s   s   |  ] } | j    Vq d  S(   N(   t   get_code(   Rs   t   l(    (    s2   lib/python2.7/site-packages/jedi/api/completion.pys	   <genexpr>C  s    (   NN(   NN(   NN(   R9   t   ret   matchR   t   groupt   linet   columnt   endR:   R5   R    R   t   joint   insertR   (   Rd   R=   R   t   quotet   leaves(    (    s2   lib/python2.7/site-packages/jedi/api/completion.pyR`   6  s    08"-(    (%   R   t   parso.python.tokenR    t   parso.pythonR   t
   parso.treeR   R   t   jedi._compatibilityR   t   jediR   R   t   jedi.apiR   R   R	   t   jedi.api.file_nameR
   t   jedi.evaluateR   t   jedi.evaluate.helpersR   R   t   jedi.evaluate.filtersR   t    jedi.evaluate.gradual.conversionR   t   jedi.parser_utilsR   R   R   R.   RF   RL   R   R`   (    (    (    s2   lib/python2.7/site-packages/jedi/api/completion.pyt   <module>   s*   	
			