
    b`                        d Z ddlZddlmZmZ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 ej                  d	      cZZd
 ej                  d      cZZd ej                  d      cZZ eeeeeeei      Zd ej                  d      fZd ej                  d      fZ e eeeg            ZdedefdZ	 ddededededef
dZdedefdZede	dededee   fd       Z ede	dededee   fd       Z!y) zpyls-spyder main plugin.    N)ListDictTuple)hookimpl)Config)	WorkspaceDocument)RegexEvaluatorCELL_PERCENTAGEz^[\t ]*# ?(%%+)(.*)?$CELL_CODECELLz^[\t ]*# ?(<codecell>)(.*)?$CELL_INz!^[\t ]*# ?(In\[)([^\]\r\n]*)?\]?$
BLOCK_DASHz^[\t ]*# ?-{4}([^-\n\r].*)?$
BLOCK_HASHz^[\t ]*##{3}([^\#\n\r].*)?$listreturnc                 *    t        |       dkD  r| d   S y)Nr   )Nr    )len)r   s    4/usr/lib/python3/dist-packages/pyls_spyder/plugin.pypeek_symbolr   3   s    
4y1}Aw    namedocument
start_lineend_linec                 b    |rdnd}| d|j                   |ddt        |dz
  d      dddd|d	S )
N      r   r   )line	character   )startend)urirange)r   containerNamelocationkind)r$   max)r   r   r   r   cellr(   s         r   create_symbolr+   :   sX     3CD|| !+%&
 !$HqL! 4%&	 !
 
r   c                     | |dS )N)	startLineendLine )r   r   s     r   create_fold_regionr0   R   s     r   config	workspacec           
         | j                  d      }|j                  dd      }|j                  dd      }|j                  }g }g }g }	d}
d}t        |      D ]  \  }}t        j                  |      \  }}t        j                  |      \  }}||j                  d      }|j                  d      j                         }|dk(  rdj                  |
      }|
dz  }
|r	|t        k7  r!|j                  t        ||||dz                t        |	      \  }}}t        |      dz
  }||kD  r|	j                  d	|||f       ||k\  rC|	j!                  d	       |j                  t        ||||             t        |	      \  }}}||k\  rC|	j                  d	|||f       H|L|sP|j                  d      }|d}n|j                         }|dk(  rd
j                  |      }|dz  }|j                  t        ||||dz   d              |	D ]&  \  }}}|j                  t        |||dz                ( ||z   }t#        |d       }|S )z"Cell and block comment extraction.pyls_spydergroup_cellsTenable_block_commentsr!      r   zUnnamed cell {0}r   zUnnamed comment {0}Fc                     | d   d   d   d   S )Nr'   r%   r"   r   r/   xs    r   <lambda>z(pylsp_document_symbols.<locals>.<lambda>   s    a
mG&<W&Ef&M r   key)plugin_settingsgetlines	enumerate
CELL_REGEXmatchBLOCK_REGEXgroupstripformatr   appendr+   r   r   insertpopsorted)r1   r2   r   settingsr5   r6   r@   cellsblocks
cell_stackunnamed_cellunnamed_blockline_numr   	cell_rule
cell_match
block_ruleblock_matchpercentages	cell_namecurrent_linecurrent_levelcurrent_name
cell_level
block_name_r   spyder_symbolss                               r   pylsp_document_symbolsr`   Y   s    %%m4H,,}d3K$LL)@$GNNEEFJLM#E* (F$ * 0 0 6	:"-"3"3D"9
K!$**1-K"((+113IB.55lC	!)">]x8a<A B =H= 9m\ -1
-%%a(J	)JK':5"q)]((L(&L M -8
,C*}( (:5 %%a(J	)JK$)>$**1-J!
'--/
R299-H
"MM-Hh1eE FO(FT $ Ha]44AFGH V^NMONr   c                 V   |j                   }g }g }t        |      D ]  \  }}t        j                  |      \  }}	|	!|	j	                  d      }
t        |      \  }}}|t        k7  r|dz   }nt        |
      dz
  }||kD  r|j                  d||df       y||k\  rD|j                  d       |j                  t        ||dz
               t        |      \  }}}||k\  rD|j                  d||df        |D ]!  \  }}}|j                  t        |             # t        |d       }|S )Nr!   r   r   c                     | d   S )Nr-   r/   r9   s    r   r;   z%pylsp_folding_range.<locals>.<lambda>   s
    + r   r<   )r@   rA   rB   rC   rE   r   r   r   rI   rJ   rH   r0   rK   )r1   r2   r   r@   rO   rM   rR   r   rS   rT   rW   rY   rZ   r^   r\   r   s                   r   pylsp_folding_rangerc      sJ   
 NNEJE#E* A$ * 0 0 6	:!$**1-K-8-D*L-O+*Q.
 -1
M)!!!h
B%?@#z1NN1%LL!3L(Q,!OP5@5L2L- $z1 !!!h
B%?@!A" $ 9a'h789567ELr   )T)"__doc__retypingr   r   r   pylspr   pylsp.config.configr   pylsp.workspacer   r	   pyls_spyder.utilsr
   compiler   CELL_PERCENTAGE_REGEXr   CELL_CODECELL_REGEXr   CELL_IN_REGEXrB   r   r   dictrD   r   strintr+   r0   r`   rc   r/   r   r   <module>rr      s    
 $ $  & / -
 zrzz":; '& ZRZZ ?@ #" zrzz>?  *&] 
 *"**<=?
 *"**;<>
 T:z":;<d u  
 
x 
!
-0
 $
03 #  
@6 @%.@$,@15d@ 
@F 
   $Dz 
r   