
    ue{                         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y)    N)hookimplz(\s+).+c                     | j                   dz   }|j                         }t        j                  |      }t	        ||      }g }|D ]#  \  }}|dz  }|dz  }|j                  ||d       % |S )N
   )	startLineendLine)source
splitlinesparsoparse__compute_folding_rangesappend)documentprogramlinestreerangesresults
start_lineend_lines           7/usr/lib/python3/dist-packages/pylsp/plugins/folding.pypylsp_folding_ranger      s    oo$G E;;wD%dE2FG & 


Ha
A 	'#	


 N    c                     t        | j                               D ]&  }|j                  |d       }|t        ||      | |<   ( | j	                  |       | S )N)listkeyspopmaxupdate)leftrightstartright_starts       r   __merge_folding_rangesr$   %   sU    diik" 2iit,"k51DK2 	KKKr   c                     | g k7  r;| j                  d      }|j                  |      }|j                  ||f       | g k7  r;|S Nr   )r   r   )identation_stacklevel_limitscurrent_linefolding_rangesupper_levellevel_starts         r   __empty_identation_stackr-   .   sQ     b
 &**1-"&&{3{L9: b
  r   c                     | j                  d      }||k\  r;|j                  |      }|j                  ||f       | j                  d      }||k\  r;| j                  d|       | |fS r&   )r   r   insert)r'   levelr(   r*   r)   r+   r,   s          r   __match_identation_stackr1   8   sv     #&&q)K

"&&{3{L9:&**1- 
 A{+^++r   c                    | j                         }g }g }i }d}d}||   dk(  r|dz  }||   dk(  rt        |      D ]  \  }}||k  r|dz  }t        j                  |      }	|	U|	j	                  d      }
t        |
      }||kD  r|||<   |j                  d|       |}n*||k  r%t        |||||      \  }}|}nt        ||||      }d}|j                         dk7  s|} 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   D   sJ   OOENLML


# 

#U# 4|	Q+11$7')//2J
OE}$.:]+ ''=9 %&3K$e\><40 . !&5 ,nN M::<2L/0 .,nN r   c                     d}t        | t        j                        r;| 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   k   sV    E$
--.yy 
 
 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   {   sa    ;DvHtZ ==%4L8#eD1HJ&77ED,,KHa>r   c                    d}t        | t        j                        rd}| j                  dv rt	        |d      \  } }n| j                  dv r?|d   }t        |t        j
                        rt	        |d      \  } }nKt	        |d      \  } }n;| 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$
**+::88*5!4ND(ZZ:%qJ*j&9&9:!.ua!8h!.ua!8hZZ7"*5!4ND(ZZ8#*5!4ND(\4..r   c                 "   | j                   \  }}| j                  \  }}d}t        | ||      \  }}} }| j                         }t	        |t
        j                        }t	        |t
        j                        }	t	        | t
        j                        }
|	xs |
 }	|dz  }t	        | j                  t
        j                        r@|s>| j                  }|dv r.t        |      dkD  r |d   }|j                   \  }}||kD  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      s   NNMJ,,KHaH*=dHe*T'HlD%""$Ii););<Ly**=*=>M!$
(;(;<!9)9%9MMH$++z445lyy<<5zA~!!H	(22	1x'MH#HAx&&r   c                    i }| g}t        |      dkD  r|j                  d      }t        |t        j                        r;t        |t        j
                        rL|j                  \  }}|dz  }dg|z  }dj                  |||d  z         dz   }t        |      }	t        ||	      }n~t        |t              sCt        |      }
|
r6t        ||      \  }}}||kD  r!|j                  |d      }t        ||      ||<   t        |d      r|j                   |z   }t        |      dkD  rt#        |j%                               }|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67 NNMJ!OJdZ'G99WuZ['99:TAD CD I3NDUVN$
+,T2E.Ge.T+
Hej("0"4"4Z"DK14[(1KN:.4$MME)E- e*q.0 N002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    
  & & !2!2J4F4FG
2::j)  
 
*	,$ N /&'8r   