
    ^h                         S SK Jr  S SKJr  S SKJr  S SKJr  S SKJ	r	  S SK
Jr  SSKJr  SS	KJrJr  SS
KJr  SrS r " S S5      r/ SQr " S S\5      rS\4S jrg)    )ThreadPoolExecutor)Path)rmtree)List)run_on_executor)convert_yielded   )lsp_message_listener)file_uri_to_pathis_relative)LanguageServerManagerAPI   c                 P    U H  n X   n M
     U $ ! [         [        4 a       g f = fN)KeyError	TypeError)objpathcrumbs      ^/home/james-whalen/.local/lib/python3.13/site-packages/jupyter_lsp/virtual_documents_shadow.pyextract_or_noner      s8    	*C 
 J )$ 		s   %%c                       \ rS rSr\" \S9rS rS rS r	\
S 5       r\
S 5       r\S\S	\S
\4S j5       r\S\4S j5       rS\4S jr\S 5       rSrg)EditableFile   )max_workersc                 ^    [        U[        5      (       a  [        U5      U l        g UU l        g r   )
isinstancestrr   r   )selfr   s     r   __init__EditableFile.__init__   s    ",T3"7"7DJ	T	    c                 \   #    [        U R                  5       5      I S h  vN U l        g  N
7fr   )r   
read_lineslinesr   s    r   readEditableFile.read"   s     *4??+<==
=s   ,*,c                 P   #    [        U R                  5       5      I S h  vN $  N7fr   )r   write_linesr&   s    r   writeEditableFile.write%   s     $T%5%5%78888s   &$&c                 ~    S/n U R                   R                  SS9R                  5       nU$ ! [         a     U$ f = f)N utf-8encoding)r   	read_text
splitlinesFileNotFoundError)r   r%   s     r   r$   EditableFile.read_lines(   sP     	II'''9DDFE  ! 		s   '. 
<<c                     U R                   R                  R                  SSS9  U R                   R                  SR	                  U R
                  5      SS9  g )NTparentsexist_ok
r/   r0   )r   parentmkdir
write_textjoinr%   r&   s    r   r*   EditableFile.write_lines3   sC    		td;		TYYtzz2WEr"   r%   	charactersidec                 B    SnU (       a  X   US  nX   U:w  a  SnX@U'   U$ )NFT )r%   r@   rA   
needs_gluetrimmeds        r   trimEditableFile.trim8   s4    
k)*-G{g%!
!$Kr"   gluec                 V    U(       d  / $ U (       a  U S   OSU(       a  US   -   /$ S-   /$ )Nr.   r   rC   )leftrightrH   s      r   r>   EditableFile.joinB   s1    I!br%eAhHIIRHIIr"   textc                    U R                   S US    nU R                   US   S  nU R                  XBS   SS9nU R                  XSS   SS9nUR                  S5      nUS U(       a  SOS  U R                  XHU5      -   X(       a  SOS U(       a  SOS  -   U R                  XU5      -   XW(       a  SOS S  -   =(       d    S/U l         g )	Nliner@   r   )r%   r@   rA   rJ   r:   r	   r.   )r%   rF   splitr>   )	r   rN   startendbeforeafterneeds_glue_leftneeds_glue_rightinners	            r   apply_changeEditableFile.apply_changeH   s    OeFm,

3v;=)))&+<NUV)W995<LSU9V

4  4?R5ii78Ad;KRQUVW ii&678 )At56	7 T 	
r"   c                     SSS.n[        U R                  5      U R                  (       a  [        U R                  S   5      OSS.nXS.$ )Nr   )rP   r@   rJ   )rR   rS   )lenr%   )r   rR   rS   s      r   
full_rangeEditableFile.full_rangeY   sA    +

O04

TZZ^,
 ++r"   )r%   r   N)__name__
__module____qualname____firstlineno__r   MAX_WORKERSexecutorr    r'   r+   r   r$   r*   staticmethodlistintrF   boolr>   r   rY   propertyr]   __static_attributes__rC   r"   r   r   r      s    !k:HB>9   F F D S    J J J
 " , ,r"   r   )ztextDocument/didOpentextDocument/didChangeztextDocument/didSavec                       \ rS rSrSrSrg)ShadowFilesystemErrorf   z Error in the shadow file system.rC   N)r_   r`   ra   rb   __doc__rj   rC   r"   r   rm   rm   f   s    *r"   rm   virtual_documents_uric                    ^ ^^^ T R                  S5      (       d  [        ST -   5      eSm/ m[        [        T 5      5      m[	        S5      UUUU 4S j5       nU$ )Nzfile:/z6Virtual documents URI has to start with "file:/", got Fclientc                   >#    UR                   U   nUR                  SS5      (       d  gUR                  S5      [        ;  a  g[        USS/5      nUc  [	        SR                  U5      5      e[        US/5      nU(       d  [	        S	R                  U5      5      eUR                  T5      (       d  gT(       dG  [        T5      S
:X  a  g TR                  SSS9  [        [        T5      5        TR                  SSS9  Sm[#        U5      n[%        TU5      (       d  [	        SU S35      e['        U5      n	U	R)                  5       I Sh  vN   [        US/5      n
U
b  SU
0/nO&US   S:w  a  gSUS   ;  a  [	        S5      eUS   S   n[        U5      S:  a  UR                  R!                  S5        USS  H5  nUR                  SU	R*                  5      nU	R,                  " US   40 UD6  M7     U	R/                  5       I Sh  vN   U$ ! [        [        [        4 aF  nTR                  U5        [        T5      S
:X  a  UR                  R!                  ST5         SnAgSnAff = f GN! Ng7f)zIntercept a message with document contents creating a shadow file for it.

Only create the shadow file if the URI matches the virtual documents URI.
Returns the path on filesystem where the content was stored.
requires_documents_on_diskTNmethodparamstextDocumentz#Could not get textDocument from: {}urizCould not get URI from: {}   r7   a\  [lsp] initialization of shadow filesystem failed three times check if the path set by `LanguageServerManager.virtual_documents_dir` or `JP_LSP_VIRTUAL_DIR` is correct; if this is happening with a server for which you control (or wish to override) jupyter-lsp specification you can try switching `requires_documents_on_disk` off. The errors were: %szPath z* is not relative to shadow filesystem rootrN   rk   contentChangesz0textDocument/didChange is missing contentChangesr	   zBLSP warning: up to one change supported for textDocument/didChangerange)language_serversget	WRITE_ONEr   rm   format
startswithr\   r<   r   r   OSErrorPermissionErrorr4   appendlogwarnr   r   r   r'   r]   rY   r+   )scopemessagelanguage_servermanagerserver_specdocumentrx   er   editable_filerN   changeschangechange_rangefailuresinitializedshadow_filesystemrp   s                 r   shadow_virtual_documents9setup_shadow_filesystem.<locals>.shadow_virtual_documentsv   s     ..?;TBB{{8$	1"7X~,FG'5<<WE  h0'(D(K(KG(TUU~~344 8}!!''t'Ds,-.!''t'D K$,d33'vGH  %T*  """x&2~&G x $<<wx'88+F  h'(89Gw<!KKT bqkF!::g}/G/GHL&&vf~FF " !!###e _.?@ "x=A%KK$$g
 ! , 	#4 	$sP   C	I24H AI2I-B;I2I0	I2I*$<I% I2%I**I20I2)r   rm   r   r   r
   )rp   r   r   r   r   s   ` @@@r   setup_shadow_filesystemr   j   sl     ++H55#D#$
 	

 K "H-.CDE(#Z $Zx $#r"   N)concurrent.futuresr   pathlibr   shutilr   typingr   tornado.concurrentr   tornado.genr   r   r
   pathsr   r   typesr   rc   r   r   r~   
ValueErrorrm   r   r   rC   r"   r   <module>r      s[    1    . ' ) 0 + E, E,P W	+J +i$3 i$r"   