a
    lc                     @   s|   d dl mZ d dlmZmZ G dd deZG dd dedZG dd	 d	ZG d
d dZ	G dd dZ
G dd deZdS )    )contextmanager)DictListc                   @   s   e Zd Zdd ZdS )_NormalizerMetac                 C   s    t | |||}i |_i |_|S N)type__new__rule_value_classesrule_type_classes)clsnamebasesdctZnew_cls r   L/var/www/html/django/DPS/env/lib/python3.9/site-packages/parso/normalizer.pyr      s    z_NormalizerMeta.__new__N)__name__
__module____qualname__r   r   r   r   r   r      s   r   c                   @   s   e Zd ZU i Zeeee f ed< i Z	eeee f ed< dd Z
dd Zdd Zd	d
 Zedd Zdd Zdd Zdd Zdd Zdd ZedddddddZdS )
Normalizer_rule_type_instances_rule_value_instancesc                 C   s.   || _ || _g | _| d| _| d| _d S )Nr
   r	   )grammar_configissues_instantiate_rulesr   r   )selfr   configr   r   r   __init__   s
    zNormalizer.__init__c                    s\   i }t   D ]F}t||i }| D ],\}} fdd|D }||g | q(q|S )Nc                    s   g | ]}| qS r   r   ).0rule_clsr   r   r   
<listcomp>       z1Normalizer._instantiate_rules.<locals>.<listcomp>)r   mrogetattritems
setdefaultextend)r   attrr   baseZ	rules_maptype_Zrule_classesnewr   r    r   r      s    zNormalizer._instantiate_rulesc                 C   s    |  | | |}|   |S r   )
initializevisitfinalize)r   nodevaluer   r   r   walk"   s    

zNormalizer.walkc                    sn   z
|j }W n ty&    | Y S 0  |( d fdd|D W  d    S 1 s`0    Y  d S )N c                 3   s   | ]}  |V  qd S r   )r-   )r   childr    r   r   	<genexpr>/   r"   z#Normalizer.visit.<locals>.<genexpr>)childrenAttributeError
visit_leaf
visit_nodejoin)r   r/   r5   r   r    r   r-   (   s    
zNormalizer.visitc                 c   s   |  | d V  d S r   )_check_type_rulesr   r/   r   r   r   r8   1   s    
zNormalizer.visit_nodec                 C   s$   | j |jg D ]}|| qd S r   )r   getr   	feed_node)r   r/   ruler   r   r   r:   6   s    zNormalizer._check_type_rulesc                 C   s6   |  | | j|jg D ]}|| q|j|j S r   )r:   r   r<   r0   r=   prefix)r   leafr>   r   r   r   r7   :   s    
zNormalizer.visit_leafc                 C   s   d S r   r   r;   r   r   r   r,   B   s    zNormalizer.initializec                 C   s   d S r   r   r    r   r   r   r.   E   s    zNormalizer.finalizec                 C   s&   t |||}|| jvr"| j| dS )NT)Issuer   append)r   r/   codemessageissuer   r   r   	add_issueH   s    
zNormalizer.add_issueNr   )r0   valuesr   typesc                   sX   t t |dur"| |dur4| sDsDtd fdd}|S )z
        Use it as a class decorator::

            normalizer = Normalizer('grammar', 'config')
            @normalizer.register_rule(value='foo')
            class MyRule(Rule):
                error_code = 42
        Nz%You must register at least something.c                    s@   D ]} j |g |  qD ]} j|g |  q"| S r   )r	   r&   rB   r
   )r   vtr   rH   rG   r   r   	decoratorb   s
    z+Normalizer.register_rule.<locals>.decorator)listrB   
ValueError)r   r0   rG   r   rH   rL   r   rK   r   register_ruleN   s    


zNormalizer.register_rule)r   r   r   r   r   strr   r   __annotations__r   r   r   r1   r-   r   r8   r:   r7   r,   r.   rF   classmethodrO   r   r   r   r   r      s   
		
r   )	metaclassc                   @   s   e Zd ZeZdd ZdS )NormalizerConfigc                 C   s   | j d u rd S |  || S r   )normalizer_class)r   r   r   r   r   create_normalizero   s    
z"NormalizerConfig.create_normalizerN)r   r   r   r   rU   rV   r   r   r   r   rT   l   s   rT   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )rA   c                 C   s    || _ || _|j| _|j| _d S r   )rC   rD   	start_posend_posr   r/   rC   rD   r   r   r   r   w   s    zIssue.__init__c                 C   s   | j |j ko| j|jkS r   )rW   rC   r   otherr   r   r   __eq__   s    zIssue.__eq__c                 C   s   |  | S r   )r\   rZ   r   r   r   __ne__   s    zIssue.__ne__c                 C   s   t | j| jfS r   )hashrC   rW   r    r   r   r   __hash__   s    zIssue.__hash__c                 C   s   d| j j| jf S )Nz<%s: %s>)	__class__r   rC   r    r   r   r   __repr__   s    zIssue.__repr__N)r   r   r   r   r\   r]   r_   ra   r   r   r   r   rA   v   s
   rA   c                   @   sP   e Zd ZU eed< eed< dd Zdd Zdd Zd	d
 Z	dddZ
dd ZdS )RulerC   rD   c                 C   s
   || _ d S r   )_normalizer)r   Z
normalizerr   r   r   r      s    zRule.__init__c                 C   s
   t  d S r   )NotImplementedErrorr;   r   r   r   is_issue   s    zRule.is_issuec                 C   s   |S r   r   r;   r   r   r   get_node   s    zRule.get_nodec                 C   s"   |d u r| j }|d u rtd|S )Nz$The message on the class is not set.)rD   rN   )r   rD   r/   r   r   r   _get_message   s
    zRule._get_messageNc                 C   s>   |d u r| j }|d u rtd| ||}| j||| d S )Nz'The error code on the class is not set.)rC   rN   rg   rc   rF   rY   r   r   r   rF      s    zRule.add_issuec                 C   s"   |  |r| |}| | d S r   )re   rf   rF   )r   r/   Z
issue_noder   r   r   r=      s    

zRule.feed_node)NN)r   r   r   intrQ   rP   r   re   rf   rg   rF   r=   r   r   r   r   rb      s   


rb   c                       s0   e Zd Zdd Z fddZ fddZ  ZS )RefactoringNormalizerc                 C   s
   || _ d S r   )_node_to_str_map)r   Znode_to_str_mapr   r   r   r      s    zRefactoringNormalizer.__init__c                    s0   z| j | W S  ty*   t | Y S 0 d S r   )rj   KeyErrorsuperr-   r;   r`   r   r   r-      s    zRefactoringNormalizer.visitc                    s0   z| j | W S  ty*   t | Y S 0 d S r   )rj   rk   rl   r7   )r   r@   rm   r   r   r7      s    z RefactoringNormalizer.visit_leaf)r   r   r   r   r-   r7   __classcell__r   r   rm   r   ri      s   ri   N)
contextlibr   typingr   r   r   r   r   rT   rA   rb   ri   r   r   r   r   <module>   s   _
$