toS MndZddlZddlZddlZddlmZddlmZm Z ddl m Z ddl m Z ddlmZdd lmZd ZGd d eZGd deZdZGddZGddeZGddeZGddeZGddeZGddeZGddeZGddeZGd d!eZGd"d#eZ Gd$d%e!Z"d&Z#Gd'd(eZ$Gd)d*Z%Gd+d,e&Z'Gd-d.eZ(Gd/d0Z)dS)1zPython code parser.N)StringIO)chain dropwhilePath)compile)Tuple)log) Parser DefinitionModulePackageFunctionNestedFunctionMethodClass NestedClassAllErrorr ParseErrorceZdZdZdZdS)rz+An error parsing contents of a Python file.cdS)NzCannot parse file.selfs /srv/buildsys-work-dir/castor/build_node/builder-2/WGSG1/unpkd_srcs/cloudlinux-venv-1.0.6/venv/lib/python3.11/site-packages/pydocstyle/parser.py__str__zParseError.__str__!s##N)__name__ __module__ __qualname____doc__rrrrrrs)55$$$$$rrceZdZdZdZdS)UnexpectedTokenErrorc"||_||_dSNtoken expected_kind)rr(r)s r__init__zUnexpectedTokenError.__init__&s *rcBd|j|jS)Nz Unexpected token {}, expected {})formatr(r)rs rrzUnexpectedTokenError.__str__*s$188 J*   rN)rr r!r*rrrrr$r$%s2+++     rr$cltdd|S)Nz (.)([A-Z]+)z\1 \2)resublower)strings rhumanizer20s, n   ! !(F 3 3 9 9 ; ;;rc*eZdZdZdZdZdZdZdS)Valuez.A generic object with a list of preset fields.c`t|jt|krStdt|t|j|jj|jt |t|j|dS)Nz)got {} arguments for {} fields for {}: {}) len_fields ValueErrorr, __class__rvarsupdatezip)rargss rr*zValue.__init__7s t|  D ) );BBII %%N+L   T #dlD1122222rc:tt|Sr&)hashreprrs r__hash__zValue.__hash__CsDJJrcF|ot|t|kSr&)r:)rothers r__eq__z Value.__eq__Fs2dtE{{22rctdfdjD}jjd|dS)Nz, c3`K|](}d|t|V)dS)z{}={!r}N)r,getattr).0fieldrs r z!Value.__repr__..JsQ     UGD%$8$8 9 9      r())joinr7r9r)rkwargss` r__repr__zValue.__repr__Is\         .)55F5555rN)rr r!r"r*rArDrOrrrr4r44sV88 3 3 3   33366666rr4ceZdZdZdZedZedZedZedZ edZ dZ d Z ed Z ed Zed Zd ZdS)r z@A Python source code definition (could be class, function, etc).) name_sourcestartend decorators docstringchildren callable_argsparentskipped_error_codescDtt|jSr&)r2typerrs rzDefinition.as8DJJ,?#@#@rc@|jdS)N)_humansplitrs rr]zDefinition.bs!2!2!4!4R!8rc|jjSr&)rYmodulers rr]zDefinition.cs 4;#5rc|jjSr&)rc dunder_allrs rr]zDefinition.ds t{'=rc<t|jdz |jS)Nr )slicerSrTrs rr]zDefinition.es5a#B#BrFc(t|gg|jRSr&)rrWrs r__iter__zDefinition.__iter__hsdV,dm,,,,rc\t|jtr |jjS|jS)z4Get the line number with which to report violations.) isinstancerV DocstringrSrs r error_linenozDefinition.error_linenoks+ dni 0 0 (>' 'zrc"ddd|jS)Npublicprivate)TF) is_publicrs r _publicityzDefinition._publicityrsy11$.AArc|j|j}d}t|t|}dtt |S)z*Return the source code for the definition.c|dkp&|dS)N#)strip startswith)lines ris_empty_or_commentz.Definition.source..is_empty_or_comment{s0::<<2%E)@)@)E)E Erru)rR_slicerreversedrMlist)rfull_srcrz filtered_srcs rsourcezDefinition.sourcevs`< , F F F!!4hx6H6HII wwx\ 2 233444rcfd|jd|jd|jd}|jr|d|jdz }|S)Nzin  z ``z (skipping rL)rrr`rQrZ)routs rrzDefinition.__str__sQADOAAdkAATYAAA  # = <!9<<< >J XBB C CFH---X BBXB55X5rr ceZdZdZdZedZedZedZ edZ dZ dZ d Z d Zd S) rzA Python source code module.) rQrRrSrTrUrVrWrY _dunder_alldunder_all_errorfuture_importsrZc,ttd|SNdefclass)rrss rr]zModule.s8e#D#DQ#Grc|Sr&rrs rr]zModule.s4rc|jSr&)rrs rr]zModule.s t'7rct|jj}| o||S)zsReturn True iff the module is considered public. This helps determine if it requires a docstring. )rrQstem_is_inside_private_package_is_public_namer module_names rrqzModule.is_publicsE 49oo* 22444 9M9M : :  rct|jj}dtjD}||jkr6||vr2||jrdS|j}||jkr||v2dS)z6Return True if the module is inside a private package.c,g|]}t|Srr)rHps r z5Module._is_inside_private_package..s---q477---rTF)rrQrYsyspath_is_private_name)rrsyspaths rrz!Module._is_inside_private_packagesDI%--CH---dk!!d'&9&9$$TY// t;Ddk!!d'&9&9 urc|d p)|do|dS)zJDetermine whether a "module name" (i.e. module or package name) is public.___)rxendswithrs rrzModule._is_public_namesD))#...  " "4 ( ( G[-A-A$-G-G rc.|| S)zKDetermine whether a "module name" (i.e. module or package name) is private.)rrs rrzModule._is_private_names'' 4444rcdS)Nzat module levelrrs rrzModule.__str__s  rN)rr r!r"r7 staticmethod_nestrrcrerqrrrrrrrrrs&& G LGG H HE X'' ( (F7788J   X       555!!!!!rrceZdZdZdS)rz"A package is a __init__.py module.N)rr r!r"rrrrrs,,,,rrceZdZdZedZedZedZdZ edZ edZ dS) rzA Python source code function.c,ttd|Sr)rrrs rr]zFunction.s.;??Brcb|j|j|jvS|jd S)z:Return True iff this function should be considered public.Nr)rerQrxrs rrqzFunction.is_publics4 ? &9/ /y++C000 0rc>td|jDS)z3Return True iff the method decorated with overload.c3,K|]}|jdkVdS)overloadNrQ)rH decorators rrJz'Function.is_overload..s:  -6INj (      ranyrUrs r is_overloadzFunction.is_overloads4  :>/      rcDtfd|jDS)zCReturn True if the method is decorated with any property decorator.c3*K|] }|jvVdSr&r)rHrproperty_decorator_namess rrJz'Function.is_property..s?   N6 6      rr)rrs `r is_propertyzFunction.is_propertys=    !_      rcL|jdp |jdkS)aReturn True if this function is a test function/method. We exclude tests from the imperative mood check, because to phrase their docstring in the imperative mood, they would have to start with a highly redundant "Test that ...". testrunTest)rQrxrs ris_testzFunction.is_tests&y##F++EtyI/EErc|jS)zReturn the parameter names.)rXrs r param_nameszFunction.param_namess !!rN) rr r!r"rrrrqrrrrrrrrrs(( LBB  E11X1  X    FFXF""X"""rrceZdZdZdZdS)rz%A Python source code nested function.FN)rr r!r"rqrrrrrs//IIIrrcjeZdZdZedZedZedZedZdS)rzA Python source code method.c|jdo'|jdo |jtvS)z@Return True iff this method is a magic method (e.g., `__str__`).r)rQrxrVARIADIC_MAGIC_METHODSrs ris_magiczMethod.is_magicsD I  & & 8 ""4(( 8 !77 rc|jdkS)z*Return True iff this method is `__init__`.r*rrs ris_initzMethod.is_initsyJ&&rc|jD]5}td|jd|jrdS6|jd p|jt vp|j}|jjo|S)z8Return True iff this method should be considered public.^z\.Fr) rUr.rQmatchrxrrrYrq)rrname_is_publics rrqzMethod.is_public s  I$ty$$$%%++IN;; uu  $$S)) ) y22 }  {$77rc6|jD]}|jdkrdSdS)z%Return True iff the method is static.rTF)rUrQ)rrs r is_staticzMethod.is_statics3  I~//tt0urN) rr r!r"rrrrqrrrrrrs&&   X ''X' 8 8X 8Xrrc<eZdZdZedZejZdZdS)rzA Python source code class.c,ttd|Sr)rrrs rr]zClass.'s6K#H#H#KrTN) rr r!r"rrrrqrrrrrr$s4%% LKK L LE"IHHHrrc(eZdZdZedZdS)rz"A Python source code nested class.ch|jd o|jjo |jjS)z7Return True iff this class should be considered public.r)rQrxrYrrqrs rrqzNestedClass.is_public/s9 $$S)) ) & $ & % rN)rr r!r"rrqrrrrr,s3,,   X   rrc:eZdZdZdZdS) Decoratorz*A decorator for function, method or class.zname argumentsN)rr r!r"rar7rrrrr9s%44$$&&GGGrrceZdZdZdZdZdS)rlzRepresent a docstring. This is a string, but has additional start/end attributes representing the start and end of the token. c8t||Sr&)str__new__)clsvrSrTs rrzDocstring.__new__Gs{{3"""rc"||_||_dSr&)rSrT)rrrSrTs rr*zDocstring.__init__Js rN)rr r!r"rr*rrrrlrl?s<###rrl)r*__call__rceZdZdZdZdS)rz9Raised when there is a problem with __all__ when parsing.cft||tjdzdS)z2Initialize the error with a more specific message.a] That means pydocstyle cannot decide which definitions are public. Variable __all__ should be present at most once in each file, in form `__all__ = ('a_public_function', 'APublicClass', ...)`. More info on __all__: http://stackoverflow.com/q/44834/. ') N) Exceptionr*textwrapdedent)rmessages rr*zAllError.__init__UsC  o  rN)rr r!r"r*rrrrrRs)CC     rrcNeZdZejejejhZdZdZ dZ dZ dS) TokenStreamctj|j|_t t |jd|_|jjd|_t|_ d|_ dS)NrT) tkgenerate_tokensreadline _generatorTokennextcurrentrSryr got_logical_newline)rfilelikes rr*zTokenStream.__init__nsU,X->??d4?D99: L&q) #'   rc |j}|}|dnt||_|jr|jjdn|j|_|jt jt jfv}|j|j vp|j o||_ |S)Nr) r_next_from_generatorrrSryrrNLCOMMENTLOGICAL_NEWLINESr)rpreviousris_logical_blanks rmovezTokenStream.moveus<++--&ttE7O -1\HDL&q))ty #=RUBJ,?? MT2 2 ?(=-=  rc t|jdS#ttjf$r |jddYdSwxYw)Nzerror generating tokensT)exc_info)rr SyntaxErrorr TokenErrorr warningrs rrz TokenStream._next_from_generators^ .. .R]+    H  6  F F F44 s2A  A c#XK |j |jVndS|(r&)rrrs rrizTokenStream.__iter__s; |'l"""" IIKKK  rN) rr r!rNEWLINEINDENTDEDENTrr*rrrirrrrrfse  BIry9(((   rrceZdZdZdS) TokenKindcLdtj|S)Nztk.{})r,rtok_namers rrOzTokenKind.__repr__s~~bk$/000rN)rr r!rOrrrrrs#11111rrcLeZdZdZfdZdZxZS)rzkind value start end sourcecftj|t|j|_dSr&)superr*rr)rr=r9s rr*zToken.__init__s,$di(( rc&|jd|jdS)Nz (rL)rvaluers rrz Token.__str__s)......r)rr r!rar7r*r __classcell__)r9s@rrrsX+1133G)))))///////rrceZdZdZdZdZedZedZdZ ddZ d Z d Z dd Z d ZdZdZdZddZdZdZdZdS)r zA Python source code parser.ct|_||_d|j} t ||dn!#t $r}t |d}~wwxYwtt||_ ||_ d|_ d|_ t|_g|_|S)z>Parse the given file-like object and return its Module object.ruexecN)r readlinesrrMrrrrrstreamfilenamerersetr_accumulated_decorators parse_module)rrrsrcerrors rparsez Parser.parses((** ggdk"" * C6 * * * * * * *,,E ) *!(3--00    $!ee')$  """sA A1A,,A1c|j|i|S)zCall the parse method.)r)rr=rNs rrzParser.__call__stz4*6***rc|jjSr&)r rrs rr]zParser.s DK$7rc|jjSr&)r ryrs rr]zParser.s !1rcp|j}|j|krt||dS)z8Consume one token and verify it is of the expected kind.r'N)r rrr$)rr next_tokens rconsumezParser.consumes=[%%'' ?d " "&ZtLLL L # "rNc|j[|jj|kr)||jj|kr||dS|j|jYdSdS)zSkip tokens in the stream until a certain token kind is reached. If `value` is specified, tokens whose values are different will also be skipped. N)rrrrr r)rrrs rleapfrogzParser.leapfrogsq l&| D(( !3u! ! "    | BG++ 0BG11 "be++ 0Bc0I0I,33bggdmmRWWY-?-?@@ $ "be++ 0Bc0I0I# "be++ 0Bc0I0I"bj00DL4E4N4N$9KK 23333$$T\%7888 K     Il&N $++ bggdmmRWWY%7%7 8 8     rFc# K|j|jd|jj|jj|jd|jj|r&|jjdkr|n||jjtj krQ|jjdkrA|jjr5| tj | n|jjdvr5| | |jjVn|jjtjkr;| tj||Ed{Vny|jjtjkr!| tjdS|jjdkr|n|j|jdSdS)z*Parse multiple definitions and yield them.Nz1parsing definition list, current token is %r (%s)zgot_newline: %s__all__r#rfrom)rr rrrr rparse_dunder_allrr%rr)parse_definitionrrparse_definitionsrparse_from_import_statementr)rclass_res rr/zParser.parse_definitionssl& HNNC ! "    HNN,dk.M N N N #dl0I==%%'''' !RU**L&#--K3. RU###%%''''#'777++FLL9K,L,LMMMMMM"bi// RY'''11&9999999999"bi// RY'''#v--002222   """7l&&&&&rc||jjdksJ|tj|j|jd|_d|_dS|jjdkr d|_dS|tjd}|jjdvr!d}|tjd} |r|jjd vrn|jjtj tj fvrn|jjtj tj fvrnC|jjtj ks|jjd kr||jjz }n d |_dS|j|r|tj|s*d |vr&d |jj|_dS|d z } t#|i|_n2#t$$r%}d|||_Yd}~nd}~wwxYw|jj|jjvr|jjtj kry|jjtj krd|_d|_dS|j|jj|jjvr |jjtj kudSdSdSdS)z)Parse the __all__ definition in a module.r+Nz(Could not evaluate contents of __all__. =Fz([TrKz)],z'Could not evaluate contents of __all__.z(Unexpected token kind in __all__: {!r}. rLzOCould not evaluate contents of __all__.The value was {}. The exception was: {})rrrrr$rerr%rr ENDMARKERrrrr rr,eval BaseExceptionr)r is_surroundeddunder_all_contentes rr-zParser.parse_dunder_all8s|!Y.... RW ? &$*?*K"DO$ND ! F <  $ $$ND ! F RU <  % % M LL      !3t!;!;| RZ$>>>| RUBJ$777"bi//4<3E3L3L"dl&88"">% K        LL    ,>!>!>:AAL%  ! Fc! "#5r::DOO   ==CV&>>  ! ! ! ! ! !  L T[%A A A !R\11| BJ.."&>% K      L T[%A A A !R\1111 B A11 B AsG H 'HH c6|jd|j}|}|}t |td}|jJ|j|j}t}|j drt}||j |j ||g||d|j |jd| }|jD] }||_ |j|_|jd|S)z=Parse a module (and its children) and return a Module object.zparsing module.T)reNz __init__.pyzfinished parsing module.)r rryparse_skip_commentr r}r/rrrrrrrerrWrYr) rrSrZrVrWrTrrcchilds rrzParser.parse_module|s! ())) "5577((** ..v$.GGHH|##T\###i = ! !- 0 0 C M K       O  !     _ " "E!ELL $ 3 1222 rc $|j}|tj|jj}|jd|j||j g}|jj tj kr|jjdkrd}d} |jj tj krF|jjdkr|dz }ns|jjdkr |dz}|dkrnqnV|jjdkrd}nC|dkr=|jj tjkr#|s!| |jjd}|j |jj tj ks|jjd kr"|tj d n|tj |jj tjtjfvr|}|tj|jj tjksJ|}|j} |jd | g|_|jd t+||} |jd ||jdz } ngd}|}|j} |jd | g|_g} |j} |tj|||j|| | || |d| } | jD] } | | _ |jd|j||j| S)z=Parse a definition and return its value in a `class_` object.zparsing %s '%s'rKrFTr rLr4:rz"current accumulated decorators: %szparsing nested definitions.z,finished parsing nested definitions for '%s'ruNz*finished parsing %s '%s'. Next token is %r)ryrrr$rrr rrr rrr%r&rrrr<rr rr}r/rrWrY)rr1rSrQrXparenthesis_levelin_default_argrZrVrUrWrT definitionr=s rr.zParser.parse_definitionsw  RW|! (&/4@@@  <  % %$,*<*C*C ! "N #<$--|)S00)Q.))+s22)Q.),11!2+s22).%** )RW44*5"(();<<<%)N   """# #$ <  % %);s)B)B MM"%sM + + + + LL    < RZ 8 8 8"&"9"9";";  MM") $ $ $<$ 1111,,..I5J HNN? L L L+-D ( HNN8 9 9 9D226::;;H HNN>   )a-CC"$ ,,..I5J HNN? L L L+-D (H)C MM"* % % %V  K            ( & &E%ELL  8 O  L    rcfd}|jjtjtjtjfvr|jjtjkrjd|jjvr;d|jjddd}n!|jj drd}|j |j d|jj|jj|rn/|jjtjtjtjfv|S)z*Parse a definition comment for noqa skips.ruznoqa: r Nz# noqaallz3parsing comments before docstring, token is %r (%s))rrrrrrrrMrarxr rr r)rrZs rr<zParser.parse_skip_comments lBJ BE#BBB| BJ..t|111*,'' *00::122>++''\'228<<0*/' K      HNNE ! "    # !lBJ BE#BBB$#"rctjd|}|r|jj|knd}|r|jj|knd}|r|s J|dS)z>Verify the current token is of type `kind` and equals `value`.z Unexpected token at line {self.line}: In file: {self.filename} Got kind {self.current.kind!r} Got value {self.current.value} rTN)rrr,rrr)rrrmsg kind_valid value_valids r check_currentzParser.check_currentso  F      37@T\&$..D 5:Ddl(E11 .k..3..)..rc|jd|}||dS)zeParse a 'from x import y' statement. The purpose is to find __future__ statements. zparsing from/import statement.N)r r_parse_from_import_source_parse_from_import_namesris_future_imports rr0z"Parser.parse_from_import_statementsF 788899;; %%&677777rc|jjdksJ|jj|j|jjdk}|j|j|jjt jt jt jfvro|jjdkr_|j|j?|jjt jt jt jfvr|jjdk_|j|jjdkrdS| d|jjdksJ|jj|j|S)zuParse the 'from x import' part in a 'from x import y' statement. Return true iff `x` is __future__. r, __future__NimportFr@) rrr rrrDOTr$r%rJrNs rrLz Parser._parse_from_import_sourcesQ |!V+++T\-?+++ <-=  L $ !bfbgru%=== "h.. K      L $ !bfbgru%=== "h.. < 4<#5#A#A5 ***|!X---t|/A--- rcb|jjdkr-|tjtjf}ntjtjf}|jj|vrF|jjtjkr|jjdks|jjtjkr|j n|j d|jj|jj|rI|j d|jj|j |jj|tj|j d|jj|jj|jjtjkrh|jjdkrX|tj|jjtjkr|tj|jjdkr|tj|j d|jj|jj|jj|vr2|jjtjk|jjdkdSdSdSdS)z4Parse the 'y' part in a 'from x import y' statement.rK;z parsing import, token is %r (%s)zfound future import: %sasr4N)rrrrr%rr5rr$r rr rradd)rrOexpected_end_kindss rrMzParser._parse_from_import_names3sE <  $ $ LL   "$%  "$*bl!; l'999 L  & &4<+=+D+D| BG++   """ HNN2 ! "      <8$,:LMMM#'' (:;;; LL ! ! ! HNN2 ! "    | BG++ 0Bd0J0J RW%%%<$//LL)))|!S(( RU### HNN2 ! "   5l'999 L  & &4<+=+D+D+D+D:9+D+D:9rr&)F)NN)rr r!r"rrrrryrrr r)r/r-rr.r<rJr0rLrMrrrr r s?&&###$+++h7788G 811 2 2DMMM    $3 3 3 j####>BBBH@LLL\###.////$888   ,%%%%%rr )*r"rrtokenizerior itertoolsrrpathlibrr.rtypingr utilsr r+rrr$r2r4r rrrrrrrrrrlrrrintrrr rrrr`s &&&&&&&&  $$$$$$$$     :   <<<66666666:44444444n8!8!8!8!8!Z8!8!8!v-----f---+"+"+"+"+"z+"+"+"\X &&&&&X&&&RJ      %    ''''''''         =     y   ())))))))X11111111 /////E///vvvvvvvvvvr