
    8@d                         d dl Z d dlZd dlmc mZ d dlmZ ej        ej	        ej
        fZ e j        d          Zed             Zd Zd Zd Zd Zd	 Zd
 Zd Zd Zd ZdS )    N)hookimplz(\s+).+c                     | j         dz   }|                                }t          j        |          }t	          ||          }g }|D ]'\  }}|dz  }|dz  }|                    ||d           (|S )N
   )	startLineendLine)source
splitlinesparsoparse__compute_folding_rangesappend)documentprogramlinestreerangesresults
start_lineend_lines           5lib/python3.11/site-packages/pylsp/plugins/folding.pypylsp_folding_ranger      s    o$G  E;wD%dE22FG"(  Xa
A 	#
 
 	 	 	 	 N    c                     t          |                                           D ]-}|                    |d           }|t          ||          | |<   .|                     |           | S )N)listkeyspopmaxupdate)leftrightstartright_starts       r   __merge_folding_rangesr$   #   se    diikk"" 2 2iit,,"k511DKKKKr   c                     | g k    rG|                      d          }|                     |          }|                    ||f           | g k    G|S Nr   )r   r   )identation_stacklevel_limitscurrent_linefolding_rangesupper_levellevel_starts         r   __empty_identation_stackr-   ,   sa    
b
 
 &**1--"&&{33{L9::: b
 
  r   c                     |                      d          }||k    rG|                     |          }|                    ||f           |                      d          }||k    G|                     d|           | |fS r&   )r   r   insert)r'   levelr(   r*   r)   r+   r,   s          r   __match_identation_stackr1   5   s    "&&q))K


"&&{33{L9:::&**1-- 

 A{+++^++r   c                 ^   |                                  }g }g }i }d}d}||         dk    r|dz  }||         dk    t          |          D ]\  }}||k     r|dz  }t                              |          }	|	g|	                    d          }
t          |
          }||k    r|||<   |                    d|           |}n3||k     rt          |||||          \  }}|}nt          ||||          }d}|	                                dk    r|}t          ||||          }t          |          S )Nr    r   )r
   	enumerateIDENTATION_REGEXmatchgrouplenr/   r1   r-   stripdict)textr   r*   r'   r(   current_levelr)   ilineidentation_match
whitespacer0   s               r   #__compute_folding_ranges_identationrA   @   s   OOENLML


#
# 

#
#U##  4|	Q+11$77')//22J
OOE}$$.:]+ ''=999 %&&3K$e\> 4" 4"0 . !&5 ,nN NNM::<<2L-,nF FNr   c                     d}t          | t          j                  r2| j        }|dv}|dk    r!t          | j        t          j                  rd}|S )NT>   	decorated
parameterstestlist_compdictorsetmakersuiteF)
isinstance
tree_nodes
PythonNodetypeparentFunction)nodevalidkinds      r   __check_if_node_is_validrQ   e   s\    E$
-.. y . .7??$+z':;; Lr   c                     | |         }|g}t          |d          r|j        }| d |         |z   | |dz   d          z   } |}|j        \  }}||fS )Nchildrenr   )hasattrrS   end_pos)stackskipbodyrS   rN   r   _s          r   __handle_skiprZ   q   si    ;DvHtZ   !=%4%L8#eD1HII&66ED,KHa>r   c                    d}t          | t          j                  rd}| j        dv rt	          |d          \  } }n| j        dv rJ|d         }t          |t          j                  rt	          |d          \  } }nMt	          |d          \  } }n9| j        dv rt	          |d	          \  } }n| j        d
v rt	          |d          \  } }||| |fS )NFT>   ifelifwithwhile   >   exceptr   r   >   for   >   else)rH   rI   KeywordvaluerZ   Operator)rN   r   rV   from_keyword
first_nodes        r   __handle_flow_nodesrj   |   s    L$
*++ 5:888*5!44ND((Z:%%qJ*j&9:: 9!.ua!8!8hh!.ua!8!8hhZ7""*5!44ND((Z8##*5!44ND(\4..r   c                    | j         \  }}| j        \  }}d}t          | ||          \  }}} }|                                 }t	          |t
          j                  }t	          |t
          j                  }	t	          | t
          j                  }
|	p|
 }	|dz  }t	          | j        t
          j	                  r?|s=| j
        }|dv r2t          |          dk    r|d         }|j         \  }}||k    r|dz  }d}|s	|s|	s|dz  }|||fS )NFr   >   atomrG   arglist	atom_exprr   T)	start_posrU   rj   get_last_leafrH   rI   Newlinerg   rL   rJ   rK   r8   )rN   rV   r   rY   r   modifiedrh   	last_leaflast_newlinelast_operatornode_is_operatorrP   	next_node	next_lines                 r   __compute_start_end_linesry      s7   NMJ,KHaH*=h+ +'HlD% ""$$Ii);<<Ly**=>>M!$
(;<<!9)9%9MMH$+z455 $l $y<<<5zzA~~!!H	(2	1x''MH#H   Ax&&r   c                    i }| g}t          |          dk    r9|                    d          }t          |t          j                  rDt          |t          j                  rX|j        \  }}|dz  }dg|z  }d                    |||d          z             dz   }t          |          }	t          ||	          }nt          |t                    sTt          |          }
|
rCt          ||          \  }}}||k    r)|                    |d          }t          ||          ||<   t          |d          r
|j        |z   }t          |          dk    9t#          |                                          }|S )Nr   r   r3   r   rS   )r8   r   rH   rI   rq   PythonErrorNodero   joinrA   r$   
SKIP_NODESrQ   ry   getr   rT   rS   sorteditems)r   r   r*   rV   rN   r   rY   paddingr;   identation_rangesrO   r   current_ends                r   r   r      s   NFE
e**q..yy||dJ.// 	dJ677 		 NMJ!OJdZ'G99WuZ[['99::TAD CD I I3 13 3N$
++ 	L,T22E L.G%/! /!+
Hej(("0"4"4Z"D"DK14[(1K1KN:.4$$ 	*ME)E1 e**q..4 N002233Nr   )rer   parso.python.treepythonr   rI   pylspr   ModuleIfStmtTryStmtr~   compiler5   r   r$   r-   r1   rA   rQ   rZ   rj   ry   r    r   r   <module>r      s   
			  & & & & & & & & &      !2J4FG
2:j))  
  
&    , , ,"  "  " J	 	 	  / / /&' ' ':    r   