
    Mh                         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dS )    )ThreadPoolExecutor)Path)rmtree)List)run_on_executor)convert_yielded   )lsp_message_listener)file_uri_to_pathis_relative)LanguageServerManagerAPI   c                 T    |D ]$}	 | |         } # t           t          f$ r Y  d S w xY w| S N)KeyError	TypeError)objpathcrumbs      d/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/jupyter_lsp/virtual_documents_shadow.pyextract_or_noner      sO      	e*CC)$ 	 	 	444	Js   %%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dS )EditableFile)max_workersc                 \    t          |t                    rt          |          n|| _        d S r   )
isinstancestrr   r   )selfr   s     r   __init__zEditableFile.__init__   s&    ",T3"7"7ADJJJT			    c                 b   K   t          |                                            d {V | _        d S r   )r   
read_lineslinesr   s    r   readzEditableFile.read"   s5      *4??+<+<========


r    c                 T   K   t          |                                            d {V S r   )r   write_linesr$   s    r   writezEditableFile.write%   s2      $T%5%5%7%7888888888r    c                     dg}	 | j                             d                                          }n# t          $ r Y nw xY w|S )N utf-8encoding)r   	read_text
splitlinesFileNotFoundError)r   r#   s     r   r"   zEditableFile.read_lines(   s[     	I'''99DDFFEE  	 	 	D	s   -3 
A A c                     | j         j                            dd           | j                             d                    | j                  d           d S )NTparentsexist_ok
r+   r,   )r   parentmkdir
write_textjoinr#   r$   s    r   r'   zEditableFile.write_lines3   sO    	td;;;	TYYtz22WEEEEEr    r#   	charactersidec                 T    d}| r#| |         |d          }| |         |k    rd}|| |<   |S )NFT )r#   r:   r;   
needs_gluetrimmeds        r   trimzEditableFile.trim8   sD    
 	"Dk)**-GT{g%%!
!E$Kr    gluec                 >    |sg S | r| d         nd|r|d         ndz   gS )Nr*   r   r=   )leftrightrA   s      r   r9   zEditableFile.joinB   s7     	I!)br%.GeAhhRHIIr    textc                    | j         d |d                  }| j         |d         d          }|                     ||d         d          }|                     ||d         d          }|                    d          }|d |rdnd          |                     |||          z   ||rdnd |rdnd          z   |                     |||          z   ||rdnd d          z   pdg| _         d S )	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   OeFmO,
3v;==)))&E+<NUV)WW995C<LSU9VV

4   4?4RR45ii7782AAd;K5URRQUUVW iiu&6778 )3AAt5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   sS    ++
OO04
ATZ^,,,
 
 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 B B> > >9 9 9   _ F F _F D S     \ J J J J \J
    " , , X, , ,r    r   )ztextDocument/didOpentextDocument/didChangeztextDocument/didSavec                       e Zd ZdZdS )ShadowFilesystemErrorz Error in the shadow file system.N)rU   rV   rW   __doc__r=   r    r   ra   ra   f   s        ****r    ra   virtual_documents_uric                                            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         |         }|                    dd          sdS |                    d          t          vrdS t          |ddg          }|"t	          d                    |                    t          |dg          }|s"t	          d	                    |                    |                              sdS st                    d
k    rdS 	                     dd           t          t                                                   dd           nh# t          t          t          f$ rN}                    |           t                    d
k    r|j                            d           Y d}~dS d}~ww xY wdt#          |          }t%          |          st	          d| d          t'          |          }	|	                                 d{V  t          |dg          }
|
d|
ig}n5|d         dk    rdS d|d         vrt	          d          |d         d         }t          |          dk    r|j                            d           |dd         D ]1}|                    d|	j                  } |	j        |d         fi | 2|	                                 d{V  |S )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   se      .?;TBB 	F{{8$$	11F"7X~,FGG'5<<WEE   h00 	V'(D(K(KG(T(TUUU~~344 	F  	8}}!!!''t'DDDs,--...!''t'DDDD_.?@   """x==A%%K$$g
 !    K$$,d33 	'HHHH   %T**  """""""""x&22~&GG x $<<<wx'888+F   h'(89Gw<<!KT   bqbk 	G 	GF!::g}/GHHL&M&vf~FFFFFF!!#########s   !A
D, ,FAFF)rs   ra   r   r   r
   )rc   r   r   r   r   s   ` @@@r   setup_shadow_filesystemr   j   s     ++H55 
#D#$
 
 	

 K "H-.CDDEE(##Z Z Z Z Z Z 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      sX   1 1 1 1 1 1                   . . . . . . ' ' ' ' ' ' ) ) ) ) ) ) 0 0 0 0 0 0 0 0 + + + + + +   E, E, E, E, E, E, E, E,P WVV	+ + + + +J + + +i$3 i$ i$ i$ i$ i$ i$r    