o
    h+                     @  s  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eZedZdddZG dd deZG dd deZG dd deZG dd deZG dd deZ dMd"d#Z!dNd'd(Z"dOd.d/Z#dPd0d1Z$dQd2d3Z%dRd9d:Z&dSd<d=Z'dTdAdBZ(dUdDdEZ)dVdGdHZ*dWdIdJZ+dXdKdLZ,dS )Yz1Functions 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                   @  s*   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__ r   r   K/var/www/html/ai/venv/lib/python3.10/site-packages/flake8/plugins/finder.pyr      
   
 r   c                   @  sF   e Zd ZU dZded< ded< ded< edd
dZedddZdS )LoadedPluginz)Represents a plugin after being imported.r   pluginr   objdict[str, bool]
parametersreturnr   c                 C  s
   | j jjS )z0Return the name given in the packaging metadata.)r   r   nameselfr   r   r   
entry_name-   s   
zLoadedPlugin.entry_namec                 C  s   | j j d| j dS )z8Return the name for use in user-facing / error messages.[])r   r   r#   r!   r   r   r   display_name2   s   zLoadedPlugin.display_nameNr   r   )r   r   r   r   r   propertyr#   r&   r   r   r   r   r   &   s   
 r   c                   @  s*   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   r   r)   c                   @  s>   e Zd ZU dZded< ded< ded< dd
dZdddZdS )PluginszClassified plugins.r)   checkerszdict[str, LoadedPlugin]	reportersr*   disabledr   #Generator[LoadedPlugin, None, None]c                 c  s@    | j jE dH  | j jE dH  | j jE dH  | j E dH  dS )z3Return an iterator over all :class:`LoadedPlugin`s.N)r/   r+   r,   r-   r0   valuesr!   r   r   r   all_pluginsG   s
   zPlugins.all_pluginsr   c                 C  s   d tdd |  D S )z0Return a user-displayed list of plugin versions., c                 S  s.   h | ]}|j jd vr|j j d|j j qS )>   localflake8z: )r   r   r   ).0loadedr   r   r   	<setcomp>R   s
    z'Plugins.versions_str.<locals>.<setcomp>)joinsortedr4   r!   r   r   r   versions_strN   s   zPlugins.versions_strN)r   r2   r'   )r   r   r   r   r   r4   r=   r   r   r   r   r.   @   s   
 
r.   c                   @  s8   e Zd ZU dZded< ded< ded< eddd	Zd
S )PluginOptionsz"Options related to plugin loading.ztuple[str, ...]local_plugin_pathsfrozenset[str]enable_extensionsrequire_pluginsr   c                 C  s   | dt  t  dS )z2Make a blank PluginOptions, mostly used for tests.r   r?   rA   rB   )	frozenset)clsr   r   r   blankb   s
   zPluginOptions.blankN)r   r>   )r   r   r   r   r   classmethodrF   r   r   r   r   r>   [   s   
 r>   cfgconfigparser.RawConfigParsercfg_opt_namer   opt
str | Noner   	list[str]c                 C  sR   |d ur	t |S ||ddfD ]}| jd|d d}|d ur&t |  S qg S )N_-r7   fallback)r   parse_comma_separated_listreplaceget)rH   rJ   rK   opt_namevalr   r   r   _parse_optionl   s   
rW   cfg_dirrA   rB   c                C  sT   | j dddd }t|}t||}tt|tt| d|tt| d|dS )z%Parse plugin loading related options.flake8:local-pluginspaths rP   rA   rB   rC   )	rT   stripr   rR   normalize_pathsr>   tuplerD   rW   )rH   rX   rA   rB   paths_srZ   r   r   r   parse_plugin_options   s   


r`   eps'Iterable[importlib.metadata.EntryPoint]r    r   Generator[Plugin, None, None]c                 c  s    t jdj}t jdj}| D ]1}|jtvrq|jdkr*t|d |d |V  q|jdv r;t|d |d |V  qt|||V  qd S )NpyflakespycodestyleFr    r   EW)	importlibmetadatadistributiongroupFLAKE8_GROUPSr    r   )ra   r    r   pyflakes_metapycodestyle_metaepr   r   r   _flake8_plugins   s   


rp   c                  c  s    t  } tj D ]]}|j}tdd |D sq	|j}|d | v r"q	| |d  |d tv r=t	d|d t|d   q	|d dkrQt
||d |d E d H  q	|D ]}|jtv ret|d |d |V  qSq	d S )Nc                 s  s    | ]}|j tv V  qd S )N)rk   rl   )r8   ro   r   r   r   	<genexpr>   s    z*_find_importlib_plugins.<locals>.<genexpr>r    z#%s plugin is obsolete in flake8>=%sr7   r   )setrh   ri   distributionsentry_pointsanyaddBANNED_PLUGINSLOGwarningrp   rk   rl   r   )seendistra   metaro   r   r   r   _find_importlib_plugins   s4   

r}   c                 c  s    dD ]:}d| }t j| jd|dd t jdD ]"}|d\}}}| | }}tj|||}t	dd|V  qqd S )	N)	extensionreportzflake8.rY   r[   rP   )regexp=r6   )
r   rR   rT   r\   LOCAL_PLUGIN_LIST_RE	partitionrh   ri   
EntryPointr   )rH   plugin_typerk   plugin_sr    rN   	entry_strro   r   r   r   _find_local_plugins   s   

r   pluginslist[Plugin]expectedr@   Nonec              
   C  sd   dd | D }dd |D }|| }|r0t ddt| ddt| ddt| d S )Nc                 S  s   h | ]}t |jqS r   )r   normalize_pypi_namer   )r8   r   r   r   r   r:      s    z*_check_required_plugins.<locals>.<setcomp>c                 S  s   h | ]}t |qS r   )r   r   )r8   r    r   r   r   r:      s    z2required plugins were not installed!
- installed: r5   z
- expected: z
- missing: )r	   r;   r<   )r   r   plugin_namesexpected_namesmissing_pluginsr   r   r   _check_required_plugins   s    r   optsc                 C  s*   g t  t| }|  t||j |S )z/Discovers all plugins (but does not load them).)r}   r   sortr   rB   )rH   r   retr   r   r   find_plugins   s   r   funcr   r   c                 C  sD   t |  }|r| j} dd t | 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                 S  s,   i | ]}|j tjju r|j|jtjju qS r   )kindinspect	ParameterPOSITIONAL_OR_KEYWORDr    defaultempty)r8   	parameterr   r   r   
<dictcomp>  s
    z#_parameters_for.<locals>.<dictcomp>r"   N)r   
isfunction__init__	signaturer   r3   pop)r   is_classr   r   r   r   _parameters_for  s   r   r   c              
   C  s`   z| j  }W n ty } zt| j|d }~w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errr   r   r   _load_plugin!  s   r   r*   c                 C  s   t j|j dd | D S )Nc                 S  s   g | ]}t |qS r   )r   )r8   pr   r   r   
<listcomp>3  s    z#_import_plugins.<locals>.<listcomp>)syspathextendr?   r   r   r   r   r   _import_plugins.  s   r   c                 C  s   g }g }g }i }g }| D ]K}t |jddr#|jjj|jvr#|| q|jjjdkr0|||j< qd|j	v r;|| qd|j	v rF|| qd|j	v rQ|| qt
d| t|||D ]}t|jsstd|j d	tj q_tt|||d
||dS )Noff_by_defaultFr   r+   r,   r-   zwhat plugin type? zplugin code for `z` does not match )r+   r,   r-   )r/   r0   r1   )getattrr   r   r   r    rA   appendrk   r#   r   NotImplementedError	itertoolschainr   matchr	   r&   patternr.   r)   )r   r   r+   r,   r-   r0   r1   r9   r   r   r   _classify_plugins6  sH   



r   c                 C  s   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   r   r   load_pluginsc  s   
r   )rH   rI   rJ   r   rK   rL   r   rM   )
rH   rI   rX   r   rA   rL   rB   rL   r   r>   )ra   rb   r    r   r   r   r   rc   )r   rc   )rH   rI   r   rc   )r   r   r   r@   r   r   )rH   rI   r   r>   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r>   r   r*   )r   r*   r   r>   r   r.   )r   r   r   r>   r   r.   )-r   
__future__r   configparserimportlib.metadatarh   r   r   loggingr   typingr   r   r   r   r7   r   flake8.defaultsr   flake8.exceptionsr	   r
   	getLoggerr   rx   rD   rl   rw   r   r   r)   r.   r>   rW   r`   rp   r}   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sL    





%





-