
    ړi                         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y)    )contextmanager)DictListAnyc                   (    e Zd ZU eed<   eed<   d Zy)_NormalizerMetarule_value_classesrule_type_classesc                 R    t         j                  | |||      }i |_        i |_        |S N)type__new__r	   r
   )clsnamebasesdctnew_clss        7/tmp/pip-target-20744g9h/lib/python/parso/normalizer.pyr   z_NormalizerMeta.__new__	   s+    ,,sD%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y)
Normalizer_rule_type_instances_rule_value_instancesc                     || _         || _        g | _        | j                  d      | _        | j                  d      | _        y )Nr
   r	   )grammar_configissues_instantiate_rulesr   r   )selfr    configs      r   __init__zNormalizer.__init__   s?    $($;$;<O$P!%)%<%<=Q%R"r   c                    i }t        |       j                         D ]]  }t        ||i       }|j                         D ];  \  }}|D cg c]
  } ||        }}|j	                  |g       j                  |       = _ |S c c}w r   )r   mrogetattritems
setdefaultextend)	r$   attrr   base	rules_maptype_rule_classesrule_clsnews	            r   r#   zNormalizer._instantiate_rules   s    JNN$ 	6DdB/I'0'8 6#|6BC(x~CCub)0056	6
 
 Ds   A>c                 j    | j                  |       | j                  |      }| j                          |S r   )
initializevisitfinalize)r$   nodevalues      r   walkzNormalizer.walk%   s*    

4 r   c                      	 |j                   } j                  |      5  dj                   fd|D              cd d d        S # 1 sw Y   y xY w# t        $ r  j	                  |      cY S w xY w)N c              3   @   K   | ]  }j                  |        y wr   )r6   ).0childr$   s     r   	<genexpr>z#Normalizer.visit.<locals>.<genexpr>2   s     GUtzz%0Gs   )children
visit_nodejoinAttributeError
visit_leaf)r$   r8   rA   s   `  r   r6   zNormalizer.visit+   sj    	H}}H & HwwGhGGH H H  	)??4((	)s   A AAA-,A-c              #   6   K   | j                  |       d  y wr   )_check_type_rulesr$   r8   s     r   rB   zNormalizer.visit_node4   s     t$s   c                 |    | j                   j                  |j                  g       D ]  }|j                  |        y r   )r   getr   	feed_node)r$   r8   rules      r   rG   zNormalizer._check_type_rules9   s4    --11$))R@ 	!DNN4 	!r   c                     | j                  |       | j                  j                  |j                  g       D ]  }|j	                  |        |j
                  |j                  z   S r   )rG   r   rJ   r9   rK   prefix)r$   leafrL   s      r   rE   zNormalizer.visit_leaf=   sW    t$..224::rB 	!DNN4 	! {{TZZ''r   c                      y r   r   rH   s     r   r5   zNormalizer.initializeE       r   c                      y r   r   r$   s    r   r7   zNormalizer.finalizeH   rQ   r   c                 p    t        |||      }|| j                  vr| j                  j                  |       y)NT)Issuer"   append)r$   r8   codemessageissues        r   	add_issuezNormalizer.add_issueK   s1    dD'*#KKu%r   Nr   )r9   valuesr   typesc                     t              t              |j                  |       |j                  |       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
        z%You must register at least something.c                     D ]-  }j                   j                  |g       j                  |        / D ]-  }j                  j                  |g       j                  |        / | S r   )r	   r+   rV   r
   )r2   vtr   r\   r[   s      r   	decoratorz+Normalizer.register_rule.<locals>.decoratore   sl     J&&11!R8??IJ I%%00B7>>xHIOr   )listrV   
ValueError)r   r9   r[   r   r\   ra   s   ` ` ` r   register_rulezNormalizer.register_ruleQ   sY     fUMM% LLeDEE	 r   )r   r   r   r   r   strr   r   r   r   r&   r#   r:   r6   r   rB   rG   rE   r5   r7   rZ   classmethodrd   r   r   r   r   r      s    24$sDJ/4354T$Z05SH  !( $($b  r   r   )	metaclassc                       e Zd ZeZd Zy)NormalizerConfigc                 &    | j                  ||       S r   )normalizer_class)r$   r    s     r   create_normalizerz"NormalizerConfig.create_normalizerr   s    $$Wd33r   N)r   r   r   r   rk   rl   r   r   r   ri   ri   o   s    !4r   ri   c                   *    e Zd Zd Zd Zd Zd Zd Zy)rU   c                 j    || _         	 || _        	 |j                  | _        	 |j                  | _        y r   )rW   rX   	start_posend_posr$   r8   rW   rX   s       r   r&   zIssue.__init__w   s;    		 	 	 ||r   c                 j    | j                   |j                   k(  xr | j                  |j                  k(  S r   )ro   rW   r$   others     r   __eq__zIssue.__eq__   s'    ~~0LTYY%**5LLr   c                 &    | j                  |       S r   )ru   rs   s     r   __ne__zIssue.__ne__   s    ;;u%%%r   c                 D    t        | j                  | j                  f      S r   )hashrW   ro   rS   s    r   __hash__zIssue.__hash__   s    TYY/00r   c                 P    d| j                   j                  d| j                  dS )N<z: >)	__class__r   rW   rS   s    r   __repr__zIssue.__repr__   s    !^^44dii@@r   N)r   r   r   r&   ru   rw   rz   r   r   r   r   rU   rU   v   s    $ M&1Ar   rU   c                   H    e Zd ZU eed<   eed<   d Zd Zd Zd Z	d
dZ
d	 Zy)RulerW   rX   c                     || _         y r   )_normalizer)r$   
normalizers     r   r&   zRule.__init__   s
    %r   c                     t               r   )NotImplementedErrorrH   s     r   is_issuezRule.is_issue   s    !##r   c                     |S r   r   rH   s     r   get_nodezRule.get_node   s    r   c                 <    || j                   }|t        d      |S )Nz$The message on the class is not set.)rX   rc   )r$   rX   r8   s      r   _get_messagezRule._get_message   s&    ?llG !GHHr   Nc                     || j                   }|t        d      | j                  ||      }| j                  j	                  |||       y )Nz'The error code on the class is not set.)rW   rc   r   r   rZ   rq   s       r   rZ   zRule.add_issue   sK    <99D| !JKK##GT2""4w7r   c                 l    | j                  |      r#| j                  |      }| j                  |       y y r   )r   r   rZ   )r$   r8   
issue_nodes      r   rK   zRule.feed_node   s-    ==t,JNN:& r   )NN)r   r   r   intr   re   r&   r   r   r   rZ   rK   r   r   r   r   r      s*    
IL&$8'r   r   c                   .     e Zd Zd Z fdZ fdZ xZS )RefactoringNormalizerc                     || _         y 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superr6   )r$   r8   r~   s     r   r6   zRefactoringNormalizer.visit   s7    	'((.. 	'7=&&	'    --c                 `    	 | j                   |   S # t        $ r t        |   |      cY S w xY wr   )r   r   r   rE   )r$   rO   r~   s     r   rE   z RefactoringNormalizer.visit_leaf   s8    	,((.. 	,7%d++	,r   )r   r   r   r&   r6   rE   __classcell__)r~   s   @r   r   r      s    0', ,r   r   N)
contextlibr   typingr   r   r   r   r   r   ri   rU   r   r   r   r   r   <module>r      sV    % " "d \? \~4 4A A<!' !'H,J ,r   