5K5Q d Z ddlmZ ddlmZ ddlmZ ddlm Z ddl
mZmZ ddl
mZ erddlmZ G d d
e ZddZdS )z,Checks for magic values instead of literals. )annotations)match)
TYPE_CHECKING)nodes)BaseCheckerutils)HIGH)PyLinterc e Zd ZdZdZddiZddddd d
ffZd fdZddZd dZ d!dZ
d"dZed#d Z
ej d d!d Z xZS )$MagicValueCheckerz$Checks for constants in comparisons.zmagic-valueR2004)z;Consider using a named constant or an enum instead of '%s'.magic-value-comparisonzUsing named constants instead of magic values helps improve readability and maintainability of your code, try to avoid them in comparisons.zvalid-magic-values)r __main__csvzzList of valid magic values that `magic-value-compare` will not detect. Supports integers, floats, negative numbers, for empty string enter ``''``, for backslash values just use one backslash e.g \n.)defaulttypemetavarhelplinterr
returnNonec Z t | d| _ dS )zInitialize checker instance.r N)super__init__valid_magic_vals)selfr __class__s o/builddir/build/BUILD/cloudlinux-venv-1.0.10/venv/lib/python3.11/site-packages/pylint/extensions/magic_value.pyr zMagicValueChecker.__init__0 s,
'''9; c r1t fd j j j D _ d S j j j _ d S )Nc 3 B K | ]} | V d S N)_parse_rcfile_magic_numbers).0valuer! s r# z)MagicValueChecker.open..8 sE * * 0077* * * * * *r$ )_magic_vals_ext_configuredtupler configvalid_magic_valuesr r! s `r# openzMagicValueChecker.open5 sv **,, J$) * * * *![/B* * * % %D!!!
%)K$6$ID!!!r$ boolc L t | j j j t S r' )
isinstancer r. r/ r- r0 s r# r, z,MagicValueChecker._magic_vals_ext_configured? s dk0CUKKKKr$ node
nodes.Comparec g }d}d}|j }| t |t j |j d d }| t |t j t
| rdS d}|| r| | r|j }n$|| r| | r|j }| | d||t dS dS )z
Magic values in any side of the comparison should be avoided,
Detects comparisons that `comparison-of-constants` core checker cannot detect.
r r Nr )r5 args
confidence)leftappendr4 r Constopsall_is_magic_valuer* add_messager )r! r5 const_operandsLEFT_OPERAND
RIGHT_OPERANDleft_operand
right_operand
operand_values r# _check_constants_comparisonz-MagicValueChecker._check_constants_comparisonB s
yju{CCDDDA
jDDEEE~ F
,' 0D,@,@,N,N 0(.MM
M
* 0t/C/CM/R/R 0)/M$(#
%$r$ nodes.Constc H t j | o
|j | j vS r' )r is_singleton_constr* r r! r5 s r# r? z!MagicValueChecker._is_magic_valueb s* ,T222
Jt45
r$
parsed_valstrfloat | strc | d } | d r| d r
| dd S t d| }|rt | n| S )Nunicode_escape'r r z[-+]?\d+(\.0*)?$)encodedecode
startswithendswithregex_matchfloat)rL is_numbers r# r( z-MagicValueChecker._parse_rcfile_magic_numbersg s &&((//0@AA
%% $**=*=c*B*B $ad## 3Z@@ $-=uZ :=r$ zmagic-comparisonc 0 | | d S r' )rG rK s r#
visit_comparezMagicValueChecker.visit_compareq s ((.....r$ r r
r r )r r )r r2 )r5 r6 r r )r5 rH r r2 )rL rM r rN )__name__
__module____qualname____doc__namemsgsoptionsr r1 r, rG r? staticmethodr( r only_required_for_messagesrZ
__classcell__)r" s @r# r r s) ..D
D
!5-H
G<