
    ^h+                     n    S SK r S SKrS SKrS SKrS SKrS rS rS rS r	S r
SS jr " S	 S5      rS
 rg)    Nc                 t    SXS.nU(       a  X#S'   [         R                  " U5      nS[        U5       S3nXT-   $ )N2.0)jsonrpcidmethodparamsContent-Length: 

jsondumpslen)r   r   r   requestcontentheaders         d/home/james-whalen/.local/lib/python3.13/site-packages/chatdbg/native_util/clangd_lsp_integration.py_to_lsp_requestr   	   s@    r<G"jj!GG~X6F    c                 t    SU S.nU(       a  XS'   [         R                  " U5      nS[        U5       S3nXC-   $ )Nr   )r   r   r   r	   r
   r   )r   r   r   r   r   s        r   _to_lsp_notificationr      s@    62G"jj!GG~X6Fr   c                 N    0 n UR                  5       R                  5       nU(       d  O6UR                  SS5      u  pEUR                  5       X$R                  5       '   M\  UR                  [	        US   5      5      n[
        R                  " U5      nSU;   a  US   U :X  a  U$ M  )N:   zContent-Lengthr   )readlinestripsplitreadintr   loads)r   filer   linekeyvaluer   responses           r   _parse_lsp_responser%      s    
==?((*DC+JC"'++-F99;  ))C'7 89:::g&8" 4O r   c                 F    S[         R                  R                  U 5      -   $ )Nzfile://)ospathabspath)r(   s    r   _path_to_urir*   /   s    rwwt,,,r   c                 
   [         R                  R                  U 5      nUR                  S:X  d   eUR                  (       a   eUR
                  (       a   eUR                  (       a   eUR                  (       a   eUR                  nUR                  [        R                  " 5       5      (       a3  [        R                  R                  U[        R                  " 5       5      n[         R                  R                  U5      $ )Nr    )urllibparseurlparseschemenetlocr   queryfragmentr(   
startswithr'   getcwdrelpathunquote)uridatar(   s      r   uri_to_pathr9   3   s    <<  %D;;&   {{?{{?zz>}}99Dryy{##wwtRYY[1<<%%r   clangdc                      [         R                  " U S/[         R                  [         R                  S9nUR                  S:H  $ ! [         a     gf = f)Nz	--version)stdoutstderrr   F)
subprocessrunDEVNULL
returncodeFileNotFoundError)
executabler:   s     r   is_availablerD   B   sT    %%%%%

   A%% s   AA 
AAc                   t    \ rS rSrS \R
                  " 5       \R                  4S jrS r	S r
S rS rS rSrg	)
r:   N   c           	          SU l         [        R                  " U/S[        R                  [        R                  UUS9U l        U R                  5         g )Nr   T)textstdinr<   r=   cwd)r   r>   PopenPIPEprocess
initialize)selfrC   working_directoryr=   s       r   __init__clangd.__init__O   sE     !''L//??!
 	r   c                 8    U R                   R                  5         g )N)rM   	terminate)rO   s    r   __del__clangd.__del__`   s     r   c                 j   U =R                   S-  sl         [        U R                   SS[        R                  " 5       05      nU R                  R
                  R                  U5        U R                  R
                  R                  5         [        U R                   U R                  R                  5      $ )Nr   rN   	processId)
r   r   r'   getpidrM   rI   writeflushr%   r<   )rO   r   s     r   rN   clangd.initializec   su    1!$''<+ryy{9ST  )  ""477DLL,?,?@@r   c           	      :   [        US5       nUR                  5       nS S S 5        [        SS[        U5      USWS.05      nU R                  R
                  R                  U5        U R                  R
                  R                  5         g ! , (       d  f       Nt= f)NrztextDocument/didOpentextDocumentr   )r7   
languageIdversionrH   )openr   r   r*   rM   rI   rZ   r[   )rO   filenamer`   r    rH   notifications         r   didOpenclangd.didOpenk   s    (C D99;D ! ,"'1",  	!

 	  .  " ! s   B
Bc                     [        SSS[        U5      005      nU R                  R                  R	                  U5        U R                  R                  R                  5         g )NztextDocument/didCloser_   r7   )r   r*   rM   rI   rZ   r[   )rO   rc   rd   s      r   didCloseclangd.didClose}   sP    +#nul8>T6U%V
 	  .  "r   c                 n   U =R                   S-  sl         [        U R                   SS[        U5      0US-
  US-
  S.S.5      nU R                  R                  R                  U5        U R                  R                  R                  5         [        U R                   U R                  R                  5      $ )Nr   ztextDocument/definitionr7   )r!   	character)r_   position)	r   r   r*   rM   rI   rZ   r[   r%   r<   )rO   rc   r!   rk   r   s        r   
definitionclangd.definition   s    1!GG%!&X(> ? !1H!*Q
 	  )  ""477DLL,?,?@@r   )r   rM   N)__name__
__module____qualname____firstlineno__r'   r4   r>   r@   rQ   rU   rN   re   rh   rm   __static_attributes__ r   r   r:   r:   N   s9     ))+!!	"!A#$#Ar   c                 b   [        5       (       d  gU R                  S5      nUS:X  a  gU S U nXS-   S  nUR                  S5      n[        U5      S:w  a  gUS   [	        US   5      pe [        US	5       nUR                  5       nS S S 5        US-
  [        W5      :  a  gXS-
     R                  U5      n	U	S:X  a'  UR                  S5      nXS-
     R                  U5      n	U	S:X  a*  UR                  S5      S   nXS-
     R                  U5      n	U	S:X  a\  [        SSS5       HK  n
US-
  U
-   S:  d  US-
  U
-   [        U5      :  a  M&  XS-
  U
-      R                  U5      n	U	S:w  d  MG  Xj-  n  O   U	S:X  a  gS n[        5       (       a
  [        5       nUR                  XUR                  S5      (       a  SOS5        UR                  XVU	S-   5      nUR                  U5        SU;  d
  US   (       d  g[!        US   S   S   5      nUS   S   S   S   S   S-   nUS   S   S   S   S   S-   n["        R$                  " XS-
  US-   5      u  nn["        R&                  " UU5      nX:X  a  SU 3OSU SU 3nSU S U S!U S"3$ ! , (       d  f       GN
= f! [         a	    S
U S3s $ f = f)#NzM`clangd` was not found. The `definition` function will not be made available. z.usage: definition <filename>:<lineno> <symbol>r   r      r   r^   zfile 'z' not found.z"symbol not found at that location.*z::   z.cccppresultzNo definition found.r7   rangestartr!   end   zline zlines -zFile 'z' at z:
```
z
```)rD   rfindr   r   r   rb   	readlinesrB   findlstripr   r:   re   endswithrm   rh   r9   	llm_utils
read_linesnumber_group_of_lines)commandlast_space_indexfilename_linenosymbolpartsrc   linenor    linesrk   i_clangdrm   r(   start_lineno
end_linenofirstr   line_strings                      r   native_definitionr      s   >>^}}S)2?//0O)+,F!!#&E
5zQ?QxU1Xf/(C DNN$E !
 zSZ3 qj!&&v.I Bs#1*%**62	Bd#B'1*%**62	 Br1aAzA~!VaZ!^s5z%Aqj1n-226:IB ! B3G~~(OOH%6%6t%<%<c%H##Hi!mDJXz!H)=%z(+A.u56Dh'*73G<VDqHLH%a(1%8@1DJ''Q.>
QOLE5--eU;G % ~l^1ZL1 
 dV5XgYeFFm !  /z../s0   )J 5J	J 	
JJ J J.-J.)r:   )r   r'   r>   urllib.parser,   r   r   r   r%   r*   r9   rD   r:   r   rt   r   r   <module>r      sH     	   "-&	FA FARDGr   