
    e:                    0   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Zddlm	Z	 ddl
mZmZmZ ddlZddlmZ ddlmZmZmZmZmZmZmZ ddlmZmZ dd	lmZ dd
lmZm Z  ddl!m"Z" ddl#m$Z$m%Z% ejL                  dk\  rddl'Z'nddl(Z'erddl)m*Z*  G d d      Z+y)JArguments manager class used to handle command-line arguments and options.    )annotationsN)Sequence)TYPE_CHECKINGAnyTextIO)utils)	_Argument_CallableArgument_ExtendArgument_StoreArgument_StoreNewNamesArgument_StoreOldNamesArgument_StoreTrueArgument)UnrecognizedArgumentAction_UnrecognizedOptionError)_HelpFormatter)_convert_option_to_argument_parse_rich_type_value)MAIN_CHECKER_NAME)DirectoryNamespaceDict
OptionDict)      )_ArgumentsProviderc                      e Zd ZdZ	 d	 	 	 	 	 	 	 ddZedd       Zej                  dd       ZddZ	 	 	 	 	 	 	 	 ddZ	e
	 	 	 	 	 	 dd       Zdd	Zdd
Z	 d	 	 	 ddZ	 d	 	 	 	 	 ddZddZddd dZd!dZy)"_ArgumentsManagerr   Nc                    t        j                         | _        	 | j                  | _        	 t        j                  ||xs d|t
        d      | _        	 i | _        	 i | _        	 i | _	        y )Nz%(prog)s [options]resolve)progusagedescriptionformatter_classconflict_handler)
argparse	Namespace_config_base_configArgumentParserr   _arg_parser_argument_groups_dict_option_dicts_directory_namespaces)selfr    r!   r"   s       A/usr/lib/python3/dist-packages/pylint/config/arguments_manager.py__init__z_ArgumentsManager.__init__3   sx      ))+( LL	 $22//#*&
 	0IK"446@=?"L    c                    | j                   S )zNamespace for all options.r'   r.   s    r/   configz_ArgumentsManager.configT   s     ||r1   c                    || _         y Nr3   )r.   values     r/   r5   z_ArgumentsManager.configY   s	    r1   c                   |j                   D ]  \  }}|| j                  |<   t        ||      }|j                  xs |j                  j                         }|j                  j                  |d      }|j                  t        k7  r*|j                  r|j                  j                  d      d   }| j                  |||        | j                          y)z3Register an options provider and load its defaults.Nz

r   )optionsr,   r   sectionname
capitalizeoption_groups_descsgetr   __doc__split_add_arguments_to_parser_load_default_argument_values)r.   provideroptoptdictargumentr;   section_descs          r/   _register_options_providerz,_ArgumentsManager._register_options_provider]   s    $,, 	KLC&-Ds#23@H&&D(--*B*B*DG#77;;GTJL }} 11h6F6F'//55f=a@))'<J	K 	**,r1   c                    	 | j                   |   }| j	                  ||       y# t        $ rM |r| j                  j                  ||      }n| j                  j                  |      }|| j                   |<   Y hw xY w)z6Add an argument to the correct argument section/group.titleN)r+   KeyErrorr*   add_argument_group_add_parser_option)r.   r;   rH   rG   section_groups        r/   rB   z*_ArgumentsManager._add_arguments_to_parsern   s    		@ 66w?M 	x8  	@ $ 0 0 C C\! !% 0 0 C C' C R2?D&&w/	@s   $ AA:9A:c                   t        |t              r^ | j                  |j                  |j                  |j
                  |j                  |j                  |j                  |j                  d yt        |t              r | j                  |j                  i |j                  |j                  |j
                  |j                  |j                  |j                  |j                  d |j                  d   sJ |j                  d   D ]S  }| j                  d| d|j
                  |j                  t        j                  |j                  |j                         U yt        |t              rl | j                  |j                  i |j                  |j                  |j
                  |j                  |j                  |j                  |j                  d yt        |t              r= | j                  |j                  |j                  |j
                  |j                  d yt        |t               rK | j                  |j                  i |j                  |j                  |j                  |j                  d yt        |t"              ri | j                  |j                  |j                  |j
                  |j                  |j                  |j                  |j                  |j$                  d yt&        )	zAdd an argument.)actiondefaulttypehelpmetavarchoices	old_names--store)rR   rS   rU   )rR   rU   rV   )rR   rS   rT   rU   rV   rW   destN)
isinstancer   add_argumentflagsrR   rS   rT   rU   rV   rW   r   kwargsr%   SUPPRESSr   r   r   r   r[   r   )rP   rG   old_names      r/   rO   z$_ArgumentsManager._add_parser_option~   s   
 h/&M&& ((]]]] (( (( "89&M&&	//	   ((]]]] (( ((	 ??;///$OOK8 	**
O"$,,!!**$,,$,, + 	 "89&M&&	//	   ((]]]] (( ((	 "45&M&& ((]]	 "34&M&&//  ]] (( /2&M&& ((]]]] (( ((]]	 -,r1   c                Z    | j                   j                  g | j                        | _        y)z3Loads the default values of all registered options.N)r*   
parse_argsr5   r4   s    r/   rC   z/_ArgumentsManager._load_default_argument_values   s     &&11"dkkBr1   c                $   	 | j                   j                  || j                        \  | _        }g }D ](  }|j                  d      s|j                  |dd        * |rt        |      y# t        $ r t	        j
                  d       Y ^w xY w)zEParse the arguments found in a configuration file into the namespace.    rY      N)r:   )	r*   parse_known_argsr5   
SystemExitsysexit
startswithappendr   )r.   	argumentsparsed_argsunrecognized_optionsrE   s        r/   _parse_configuration_filez+_ArgumentsManager._parse_configuration_file   s    	'+'7'7'H'H4;;($DK
 +- 	5C~~d#$++CG4	5  *3GHH    	HHRL	s   .A. .BBc                    |t         j                  dd n|}| j                  j                  || j                        \  | _        }|S )zAParse the arguments found on the command line into the namespace.N   )ri   argvr*   rg   r5   )r.   rm   rn   s      r/   !_parse_command_line_configurationz3_ArgumentsManager._parse_command_line_configuration   sH     %.$5CHHQRL9	#'#3#3#D#Dt{{$
 [ r1   c                   i }g }t        | j                  j                  d       D ]  }|j                  }|sJ ||v rg }|j                  D cg c]  }t        |t        j                        s|  }	}t        |	d       D ]  }
d|
j                  v r|
j                  d   dd }	 | j                  |   }|j                  ||t        | j                  |j                  dd	            f       |D cg c]  \  }}}|j                  d
      r|||f }}}} |s|j                  |       |||<    |xs t         j"                  }d}|D ]|  }|rt%        d|       t'        j(                         5  t'        j*                  dt,               t/        j0                  ||j3                         t        ||                ddd       d}~ yc c}w # t        $ r Y _w xY wc c}}}w # 1 sw Y   *xY w)zsWrite a configuration file according to the current configuration
        into the given stream or stdout.
        c                8    | j                   dk7  | j                   fS NMainrK   xs    r/   <lambda>z4_ArgumentsManager._generate_config.<locals>.<lambda>       177f,agg6 r1   keyc                &    | j                   d   dd  S Nr   rf   option_stringsry   s    r/   r{   z4_ArgumentsManager._generate_config.<locals>.<lambda>  s    A<L<LQ<OPQPR<S r1   z--helpr   rf   N-_
deprecatedF
)fileignore)categoryT)sortedr*   _action_groupsrL   _group_actionsr\   r%   _SubParsersActionr   r,   rM   rl   getattrr5   replacer?   ri   stdoutprintwarningscatch_warningsfilterwarningsDeprecationWarningr	   format_sectionupper)r.   streamskipsectionsoptions_by_sectionsectionsgroup
group_namer:   ioption_actionsrE   optnamerF   ndvprintedr;   s                     r/   _generate_configz"_ArgumentsManager._generate_config   s     ++6
 (	9E J:\)G --!!X%?%?@ N 
 n2ST s111,,Q/3"009G W__S#-FG 07 "+1aaeeL>QQ1I '. 
+18":.Q(	9R %3:: 	Gd(((* '';MN$$GMMOV4Fw4O-P
 G	C    s1   #G(G5G&G&7AG-	G#"G#-G6	c                6    | j                   j                         S )z7Return the usage string based on the available options.)r*   format_helpr4   s    r/   rU   z_ArgumentsManager.help)  s    ++--r1   F)minimalc          	        t        j                         }t        j                  d      }|j                  t        j                  d      |       t        j                  d      }|j                  t        j                  d      |       t        | j                  j                  d       D ]  }|j                  dv r|j                  s t        j                         }|j                  D cg c]  }t        |t        j                        s|  }}t        |d       D ]#  }	|	j                  d	   d
d }
	 | j                  |
   }|j!                  d      r8|sf|j!                  dd      }t        |t"              sJ t%        j&                  |d      }|D ]&  }|j                  t        j(                  |             ( t+        | j,                  |
j/                  dd            }|sN|sJ|j                  t        j(                  |
 d             |j                  t        j0                                d|v rt        |d   t2              sJ d|d   v r8t        |t4        j6                        r|j8                  }nLt        |t:        t<        f      r6t        |d	   t4        j6                        r|D cg c]  }|j8                   }}|j!                  d      dk(  rdj?                  d |D              }|r||j!                  d      k(  r|j                  |
|       |j                  t        j0                                & |j                  sJ |s|j                  |j                  jA                         |        t        jB                  |      }tE        jF                  |       t#        |      S c c}w # t        $ r Y w xY wc c}w )z_Write a configuration file according to the current configuration into
        stdout.
        T)is_super_tabletoolpylintc                8    | j                   dk7  | j                   fS rw   rK   ry   s    r/   r{   z9_ArgumentsManager._generate_config_file.<locals>.<lambda>:  r|   r1   r}   >   optional argumentsr:   Commandsc                &    | j                   d   dd  S r   r   ry   s    r/   r{   z9_ArgumentsManager._generate_config_file.<locals>.<lambda>J  s    q?O?OPQ?RSTSU?V r1   r   rf   Nhide_from_config_filerU    O   )widthr   r   z =r_   	new_namesrT   
py_version.c              3  2   K   | ]  }t        |        y wr7   )str).0r   s     r/   	<genexpr>z:_ArgumentsManager._generate_config_file.<locals>.<genexpr>x  s     $;SV$;s   rS   )$tomlkitdocumenttableaddr~   r   r*   r   rL   r   r\   r%   r   r   r,   rM   r?   r   textwrapwrapcommentr   r5   r   nldictrePatternpatternlisttuplejoinlowerdumpstomllibloads)r.   r   toml_doc
tool_tablepylint_tool_tabler   group_tabler   r   rR   r   rF   help_msg	help_textliner8   toml_strings                    r/   _generate_config_filez'_ArgumentsManager._generate_config_file-  sK    ##%]]$7
W[[(*5#MM>w{{8,.?@++6
 L	HE
 {{KK ''!--/K --!!X%?%?@ N 
 !5VW 6. //2126"009G ;;67 &{{626H%h444 (hb AI ) ?#(=>?  W__S#-FG "#7)2(GH#

5 w&%gh&7>>>"gh&77  eRZZ0!MMEe}5*!Hbjj; 1661QYY6E6 ;;v&,6HH$;U$;;E uI(>> /

-m6.p ;;;!%%ekk&7&7&9;GYL	H\ mmH- 	k";M   H 7s   /#N=9O8O	OOc                    | j                   j                  d|j                  dd       t        |      g| j                        d   | _        y)z&Set an option on the namespace object.rY   r   r   r   N)r*   rg   r   r   r5   )r.   r   r8   s      r/   
set_optionz_ArgumentsManager.set_option  sL    &&77'//#s+,-/Ee/LMKK
 r1   )NN)r    r   r!   
str | Noner"   r   returnNone)r   argparse.Namespace)r8   r   r   r   )rD   r   r   r   )r;   r   rH   r   rG   r
   r   r   )rP   zargparse._ArgumentGrouprG   r
   r   r   )r   r   )rm   	list[str]r   r   r7   )rm   zSequence[str] | Noner   r   )N )r   zTextIO | Noner   ztuple[str, ...]r   r   )r   r   )r   boolr   r   )r   r   r8   r   r   r   )__name__
__module____qualname__r@   r0   propertyr5   setterrI   rB   staticmethodrO   rC   rp   rt   r   rU   r   r   r   r1   r/   r   r   0   s    T NRMM *M@JM	MB   ]] -"99*49@I9	9  L-.L-:CL-	L- L-\CI  15
-
	
 MO;#;:I;	;z. 8= ^ @r1   r   ),r@   
__future__r   r%   r   ri   r   r   collections.abcr   typingr   r   r   r   r   r	   pylint.config.argumentr
   r   r   r   r   r   r   pylint.config.exceptionsr   r   pylint.config.help_formatterr   pylint.config.utilsr   r   pylint.constantsr   pylint.typingr   r   version_infor   tomli pylint.config.arguments_providerr   r   r   r1   r/   <module>r      sv   
 Q "  	 
   $ - -     8 S . <w Cb br1   