
    Xh                         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 dZd Z G d d      Zg dZ G d de      ZdefdZy)    )ThreadPoolExecutor)Path)rmtree)List)run_on_executor)convert_yielded   )lsp_message_listener)file_uri_to_pathis_relative)LanguageServerManagerAPI   c                 L    |D ]  }	 | |   } 
 | S # t         t        f$ r Y  y w xY wN)KeyError	TypeError)objpathcrumbs      X/var/www/html/myenv/lib/python3.12/site-packages/jupyter_lsp/virtual_documents_shadow.pyextract_or_noner      s?     	e*C
 J )$ 		s   ##c                       e Zd Z ee      Zd Zd Zd Ze	d        Z
e	d        Zededed	efd
       Zedefd       ZdefdZed        Zy)EditableFile)max_workersc                 T    t        |t              rt        |      | _        y || _        y r   )
isinstancestrr   r   )selfr   s     r   __init__zEditableFile.__init__   s    ",T3"7DJ	T	    c                 \   K   t        | j                                d {   | _        y 7 
wr   )r   
read_lineslinesr   s    r   readzEditableFile.read"   s     *4??+<==
=s   ,*,c                 P   K   t        | j                                d {   S 7 wr   )r   write_linesr$   s    r   writezEditableFile.write%   s      $T%5%5%78888s   &$&c                     dg}	 | j                   j                  d      j                         }|S # t        $ r Y |S w xY w)N utf-8encoding)r   	read_text
splitlinesFileNotFoundError)r   r#   s     r   r"   zEditableFile.read_lines(   sP     	II'''9DDFE  ! 		s   *1 	>>c                     | j                   j                  j                  dd       | j                   j                  dj	                  | j
                        d       y )NTparentsexist_ok
r+   r,   )r   parentmkdir
write_textjoinr#   r$   s    r   r'   zEditableFile.write_lines3   sC    		td;		TYYtzz2WEr    r#   	charactersidec                 <    d}| r| |   |d  }| |   |k7  rd}|| |<   |S )NFT )r#   r:   r;   
needs_gluetrimmeds        r   trimzEditableFile.trim8   s:    
Dk)*-GT{g%!
!E$Kr    gluec                 8    |sg S | r| d   nd|r|d   z   gS dz   gS )Nr*   r   r=   )leftrightrA   s      r   r9   zEditableFile.joinB   s1    I!br%eAhHIIRHIIr    textc                 p   | j                   d |d    }| j                   |d   d  }| j                  ||d   d      }| j                  ||d   d      }|j                  d      }|d |rdnd  | j                  |||      z   ||rdnd |rdnd  z   | j                  |||      z   ||rdnd d  z   xs dg| _         y )	Nliner:   r   )r#   r:   r;   rC   r5   r	   r*   )r#   r@   splitr9   )	r   rF   startendbeforeafterneeds_glue_leftneeds_glue_rightinners	            r   apply_changezEditableFile.apply_changeH   s    OeFm,

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

4  4?R5ii78Ad;KRQUVW iiu&678 )At56	7 T 	
r    c                     ddd}t        | j                        | j                  rt        | j                  d         ndd}||dS )Nr   )rH   r:   rC   )rJ   rK   )lenr#   )r   rJ   rK   s      r   
full_rangezEditableFile.full_rangeY   sC    +

O04

TZZ^,
 s++r    N)__name__
__module____qualname__r   MAX_WORKERSexecutorr   r%   r(   r   r"   r'   staticmethodlistintr@   boolr9   r   rQ   propertyrT   r=   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                       e Zd ZdZy)ShadowFilesystemErrorz Error in the shadow file system.N)rU   rV   rW   __doc__r=   r    r   ra   ra   f   s    *r    ra   virtual_documents_uric                       j                  d      st        d z         dg t        t                     t	        d       fd       }|S )Nzfile:/z6Virtual documents URI has to start with "file:/", got Fclientc                   K   |j                   |   }|j                  dd      sy|j                  d      t        vryt        |ddg      }|t	        dj                  |            t        |dg      }|st	        d	j                  |            |j                        sysLt              d
k(  ry	 j                  dd       t        t                     j                  dd       dt#        |      }t%        |      st	        d| d      t'        |      }	|	j)                          d{    t        |dg      }
|
d|
ig}n#|d   dk7  ryd|d   vrt	        d      |d   d   }t        |      dkD  r|j                  j!                  d       |dd D ]4  }|j                  d|	j*                        } |	j,                  |d   fi | 6 |	j/                          d{    |S # t        t        t        f$ rE}j                  |       t              d
k(  r|j                  j!                  d       Y d}~yd}~ww xY w7 7 ew)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: {}   r2   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 rootrF   r_   contentChangesz0textDocument/didChange is missing contentChangesr	   zBLSP warning: up to one change supported for textDocument/didChangerange)language_serversget	WRITE_ONEr   ra   format
startswithrS   r7   r   r   OSErrorPermissionErrorr0   appendlogwarnr   r   r   r%   rT   rQ   r(   )scopemessagelanguage_servermanagerserver_specdocumentrk   er   editable_filerF   changeschangechange_rangefailuresinitializedshadow_filesystemrc   s                 r   shadow_virtual_documentsz9setup_shadow_filesystem.<locals>.shadow_virtual_documentsv   s     ..?;TB{{8$	1"7X~,FG'5<<WE  h0'(D(K(KG(TUU~~34 8}!!''t'Ds,-.!''t'D K$,d3'vGH  %T*  """x&2~&G x $<<wx'88+F  h'(89Gw<!KKT bqk 	GF!::g}/G/GHL&M&&vf~FF	G !!###e _.?@ "x=A%KK$$g
 ! , 	#4 	$sP   B1I5:G1 /AI5I6B4I*I+I1I
;I II

II)rs   ra   r   r   r
   )rc   r   r   r   r   s   ` @@@r   setup_shadow_filesystemr   j   si     ++H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   rX   r   r   rq   
ValueErrorra   r   r   r=   r    r   <module>r      s[    1    . ' ) 0 + E, E,P W	+J +i$3 i$r    