o
    DD©i  ã                   @  s˜   d dl mZ d dlZd dlmZ d dlmZmZ d dlm	Z	 er,d dlm
Z
 d dlmZ ddd„Zd dd„Zd dd„Zd!dd„Zd dd„Zd"dd„ZdS )#é    )ÚannotationsN)ÚTYPE_CHECKING)ÚIndentedBlockÚModule)Údeep_equals)ÚSequence)ÚCSTNodeÚnoder   Úreturnú$Sequence[dataclasses.Field[CSTNode]]c                 C  s
   t  | ¡S )z<
    Returns the sequence of a given CST-node's fields.
    ©ÚdataclassesÚfields©r	   © r   úS/var/www/Datamplify/venv/lib/python3.10/site-packages/libcst/helpers/node_fields.pyÚget_node_fields   s   
r   Úfieldúdataclasses.Field[CSTNode]Úboolc                 C  sb   d|j v rdS d|j v rdS d|j v rdS t| ttfƒr#|j dv r#dS t| tƒr/|j dkr/dS dS )z€
    Returns True if a given CST-node's field is a whitespace-related field
    (whitespace, indent, header, footer, etc.).
    Ú
whitespaceTÚleading_linesÚlines_after_decorators)ÚheaderÚfooterÚindentF)ÚnameÚ
isinstancer   r   ©r	   r   r   r   r   Úis_whitespace_node_field   s   


r   c                 C  s^   t | tƒr|jdv rdS t|jƒ}d|v r!|jdvr!d|jvr!dS dD ]	}||v r, dS q#dS )zy
    Returns True if a given CST-node's field is a syntax-related field
    (colon, semicolon, dot, encoding, etc.).
    )ÚencodingÚdefault_indentÚdefault_newlineÚhas_trailing_newlineTÚSentinel)Ústar_argÚstarÚposonly_indr   )Ú	SemicolonÚColonÚCommaÚDotÚAssignEqualF)r   r   r   ÚreprÚtype)r	   r   Útype_strr   r   r   r   Úis_syntax_node_field0   s   


ÿr0   Úobjectc                 C  s   | j tjur
|   ¡ S | jS )z:
    Returns the default value of a CST-node's field.
    )Údefault_factoryr   ÚMISSINGÚdefault)r   r   r   r   Úget_field_default_valueN   s   r5   c                 C  s   t t| |jƒt|ƒƒS )zI
    Returns True if a given CST-node's field has its default value.
    )r   Úgetattrr   r5   r   r   r   r   Úis_default_node_fieldY   s   r7   Úshow_defaultsÚshow_syntaxÚshow_whitespacec                  s^   t  ˆ ¡}dd„ |D ƒ}|s‡ fdd„|D ƒ}|s"‡ fdd„|D ƒ}|s-‡ fdd„|D ƒ}|S )aÃ  
    Returns a filtered sequence of a CST-node's fields.

    Setting ``show_whitespace`` to ``False`` will filter whitespace fields.

    Setting ``show_defaults`` to ``False`` will filter fields if their value is equal to
    the default value ;  while respecting  the value of ``show_whitespace``.

    Setting ``show_syntax``  to ``False`` will filter syntax fields ; while respecting
    the value of ``show_whitespace`` & ``show_defaults``.
    c                 S  s   g | ]}|j d  dkr|‘qS )r   Ú_)r   ©Ú.0Úfr   r   r   Ú
<listcomp>u   s    z&filter_node_fields.<locals>.<listcomp>c                   ó   g | ]	}t ˆ |ƒs|‘qS r   )r   r<   r   r   r   r?   x   ó    c                   r@   r   )r7   r<   r   r   r   r?   {   rA   c                   r@   r   )r0   r<   r   r   r   r?   ~   rA   r   )r	   r8   r9   r:   r   r   r   r   Úfilter_node_fields`   s   
rB   )r	   r   r
   r   )r	   r   r   r   r
   r   )r   r   r
   r1   )
r	   r   r8   r   r9   r   r:   r   r
   r   )Ú
__future__r   r   Útypingr   Úlibcstr   r   Úlibcst._nodes.deep_equalsr   r   r   r   r   r0   r5   r7   rB   r   r   r   r   Ú<module>   s   




