
    Je                         d Z ddlZddlmZmZmZmZ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mZmZ d	Z ej(                  e      Z G d
 de      Zy)z
Fallback completion actor.

This takes a plain text/source file and returns the individual words
written on it and the keywords associated by Pygments to the
programming language of that file.
    N)QObjectQThreadQMutexQMutexLockerSignalSlot)get_lexer_by_name)diff_match_patch)CompletionItemKind)CompletionRequestTypes)get_keywords	get_wordsis_prefix_validFallbackc                   v    e Zd Z e       Z eee      Z ee      Zd Z	d Z
d Zd Zd Z ee      d        Zy)FallbackActorc                    t        j                  |        d| _        d| _        t	               | _        i | _        t               | _        t        d       | _
        | j                  | j                         | j                  j                  j                  | j                         | j                  j                  | j                         y )NFT)r   __init__stoppeddaemonr   mutexfile_tokensr
   
diff_patchr   threadmoveToThreadstartedconnectsig_mailbox
handle_msg)selfparents     T/usr/lib/python3/dist-packages/spyder/plugins/completion/providers/fallback/actor.pyr   zFallbackActor.__init__,   s    X
*,dm$++&##DLL1  1    c                    t        |||      }|sg S 	 t        |      }t        |      }t	        |      }|D 	cg c]  }	t
        j                  |	|	|	|	dt        d  }}	t        |||      }
|
D cg c]  }t
        j                  ||||dt        d  }
}|
D ]  }|d   |vs|j                  |        |4|j                         }|D cg c]  }||d   j                         v r| }}|S # t        $ r g }Y w xY wc c}	w c c}w c c}w )zl
        Return all tokens in `text` and all keywords associated by
        Pygments to `language`.
         )kind
insertTextlabelsortText
filterTextdocumentationproviderr'   )r   r	   r   	Exceptionsetr   KEYWORDFALLBACK_COMPLETIONr   TEXTappendlower)r    textoffsetlanguagecurrent_wordvalidlexerkeywordskeyword_setkeywordtokenstokenks                r"   tokenizezFallbackActor.tokenize9   sk   
  fh7I	%h/E#E*H (m $,-   077#*%!(#*&(!46 - - 42  &'  .22!&!$!&$&24 ' '  	'E\"+5&	'
 #'--/L#+ Da'1\?+@+@+BB  DH D A  	H	-'Ds"   C+ #C<.#D	D+C98C9c                     t        | j                        5  t        j                  d       | j                  j                          ddd       y# 1 sw Y   yxY w)zStop actor.zFallback plugin stopping...N)r   r   loggerdebugr   quitr    s    r"   stopzFallbackActor.stoph   s@    $**% 	LL67KK	 	 	s   0AAc                 8    | j                   j                          y)zStart thread.N)r   startrE   s    r"   rH   zFallbackActor.startn   s    r#   c                 b    t         j                  d       | j                  j                          y)zThread started.zFallback plugin starting...N)rB   rC   sig_fallback_readyemitrE   s    r"   r   zFallbackActor.startedr   s!    23$$&r#   c                 D   dD cg c]  }||   	 c}\  }}}}t         j                  dj                  ||             |t        j                  k(  r|d   |d   |d   d| j
                  |<   y|t        j                  k(  rx|| j
                  vrd|d   |d   d| j
                  |<   |d   }| j
                  |   }|d   |d<   | j                  j                  ||d         \  }}	|| j
                  |   d<   y|t        j                  k(  r| j
                  j                  |i        y|t        j                  k(  r`g }
|| j
                  v r/| j
                  |   }| j                  |d   |d   |d   |d	         }
d
|
i}
| j                  j                  ||
       yyc c}w )zHandle one message)typeidfilemsgzPerform request {0} with id {1}r4   r5   r6   )r4   r5   r6   r%   diffr7   paramsN)rB   rC   formatr   DOCUMENT_DID_OPENr   DOCUMENT_DID_CHANGEr   patch_applyDOCUMENT_DID_CLOSEpopDOCUMENT_COMPLETIONr@   sig_set_tokensrK   )r    messager?   msg_type_idrO   rP   rQ   r4   _r=   	text_infos               r"   r   zFallbackActor.handle_msgw   s    !>$?GAJ$? #tS7>>xMN-???Fh-
O&DT"
 /CCC4+++!(m #J*  &
 v;D##D)D ]DNoo11d6l$GD!-1DT"6*/BBB  r*/CCCFt''' ,,T2	f%h'j)'	)
 'F$$S&1 D1$?s   FN)__name__
__module____qualname__r   rJ   intdictrZ   r   r   r@   rF   rH   r   r   r    r#   r"   r   r   &   sQ    C&N,K2-^'
 
$Z$2 $2r#   r   )__doc__loggingqtpy.QtCorer   r   r   r   r   r   pygments.lexersr	   r
   spyder.plugins.completion.apir   r   2spyder.plugins.completion.providers.fallback.utilsr   r   r   r0   	getLoggerr`   rB   r   re   r#   r"   <module>rm      sZ     M L . - = @. . ! 			8	$v2G v2r#   