
    8@dZ                     .   d dl m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	 d dl
mZ d dlmZmZ ddlmZmZmZ ddlmZ dd	lmZ dd
lmZ  ej        e          ZdZdZdZdZdZ G d dej                   Z!d Z"d Z#d Z$ G d de	          Z%d Z&d Z'dS )    )partialN)MethodDispatcher)Endpoint)JsonRpcStreamReaderJsonRpcStreamWriter   )lsp_utilsuris)config)	Workspace)__version__g      ?
   @   )z.pyz.pyi)zpycodestyle.cfgz	setup.cfgztox.iniz.flake8c                   ,     e Zd ZdZdZ fdZd Z xZS )_StreamHandlerWrapperzAA wrapper class that is used to construct a custom handler class.Nc                     t                                                       |                     | j        | j                  | _        d S N)supersetupDELEGATE_CLASSrfilewfiledelegate)self	__class__s    0lib/python3.11/site-packages/pylsp/python_lsp.pyr   z_StreamHandlerWrapper.setup#   s3    ++DJ
CC    c                     	 | j                                          nH# t          $ r;}t          j        dk    r!t          |t                    r|j        dk    r	 Y d }~nd }~ww xY w|                                  d S )NntiF'  )	r   startOSErrorosname
isinstanceWindowsErrorwinerrorSHUTDOWN_CALL)r   es     r   handlez_StreamHandlerWrapper.handle'   s    	M!!!! 	 	 	w$ a.. 1:3F3F	 	s    
A!1AA!)__name__
__module____qualname____doc__r   r   r*   __classcell__r   s   @r   r   r      sW        KKHD D D D D      r   r   c           	         t          |t                    st          d          fd}t          |j        dz   t
          ft          ||          t          ||          d          }t          j        | |f|d          d_	        	 
                                                                  t                              d	|j        | |                                            t                              d
                                            d S # t                              d
                                            w xY w)N4Handler class must be an instance of PythonLSPServerc                     | rJt                               d           t          j        j                  }|                                 d S d S )NzShutting down server)target)logdebug	threadingThreadshutdownr!   )check_parent_processargsstop_threadservers      r   shutdown_serverz.start_tcp_lang_server.<locals>.shutdown_server9   sU     	 II,---#*&/BBBK		  	 r   Handler)r:   )r   r(   F)bind_and_activateTzServing %s on (%s, %s)zShutting down)
issubclassPythonLSPServer
ValueErrortyper+   r   r   socketserver	TCPServerallow_reuse_addressserver_bindserver_activater5   infoserve_foreverserver_close)	bind_addrportr:   handler_classr>   wrapper_classr=   s         @r   start_tcp_lang_serverrQ   5   si   m_55 QOPPP          *	 "=8LN N N!/3GHH	J 	J M #Y$5}X]^^^F!%F   )=+A9dSSS!!! 	!!!s   AD 0E	c                     t          |t                    st          d          t                              d|j                    || ||          }|                                 d S )Nr2   zStarting %s IO language server)rA   rB   rC   r5   rJ   r+   r!   )r   r   r:   rO   r=   s        r   start_io_lang_serverrS   W   sa    m_55 QOPPPHH-}/EFFF]5%)=>>F
LLNNNNNr   c                 r   	
 t          t                    st          d          	 dd lddlm} dd l
n"# t          $ r}t          d          |d }~ww xY w |d          5 		fdfd 
fd	}                     |                       d d d            d S # 1 swxY w Y   d S )
Nr2   r   )ThreadPoolExecutorzPwebsocket modules missing. Please run pip install 'python-lsp-server[websockets]r   max_workersc           	        K   t                               d           t          
|           } 	d d |          }| 2 3 d {V }	 t                               d           t          j        |          }                                }|                    |j        |           d {V  m# t          $ r3}t           	                    d|t          |                     Y d }~d }~ww xY w6 d S )NzCreating LSP object)	websocket)rxtxconsumerr:   z/consuming payload and feeding it to LSP handlerz Failed to process request %s, %s)r5   r6   r   jsonloadsget_running_looprun_in_executorconsume	Exception	exceptionstr)rY   response_handlerpylsp_handlermessagerequestloopr)   asyncior:   rO   send_messagetpools          r   pylsp_wsz&start_ws_lang_server.<locals>.pylsp_wsn   sG     II+,,,  '|yIII *MTdEU?SU U UM "+ W W W W W W WgWIIOPPP"j11G"3355D..um6KWUUUUUUUUUU  W W WMM"DgsSTvvVVVVVVVVW "+s    C-A$B--
C*7)C%%C*c                    	 t          j        | d          }                    |                    |                     dS # t          $ r4}t
                              d| t          |                     Y d}~dS d}~ww xY w)zQHandler to send responses of  processed requests to respective web socket clientsF)ensure_asciizFailed to write message %s, %sN)r]   dumpsrunsendrb   r5   rc   rd   )rg   rY   payloadr)   rj   s       r   rk   z*start_ws_lang_server.<locals>.send_message   s    Q*W5AAAINN73344444 Q Q Q>QPPPPPPPPPQs   >A 
B)A<<Bc                     K                                  4 d {V                                    d {V  d d d           d {V  d S # 1 d {V swxY w Y   d S )N)rN   )serveFuture)rj   rN   rm   
websocketss   r   
run_serverz(start_ws_lang_server.<locals>.run_server   s      !''t'<< ' ' ' ' ' ' ' 'nn&&&&&&&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's   A
AA)	rA   rB   rC   rj   concurrent.futuresrU   rw   ImportErrorrq   )rN   r:   rO   rU   r)   rx   rj   rm   rk   rl   rw   s   ```   @@@@@r   start_ws_lang_serverr{   _   s   m_55 QOPPP
u999999 u u ulmmsttu 
		+	+	+ $"u	W 	W 	W 	W 	W 	W 	W 	W 	W*	Q 	Q 	Q 	Q 	Q	' 	' 	' 	' 	' 	' 	' 	'
 	JJLL!!!I$" $" $" $" $" $" $" $" $" $" $" $" $" $" $" $" $" $"s'   = 
AAA+4B,,B03B0c                       e Zd ZdZd9dddZd Zd Z fdZd	 Zd
 Z	d Z
d:dZd 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 ej        ed          d             Zd Zd  Z d! Z!d" Z"d# Z#d:d$Z$d:d%Z%d<d&Z&d:d'Z'd=d(Z(d:d)Z)d<d*Z*d<d+Z+d<d,Z,d<d-Z-d:d.Z.d<d/Z/d=d0Z0d:d1Z1d=d2Z2d=d3Z3d<d4Z4d:d5Z5d:d6Z6d:d7Z7d<d8Z8 xZ9S )>rB   z Implementation of the Microsoft VSCode Language Server Protocol
    https://github.com/Microsoft/language-server-protocol/blob/master/versions/protocol-1-x.md
    FN)endpoint_clsc                   d | _         d | _        d | _        d | _        i | _        i | _        || _        |t          |          | _        nd | _        |t          |          | _
        nd | _
        |pt          }|# || | j
        j        t                    | _        n || |t                    | _        g | _        d| _        d S )NrV   F)	workspacer   root_uriwatching_thread
workspacesuri_workspace_mapper_check_parent_processr   _jsonrpc_stream_readerr   _jsonrpc_stream_writerr   writeMAX_WORKERS	_endpoint_dispatchers	_shutdown)r   rZ   r[   r:   r\   r}   s         r   __init__zPythonLSPServer.__init__   s    #$&!%9">*=b*A*AD''*.D'>*=b*A*AD''*.D'#/x )\$0K0Q_jkkkDNN)\$kRRRDNr   c                 N    | j                             | j        j                   dS )zEntry point for the server.N)r   listenr   ra   )r   s    r   r!   zPythonLSPServer.start   s$    #**4>+ABBBBBr   c                 :    | j                             |           dS )zGEntry point for consumer based server. Alternative to stream listeners.N)r   ra   )r   rg   s     r   ra   zPythonLSPServer.consume   s      	w'''''r   c                 .   | j         r(|dk    r"t                              d|           t          	 t	                                          |          S # t          $ r) | j        D ]}	 ||         c cY S # t          $ r Y w xY wY nw xY wt                      )z:Override getitem to fallback through multiple dispatchers.exitz,Ignoring non-exit method during shutdown: %s)r   r5   r6   KeyErrorr   __getitem__r   )r   item
dispatcherr   s      r   r   zPythonLSPServer.__getitem__   s    > 	dfnnIIDdKKKN	77&&t,,, 	 	 	"/  
%d++++++   H 	 jjs5    A B'A3.B3
B =B?B  BBc                 t    | j                                         D ]}|                                 d| _        d S )NT)r   valuescloser   )r   _kwargsr   s      r   
m_shutdownzPythonLSPServer.m_shutdown   s=    //11 	 	IOOr   c                     | j                                          | j        | j                                         | j        | j                                         d S d S r   )r   r9   r   r   r   r   r   s     r   m_exitzPythonLSPServer.m_exit   s`    !!!&2'--///&2'--///// 32r   c                 v    t          j        || j                  }| j                            || j                  S r   )r
   match_uri_to_workspacer   getr   )r   uriworkspace_uris      r   _match_uri_to_workspacez'PythonLSPServer._match_uri_to_workspace   s0    5c4?KK""=$.AAAr   c                     |                      |          }|r|                    |          nd}| j        j                            || j        j                  } |d| j        ||d|S )zJCalls hook_name and returns a list of results from all registered handlersN)r   r   document )r   get_documentr   plugin_managersubset_hook_callerdisabled_plugins)r   	hook_namedoc_urikwargsr   dochook_handlerss          r   _hookzPythonLSPServer._hook   su    0099	18Bi$$W---d2EEiQUQ\Qmnn}]DK9s]]V\]]]r   c                 r   i dddddidddgdd	dd
dddddddddt          |                     d                    iddddddddddg didt          j        j        ddidddddddidt          |                     d                    }t                              d |           |S )!NcodeActionProviderTcodeLensProviderresolveProviderFcompletionProvider.)r   triggerCharactersdocumentFormattingProviderdocumentHighlightProviderdocumentRangeFormattingProviderdocumentSymbolProviderdefinitionProviderexecuteCommandProvidercommandspylsp_commandshoverProviderreferencesProviderrenameProviderfoldingRangeProvidersignatureHelpProviderr   )(,=textDocumentSyncincludeText)changesave	openCloser   workspaceFolders)	supportedchangeNotificationsexperimentalpylsp_experimental_capabilitieszServer capabilities: %s)flattenr   r	   TextDocumentSyncKindINCREMENTALmerger5   rJ   )r   server_capabilitiess     r   capabilitieszPythonLSPServer.capabilities   s   '
 $'
!5!'

 !#'&)U# #'
 )$'
 ('
 .t'
 %d'
 !$'
 %GDJJ/?$@$@AA''
" T#'
$ !$%'
& d''
( #D)'
* $#___&+'
0 2>!4 "! !1'
> "!%+/% %?'
J E

<==? ?K'
P 	*,?@@@""r   c           	         
 t                               d||||           ||t          j        |          nd} j                             j        d            | _        t          j        ||pi ||	                    di                      _        t          | j         j                   _         j         j        |<   |r|D ]}|d         }||k    rt          j        | j        j         j        j         j        j                  }	|	                     j        j                   t          | j        |	           j        |<                        d           _                             d            j        rP|N j        G 
fd
t-          j        
|f           _        d	 j        _         j                                                                          d
t6          ddS )Nz,Language server initialized with %s %s %s %s r   r   pylsp_dispatcherspylsp_initializec                     t          j        |           s1t                              d|                                             d S t          j        t          | g                                           d S )Nz(parent process %s is not alive, exiting!)r;   )	r
   is_process_aliver5   rJ   r   r7   TimerPARENT_PROCESS_WATCH_INTERVALr!   )pidr   watch_parent_processs    r   r   z:PythonLSPServer.m_initialize.<locals>.watch_parent_process6  sl    .s33 mHHGMMMKKMMMMMO$ACW_b^cdddjjlllllr   )r4   r;   Tpylsp)r$   version)r   
serverInfo)r5   r6   r   from_fs_pathr   popr   r   Configr   r   r   r   
_init_opts_process_id_capabilitiesupdate	_settingsr   r   r   r   r7   r8   daemonr!   r   r   )r   	processIdrootUrirootPathinitializationOptionsr   r   folderr   workspace_configr   s   `         @r   m_initializezPythonLSPServer.m_initialize  s$   		@)WV^`uvvv?5=5Id'111rGDM4000mG-B-Hb$-w{{>2/N/NP P"7DNDKHH#'>  	;* 
; 
;Um'>>#)=/K+T[-F$H $H  !''(=>>>'0)9(; (;$$ !JJ':;;

%&&&% 	))*?DDXD`m m m m m m $-#3;OW`Vb#c#c#cD *.D ' &&((( !--//& 
 
 	
r   c                 0    |                      d           d S )Npylsp_initializedr   r   s     r   m_initializedzPythonLSPServer.m_initializedJ  s    

&'''''r   c                 N    t          |                     d|||                    S )Npylsp_code_actions)rangecontextr   r   )r   r   r   r   s       r   code_actionszPythonLSPServer.code_actionsM  s&    tzz"6uV]z^^___r   c                 H    t          |                     d|                    S )Npylsp_code_lensr   r   r   s     r   	code_lenszPythonLSPServer.code_lensP  s    tzz"3W==>>>r   c                 V    |                      d||          }dt          |          dS )Npylsp_completionspositionF)isIncompleteitems)r   r   )r   r   r  completionss       r   r	  zPythonLSPServer.completionsS  s7    jj!4gjQQ![))
 
 	
r   c                     |                     di                                dd           }|                     d||          S )Ndatar   pylsp_completion_item_resolve)completion_item)r   r   )r   r  r   s      r   completion_item_resolvez'PythonLSPServer.completion_item_resolveZ  sA    !%%fb1155iFFzz97Tczdddr   c                 L    t          |                     d||                    S )Npylsp_definitionsr  r   r   r   r  s      r   definitionszPythonLSPServer.definitions^  s#    tzz"5wzRRSSSr   c                 H    t          |                     d|                    S )Npylsp_document_symbolsr   r  s     r   document_symbolsz PythonLSPServer.document_symbolsa  s    tzz":GDDEEEr   c                 .    |                      d|          S )Npylsp_document_did_saver   r  s     r   document_did_savez!PythonLSPServer.document_did_saved  s    zz3W===r   c                 2    |                      d||          S )Npylsp_execute_command)command	argumentsr   r   r  r  s      r   execute_commandzPythonLSPServer.execute_commandg  s    zz17izXXXr   c                       fdS )Nc                  4                         d           S )Npylsp_format_document)optionsr   )r   r"  r   s   r   <lambda>z1PythonLSPServer.format_document.<locals>.<lambda>k  s    tzz"97GzTT r   r   )r   r   r"  s   ```r   format_documentzPythonLSPServer.format_documentj  s    TTTTTTTr   c                 4    |                      d|||          S )Npylsp_format_range)r   r"  r   )r   r   r   r"  s       r   format_rangezPythonLSPServer.format_rangem  s    zz.ugzVVVr   c                 P    t          |                     d||                    pd S )Npylsp_document_highlightr  r   r  s      r   	highlightzPythonLSPServer.highlightp  s*    tzz"<gPXzYYZZb^bbr   c                 :    |                      d||          pddiS )Npylsp_hoverr  contentsr   r   r  s      r   hoverzPythonLSPServer.hovers  s%    zz-8zDDXUWHXXr   r   )keyed_byc           
          |                      |          }||j        v r;|                    |t          |                     d||                               d S d S )N
pylsp_lintis_saved)r   	documentspublish_diagnosticsr   r   )r   r   r3  r   s       r   lintzPythonLSPServer.lintv  so     0099	i)))))

<8
LLMM     *)r   c                 N    t          |                     d|||                    S )Npylsp_references)r  exclude_declarationr   )r   r   r  r9  s       r   
referenceszPythonLSPServer.references  s3    tzz( 3 " 
 
   	r   c                 4    |                      d|||          S )Npylsp_rename)r  new_namer   )r   r   r  r=  s       r   renamezPythonLSPServer.rename  s    zz.'HxzXXXr   c                 2    |                      d||          S )Npylsp_signature_helpr  r   r  s      r   signature_helpzPythonLSPServer.signature_help  s    zz0'HzMMMr   c                 H    t          |                     d|                    S )Npylsp_folding_ranger   r  s     r   foldingzPythonLSPServer.folding  s    tzz"7AABBBr   c                 ,    |                      |          S r   )r  )r   completionItems     r   m_completion_item__resolvez*PythonLSPServer.m_completion_item__resolve  s    ++N;;;r   c                     |                      |d                   }|                    |d         g            |                    |d                    d S Nr   )r   r5  rm_documentr   textDocumentr   r   s       r   m_text_document__did_closez*PythonLSPServer.m_text_document__did_close  sT    00e1DEE	%%l5&92>>>l5122222r   c                    |                      |d                   }|                    |d         |d         |                    d                     |                     d|d                    |                     |d         d           d S )Nr   textr   r   pylsp_document_did_openTr2  )r   put_documentr   r   r6  rK  s       r   m_text_document__did_openz)PythonLSPServer.m_text_document__did_open  s    00e1DEE	|E2L4HR^RbRbclRmRmnnn

,l5.ABBB		,u%	55555r   c                     |                      |d                   }|D ]3}|                    |d         ||                    d                     4|                     |d         d           d S )Nr   r   rP  Fr2  )r   update_documentr   r6  )r   contentChangesrL  r   r   r   s         r   m_text_document__did_changez+PythonLSPServer.m_text_document__did_change  s    00e1DEE	$ 	 	F%%U#$((33 &    
 			,u%	66666r   c                 v    |                      |d         d           |                     |d                    d S )Nr   Tr2  )r6  r  r   rL  r   s      r   m_text_document__did_savez)PythonLSPServer.m_text_document__did_save  s<    		,u%	555|E233333r   c                 <    |                      |d         ||          S rI  )r   )r   rL  r   r   r   s        r   m_text_document__code_actionz,PythonLSPServer.m_text_document__code_action        e!4eWEEEr   c                 8    |                      |d                   S rI  )r  rY  s      r   m_text_document__code_lensz*PythonLSPServer.m_text_document__code_lens  s    ~~l51222r   c                 :    |                      |d         |          S rI  )r	  r   rL  r  r   s       r   m_text_document__completionz+PythonLSPServer.m_text_document__completion      U 3X>>>r   c                 :    |                      |d         |          S rI  )r  ra  s       r   m_text_document__definitionz+PythonLSPServer.m_text_document__definition  rc  r   c                 :    |                      |d         |          S rI  )r*  ra  s       r   #m_text_document__document_highlightz3PythonLSPServer.m_text_document__document_highlight  s    ~~l518<<<r   c                 :    |                      |d         |          S rI  )r.  ra  s       r   m_text_document__hoverz&PythonLSPServer.m_text_document__hover  s    zz,u-x888r   c                 8    |                      |d                   S rI  )r  rY  s      r    m_text_document__document_symbolz0PythonLSPServer.m_text_document__document_symbol  s    $$\%%8999r   c                 :    |                      |d         |          S rI  )r$  )r   rL  r"  r   s       r   m_text_document__formattingz+PythonLSPServer.m_text_document__formatting  s    ##L$7AAAr   c                 <    |                      |d         ||          S rI  )r>  )r   rL  r  newNamer   s        r   m_text_document__renamez'PythonLSPServer.m_text_document__rename  s    {{<.'BBBr   c                 8    |                      |d                   S rI  )rD  rY  s      r   m_text_document__folding_rangez.PythonLSPServer.m_text_document__folding_range  s    ||L/000r   c                 <    |                      |d         ||          S rI  )r'  )r   rL  r   r"  r   s        r   !m_text_document__range_formattingz1PythonLSPServer.m_text_document__range_formatting  r]  r   c                 N    |d          }|                      |d         ||          S )NincludeDeclarationr   )r:  )r   rL  r  r   r   r9  s         r   m_text_document__referencesz+PythonLSPServer.m_text_document__references  s-    ")*>"??|E2H>QRRRr   c                 :    |                      |d         |          S rI  )rA  ra  s       r   m_text_document__signature_helpz/PythonLSPServer.m_text_document__signature_help  s    ""<#6AAAr   c                    | j         0| j                             |pi                     di                      | j                                        D ]8}|                    |           |j        D ]}|                     |d           9d S )Nr   Fr2  )r   r   r   r   r   update_configr4  r6  )r   settingsr   r   s       r   %m_workspace__did_change_configurationz5PythonLSPServer.m_workspace__did_change_configuration  s    ;"KB33GR@@AAA//11 	3 	3I##H---$. 3 3		'E	22223	3 	3r   c                 R    |d S |                     dg           }|                     dg           }|D ])}d|v r#|d         } j                            |d            *|D ]}d|v rz|d         }t          j        | j        j         j        j         j        j                  }	|	                     j        j	                   t          | j        |	           j        |<   t           fd|D                       }
t          |          dk    o	d|d         v }|
r8|r6|d         d         }| _         j        |         }|j         _        | _        nf|
rd j        r]t"                              d           t'           j                  }|d         } j        |         }| _        |j         _        | _        t)           j        j                                                  }|D ]@} j        j                            |          }                     |          }||j        |<   Ad S )Naddedremovedr   c              3   :   K   | ]}|d          j         k    V  dS )r   N)r   ).0removed_infor   s     r   	<genexpr>zLPythonLSPServer.m_workspace__did_change_workspace_folders.<locals>.<genexpr>  s/      $f$fl\%%8DM%I$f$f$f$f$f$fr   r   zRoot workspace deleted!)r   r   r   r   r   r   r   r   r   r   r   r   anylenr   _configr   r5   r6   sortedlist_docskeysr   )r   eventr   r  r  r  removed_uri
added_info	added_urir   root_workspace_removedworkspace_addednew_root_workspaceavailable_workspacesfirst_workspacedoc_urisr   r   new_workspaces   `                  r   )m_workspace__did_change_workspace_foldersz9PythonLSPServer.m_workspace__did_change_workspace_folders  sa   =F		'2&&))Ir**# 	7 	7L$$*51##K666 	A 	AJ
""&u-	#)=t{5K+T[-F$H $H  !''(=>>>-6t~/?.A .A	* "%$f$f$f$f^e$f$f$f!f!fe**q.>UeAh->! 	4o 	4aI%DM!%!;,4DK/DNN# 
	4  4		3444'-do'>'>$"6q"9%)__%E" /08!3 ,113344 	+ 	+C.&**3//C 88==M'*M$$	+ 	+r   c                    t                      }d}|pg D ]`}|d                             t                    r|                    |d                    >|d                             t                    rd}a|r| j        j                                         n|sd S | j        	                                D ]'}|j
        D ]}||vr|                     |d           (d S )NFr   Tr2  )setendswithPYTHON_FILE_EXTENSIONSaddCONFIG_FILEsr   r|  cache_clearr   r   r4  r6  )r   changesr   changed_py_filesconfig_changeddr   r   s           r   %m_workspace__did_change_watched_filesz5PythonLSPServer.m_workspace__did_change_watched_files  s
   55-R 	& 	&Ax  !788 & $$QuX....5""<00 &!% 	K ,,....! 	F//11 	7 	7I$. 7 7"222IIgI6667	7 	7r   c                 .    |                      ||          S r   )r  r  s      r   m_workspace__execute_commandz,PythonLSPServer.m_workspace__execute_command!  s    ##GY777r   )FNr   )NNNNN)NN)NNN):r+   r,   r-   r.   r   r!   ra   r   r   r   r   r   r   r   r   r   r  r	  r  r  r  r  r  r$  r'  r*  r.  r
   debounceLINT_DEBOUNCE_Sr6  r:  r>  rA  rD  rG  rM  rS  rW  rZ  r\  r_  rb  re  rg  ri  rk  rm  rp  rr  rt  rw  ry  r}  r  r  r  r/   r0   s   @r   rB   rB      s        Z^     >C C C( ( (
    &  
0 0 0B B B^ ^ ^ ^*# *# *#X CGBF/
 /
 /
 /
b( ( (` ` `? ? ?
 
 
e e eT T TF F F> > >Y Y YU U UW W Wc c cY Y Y V__y999  :9  Y Y YN N NC C C< < <3 3 3 3
6 6 6 67 7 7 74 4 4 4F F F F3 3 3 3? ? ? ?? ? ? ?= = = =9 9 9 9: : : :B B B BC C C C1 1 1 1F F F FS S S SB B B B3 3 3 3/+ /+ /+ /+b7 7 7 7*8 8 8 8 8 8 8 8r   rB   c                     d | D             S )Nc                     g | ]	}|D ]}|
S r   r   )r  lstr   s      r   
<listcomp>zflatten.<locals>.<listcomp>&  s%    :::Sc::dD::::r   r   )list_of_listss    r   r   r   %  s    ::M::::r   c                     d | D             S )Nc                 H    i | ]}|                                 D ]\  }}||	 S r   )r  )r  
dictionarykvs       r   
<dictcomp>zmerge.<locals>.<dictcomp>*  s7    PPPZZ=M=M=O=OPPTQAqPPPPr   r   )list_of_dictss    r   r   r   )  s    PP=PPPPr   )(	functoolsr   loggingr#   rE   r7   ujsonr]   pylsp_jsonrpc.dispatchersr   pylsp_jsonrpc.endpointr   pylsp_jsonrpc.streamsr   r   r   r	   r
   r   r   r   r   _versionr   	getLoggerr+   r5   r  r   r   r  r  StreamRequestHandlerr   rQ   rS   r{   rB   r   r   r   r   r   <module>r     s          				             6 6 6 6 6 6 + + + + + + J J J J J J J J                             ! ! ! ! ! !g!!  " ( E    L=   .  D  2" 2" 2"jN8 N8 N8 N8 N8& N8 N8 N8b; ; ;Q Q Q Q Qr   