bgk UdZddlmZddlZddlZddlmZddlmZddl m Z ddl m Z ddl mZmZdd lmZdd lmZdd lmZdd lmZdd lmZmZmZe rddlmZejdkrddl mZnddl mZhdZ!ej"ej#hZ$dddddddddddej%ifdddd Z&d!e'd"<d3d+Z(Gd,d$Z)Gd-d.eeZ*d4d2Z+dS)5zPython code format's checker. By default, try to follow Guido's style guide : https://www.python.org/doc/essays/styleguide/ Some parts of the process_token method is based from The Tab Nanny std module. ) annotationsN)reduce)Match) TYPE_CHECKING)nodes)BaseRawFileCheckerBaseTokenChecker)only_required_for_messages) WarningScope)HIGH)MessageDefinitionTuple) OPTION_POPragmaParserError parse_pragma)PyLinter))Literal>ifindelfornotelifwithraisewhileyieldassertexceptreturn=:=)zLine too long (%s/%s) line-too-longz=Used when a line is longer than a given number of characters.)z Too many lines in module (%s/%s)too-many-linesz@Used when a module has too many lines, reducing its readability.)zTrailing whitespacetrailing-whitespacezHUsed when there is whitespace between the end of a line and the newline.)zFinal newline missingmissing-final-newlinez7Used when the last line in a file is missing a newline.)zTrailing newlinestrailing-newlinesz3Used when there are trailing blank lines in a file.)z)Bad indentation. Found %s %s, expected %sbad-indentationzUUsed when an unexpected number of indentation's tabulations or spaces has been found.)zUnnecessary semicolonunnecessary-semicolonzeUsed when a statement is ended by a semi-colon (";"), which isn't necessary (that's python, not C ;).z(More than one statement on a single linemultiple-statementszr@s g/builddir/build/BUILD/cloudlinux-venv-1.0.7/venv/lib/python3.11/site-packages/pylint/checkers/format.py_last_token_on_line_isrJzst1  0 LLA & &% / : a< : LLA & &% / : KK1 % %)9 9 cBeZdZdZddZdd Zdd Zdd Zdd ZddZ dS)r=z3A wrapper for readable access to token information.r<list[tokenize.TokenInfo]r!Nonec||_dSN_tokens)selfr<s rI__init__zTokenWrapper.__init__s  rKidxr?rAc(|j|dS)NrDrQrSrUs rIr@zTokenWrapper.token|C ##rKc(|j|dS)NrrQrWs rIrFzTokenWrapper.typerXrKc4|j|ddS)NrErrQrWs rI start_linezTokenWrapper.start_line|C #A&&rKc4|j|ddS)NrErDrQrWs rI start_colzTokenWrapper.start_colr\rKc(|j|dS)NrQrWs rIlinezTokenWrapper.linerXrKNr<rMr!rN)rUr?r!rA)rUr?r!r?) __name__ __module__ __qualname____doc__rTr@rFr[r^rarKrIr=r=s==$$$$$$$$''''''''$$$$$$rKcxeZdZdZdZeZddddddfd d d d d dfddddddfddddddfddddddfddddddfddddd dfd!d"d#d$gd%d&d'ffZdTfd, ZdUd1Z dVd4Z dWd7Z dXd8Z dYd<Z ed=dZd?Zd[dAZd\dCZd]dFZed^dIZed_dKZed`dNZdadPZdbdSZxZS)c FormatCheckerzvFormatting checker. Checks for : * unauthorized constructions * strict indentation * line length formatzmax-line-lengthdr?zz.Maximum number of characters on a single line.)defaultrFmetavarhelpzignore-long-linesregexpzz^\s*(# )??$z>Regexp for a line that is allowed to be longer than the limit.)rFrmrlrnzsingle-line-if-stmtFynzzOAllow the body of an if to be on the same line as the test if there is no else.zsingle-line-class-stmtzfAllow the body of a class to be on the same line as the declaration if body contains single statement.zmax-module-linesiz$Maximum number of lines in a module.z indent-stringz non_empty_stringzzSString used as indentation unit. This is usually " " (4 spaces) or "\t" (1 tab).zindent-after-parenr`zGNumber of spaces of indent required inside a hanging or continued line.zexpected-line-ending-formatchoicez)rsLFCRLFzIExpected format of line ending, e.g. empty (any line ending), LF or CRLF.)rFrmrlchoicesrnlinterrr!rNcft|i|_i|_dSrP)superrT_lines_visited_lines)rSrw __class__s rIrTzFormatChecker.__init__s0    &( 8:rKr<r=r> line_startc~t||dr*|d||||}||}||t vr#|dd|j|<|||||dS)z9A new line has been encountered, process it if necessary.;r*ra rN) rJ add_messager[rarF _JUNK_TOKENSsplitrz check_lines)rSr<r>r}line_numras rInew_linezFormatChecker.new_lines !&(C 8 8 X   46;L;LX;V;V  W W W$$Z00{{:&& ;;z " ", 6 6$(JJt$4$4Q$7DK ! T8<<<<rrr>}rr:]rErr-raargs,>orandrrelsec3$K|] }|jV dSrP)string).0is rI z;FormatChecker._check_keyword_parentheses..zs$<>+/((-%|s"" !a%='3..-.*$$ -&Q-2F#2M2M(,???$*a/*!a%='+EEEEJ8+X-?AQRJSJS04IA4MQV4V4VEAI~~#$,,$$,8-%!8s??FF8},,#'LL1X((FF 1X&&FF1X''<<<<<<<77qrr AFFFFFOG G rKcdg}d}d}i_i_d_d}t|D]\}\}}} } } | d|krj| d}|tjkr+t||dz |dzn't||dz ||tjkrd} ||n|tjkrAd} ||ddz|| |ddzn|tj krd}t|dkr|d=nc|tjkr| ds|}n;|tjtjfvr!|rd} | |d||tjkr,|drd | |t*vr|||dz}|jjjkrjjd d} | jd f} t;t=dfd | Dd}d |jjjf| ||kr|dkrd| dSdSdS)zProcess tokens and search for: - too long lines (i.e. longer than ) - optionally bad construct (if given, bad_construct must be a compiled regular expression). rFNrDT lzlowercase-l-suffixrr%c3VK|]#}jj|V$dSrP)rw_pragma_linenoget)rnamerSs rIrz/FormatChecker.process_tokens..s6UUtdk8<t d|d}|dkrdnd}||kr|d||f| dSdSdS) Nr.rc||kr||zn|SrPrg)xys rIz2FormatChecker._check_line_ending..sqAvva!ee1rKrsrrtrur/r)rrrwrexpected_line_ending_formatr)rSrrexpecteds rIrz FormatChecker._check_line_endings  ! - F{d.DDD  !5H EEE!,;%A   !D!DkSUVVK"-"5"5$$6Kh&&  3%x0!!  '&rKr+ nodes.NodeNGc|jsdS|jsdS|}||j}nt |jtjr)||jj vr|jj dj dz}nBt |jtj rd}n |j dj}|j}|s J|||kr6|j|dkr|||dS||jvrdS |j}n#t$$r |j }YnwxYw|s J|g}t'||dzD]d}d|j|< ||j|@#t.$r|dYawxYwdS)z8Check the node line number and check it if not yet done.NrrDT)futurerErs) is_statementroot pure_pythonprevious_sibling fromlineno isinstanceparentr TryFinally finalbodybodytolinenoModule statementr{r_check_multi_statement_lineblockstart_tolinenoAttributeErrorrrrzrstripKeyError)rSr prev_sibl prev_linerarliness rI visit_defaultzFormatChecker.visit_defaults   Fyy{{&  F))++  !,II t{E$4 5 5 F:>$+BW:W:W (+4q8II  U\ 2 2 FII --T-::EITt   !4!8!8!>!>!!C!C  , ,T4 8 8 8 F 4& & & F %/HH % % %}HHH %x$1 -- ! !D()D  % ! T[.55778888 ! ! ! R      !  ! !s$(D00EE52F((G  G ract|tjrdSt|tjr!t|jtjrdSt|jtjr|jjs|jj j rdSt|jtj r0t|jj dkr|jj jrdSt|jtjrNt|tjr4t|jtjr|jjt&urdS|d|d|j|<dS)z/Check for lines containing multiple statements.NrDr+)rrE)rrWith TryExceptrrIforelserwrsingle_line_if_stmtClassDefrrsingle_line_class_stmt FunctionDefExprvalueConstEllipsisrr{)rSrras rIrz)FormatChecker._check_multi_statement_lines_ dEJ ' '  F dEO , ,  K)2 2   F t{EH - - K&  "6  F t{EN 3 3 DK$%%** "9+ F t{E$5 6 6 4,, 4:u{33   H,, F .T:::$%D!!!rKrc|d}|t|ddvr-|d|t|tdSdS)z,Check that there is no trailing white-space.z N)rrr&)ra col_offset confidence)rrrr )rSrar stripped_lines rI check_trailing_whitespace_endingz.FormatChecker.check_trailing_whitespace_ending=sv K00 M""$$ %^ ; ;   %}--       < ;rK checker_offrBcV|jjj}|jjj}|}t ||kr]||sJ|r|jd|dS|d|t ||fdSdSdS)z=Check that the line length is less than the authorized value.r$rN) rwrmax_line_lengthignore_long_linesrrsearchadd_ignored_messager)rSrarr max_charsignore_long_lines rIcheck_line_lengthzFormatChecker.check_line_lengthIsK&6 ;-?{{}} t99y )9)@)@)F)F  W //CCCCC  qD 9?U VVVVV ! rKoptions_pattern_obj Match[str]c|j}|d|d||ddz}|S)z-Remove the `# pylint ...` pattern from lines.NrD)rrrend)r r purged_liness rIremove_pylint_option_from_linesz-FormatChecker.remove_pylint_option_from_linesTsd$* 0'--a000 1 8 8 : :'++A..001 2 rKpylint_pattern_match_objectc t|dD]}|jdkr d|jvrdSn#t$rYnwxYwdS)z2Return True if the line length check is activated.rEdisabler$FT)rgroupactionmessagesr)rpragmas rIis_line_length_check_activatedz,FormatChecker.is_line_length_check_activated^s| &'B'H'H'K'KLL ! !=I--/V_2T2T 55 !!    D ts9?? A  A r list[str]chd}g}d}|dD],}|d|vr|||zd}'||z }-|S)z]Split lines according to universal newlines except those in a specific sets. >

…  rsTr) splitlinesr)r unsplit_endsresbuffer atomic_lines rIspecific_splitlinesz!FormatChecker.specific_splitlinesjsz     ++D11 & &K2l22 6K/000+% rKrc |jjj ||}t |D]q\}}|ds|d||z5||tj kr| |||zrt fd|D}|sdStj |} d} | r,|| sd} || }t ||D]\}}||||z|  dS)zCheck given lines for potential messages. Check if lines have: - a final newline - no trailing white-space - less than a maximum number of characters rr'rc3>K|]}t|kVdSrP)r)rrar s rIrz,FormatChecker.check_lines..s?, , &*CII !, , , , , , rKNFT)rwrrr)rrrrFrGSTRINGranyrrrrr ) rSr<r}rr split_linesoffsetrapotential_line_length_warningmobjrr s @rIrzFormatChecker.check_liness$K&6 ..u55 %k22 M MLFD==&&   !8v OOO{{:&&(/9955dFVOLLL),, , , , .9, , , ) ) % -  F&&  ?66t<< #" 88>>E&d&>&>u&E&EFF G GLFD  " "4&+ F F F F G GrKrrc|jjj}|dkrd}d}t|}|d||kr||d}|dz }|d||kd}|r+|ddvr!||dz }|dd}|r |ddv!||ks|rCd}|ddkrd }|d |||zt|z|||zf dSdS) z&Return the indent level of the string.z\t rNrDrsz spacestabsr)r)rwr indent_stringrr) rSrrrindentlevel unit_sizesuppli_types rIrz FormatChecker.check_indent_levels=#1 U??FKK ZiZ F**IJJ'F QJEZiZ F** e++ VAY EABBZF e++ H   FayD     !i'#e**4fh>RS        rKrwrr!rN)r<r=r>r?r}r?r!rN)rrr!rN)r<rMrr?r!rNrb)rrArr?r!rN)rrr!rN)rrrar?r!rN)rarArr?r!rN)rarArr?rrBr!rN)r r r!rA)rr r!rB)rrAr!r) r<r=r}r?rrArr?r!rN)rrArr?rr?r!rN)rcrdrerfrr;msgsoptionsrTrrrrrr rrrr  staticmethodrrr)rr __classcell__)r|s@rIriris D D "H      %8T     " %<     % %(    ">     !*%6     !"%     * 2---@   WXGt;;;;;; = = = =    eeeeNVAVAVAVAp0  566'!'!'!76'!R#&#&#&#&J     W W W W\   \ \06G6G6G6GprKrirwrrNcJ|t|dSrP)register_checkerri)rws rIregisterrCs$ M&1122222rK)r<r=r>r?r@rAr!rBr<),rf __future__rsysrG functoolsrrertypingrastroidrpylint.checkersrr pylint.checkers.utilsr pylint.constantsr pylint.interfacesr pylint.typingr pylint.utils.pragma_parserrrr pylint.lintr version_infortyping_extensionsrrHrrNODEr;__annotations__rJr=rirCrgrKrIrUsq #"""""  @@@@@@@@<<<<<<))))))""""""000000QQQQQQQQQQ%$$$$$$v))))))" (+.        3F ,#$    o<+<+<<<<~$$$$$$$$,wwwww$&8wwwt333333rK