
    ^h                     8   S SK r S SKrS SKrS SKJr  S SKJr  S SKJrJ	r	J
r
  SSKJr  SSKJrJrJrJrJr  \" \5      R(                  S-  r\ R,                  R/                  S	5      SLr " S
 S\5      r " S S\5      r " S S\5      rS/S/0 S.rS\S\4S jrg)    N)Path)check_output)ListTextUnion   )SPEC_VERSION)KeyedLanguageServerSpecsLanguageServerManagerAPILanguageServerSpecSpecBaseTokenhelpersJUPYTER_LSP_BUILDING_DOCSc                   n    \ rS rSr% SrSr/ r\\   \	S'   S\
S\4S jrS\\S4   4S	 jrS\
S\4S
 jrSrg)	ShellSpec   z_Helper for a language server spec for executables on $PATH in the
notebook server environment.
 is_installed_argsmgrreturnc                     U R                  5       nU(       d  gU R                  (       d  [        U5      $ [        U/U R                  Q5      R	                  SS9nUS:g  $ )NFzutf-8)encodingr   )solver   boolr   decode)selfr   cmdcheck_results       Q/home/james-whalen/.local/lib/python3.13/site-packages/jupyter_lsp/specs/utils.pyis_installedShellSpec.is_installed$   s_    jjl%%9'(Ft/E/E(FGNN  O L  2%%    Nc                 r    S H0  n[         R                  " U R                  U-   5      nU(       d  M/    U$    W$ )N)r   z.cmdz.batz.exe)shutilwhichr   )r   extr   s      r    r   ShellSpec.solve2   s6    /C,,txx#~.Cs
	 0 
r#   c                    U R                  5       n[        U R                  5      nU(       d>  U R                   S3/nSU;   a  UR	                  US   5        SR                  U5      US'   U(       d  [        (       a  U R                  nU R                  U(       a  U/U R                  QOU R                  /U R                  QU R                  [        S.UE0$ )Nz not found.troubleshoot

argv	languagesversion)r   dictspecr   appendjoinBUILDING_DOCSkeyargsr.   r	   )r   r   r   r1   troubleshootings        r    __call__ShellSpec.__call__9   s    jjlDII"&((;78O%&&tN';<#);;#?D }}((C HH-0)tyy)txx6L$))6L!^^' 	
 	
r#    )__name__
__module____qualname____firstlineno____doc__r   r   r   r   __annotations__r   r   r!   r   strr   r
   r8   __static_attributes__r:   r#   r    r   r      s]     C
 &(tE{'& 8 &T &uS$Y' 
4 
9Q 
r#   r   c                   F    \ rS rSrSrSrS\S\4S jrS r	S\S\
4S jrS	rg
)PythonModuleSpecQ   zRHelper for a python-based language server spec in the notebook server
environment
r   r   r   c                 X    U R                  5       nU(       d  gUR                  (       d  gg)NFT)r   origin)r   r   r1   s      r    r!   PythonModuleSpec.is_installedX   s     zz|{{r#   c                 ^    [        S5      R                  R                  U R                  5      $ )N	importlib)
__import__util	find_specpython_module)r   s    r    r   PythonModuleSpec.solvec   s$    +&++55d6H6HIIr#   c                     U R                  U5      nU R                  U(       a)  [        R                  SU R                  /U R
                  QO/ U R                  [        S.U R                  E0$ )Nz-mr,   )	r!   r5   sys
executablerN   r6   r.   r	   r1   )r   r   r!   s      r    r8   PythonModuleSpec.__call__f   si    ((- HH $ ^^T4+=+=J		J!^^'	 ))	
 	
r#   r:   N)r;   r<   r=   r>   r?   rN   r   r   r!   r   r
   r8   rB   r:   r#   r    rD   rD   Q   s=     M	 8 	T 	J
4 
9Q 
r#   rD   c                   d    \ rS rSr% SrSr/ r\\   \	S'   S\
S\4S jrS\
4S jrS\
S\4S	 jrS
rg)NodeModuleSpecw   zNHelper for a nodejs-based language server spec in one of several
node_modules
r   scriptr   r   c                 :    U R                  U5      n[        U5      $ N)r   r   )r   r   node_modules      r    r!   NodeModuleSpec.is_installed   s    jjoK  r#   c                 P    UR                   " U R                  /U R                  Q76 $ rY   )find_node_modulerZ   rW   )r   r   s     r    r   NodeModuleSpec.solve   s"    ##D$4$4Ct{{CCr#   c                 X   U R                  U5      n[        U R                  5      nS/nSU;   a  UR                  US   5        SR	                  U5      US'   U R                  U5      nU R                  U(       a  UR                  U/U R                  QO/ U R                  [        S.UE0$ )Nz+Node.js is required to install this server.r*   r+   r,   )r   r0   r1   r2   r3   r!   r5   nodejsr6   r.   r	   )r   r   rZ   r1   r7   r!   s         r    r8   NodeModuleSpec.__call__   s    jjoDIIHIT!""4#78%{{?;^((- HHBN#**k>DII>TV!^^' 	
 	
r#   r:   N)r;   r<   r=   r>   r?   rZ   rW   r   r   r@   r   r   r!   r   r
   r8   rB   r:   r#   r    rU   rU   w   sT     KFDJ! 8 !T !D1 D
4 
9Q 
r#   rU   r   )r-   
debug_argvenvr1   r   c           	          U R                  5        VVs0 s H  u  pU[        R                  X5      _M     snn$ s  snnf rY   )itemsSKIP_JSON_SPECget)r1   kvs      r    censored_specrj      s2    48JJLALDAA~!!!''LAAAs   ":)osr%   rQ   pathlibr   
subprocessr   typingr   r   r   schemar	   typesr
   r   r   r   r   __file__parentHELPERSenvironrg   r4   r   rD   rU   rf   rj   r:   r#   r    <module>ru      s    	  
  # $ $ !  x.

)
+ 

:;4G6
 6
r#
x #
L"
X "
N $rd2>B* B/A Br#   