o
    DDi                     @   sn   d dl mZmZ d dlmZmZ d dlZd dlm	Z	 G dd deZ
G dd dejZG d	d
 d
e	e
 ZdS )    )autoEnum)OptionalSequenceN)BatchableMetadataProviderc                   @   s"   e Zd ZdZe Ze Ze ZdS )ExpressionContextz\Used in :class:`ExpressionContextProvider` to represent context of a variable
    reference.N)__name__
__module____qualname____doc__r   LOADSTOREDEL r   r   d/var/www/Datamplify/venv/lib/python3.10/site-packages/libcst/metadata/expression_context_provider.pyr      s
    

r   c                   @   s  e Zd ZdddeddfddZdejdefd	d
Zdej	defddZ
dejdefddZdejdefddZdejdefddZdejdee fddZdejdefddZdejdefddZdejdefddZdejdefddZdejdefddZdejdee fdd Zdej dee fd!d"Z!dej"dee fd#d$Z#dej$dee fd%d&Z%dej&dee fd'd(Z'dej(dee fd)d*Z)dS )+ExpressionContextVisitorproviderExpressionContextProvidercontextreturnNc                 C   s   || _ || _d S N)r   r   )selfr   r   r   r   r   __init__8   s   
z!ExpressionContextVisitor.__init__nodec                 C   s0   |j D ]}|t| jtj q|j|  dS NF)targetsvisitr   r   r   r   value)r   r   targetr   r   r   visit_Assign>   s   
z%ExpressionContextVisitor.visit_Assignc                 C   s:   |j t| jtj |j|  |j}|r||  dS r   )r   r   r   r   r   r   
annotationr   )r   r   r   r   r   r   visit_AnnAssignF   s   
z(ExpressionContextVisitor.visit_AnnAssignc                 C   &   |j t| jtj |j|  dS r   r   r   r   r   r   r   r   r   r   r   r   r   visit_AugAssignP   
   z(ExpressionContextVisitor.visit_AugAssignc                 C   r"   r   r#   r$   r   r   r   visit_NamedExprW   r&   z(ExpressionContextVisitor.visit_NamedExprc                 C   s   | j || j dS r   r   set_metadatar   r$   r   r   r   
visit_Name^   s   z#ExpressionContextVisitor.visit_Namec                 C      |j t| jtj dS r   )namer   r   r   r   r   r$   r   r   r   visit_AsNameb      z%ExpressionContextVisitor.visit_AsNamec                 C   sP   |j t| jtj |j|  |jD ]}||  q|j}|r&||  dS r   )	r   r   r   r   r   r   iterifsinner_for_in)r   r   ir1   r   r   r   visit_CompForh   s   

z&ExpressionContextVisitor.visit_CompForc                 C   sF   |j t| jtj |j|  |j|  |j}|r!||  dS r   )	r   r   r   r   r   r   r/   bodyorelse)r   r   r5   r   r   r   	visit_Fort   s   
z"ExpressionContextVisitor.visit_Forc                 C   r+   r   )r   r   r   r   r   r   r$   r   r   r   	visit_Del   r.   z"ExpressionContextVisitor.visit_Delc                 C   s*   | j || j |jt| j tj dS r   )r   r)   r   r   r   r   r   r   r$   r   r   r   visit_Attribute   s
   z(ExpressionContextVisitor.visit_Attributec                 C   sp   | j || j |jt| j tj |j}t	|t
r,|D ]}|t| j tj qdS |t| j tj dS r   )r   r)   r   r   r   r   r   r   slice
isinstancer   )r   r   r9   slir   r   r   visit_Subscript   s   
z(ExpressionContextVisitor.visit_Subscriptc                 C      | j || j d S r   r(   r$   r   r   r   visit_Tuple      z$ExpressionContextVisitor.visit_Tuplec                 C   r=   r   r(   r$   r   r   r   
visit_List   r?   z#ExpressionContextVisitor.visit_Listc                 C   r=   r   r(   r$   r   r   r   visit_StarredElement   r?   z-ExpressionContextVisitor.visit_StarredElementc                 C   sh   |j t| jtj |j|  |jD ]}||  q|jD ]}||  q|j	D ]}||  q*dS r   )
r,   r   r   r   r   r   r4   baseskeywords
decorators)r   r   basekeyword	decoratorr   r   r   visit_ClassDef   s   


z'ExpressionContextVisitor.visit_ClassDefc                 C   s\   |j t| jtj |j|  |j|  |jD ]}||  q|j	}|r,||  dS r   )
r,   r   r   r   r   r   paramsr4   rD   returns)r   r   rG   rJ   r   r   r   visit_FunctionDef   s   

z*ExpressionContextVisitor.visit_FunctionDefc                 C   sB   |j t| jtj |j}|r||  |j}|r||  dS r   )r,   r   r   r   r   r   r    default)r   r   r    rL   r   r   r   visit_Param   s   

z$ExpressionContextVisitor.visit_Param)*r   r	   r
   r   r   cstAssignboolr   	AnnAssignr!   	AugAssignr%   	NamedExprr'   Namer*   AsNamer   r-   CompForr3   Forr6   Delr7   	Attributer8   	Subscriptr<   Tupler>   Listr@   StarredElementrA   ClassDefrH   FunctionDefrK   ParamrM   r   r   r   r   r   7   s2    

r   c                   @   s(   e Zd ZdZdejdee fddZdS )r   a  
    Provides :class:`ExpressionContext` metadata (mimics the `expr_context
    <https://docs.python.org/3/library/ast.html>`__ in ast) for the
    following node types:
    :class:`~libcst.Attribute`, :class:`~libcst.Subscript`,
    :class:`~libcst.StarredElement` , :class:`~libcst.List`,
    :class:`~libcst.Tuple` and :class:`~libcst.Name`.
    Note that a :class:`~libcst.Name` may not always have context because of the differences between
    ast and LibCST. E.g. :attr:`~libcst.Attribute.attr` is a :class:`~libcst.Name` in LibCST
    but a str in ast. To honor ast implementation, we don't assign context to
    :attr:`~libcst.Attribute.attr`.


    Three context types :attr:`ExpressionContext.STORE`,
    :attr:`ExpressionContext.LOAD` and :attr:`ExpressionContext.DEL` are provided.
    r   r   c                 C   s   | t| tj d S r   )r   r   r   r   r$   r   r   r   visit_Module   s   z&ExpressionContextProvider.visit_ModuleN)	r   r	   r
   r   rN   Moduler   rP   ra   r   r   r   r   r      s    r   )enumr   r   typingr   r   libcstrN   libcst.metadata.base_providerr   r   
CSTVisitorr   r   r   r   r   r   <module>   s   ) 