
    7 f+                       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 dAd"Z!dBd&Z"dCd,Z#dDd-Z$dEd.Z%dFd4Z&dGd6Z'dHd:Z(dId<Z)dJd>Z*dKd?Z+dLd@Z,dS )Mz1Functions 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                  2    e Zd ZU dZded<   ded<   ded<   dS )PluginzA plugin before loading.strpackageversionzimportlib.metadata.EntryPointentry_pointN__name__
__module____qualname____doc____annotations__     K/var/www/equiseq/venv/lib/python3.11/site-packages/flake8/plugins/finder.pyr   r      s6         ""LLLLLL......r   r   c                  b    e Zd ZU dZded<   ded<   ded<   edd
            Zedd            ZdS )LoadedPluginz)Represents a plugin after being imported.r   pluginr   objdict[str, bool]
parametersreturnr   c                $    | 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                0    | 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"     +%::::::r   Nr"   r   )r   r   r   r   r   propertyr'   r+   r   r   r   r   r   &   sx         33NNNHHH, , , X, ; ; ; X; ; ;r   r   c                  2    e Zd ZU dZded<   ded<   ded<   dS )Checkersz'Classified plugins needed for checking.list[LoadedPlugin]treelogical_linephysical_lineNr   r   r   r   r/   r/   8   s<         11$$$$%%%%%%r   r/   c                  B    e Zd ZU dZded<   ded<   ded<   dd
ZddZdS )PluginszClassified plugins.r/   checkerszdict[str, LoadedPlugin]	reportersr0   disabledr"   #Generator[LoadedPlugin, None, None]c              #     K   | j         j        E d{V  | j         j        E d{V  | j         j        E d{V  | j                                        E d{V  dS )z3Return an iterator over all :class:`LoadedPlugin`s.N)r6   r1   r2   r3   r7   valuesr%   s    r   all_pluginszPlugins.all_pluginsG   s      =%%%%%%%%=--------=........>((***********r   r   c                ~    d                     t          d |                                 D                                 S )z0Return a user-displayed list of plugin versions., c                `    h | ]+}|j         j        d v|j         j         d|j         j         ,S )>   localflake8z: )r   r   r   ).0loadeds     r   	<setcomp>z'Plugins.versions_str.<locals>.<setcomp>R   sK       },4GGG },GG0EGGGGGr   )joinsortedr<   r%   s    r   versions_strzPlugins.versions_strN   sM    yy "&"2"2"4"4   
 
 	
r   N)r"   r9   r,   )r   r   r   r   r   r<   rG   r   r   r   r5   r5   @   sh         &&&&    + + + +

 

 

 

 

 

r   r5   c                  J    e Zd ZU dZded<   ded<   ded<   ed
d            Zd	S )PluginOptionsz"Options related to plugin loading.ztuple[str, ...]local_plugin_pathsfrozenset[str]enable_extensionsrequire_pluginsr"   c                N     | dt                      t                                S )z2Make a blank PluginOptions, mostly used for tests.r   rJ   rL   rM   )	frozenset)clss    r   blankzPluginOptions.blankb   s.     s!'kk%KK
 
 
 	
r   N)r"   rI   )r   r   r   r   r   classmethodrR   r   r   r   rI   rI   [   s^         ,,''''%%%%####
 
 
 [
 
 
r   rI   cfgconfigparser.RawConfigParsercfg_opt_namer   opt
str | Noner"   	list[str]c                    |t          j        |          S ||                    dd          fD ]2}|                     d|d           }|t          j        |          c S 3g S )N_-rA   fallback)r   parse_comma_separated_listreplaceget)rT   rV   rW   opt_namevals        r   _parse_optionrd   l   s     /444 &|';';C'E'EF 	 	H''(Ht'<<C7<<<<<  Ir   cfg_dirrL   rM   c               V   |                      ddd                                          }t          j        |          }t          j        ||          }t          t          |          t          t          | d|                    t          t          | d|                              S )z%Parse plugin loading related options.flake8:local-pluginspaths r]   rL   rM   rO   )	ra   stripr   r_   normalize_pathsrI   tuplerP   rd   )rT   re   rL   rM   paths_srh   s         r   parse_plugin_optionsrn      s     gg,ggCCIIKKG,W55E!%11E <<##24EFF
 
 "#0/BB
 
   r   eps'Iterable[importlib.metadata.EntryPoint]r$   r   Generator[Plugin, None, None]c              #    K   t           j                            d          j        }t           j                            d          j        }| D ]x}|j        t          vr|j        dk    r t          |d         |d         |          V  <|j        dv r t          |d         |d         |          V  et          |||          V  yd S )NpyflakespycodestyleFr$   r   EW)	importlibmetadatadistributiongroupFLAKE8_GROUPSr$   r   )ro   r$   r   pyflakes_metapycodestyle_metaeps         r   _flake8_pluginsr      s      
 &33J??HM )66}EEN , ,8=((7c>>v.i0H"MMMMMMW__
  (*:9*Er      w++++++, ,r   c               #  N  K   t                      } t          j                                        D ]}|j        }t          d |D                       s#|j        }|d         | v r5|                     |d                    |d         t          v r4t          	                    d|d         t          |d                             |d         dk    r$t          ||d         |d                   E d {V  |D ]/}|j        t          v rt          |d         |d         |          V  0d S )Nc              3  2   K   | ]}|j         t          v V  d S )N)rz   r{   )rB   r~   s     r   	<genexpr>z*_find_importlib_plugins.<locals>.<genexpr>   s)      ;;28},;;;;;;r   r$   z#%s plugin is obsolete in flake8>=%srA   r   )setrw   rx   distributionsentry_pointsanyaddBANNED_PLUGINSLOGwarningr   rz   r{   r   )seendistro   metar~   s        r   _find_importlib_pluginsr      s]     55D"0022 @ @ ;;s;;;;; 	 }<4HHT&\"""<>))KK5VtF|,  
 &\X%% 'sDL$y/JJJJJJJJJ 	@ 	@Bx=((T&\4	?B?????	@;@ @r   c              #    K   dD ]}d| }t          j        |                     d|d                                          t           j                  D ]w}|                    d          \  }}}|                                |                                }}t          j                            |||          }t          dd|          V  xd S )	N)	extensionreportzflake8.rg   ri   r]   )regexp=r@   )
r   r_   ra   rj   LOCAL_PLUGIN_LIST_RE	partitionrw   rx   
EntryPointr   )rT   plugin_typerz   plugin_sr$   r[   	entry_strr~   s           r   _find_local_pluginsr      s       / 	/ 	/'+''8GG*K"GEEKKMM-
 
 
 	/ 	/H "*!3!3C!8!8D!Y"jjllIOO,=,=)D#..tYFFB'2......	/	/ 	/r   pluginslist[Plugin]expectedrK   Nonec                4   d | D             }d |D             }||z
  }|rxt          dd                    t          |                     dd                    t          |                     dd                    t          |                               d S )Nc                @    h | ]}t          j        |j                  S r   )r   normalize_pypi_namer   )rB   r   s     r   rD   z*_check_required_plugins.<locals>.<setcomp>   s2       6<!&.11  r   c                6    h | ]}t          j        |          S r   )r   r   )rB   r$   s     r   rD   z*_check_required_plugins.<locals>.<setcomp>   s#    KKK$e/55KKKr   z2required plugins were not installed!
- installed: r>   z
- expected: z
- missing: )r
   rE   rF   )r   r   plugin_namesexpected_namesmissing_pluginss        r   _check_required_pluginsr      s     @G  L LK(KKKN$|3O 
? IIf\&:&:;;? ?99VN%;%;<<? ? ))F?$;$;<<? ?
 
 	

 
r   optsc                    g t                      t          |           }|                                 t          ||j                   |S )z/Discovers all plugins (but does not load them).)r   r   sortr   rM   )rT   r   rets      r   find_pluginsr      sK    
 B#%%
A(;C(@(@
AC HHJJJC!5666Jr   funcr   r    c                    t          j        |            }|r| j        } d t          j        |           j                                        D             }|r|                    dd           |S )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).
    c                z    i | ]8}|j         t          j        j        u |j        |j        t          j        j        u 9S r   )kindinspect	ParameterPOSITIONAL_OR_KEYWORDr$   defaultempty)rB   	parameters     r   
<dictcomp>z#_parameters_for.<locals>.<dictcomp>  sG       >W.DDD 		)W->-DDDDDr   r&   N)r   
isfunction__init__	signaturer!   r;   pop)r   is_classr!   s      r   _parameters_forr     s     %d+++H }  *400;BBDD  J  %vt$$$r   r   c                (   	 | j                                         }n'# t          $ r}t          | j        |          d }~ww xY wt          |          s$t          d          }t          | j        |          t          | |t          |                    S )Nz%expected loaded plugin to be callable)	r   load	Exceptionr   r   callable	TypeErrorr   r   )r   r   eerrs       r   _load_pluginr   !  s    4 %%'' 4 4 4 3334 C== 6?@@ 555_S%9%9:::s    
A ;A r0   c                b    t           j                            |j                   d | D             S )Nc                ,    g | ]}t          |          S r   )r   )rB   ps     r   
<listcomp>z#_import_plugins.<locals>.<listcomp>3  s    ---LOO---r   )syspathextendrJ   r   r   s     r   _import_pluginsr   .  s/     HOOD+,,,--W----r   c                   g }g }g }i }g }| D ]}t          |j        dd          r.|j        j        j        |j        vr|                    |           F|j        j        j        dk    r|||j        <   fd|j	        v r|                    |           d|j	        v r|                    |           d|j	        v r|                    |           t          d|           t          j        |||          D ]?}t          j        |j                  s$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$   rL   appendrz   r'   r!   NotImplementedError	itertoolschainr	   matchr
   r+   patternr5   r/   )r   r   r1   r2   r3   r7   r8   rC   s           r   _classify_pluginsr   6  s    DLMIH E EFJ 0%88	E).d6LLLOOF####]&,??+1If'((v(((KKv000'''' 111  ((((%&C6&C&CDDD/$mDD   &v'899 	 /F$7 / /$,/ /  	 %'
 
 

    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   s     r   load_pluginsr   c  s     _Wd;;TBBBr   )rT   rU   rV   r   rW   rX   r"   rY   )
rT   rU   re   r   rL   rX   rM   rX   r"   rI   )ro   rp   r$   r   r   r   r"   rq   )r"   rq   )rT   rU   r"   rq   )r   r   r   rK   r"   r   )rT   rU   r   rI   r"   r   )r   r   r"   r    )r   r   r"   r   )r   r   r   rI   r"   r0   )r   r0   r   rI   r"   r5   )r   r   r   rI   r"   r5   )-r   
__future__r   configparserimportlib.metadatarw   r   r   loggingr   typingr   r   r   r   rA   r   flake8.defaultsr	   flake8.exceptionsr
   r   	getLoggerr   r   rP   r{   r   r   r   r/   r5   rI   rd   rn   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>r      s   7 7 " " " " " "               



                               - - - - - - , , , , , , 0 0 0 0 0 0g!!	?@@ $ / / / / /Z / / /; ; ; ; ;: ; ; ;$& & & & &z & & &
 
 
 
 
j 
 
 
6
 
 
 
 
J 
 
 
"   &   ., , , ,4"@ "@ "@ "@J/ / / /
 
 
 
&      6
; 
; 
; 
;. . . .* * * *Z
C 
C 
C 
C 
C 
Cr   