
    j                         d dl mZ d dlmZmZmZ  G d de          Z G d de          Z G d d	          Z	 G d
 d          Z
 G d d          Z G d de          ZdS )    )contextmanager)DictListAnyc                   *    e Zd ZU eed<   eed<   d ZdS )_NormalizerMetarule_value_classesrule_type_classesc                 \    t                               | |||          }i |_        i |_        |S N)type__new__r	   r
   )clsnamebasesdctnew_clss        W/home/ubuntu/.hermes/hermes-agent/venv/lib/python3.11/site-packages/parso/normalizer.pyr   z_NormalizerMeta.__new__	   s.    ,,sD%55%'"$&!    N)__name__
__module____qualname__r   __annotations__r    r   r   r   r      s=             r   r   c                       e Zd ZU i Zeeee         f         ed<   i Z	eeee         f         ed<   d Z
d Zd Zd Zed             Zd Zd	 Zd
 Zd Zd Zedddddd            ZdS )
Normalizer_rule_type_instances_rule_value_instancesc                     || _         || _        g | _        |                     d          | _        |                     d          | _        d S )Nr
   r	   )grammar_configissues_instantiate_rulesr   r   )selfr    configs      r   __init__zNormalizer.__init__   sK    $($;$;<O$P$P!%)%<%<=Q%R%R"""r   c                     i }t                                                     D ]d}t          ||i           }|                                D ]<\  }} fd|D             }|                    |g                               |           =e|S )Nc                 &    g | ]} |          S r   r   ).0rule_clsr$   s     r   
<listcomp>z1Normalizer._instantiate_rules.<locals>.<listcomp>!   s!    CCC(xx~~CCCr   )r   mrogetattritems
setdefaultextend)r$   attrr   base	rules_maptype_rule_classesnews   `       r   r#   zNormalizer._instantiate_rules   s    JJNN$$ 	6 	6DdB//I'0'8'8 6 6#|CCCClCCCub))0055556 
r   c                     |                      |           |                     |          }|                                  |S r   )
initializevisitfinalize)r$   nodevalues      r   walkzNormalizer.walk%   s7    

4  r   c                      	 |j         }                     |          5  d                     fd|D                       cd d d            S # 1 swxY w Y   d S # t          $ r                      |          cY S w xY w)N c              3   B   K   | ]}                     |          V  d S r   )r9   )r)   childr$   s     r   	<genexpr>z#Normalizer.visit.<locals>.<genexpr>2   s/      GGUtzz%00GGGGGGr   )children
visit_nodejoinAttributeError
visit_leaf)r$   r;   rC   s   `  r   r9   zNormalizer.visit+   s    	H}H && H HwwGGGGhGGGGGH H H H H H H H H H H H H H H H H H  	) 	) 	)??4(((((	)s"   A !AAAA<;A<c              #   <   K   |                      |           d V  d S r   )_check_type_rulesr$   r;   s     r   rD   zNormalizer.visit_node4   s'      t$$$r   c                 v    | j                             |j        g           D ]}|                    |           d S r   )r   getr   	feed_node)r$   r;   rules      r   rI   zNormalizer._check_type_rules9   sE    -11$)R@@ 	! 	!DNN4    	! 	!r   c                     |                      |           | j                            |j        g           D ]}|                    |           |j        |j        z   S r   )rI   r   rL   r<   rM   prefix)r$   leafrN   s      r   rG   zNormalizer.visit_leaf=   s^    t$$$.224:rBB 	! 	!DNN4    {TZ''r   c                     d S r   r   rJ   s     r   r8   zNormalizer.initializeE       r   c                     d S r   r   r$   s    r   r:   zNormalizer.finalizeH   rS   r   c                 n    t          |||          }|| j        vr| j                            |           dS )NT)Issuer"   append)r$   r;   codemessageissues        r   	add_issuezNormalizer.add_issueK   s;    dD'**##Ku%%%tr   Nr   )r<   valuesr   typesc                     t                    t                    |                    |           |                    |           sst          d           f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                     D ]0}j                             |g                               |            1D ]0}j                            |g                               |            1| S r   )r	   r/   rX   r
   )r*   vtr   r^   r]   s      r   	decoratorz+Normalizer.register_rule.<locals>.decoratore   s~     J J&11!R88??IIII I I%00B77>>xHHHHOr   )listrX   
ValueError)r   r<   r]   r   r^   rc   s   ` ` ` r   register_rulezNormalizer.register_ruleQ   s     fUMM%   LL 	Fe 	FDEEE	 	 	 	 	 	 	 r   )r   r   r   r   r   strr   r   r   r   r&   r#   r=   r9   r   rD   rI   rG   r8   r:   r\   classmethodrf   r   r   r   r   r      s(        24$sDJ/444354T$Z0555S S S    H H H   ^! ! !( ( (       $($b     [  r   r   )	metaclassc                       e Zd ZeZd ZdS )NormalizerConfigc                 .    |                      ||           S r   )normalizer_class)r$   r    s     r   create_normalizerz"NormalizerConfig.create_normalizerr   s    $$Wd333r   N)r   r   r   r   rm   rn   r   r   r   rk   rk   o   s)        !4 4 4 4 4r   rk   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )rW   c                 X    || _         	 || _        	 |j        | _        	 |j        | _        d S r   )rY   rZ   	start_posend_posr$   r;   rY   rZ   s       r   r&   zIssue.__init__w   s;    		 	 	 |r   c                 B    | j         |j         k    o| j        |j        k    S r   )rq   rY   r$   others     r   __eq__zIssue.__eq__   s    ~0LTY%*5LLr   c                 .    |                      |           S r   )rw   ru   s     r   __ne__zIssue.__ne__   s    ;;u%%%%r   c                 8    t          | j        | j        f          S r   )hashrY   rq   rU   s    r   __hash__zIssue.__hash__   s    TY/000r   c                 2    d| j         j        d| j        dS )N<z: >)	__class__r   rY   rU   s    r   __repr__zIssue.__repr__   s      !^444diii@@r   N)r   r   r   r&   rw   ry   r|   r   r   r   r   rW   rW   v   sg        $ $ $ M M M& & &1 1 1A A A A Ar   rW   c                   J    e Zd ZU eed<   eed<   d Zd Zd Zd Z	d
dZ
d	 ZdS )RulerY   rZ   c                     || _         d S r   )_normalizer)r$   
normalizers     r   r&   zRule.__init__   s    %r   c                     t                      r   )NotImplementedErrorrJ   s     r   is_issuezRule.is_issue   s    !###r   c                     |S r   r   rJ   s     r   get_nodezRule.get_node   s    r   c                 :    || j         }|t          d          |S )Nz$The message on the class is not set.)rZ   re   )r$   rZ   r;   s      r   _get_messagezRule._get_message   s'    ?lG !GHHHr   Nc                     || j         }|t          d          |                     ||          }| j                            |||           d S )Nz'The error code on the class is not set.)rY   re   r   r   r\   rs   s       r   r\   zRule.add_issue   sX    <9D| !JKKK##GT22""4w77777r   c                     |                      |          r,|                     |          }|                     |           d S d S r   )r   r   r\   )r$   r;   
issue_nodes      r   rM   zRule.feed_node   sI    == 	't,,JNN:&&&&&	' 	'r   )NN)r   r   r   intr   rg   r&   r   r   r   r\   rM   r   r   r   r   r      s         
IIILLL& & &$ $ $    8 8 8 8' ' ' ' 'r   r   c                   .     e Zd Zd Z fdZ fdZ xZS )RefactoringNormalizerc                     || _         d S r   )_node_to_str_map)r$   node_to_str_maps     r   r&   zRefactoringNormalizer.__init__   s     /r   c                     	 | j         |         S # t          $ r$ t                                          |          cY S w xY wr   )r   KeyErrorsuperr9   )r$   r;   r   s     r   r9   zRefactoringNormalizer.visit   sM    	'(.. 	' 	' 	'77==&&&&&	'    +>>c                     	 | j         |         S # t          $ r$ t                                          |          cY S w xY wr   )r   r   r   rG   )r$   rQ   r   s     r   rG   z RefactoringNormalizer.visit_leaf   sO    	,(.. 	, 	, 	,77%%d+++++	,r   )r   r   r   r&   r9   rG   __classcell__)r   s   @r   r   r      s`        0 0 0' ' ' ' ', , , , , , , , ,r   r   N)
contextlibr   typingr   r   r   r   r   r   rk   rW   r   r   r   r   r   <module>r      sM   % % % % % % " " " " " " " " " "    d   \ \ \ \ \? \ \ \ \~4 4 4 4 4 4 4 4A A A A A A A A<!' !' !' !' !' !' !' !'H, , , , ,J , , , , ,r   