Ë
    :vžj0*  ã                   óŽ  — d Z ddlZddlZddlZddlZddlmZmZmZm	Z	 ej                  dk  rddlmZ n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m Z m!Z!m"Z"m#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.m/Z/m0Z0  G d„ de-«      Z1e1jd                  Z3y# e$ r	 dd	lmZ Y Œuw xY w)z: A configurable frontend for stdio-based Language Servers
é    N)ÚDictÚTextÚTupleÚcast)é   é
   )Úentry_points)Újupyter_config_path)ÚConfigManager)Ú_i18n)Ú_)ÚBool)r   )ÚInstance)ÚList)ÚUnicodeÚdefaulté   )ÚAPP_CONFIG_D_SECTIONSÚEP_LISTENER_ALL_V1ÚEP_LISTENER_CLIENT_V1ÚEP_LISTENER_SERVER_V1Ú
EP_SPEC_V1)ÚLANGUAGE_SERVER_SPEC_MAP)ÚLanguageServerSession)ÚLoadableCallableÚSchema)ÚKeyedLanguageServerSpecsÚLanguageServerManagerAPIÚMessageScopeÚSpecBaseÚ	SpecMakerc                   óš  ‡ — e Zd ZU dZ ee ed«      ¬«      Z ee ed«      ¬«      j                  d¬«      Z	 e
d ed«      ¬«      j                  d¬«      Zeed	<    e ee«      i d
¬«      Zeee   ef   ed<    ed¬«      j                  d¬«      Z e
dd¬«      Z ee¬«      j                  d¬«      Z ee¬«      j                  d¬«      Z ee¬«      j                  d¬«      Z ed«      d„ «       Z ed«      d„ «       Z ed«      de fd„«       Z!defˆ fd„Z"d„ Z#d„ Z$d'd„Z%dede fd„Z&d „ Z'd!„ Z(d"„ Z)d#„ Z*d$„ Z+d%„ Z,defd&„Z-ˆ xZ.S )(ÚLanguageServerManagerzManage language serverszAextra language server specs, keyed by implementation, from conf.d)Ú	validatorÚhelpz8a dict of language server specs, keyed by implementationT)Úconfigz@try to find known language servers in sys.prefix (and elsewhere))r%   Ú
autodetectz&sessions keyed by language server name)ÚtraitÚdefault_valuer%   ÚsessionszÆPath to virtual documents relative to the content manager root
        directory.

        Its default value can be set with JP_LSP_VIRTUAL_DIR and fallback to
        '.virtual_documents'.
        z(Whether the manager has been initializedF)r%   r)   )r(   Úlanguage_serversc                 ó   — i S ©N© ©Úselfs    úd/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/jupyter_lsp/manager.pyÚ_default_language_serversz/LanguageServerManager._default_language_serversd   s   € àˆ	ó    Úvirtual_documents_dirc                 ó6   — t        j                  dd «      xs dS )NÚJP_LSP_VIRTUAL_DIRz.virtual_documents)ÚosÚgetenvr/   s    r1   Ú_default_virtual_documents_dirz4LanguageServerManager._default_virtual_documents_dirh   s   € ä�y‰yÐ-¨tÓ4ÒLÐ8LÐLr3   Úconf_d_language_serversÚreturnc           
      óú   — i }t        t        «       ¬«      }t        D ][  } |j                  di |j	                  d|› d�«      j	                  | j
                  j                  i «      j	                  di «      ¤Ž Œ] |S )N)Úread_config_pathÚjupyterr&   r+   r.   )r   r
   r   ÚupdateÚgetÚ	__class__Ú__name__)r0   r+   ÚmanagerÚapps       r1   Ú _default_conf_d_language_serversz6LanguageServerManager._default_conf_d_language_serversl   sv   € à57ÐäÔ1DÓ1FÔGˆç(ˆCØ#Ð×#Ñ#ñ Ø—+‘+ ¨ u¨FÐ3Ó4ß‘�T—^‘^×,Ñ,¨bÓ1ß‘Ð'¨Ó,óð )ð  Ðr3   Úkwargsc                 ó@   •— i | _         i | _        t        ‰| �  di |¤Ž y)z4Before starting, perform all necessary configurationNr.   )Úall_language_serversÚ_language_servers_from_configÚsuperÚ__init__)r0   rF   rA   s     €r1   rK   zLanguageServerManager.__init__{   s#   ø€ à>@ˆÔ!ØGIˆÔ*Ü‰ÑÑ"˜6Ó"r3   c                 ór   — | j                  «        | j                  «        | j                  «        d| _        y )NT)Úinit_language_serversÚinit_listenersÚinit_sessionsÚ_ready)r0   ÚargsrF   s      r1   Ú
initializez LanguageServerManager.initialize�   s-   € Ø×"Ñ"Ô$Ø×ÑÔØ×ÑÔØˆ�r3   c              ƒ   ó|   K  — | j                   s*t        j                  d«      ƒ d {  –—†  | j                   sŒ*y7 Œ­w)Ngš™™™™™¹?T)rP   ÚasyncioÚsleepr/   s    r1   ÚreadyzLanguageServerManager.ready‡   s0   è ø€ Ø—+’+Ü—-‘- Ó$×$Ð$ð —+“+àð %ús   ‚%<§:¨<¹<c                 ó”   — t        | j                  «      | _        | j                  d¬«      | _        | j                  d¬«      | _        y)z2determine the final language server configuration.T©Úonly_installedFN)Údictr+   rI   Ú_collect_language_serversrH   r/   s    r1   rM   z+LanguageServerManager.init_language_serversŒ   sD   € ô .2°$×2GÑ2GÓ-HˆÔ*Ø $× >Ñ >ÈdÐ >Ó SˆÔØ$(×$BÑ$BÐRWÐ$BÓ$XˆÕ!r3   rY   c                 óZ  — i }t        | j                  «      }|j                  | j                  «       | j                  r!|j                  | j                  |¬«      «       |j                  |«       |j                  «       D ��ci c]  \  }}|j                  d«      sŒ||“Œ c}}S c c}}w )NrX   Úargv)rZ   rI   r?   r:   r'   Ú_autodetect_language_serversÚitemsr@   )r0   rY   r+   Úlanguage_servers_from_configÚkeyÚspecs         r1   r[   z/LanguageServerManager._collect_language_servers“   sŸ   € ð 68Ðä'+¨D×,NÑ,NÓ'OÐ$Ø$×+Ñ+¨D×,HÑ,HÔIà�?Š?Ø×#Ñ#Ø×1Ñ1ÀÐ1ÓPôð
 	×ÑÐ <Ô=ð ,<×+AÑ+AÔ+CÔXÑ+C™i˜c 4ÀtÇxÁxÐPVÕGW��T‘	Ð+CÒXÐXùÓXs   ÂB'ÂB'c                 ó|   — i }| j                   j                  «       D ]  \  }}t        ||| ¬«      ||<   Œ || _        y)z*create, but do not initialize all sessions)Úlanguage_serverrb   ÚparentN)r+   r_   r   r*   )r0   r*   rd   rb   s       r1   rO   z#LanguageServerManager.init_sessions¦   sE   € àˆØ%)×%:Ñ%:×%@Ñ%@Ö%BÑ!ˆO˜TÜ(=Ø /°dÀ4ô)ˆH�_Ò%ð &Cð !ˆ�r3   c                 óD  — t         j                  | j                  t        gt         j                  | j
                  t        gt         j                  | j                  t        gi}|j                  «       D ]n  \  }}|\  }}t        |¬«      D ]"  }	 |j                  |j                  «       «       Œ$ |D ].  } | j$                  j'                  |j(                  ¬«      |«       Œ0 Œp y# t        $ r1}| j                  j!                  d|j"                  |«       Y d}~Œ�d}~ww xY w)z'register traitlets-configured listeners©Úgroupz!Failed to load entry point %s: %sN)Úscope)r   ÚALLÚall_listenersr   ÚCLIENTÚclient_listenersr   ÚSERVERÚserver_listenersr   r_   r	   ÚappendÚloadÚ	ExceptionÚlogÚwarningÚnamerA   Úregister_message_listenerÚvalue)	r0   Úscopesri   Útrt_epÚ	listenersÚentry_pointÚeptÚerrÚlisteners	            r1   rN   z$LanguageServerManager.init_listeners¯   sø   € ô ×Ñ˜t×1Ñ1Ô3EÐFÜ×Ñ $×"7Ñ"7Ô9NÐ!OÜ×Ñ $×"7Ñ"7Ô9NÐ!Oð
ˆð
 $Ÿ\™\ž^‰MˆE�6Ø%+Ñ"ˆI�{ä#¨+×6�ðYØ×$Ñ$ S§X¡X£ZÕ0ð 7ó &�ØK�—‘×8Ñ8¸u¿{¹{Ð8ÓKÈHÕUñ &ñ ,øô !ò YØ—H‘H×$Ñ$Ð%HÈ#Ï(É(ÐTW×XÑXûðYús   ÂC%Ã%	DÃ.'DÄDc                 óø   — | j                   j                  |j                  «      }|€5| j                  j	                  dj                  |j                  «      «       yt        |g«      |j                  z  |_        y)z&subscribe a handler to session, or staNz,[{}] no session: handler subscription failed)r*   r@   rd   rs   ÚerrorÚformatÚsetÚhandlers)r0   ÚhandlerÚsessions      r1   Ú	subscribezLanguageServerManager.subscribeÃ   sf   € à—-‘-×#Ñ# G×$;Ñ$;Ó<ˆàˆ?Ø�H‰H�N‰NØ>×EÑEØ×+Ñ+óôð
 ä ˜y›>¨G×,<Ñ,<Ñ<ˆÕr3   c              ƒ   óP  K  — | j                  t        j                  ||j                  «      ƒ d {  –—†  | j                  j                  |j                  «      }|€5| j                  j                  dj                  |j                  «      «       y |j                  |«       y 7 Œr­w)Nz'[{}] no session: client message dropped)
Úwait_for_listenersr   rl   rd   r*   r@   rs   r€   r�   Úwrite)r0   Úmessager„   r…   s       r1   Úon_client_messagez'LanguageServerManager.on_client_messageÑ   s�   è ø€ Ø×%Ñ%Ü×Ñ ¨'×*AÑ*Aó
÷ 	
ð 	
ð —-‘-×#Ñ# G×$;Ñ$;Ó<ˆàˆ?Ø�H‰H�N‰NØ9×@Ñ@Ø×+Ñ+óôð
 à�‰�gÕð	
ús   ‚/B&±B$²A3B&c              ƒ   ó$  K  — | j                   j                  «       D ��cg c]  \  }}||k(  sŒ|‘Œ }}}|D ]+  }| j                  t        j                  ||«      ƒ d {  –—†  Œ- |j
                  D ]  }|j                  |«       Œ y c c}}w 7 Œ/­wr-   )r*   r_   rˆ   r   rn   rƒ   Úwrite_message)r0   rŠ   r…   Úls_keyÚsessr+   r„   s          r1   Úon_server_messagez'LanguageServerManager.on_server_messageá   s—   è ø€ à'+§}¡}×':Ñ':Ô'<ô
Ù'<‘|�v˜tÀÈÃŠFÐ'<ð 	ñ 
ó !1ÐØ×)Ñ)Ü×#Ñ# WÐ.>ó÷ ñ ð !1ð
 ×'Ô'ˆGØ×!Ñ! 'Õ*ñ (ùó
ð
ús    ‚B B®B²,BÁBÁ0Bc                 ó  — | j                   j                  |j                  «      }|€5| j                  j	                  dj                  |j                  «      «       y |j                  D �cg c]
  }||k7  sŒ	|‘Œ c}|_        y c c}w )Nz.[{}] no session: handler unsubscription failed)r*   r@   rd   rs   r€   r�   rƒ   )r0   r„   r…   Úhs       r1   Úunsubscribez!LanguageServerManager.unsubscribeî   su   € Ø—-‘-×#Ñ# G×$;Ñ$;Ó<ˆàˆ?Ø�H‰H�N‰NØ@×GÑGØ×+Ñ+óôð
 à'.×'7Ò'7ÓHÑ'7 !¸1À»<šAÐ'7ÑHˆÕùÒHs   Á+
BÁ6Bc              #   ót  K  — d }	 t        t        ¬«      }g }|xs g D ]è  }	 |j                  «       }	 |rIt        |d«      r=t        t        |«      }|j                  | «      s|j                  |j                  «       Œ` || «      xs i }t#        t%        j&                  |«      «      }	|	r?| j                  j                  t        d«      j                  |j                  |	«      «       ŒË|j)                  «       D ]  \  }
}|
|f–— Œ Œê |rC| j                  j+                  t        d«      j                  dj-                  |«      «      «       y y # t        $ r | j                  j	                  d«       Y �Œ`w xY w# t        $ rI}| j                  j                  t        d«      j                  |j                  |«      «       Y d }~�Œ©d }~ww xY w# t        $ r]}| j                  j                  t        d«      j                  |j                  |«      «       t        j                   «        Y d }~�Œd }~ww xY w­w)	Nrg   zFailed to load entry_pointsz4Failed to load language server spec finder `{}`: 
{}Úis_installedzBFailed to fetch commands from language server spec finder `{}`:
{}zEFailed to validate commands from language server spec finder `{}`:
{}z#Skipped non-installed server(s): {}z, )r	   r   rr   rs   Ú	exceptionrq   rt   r   r�   ru   Úhasattrr   r    r•   rp   Ú	tracebackÚ	print_excÚlistr   Úiter_errorsr_   ÚinfoÚjoin)r0   rY   Ú_entry_pointsÚskipped_serversÚepÚspec_finderr}   Úspec_finder_from_baseÚspecsÚerrorsra   rb   s               r1   r^   z2LanguageServerManager._autodetect_language_serversû   sú  è ø€ Øˆð	>Ü(¬zÔ:ˆMð ˆàÒ% 2Ò%ˆBðØ)+¯©«�ðÙ!Ü˜{¨NÔ;Ü04´X¸{Ó0KÐ-Ø4×AÑAÀ$ÔGØ+×2Ñ2°2·7±7Ô;Ø$Ù# DÓ)Ò/¨R�ô Ô2×>Ñ>¸uÓEÓFˆFáØ—‘× Ñ Üð%ó÷ ‘f˜RŸW™W fÓ-ô	ð à"Ÿ[™[ž]‘	��TØ˜4�i“ñ +ðS &ñX Ø�H‰H�M‰MÜÐ7Ó8×?Ñ?Ø—I‘I˜oÓ.óõð øôc ò 	>Ø�H‰H×ÑÐ<×=ð	>ûô ò Ø—‘× Ñ ÜÐMÓN×UÑUØŸ™ óôõ
 ûðûô  ò 	Ø—‘× Ñ Üð%ó÷ ‘f˜RŸW™W cÓ*ô	ô ×#Ñ#Ô%åûð	üs‚   ‚H8†E –H8¢E:³A
GÁ=H8Á>GÂ
CH8Å$E7Å3H8Å6E7Å7H8Å:	GÆ>GÇH8ÇGÇH8Ç	H5ÇAH0È*H8È0H5È5H8)r;   N)/rB   Ú
__module__Ú__qualname__Ú__doc__r   r   r   r:   Útagr+   r   r'   ÚboolÚ__annotations__ÚDict_r   r   r*   r   r   r   r   r4   rP   ÚList_r   rk   ro   rm   r   r2   r9   r   rE   rK   rR   rV   rM   r[   rO   rN   r†   r‹   r�   r“   r^   Ú__classcell__)rA   s   @r1   r#   r#   2   sò  ø… Ù!á$Ø*ÙÐRÓSôÐñ
 Ø*ÙÐIÓJô÷ 
�cØð 
ó ð ñ Ø‘1ÐWÓXôç	�c�€cÓð �ó ñ
 	ÙÐ0Ó1ØØ9ô	
ð ˆd�5˜‘;Ð 5Ð5Ñ6ó ñ $ðô÷ 
�c�€cÓð ñ Ø;È5ô€Fñ Øôç	�c�€cÓð ñ Øôç	�c�€cÓð ñ Øôç	�c�€cÓð ñ ÐÓ ñó !ðñ Ð$Ó%ñMó &ðMñ Ð&Ó'ð Ð2Jò  ó (ð ð# õ #òòó
YðYØ"ðYà	!óYò&!òVò(=òò +òIð;¸4÷ ;r3   r#   )4r§   rT   r7   Úsysr˜   Útypingr   r   r   r   Úversion_infoÚimportlib_metadatar	   Úimportlib.metadataÚjupyter_core.pathsr
   Újupyter_server.services.configr   Újupyter_server.transutilsr   r   ÚImportErrorÚ	traitletsr   r«   r   r   r¬   r   r   Ú	constantsr   r   r   r   r   Úschemar   r…   r   Útrait_typesr   r   Útypesr   r   r   r    r!   r#   rv   Úlsp_message_listenerr.   r3   r1   Ú<module>r½      s¥   ðñó Û 	Û 
Û ß *Ó *ð ×Ñ�gÒÞ/å/å 2Ý 8ð,Ý4õ Ý #Ý Ý #ß &÷õ õ -Ý *ß 1÷õ ôDÐ4ô DðP -×FÑFÑ øðI	 ò ,ß+ð,ús   ÁB6 Â6CÃC