o
    noi%                  
   @   s  d dl mZmZmZmZmZ d dlmZmZ d dl	m
Z
mZmZmZmZmZmZmZmZ d dlmZ d dlmZ dededefd	d
Zdddededee dee fddZdededefddZdededeeef fddZdddededee dee fddZdddededee defddZdededee
 fddZ dededee fddZ!dededee fddZ"dededee fddZ#dS )     )ListOptionalSequenceTupleUnion)CSTLogicErrorParserSyntaxError)	Comment
COMMENT_RE	EmptyLineNewline
NEWLINE_REParenthesizedWhitespaceSIMPLE_WHITESPACE_RESimpleWhitespaceTrailingWhitespace)BaseWhitespaceParserConfig)WhitespaceStateconfigstatereturnc                 C   s   | j }t||jd  |jd}|g}d|v r;| jd7  _d|_t||jd  |jd}|| d|v s| jt|7  _td	|S )N   r   \ )
linesr   matchlinecolumngroupappendlenr   join)r   r   r   ws_linews_line_list r$   W/home/ubuntu/.local/lib/python3.10/site-packages/libcst/_parser/py_whitespace_parser.pyparse_simple_whitespace   s   
r&   Noverride_absolute_indentr(   c                C   s   t |j|j|j|j}g }	 t| ||d}|d u rn|||f t |j|j|j|j}q|d urQtt|d ddD ]}|| d j	rN|d |d  } nq;g }|ra|d d }|j|_|j|_dd |D S )NTr'   r   r   c                 S   s   g | ]}|d  qS )r   r$   ).0rr$   r$   r%   
<listcomp>c   s    z%parse_empty_lines.<locals>.<listcomp>)
Stater   r   absolute_indentis_parenthesized_parse_empty_liner   ranger    indent)r   r   r(   state_for_liner   elifinal_stater$   r$   r%   parse_empty_lines3   s<   r7   c                 C   s,   t | |}|d u rtd| j|j|jd|S )NzInternal Error: Failed to parse TrailingWhitespace. This should never happen because a TrailingWhitespace is never optional in the grammar, so this error should've been caught by parso first.r   raw_line
raw_column)_parse_trailing_whitespacer   r   r   r   )r   r   trailing_whitespacer$   r$   r%   parse_trailing_whitespacef   s   
r=   c                 C   s&   |j rt| |}|d ur|S t| |S N)r/   _parse_parenthesized_whitespacer&   )r   r   parenthesized_whitespacer$   r$   r%    parse_parenthesizable_whitespacev   s
   

rA   c                C   s   t |j|j|j|j}z	t| ||d}W n
 ty   Y d S w t| |}t| |}t	| |}|d u r4d S |j|_|j|_t
||||S )Nr'   )r-   r   r   r.   r/   _parse_indent	Exceptionr&   _parse_comment_parse_newliner   )r   r   r(   speculative_stater2   
whitespacecommentnewliner$   r$   r%   r0      s$   



r0   c                C   s~   |dur|n|j }| j|jd  }|jdkr+|jt|kr'|jt| jkr'dS td|||jr=| jt|7  _dS dS )zA
    Returns True if indentation was found, otherwise False.
    Nr   r   Fz:Internal Error: Column should be 0 when parsing an indent.T)r.   r   r   r   r    r   
startswith)r   r   r(   r.   line_strr$   r$   r%   rB      s   
rB   c                 C   sJ   t | j|jd  |j}|d u rd S |d}| jt|7  _t|S )Nr   r   )r
   r   r   r   r   r   r    r	   )r   r   comment_matchrH   r$   r$   r%   rD      s   
rD   c                 C   s   | j |jd  }t||j}|d urQ|d}| jt|7  _|jt|kr3td| j |j|jd|jt| j k rE| jd7  _d|_|| jkrMt	 S t	|S d S )Nr   r   z7Internal Error: Found a newline, but it wasn't the EOL.r8   )
r   r   r   r   r   r   r    r   default_newliner   )r   r   rK   newline_matchnewline_strr$   r$   r%   rE      s&   

rE   c                 C   s\   t |j|j|j|j}t| |}t| |}t| |}|d u r d S |j|_|j|_t|||S r>   )	r-   r   r   r.   r/   r&   rD   rE   r   )r   r   rF   rG   rH   rI   r$   r$   r%   r;      s   


r;   c                 C   s^   t | |}|d u rd S d}	 t| |}|d u rn||f }qt| |}t| |}t||||S )Nr$   )r;   r0   rB   r&   r   )r   r   
first_lineempty_lines
empty_liner2   	last_liner$   r$   r%   r?      s   




r?   )$typingr   r   r   r   r   libcstr   r   libcst._nodes.whitespacer	   r
   r   r   r   r   r   r   r   libcst._parser.types.configr   %libcst._parser.types.whitespace_stater   r-   r&   strr7   r=   rA   r0   boolrB   rD   rE   r;   r?   r$   r$   r$   r%   <module>   s   ,

3



"



