
    yIf%                        d dl mZ d dlZd dlmZ d dlmZ d dlmZmZm	Z	 d dl
mZ d dlmZmZmZ erd dlmZmZ eeeeef         f         Z G d	 d
          ZdS )    )annotationsN)defaultdict)Iterator)TYPE_CHECKINGDictLiteral)nodes)%INCOMPATIBLE_WITH_USELESS_SUPPRESSIONMSG_STATE_SCOPE_MODULEWarningScope)MessageDefinitionMessageDefinitionStorec                  `    e Zd ZdZ	 d+ddd,dZd-dZd.dZd/dZ	 d0d1d"Zd2d'Z	d3d)Z
d4d*ZdS )5	FileStatez<Hold internal state specific to the currently analyzed file.NF)is_base_filestatemodnamestr	msg_storer   nodenodes.Module | Noner   boolreturnNonec                   || _         i | _        i | _        t          j        t
                    | _        i | _        || _        |r|j	        | _
        nd | _
        || _        || _        d S N)	base_name_module_msgs_state_raw_module_msgs_statecollectionsr   set_ignored_msgs_suppression_mapping_moduletolineno_effective_max_line_number_msgs_store_is_base_filestate)selfr   r   r   r   s        K/var/www/piapp/venv/lib/python3.11/site-packages/pylint/utils/file_state.py__init__zFileState.__init__   s{     !468:##C(( 	 AC! 	3.2mD++.2D+$"3	 	    
msgs_storenodes.NodeNGmsgr   	msg_statedict[int, bool]c                8   |                                 D ]}|                     ||||           t          |t          j        t          j        t          j        f          r|j        r|j        d         j        }n|j	        }| 
                    ||||           dS )z|Recursively walk (depth first) AST to collect block level options
        line numbers and set the state correctly.
        r   N)get_children_set_state_on_block_lines
isinstancer	   ModuleClassDefFunctionDefbody
fromlinenor$   _set_message_state_in_block)r(   r,   r   r.   r/   childfirstchildlinenos          r)   r3   z#FileState._set_state_on_block_lines8   s     &&(( 	N 	NE**:uc9MMMM" telENE<MNOO	-		-  $y|6#}((i?OPPPPPr+   linesr<   intc                   |j         }|j        }t          |                                          D ]H\  }}|}	||k    s||k     r|j        t
          j        k    r[||k    rd}|                    |          \  }
}|
|j         k    r/|
|k    r)|j         | j        	                    |j
        d          v r|}
n|}
|}t          |
|dz             D ]}t          |t          j                  r|j         |cxk    r|k     s1n t          |t          j                  s8|j         |cxk     r|k     r&n n#|| j        	                    |j
        d          v r||v r
||         }|}	|                     ||||	           ||= JdS )z/Set the state of a message in a block of lines.T    N)r9   r$   listitemsscoper   NODEblock_ranger   getmsgidranger4   r	   r5   _set_message_state_on_line)r(   r.   r=   r   r<   firstlastlinenostateoriginal_linenofirst_last_lines                r)   r:   z%FileState._set_message_state_in_block\   s    }!%++--00 <	 <	MFE$Ov~~ yL---,,, E $ 0 0 8 8* do--"2224+B+F+FsyRT+U+UUU#F  feai00 S S #466
 !Ot<<<<f<<<< 'tU\:: = !Od;;;;V;;;;;d599#)RHHHH5==!$KE&*O//T5/RRRRfy<	 <	r+   rR   rN   rO   c                    |s|| j         |j        |f<   n"| j                             |j        |fd           	 || j        |j                 |<   dS # t          $ r ||i| j        |j        <   Y dS w xY w)z%Set the state of a message on a line.N)r"   rH   popr   KeyError)r(   r.   rR   rN   rO   s        r)   rJ   z$FileState._set_message_state_on_line   s      	C;JD%sy$&788%))39d*;TBBB	?7<D#CI.t444 	? 	? 	?26D#CI....	?s   A A.-A.packagestatusrD   c                   |dk    sJ |dk    r%|                      | j        | j        |||i           n|                     ||||           	 || j        |j                 |<   dS # t          $ r ||i| j        |j        <   Y dS w xY w)zASet status (enabled/disable) for a given message at a given line.r   rR   N)r3   r&   r#   rJ   r   rH   rU   )r(   r.   rR   rW   rD   s        r)   set_msg_statuszFileState.set_msg_status   s     axxxxF??** $,dF^    ++CvtDDD	D;AD'	24888 	D 	D 	D6:F^D'	2222	Ds   A$ $BBstate_scopeLiteral[0, 1, 2] | NonerH   
int | Nonec                    |t           k    r\t          |t                    sJ 	 | j        ||f         }| j        ||f                             |           dS # t          $ r Y dS w xY wdS )zReport an ignored message.

        state_scope is either MSG_STATE_SCOPE_MODULE or MSG_STATE_SCOPE_CONFIG,
        depending on whether the message was disabled locally in the module,
        or globally.
        N)r   r4   r>   r"   r!   addrU   )r(   rZ   rH   rR   	orig_lines        r)   handle_ignored_messagez FileState.handle_ignored_message   s     000dC((((( 5udmD	"E9#56::4@@@@@    10s   1A 
A%$A%hIterator[tuple[Literal['useless-suppression', 'suppressed-message'], int, tuple[str] | tuple[str, int]]]c              #  ~  K   | j                                         D ]P\  }}|                                D ]6\  }}|s/||f| j        vr$|t          vrd||                    |          ffV  7Qt          | j                                                  D ])\  \  }}}|D ]}d||                    |          |ffV  *d S )Nzuseless-suppressionzsuppressed-message)r   rC   r!   r
   get_msg_display_stringrB   )r(   r,   warningr=   rR   enablefrom_ignored_liness           r)   "iter_spurious_suppression_messagesz,FileState.iter_spurious_suppression_messages   s'      #9??AA 		 		NGU %  f $t/AAA'LLL/"99'BB8     04D4F4L4L4N4N/O/O 	 	+Wem%  *D55g>>3     	 	r+   c                    | j         S r   )r%   )r(   s    r)   get_effective_max_line_numberz'FileState.get_effective_max_line_number   s    ..r+   r   )
r   r   r   r   r   r   r   r   r   r   )
r,   r   r   r-   r.   r   r/   r0   r   r   )
r.   r   r=   r0   r   r-   r<   r>   r   r   )
r.   r   rR   r>   rN   r   rO   r>   r   r   )rV   )
r.   r   rR   r>   rW   r   rD   r   r   r   )rZ   r[   rH   r   rR   r\   r   r   )r,   r   r   ra   )r   r\   )__name__
__module____qualname____doc__r*   r3   r:   rJ   rY   r`   rh   rj   r@   r+   r)   r   r      s        FF %)	 #(     4"Q "Q "Q "QHF F F FP? ? ? ?2 D D D D D.   $   8/ / / / / /r+   r   )
__future__r   r   r   collections.abcr   typingr   r   r   astroidr	   pylint.constantsr
   r   r   pylint.messager   r   r   r>   r   MessageStateDictr   r@   r+   r)   <module>rv      s$  
 # " " " " "     # # # # # # $ $ $ $ $ $ / / / / / / / / / /                 IHHHHHHHH T#t)_,- c/ c/ c/ c/ c/ c/ c/ c/ c/ c/r+   