
    e9                    F   U d Z ddlmZ ddlZddlZddlZddlZddlmZ ddl	m	Z	 ddl
mZmZmZmZmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZ eeeeeee   ee   eee      eedf   f   Z	 d-dZd-dZ h dZ!h dZ"d.dZ#d/dZ$d/dZ%d-dZ&d0dZ'd1dZ(d2dZ)d2dZ*ee eeee$e%e&e'e(e)e*ejV                  e#dZ,de-d<   	  G d d      Z. G d de.      Z/ G d d e/      Z0 G d! d"e/      Z1 G d# d$e.      Z2 G d% d&e2      Z3 G d' d(e2      Z4 G d) d*e2      Z5 G d+ d,e.      Z6y)3zDefinition of an Argument class and transformers for various argument types.

An Argument instance represents a pylint option to be handled by an argparse.ArgumentParser
    )annotationsN)Callable)glob)AnyLiteralPatternSequenceTupleUnion)
interfaces)utils)_CallbackAction)_NewNamesAction_OldNamesAction.c                    | st         j                  S t        j                  |       }|D ]?  }|t         j                  vst	        j
                  |  dg t         j                          |S )z9Transforms a comma separated string of confidence values.z should be in )r   CONFIDENCE_LEVEL_NAMESpylint_utils
_check_csvargparseArgumentTypeError)valuevalues
confidences      8/usr/lib/python3/dist-packages/pylint/config/argument.py_confidence_transformerr   &   ss    000$$U+F 
Z>>>,,'(K)J)J(K'LM 
 M    c                ,    t        j                  |       S )z$Transforms a comma separated string.)r   r   r   s    r   _csv_transformerr   3   s    ""5))r   >   yyestrue>   nnofalsec                    | j                         } | t        v ry| t        v ryt        j                  dd|  dg t        t               )z4Transforms a yes/no or stringified bool into a bool.TFNzInvalid yn value 'z', should be in )lower
YES_VALUES	NO_VALUESr   r   r   s    r   _yn_transformerr*   <   sV    KKME
	

$
$"5')9:Q::Q	:Q9RS r   c                Z    | st        j                  d      t        j                  |       S )z3Check that a string is not empty and remove quotes.z!Option cannot be an empty string.)r   r   r   _unquoter   s    r   _non_empty_string_transformerr-   H   s(    (()LMM  ''r   c                z    t         j                  j                  t         j                  j                  |             S )z$Expand user and variables in a path.)ospath
expandvars
expanduserr   s    r   _path_transformerr3   O   s&    77bgg00788r   c                t    g }t        |       D ]'  }|j                  t        t        |      d             ) |S )ziTransforms a comma separated list of paths while expanding user and
    variables and glob patterns.
    T)	recursive)r   extendr   r3   )r   pathsr0   s      r   _glob_paths_csv_transformerr8   T   s=     E ' DT+D1TBCDLr   c                    	 t        d | j                  dd      j                  d      D              }|S # t        $ r t	        j
                  |  d      dw xY w)z1Transforms a version string into a version tuple.c              3  2   K   | ]  }t        |        y w)N)int).0vals     r   	<genexpr>z*_py_version_transformer.<locals>.<genexpr>a   s     OSCOs   ,.z? has an invalid format, should be a version string. E.g., '3.8'N)tuplereplacesplit
ValueErrorr   r   )r   versions     r   _py_version_transformerrF   ^   sf    OEMM#s,C,I,I#,NOO
 N	  ((gTU
	s	   15 #Ac                    	 t        j                  |       S # t         j                  $ r:}d|  d|j                   d|j                   }t        j                  |      |d}~ww xY w)zReturn `re.compile(value)`.z&Error in provided regular expression: z beginning at index z: N)recompileerrorposmsgr   r   )r   erL   s      r   _regex_transformerrN   i   sg    5zz%  88 56ug=QRSRWRWQXXZ[\[`[`Zab((-145s    A$5AA$c                r    g }t        j                  |       D ]  }|j                  t        |              |S )z9Transforms a comma separated list of regular expressions.)r   _check_regexp_csvappendrN   r   patternspatterns      r   _regexp_csv_transfomerrU   r   s8    #%H11%8 5*7345Or   c           
        g }t        |       D ]y  }|j                  t        j                  t	        t        j                  |            j                  dd      dz   t        j                  |      j                         z                { |S )z?Transforms a comma separated list of regular expressions paths.\z\\|)	r   rQ   rH   rI   strpathlibPureWindowsPathrB   as_posixrR   s      r   _regexp_paths_csv_transfomerr]   z   s~    #%H#E* 
JJG++G45==dFK))'2;;=>	

 Or   )choicecsvfloatr;   r   non_empty_stringr0   glob_paths_csv
py_versionregexp
regexp_csvregexp_paths_csvstringynz*dict[str, Callable[[str], _ArgumentTypes]]_TYPE_TRANSFORMERSc                  ,    e Zd ZdZ	 	 	 	 	 	 	 	 	 	 ddZy)	_Argumenta  Class representing an argument to be parsed by an argparse.ArgumentsParser.

    This is based on the parameters passed to argparse.ArgumentsParser.add_message.
    See:
    https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument
    c                   || _         	 || _        	 |j                  dd      | _        	 |rt        j
                  | _        || _        y )N%z%%)flags	hide_helprB   helpr   SUPPRESSsection)selfrn   arg_helpro   rr   s        r   __init__z_Argument.__init__   sK     
'"@ $$S$/	. ))DI2r   N)
rn   	list[str]rt   rY   ro   boolrr   
str | NonereturnNone)__name__
__module____qualname____doc__ru    r   r   rk   rk      s>    3 3 	3
 3 3 
3r   rk   c                  @     e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZ xZS )_BaseStoreArgumenta  Base class for store arguments to be parsed by an argparse.ArgumentsParser.

    This is based on the parameters passed to argparse.ArgumentsParser.add_message.
    See:
    https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument
    c               J    t         |   ||||       || _        	 || _        y N)rn   rt   ro   rr   )superru   actiondefaultrs   rn   r   r   rt   ro   rr   	__class__s          r   ru   z_BaseStoreArgument.__init__   s6     	(i 	 	
 60r   )rn   rv   r   rY   r   _ArgumentTypesrt   rY   ro   rw   rr   rx   ry   rz   r{   r|   r}   r~   ru   __classcell__r   s   @r   r   r      sX    1 1 	1
  1 1 1 1 
1 1r   r   c                  L     e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZ xZS )_StoreArgumenta  Class representing a store argument to be parsed by an argparse.ArgumentsParser.

    This is based on the parameters passed to argparse.ArgumentsParser.add_message.
    See:
    https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument
    c       	        l    t         
|   ||||||	       t        |   | _        	 || _        	 || _        y N)rn   r   r   rt   ro   rr   )r   ru   ri   typechoicesmetavarrs   rn   r   r   arg_typer   rt   r   ro   rr   r   s             r   ru   z_StoreArgument.__init__   sT     	 	 	
 'x0	U	
 	r   )rn   rv   r   rY   r   r   r   rY   r   list[str] | Nonert   rY   r   rY   ro   rw   rr   rx   ry   rz   r   r   s   @r   r   r      sv    $ $ 	$
  $ $ "$ $ $ $ $ 
$ $r   r   c                  @     e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZ xZS )_StoreTrueArgumenta  Class representing a 'store_true' argument to be parsed by an
    argparse.ArgumentsParser.

    This is based on the parameters passed to argparse.ArgumentsParser.add_message.
    See:
    https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument
    c               0    t         |   ||||||       y r   )r   ru   r   s          r   ru   z_StoreTrueArgument.__init__  s)     	 	 	
r   )rn   rv   r   zLiteral['store_true']r   r   rt   rY   ro   rw   rr   rx   ry   rz   r   r   s   @r   r   r     sX    
 
 &	

  
 
 
 
 

 
r   r   c                  L     e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZ xZS )_DeprecationArgumenta  Store arguments while also handling deprecation warnings for old and new names.

    This is based on the parameters passed to argparse.ArgumentsParser.add_message.
    See:
    https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument
    c       	            t         
|   ||||	       || _        	 || _        	 t        |   | _        	 || _        	 || _        y r   )r   ru   r   r   ri   r   r   r   r   s             r   ru   z_DeprecationArgument.__init__6  s_     	(i 	 	
 60&x0	U	
 	r   )rn   rv   r   ztype[argparse.Action]r   r   r   rY   r   r   rt   rY   r   rY   ro   rw   rr   rx   ry   rz   r   r   s   @r   r   r   -  sv    % % &	%
  % % "% % % % % 
% %r   r   c                  P     e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZ xZS )_ExtendArgumenta  Class for extend arguments to be parsed by an argparse.ArgumentsParser.

    This is based on the parameters passed to argparse.ArgumentsParser.add_message.
    See:
    https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument
    c       
        f    t         j                  }|
| _        	 t        |   |||||	||||	       y N)	rn   r   r   r   r   rt   r   ro   rr   )r   _ExtendActiondestr   ru   )rs   rn   r   r   r   r   rt   ro   rr   r   r   action_classr   s               r   ru   z_ExtendArgument.__init__g  sG      --	. 	 
	
r   )rn   rv   r   zLiteral['extend']r   r   r   rY   r   rY   rt   rY   ro   rw   rr   rx   r   r   r   rx   ry   rz   r   r   s   @r   r   r   ^  s    
 
 "	

  
 
 
 
 
 
 "
 
 

 
r   r   c                  L     e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZ xZS )_StoreOldNamesArgumentzStore arguments while also handling old names.

    This is based on the parameters passed to argparse.ArgumentsParser.add_message.
    See:
    https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument
    c       	        L    t         
|   |t        |||||||		       || _        y r   )r   ru   r   kwargsrs   rn   r   r   r   rt   r   ro   r   rr   r   s             r   ru   z_StoreOldNamesArgument.__init__  >     	" 	 
	
 <r   rn   rv   r   r   r   rY   r   r   rt   rY   r   rY   ro   rw   r   dict[str, Any]rr   rx   ry   rz   r   r   s   @r   r   r     v    = =  	=
 = "= = = = = = 
= =r   r   c                  L     e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZ xZS )_StoreNewNamesArgumentzStore arguments while also emitting deprecation warnings.

    This is based on the parameters passed to argparse.ArgumentsParser.add_message.
    See:
    https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument
    c       	        L    t         
|   |t        |||||||		       || _        y r   )r   ru   r   r   r   s             r   ru   z_StoreNewNamesArgument.__init__  r   r   r   r   r   s   @r   r   r     r   r   r   c                  D     e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZ xZS )_CallableArgumenta  Class representing an callable argument to be parsed by an
    argparse.ArgumentsParser.

    This is based on the parameters passed to argparse.ArgumentsParser.add_message.
    See:
    https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument
    c               Z    t         |   ||||       || _        	 || _        	 || _        y r   )r   ru   r   r   r   )	rs   rn   r   rt   r   ro   rr   r   r   s	           r   ru   z_CallableArgument.__init__  sB     	(i 	 	
 6<	r   )rn   rv   r   ztype[_CallbackAction]rt   rY   r   r   ro   rw   rr   rx   r   rY   ry   rz   r   r   s   @r   r   r     sb      &	
      
 r   r   )r   rY   ry   zSequence[str])r   rY   ry   rw   )r   rY   ry   rY   )r   rY   ry   ztuple[int, ...])r   rY   ry   zPattern[str])r   rY   ry   zSequence[Pattern[str]])7r~   
__future__r   r   r/   rZ   rH   collections.abcr   r   typingr   r   r   r	   r
   r   pylintr   r   r   pylint.config.callback_actionsr   !pylint.config.deprecation_actionsr   r   rY   r;   r`   rw   r   r   r   r(   r)   r*   r-   r3   r8   rF   rN   rU   r]   r,   ri   __annotations__rk   r   r   r   r   r   r   r   r   r   r   r   <module>r      ss  

 #  	  	 $  @ @  ( : N	CLSMWS\	#s(O	 '
*
 "
 		(9
5 )51) (4##
B >  3 3B1 1:-' -`
+ 
<.9 .b&
* &
R#=1 #=L#=1 #=L#	 #r   