
    g+                    (   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	Z	ddl
mZ ddl
mZ ddl
mZ ddl
mZ ddlmZ dd	lmZ dd
lmZ ddlmZ  ej,                  e      Z ed      ZdddZ G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z 	 	 	 	 	 	 	 	 d&dZ!	 	 	 	 	 	 	 	 	 	 d'dZ"	 	 	 	 	 	 	 	 d(dZ#d)dZ$	 	 	 	 d*dZ%	 	 	 	 	 	 d+dZ&	 	 	 	 	 	 d,d Z'd-d!Z(d.d"Z)	 	 	 	 	 	 d/d#Z*	 	 	 	 	 	 d0d$Z+	 	 	 	 	 	 d1d%Z,y)2z1Functions related to finding and loading plugins.    )annotationsN)Any)	Generator)Iterable)
NamedTuple)utils)VALID_CODE_PREFIX)ExecutionError)FailedToLoadPlugin)zflake8.extensionflake8.reportz5.0z3.7)zflake8-colorszflake8-per-file-ignoresc                  0    e Zd ZU dZded<   ded<   ded<   y)PluginzA plugin before loading.strpackageversionzimportlib.metadata.EntryPointentry_pointN__name__
__module____qualname____doc____annotations__     X/var/www/html/brdwt/brdwt/brdwtenv/lib/python3.12/site-packages/flake8/plugins/finder.pyr   r      s    "LL..r   r   c                  T    e Zd ZU dZded<   ded<   ded<   edd       Zedd	       Zy
)LoadedPluginz)Represents a plugin after being imported.r   pluginr   objdict[str, bool]
parametersc                B    | j                   j                  j                  S )z0Return the name given in the packaging metadata.)r   r   nameselfs    r   
entry_namezLoadedPlugin.entry_name-   s     {{&&+++r   c                N    | j                   j                   d| j                   dS )z8Return the name for use in user-facing / error messages.[])r   r   r&   r$   s    r   display_namezLoadedPlugin.display_name2   s'     ++%%&a'8::r   Nreturnr   )r   r   r   r   r   propertyr&   r*   r   r   r   r   r   &   s;    3N	H, , ; ;r   r   c                  0    e Zd ZU dZded<   ded<   ded<   y)Checkersz'Classified plugins needed for checking.list[LoadedPlugin]treelogical_linephysical_lineNr   r   r   r   r/   r/   8   s    1
$$%%r   r/   c                  @    e Zd ZU dZded<   ded<   ded<   ddZdd	Zy
)PluginszClassified plugins.r/   checkerszdict[str, LoadedPlugin]	reportersr0   disabledc              #    K   | j                   j                  E d{    | j                   j                  E d{    | j                   j                  E d{    | j                  j                         E d{    y7 c7 G7 +7 w)z3Return an iterator over all :class:`LoadedPlugin`s.N)r6   r1   r2   r3   r7   valuesr$   s    r   all_pluginszPlugins.all_pluginsG   sf     ==%%%%==----==....>>((*** 	&-.*sC   BB BBBB!B:B;BBBBc           
        dj                  t        | j                         D ch c]I  }|j                  j                  dvr/|j                  j                   d|j                  j
                   K c}            S c c}w )z0Return a user-displayed list of plugin versions., >   localflake8z: )joinsortedr;   r   r   r   )r%   loadeds     r   versions_strzPlugins.versions_strN   su    yy #'"2"2"4}},,4GG }},,-R0E0E/FG
 	
s   AA<N)r,   z#Generator[LoadedPlugin, None, None]r+   )r   r   r   r   r   r;   rC   r   r   r   r5   r5   @   s!    &&  +

r   r5   c                  B    e Zd ZU dZded<   ded<   ded<   ed	d       Zy)
PluginOptionsz"Options related to plugin loading.ztuple[str, ...]local_plugin_pathsfrozenset[str]enable_extensionsrequire_pluginsc                8     | dt               t                     S )z2Make a blank PluginOptions, mostly used for tests.r   rF   rH   rI   )	frozenset)clss    r   blankzPluginOptions.blankb   s     !'k%K
 	
r   N)r,   rE   )r   r   r   r   r   classmethodrN   r   r   r   rE   rE   [   s)    ,''%%##
 
r   rE   c                    |t        j                  |      S ||j                  dd      fD ]/  }| j                  d|d       }|t        j                  |      c S  g S )N_-r?   fallback)r   parse_comma_separated_listreplaceget)cfgcfg_opt_nameoptopt_namevals        r   _parse_optionr]   l   sn     //44 &|';';C'EF 	H''(Ht'<C77<<	
 Ir   c                  | j                  ddd      j                         }t        j                  |      }t        j                  ||      }t        t        |      t        t        | d|            t        t        | d|                  S )z%Parse plugin loading related options.flake8:local-pluginspaths rS   rH   rI   rK   )	rW   stripr   rU   normalize_pathsrE   tuplerL   r]   )rX   cfg_dirrH   rI   paths_sr`   s         r   parse_plugin_optionsrg      s     gg,ggCIIKG,,W5E!!%1E <##24EF
 "#0/B
 r   c              #    K   t         j                  j                  d      j                  }t         j                  j                  d      j                  }| D ]m  }|j                  t        vr|j
                  dk(  rt        |d   |d   |       ;|j
                  dv rt        |d   |d   |       _t        |||       o y w)NpyflakespycodestyleFr#   r   EW)	importlibmetadatadistributiongroupFLAKE8_GROUPSr#   r   )epsr#   r   pyflakes_metapycodestyle_metaeps         r   _flake8_pluginsrv      s     
 &&33J?HHM ))66}ENN ,88=(77c>v.i0H"MMWW_
  (*:9*Er  w++,s   CCc               #    K   t               } t        j                  j                         D ]  }|j                  }t        d |D              s"|j                  }|d   | v r6| j                  |d          |d   t        v r%t        j                  d|d   t        |d             z|d   dk(  rt        ||d   |d         E d {    |D ]*  }|j                  t        v st        |d   |d   |       ,  y 7 7w)Nc              3  @   K   | ]  }|j                   t        v   y wN)rp   rq   ).0ru   s     r   	<genexpr>z*_find_importlib_plugins.<locals>.<genexpr>   s     ;288},;s   r#   z#%s plugin is obsolete in flake8>=%sr?   r   )setrm   rn   distributionsentry_pointsanyaddBANNED_PLUGINSLOGwarningrv   rp   rq   r   )seendistrr   metaru   s        r   _find_importlib_pluginsr      s    5D""002 @ ;s;; }}<4HHT&\"<>)KK5VtF|,
 &\X% 'sDL$y/JJJ 	@Bxx=(T&\4	?B??	@;@4 Ks   CC=C;C=!C=c              #    K   dD ]  }d| }t        j                  | j                  d|d      j                         t         j                        D ]g  }|j                  d      \  }}}|j                         |j                         }}t        j                  j                  |||      }t        dd|       i  y w)	N)	extensionreportzflake8.r_   ra   rS   )regexp=r>   )
r   rU   rW   rb   LOCAL_PLUGIN_LIST_RE	partitionrm   rn   
EntryPointr   )rX   plugin_typerp   plugin_sr#   rQ   	entry_strru   s           r   _find_local_pluginsr      s      / 	/+'88GG*K"GEKKM--
 	/H "*!3!3C!8D!Y"jjlIOO,=)D##..tYFB'2..	/	/s   B=B?c                z   | D ch c]!  }t        j                  |j                        # }}|D ch c]  }t        j                  |       }}||z
  }|r\t        ddj	                  t        |             ddj	                  t        |             ddj	                  t        |                   y c c}w c c}w )Nz2required plugins were not installed!
- installed: r=   z
- expected: z
- missing: )r   normalize_pypi_namer   r
   r@   rA   )pluginsexpectedr   plugin_namesr#   expected_namesmissing_pluginss          r   _check_required_pluginsr      s    
 AH6<!!&..1L  CKK$e//5KNK$|3O IIf\&:;< =99VN%;<= >))F?$;<=?
 	
  Ls
   &B3B8c                    g t               t        |       }|j                          t        ||j                         |S )z/Discovers all plugins (but does not load them).)r   r   sortr   rI   )rX   optsrets      r   find_pluginsr      s>    
 B#%
A(;C(@
AC HHJC!5!56Jr   c                   t        j                  |        }|r| j                  } t        j                  |       j                  j                         D ci c]Y  }|j                  t         j                  j                  u r1|j                  |j                  t         j                  j                  u [ }}|r|j                  dd       |S c c}w )a  Return the parameters for the plugin.

    This will inspect the plugin and return either the function parameters
    if the plugin is a function or the parameters for ``__init__`` after
    ``self`` if the plugin is a class.

    :returns:
        A dictionary mapping the parameter name to whether or not it is
        required (a.k.a., is positional only/does not have a default).
    r%   N)inspect
isfunction__init__	signaturer!   r:   kind	ParameterPOSITIONAL_OR_KEYWORDr#   defaultemptypop)funcis_class	parameterr!   s       r   _parameters_forr     s     %%d++H}} !**40;;BBD>>W..DDD 		))W->->-D-DDDJ  vt$s   AC
c                
   	 | j                   j                         }t        |      s!t        d      }t        | j                  |      t        | |t        |            S # t        $ r}t        | j                  |      d }~ww xY w)Nz%expected loaded plugin to be callable)	r   load	Exceptionr   r   callable	TypeErrorr   r   )r   r   eerrs       r   _load_pluginr   !  sw    4  %%' C=?@ 55_S%9::  4 334s   A 	B'A==Bc                    t         j                  j                  |j                         | D cg c]  }t	        |       c}S c c}w ry   )syspathextendrF   r   )r   r   ps      r   _import_pluginsr   .  s2     HHOOD++,%,-LO---s   Ac                
   g }g }g }i }g }| D ]  }t        |j                  dd      r>|j                  j                  j                  |j
                  vr|j                  |       X|j                  j                  j                  dk(  r|||j                  <   d|j                  v r|j                  |       d|j                  v r|j                  |       d|j                  v r|j                  |       t        d|        t        j                  |||      D ]J  }t        j                  |j                        r#t        d|j                    d	t        j"                          t%        t'        |||
      ||      S )Noff_by_defaultFr   r1   r2   r3   zwhat plugin type? zplugin code for `z` does not match )r1   r2   r3   )r6   r7   r8   )getattrr   r   r   r#   rH   appendrp   r&   r!   NotImplementedError	itertoolschainr	   matchr
   r*   patternr5   r/   )r   r   r1   r2   r3   r7   r8   rB   s           r   _classify_pluginsr   6  s    DLMIH EFJJ 0%8))..d6L6LLOOF#]]&&,,?+1If''(v(((KKv000' 1 11  (%(:6(&CDDE" //$mD  &&v'8'89 #F$7$7#88I$,,-/  %'

  r   c                .    t        t        | |      |      S )zLoad and classify all flake8 plugins.

    - first: extends ``sys.path`` with ``paths`` (to import local plugins)
    - next: converts the ``Plugin``s to ``LoadedPlugins``
    - finally: classifies plugins into their specific types
    )r   r   )r   r   s     r   load_pluginsr   c  s     _Wd;TBBr   )rX   configparser.RawConfigParserrY   r   rZ   
str | Noner,   z	list[str])
rX   r   re   r   rH   r   rI   r   r,   rE   )rr   z'Iterable[importlib.metadata.EntryPoint]r#   r   r   r   r,   Generator[Plugin, None, None])r,   r   )rX   r   r,   r   )r   list[Plugin]r   rG   r,   None)rX   r   r   rE   r,   r   )r   r   r,   r    )r   r   r,   r   )r   r   r   rE   r,   r0   )r   r0   r   rE   r,   r5   )r   r   r   rE   r,   r5   )-r   
__future__r   configparserimportlib.metadatarm   r   r   loggingr   typingr   r   r   r   r?   r   flake8.defaultsr	   flake8.exceptionsr
   r   	getLoggerr   r   rL   rq   r   r   r   r/   r5   rE   r]   rg   rv   r   r   r   r   r   r   r   r   r   r   r   r   <module>r      s   7 "      
      - , 0g!?@ $/Z /;: ;$&z &
j 
6
J 
"	% 
 	&	% "	
   .,	0,
, , #	,4"@J/	%/"/


 

&	%
 6
;..
. .**
* *Z
C
C

C 
Cr   