ó
    ùÚ j  ã                  ó  • % S r SSKJr  SSKrSSKrSSKJs  Jr  SSK	J
r
  SSKJrJrJr  SSKJrJr  SSKJrJr   " S S	\5      r " S
 S\5      r " S S\5      r " S S5      r " S S5      rSS jrSqS\S'   SSS jjrSS jrg)z:Static analysis integration (PMD) for Apex/trigger review.é    )ÚannotationsN)ÚPath)ÚListÚOptionalÚProtocol)Ú	BaseModelÚField)ÚSettingsÚget_settingsc                  óP   • \ rS rSr% S\S'   S\S'   SrS\S'   S\S'   S	rS\S
'   Srg)ÚStaticViolationé   ÚstrÚruleÚfileNzOptional[int]ÚlineÚmessageÚmediumÚseverity© )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__r   r   Ú__static_attributes__r   ó    Ú=/var/www/html/gaurav/packages/integrations/static_analysis.pyr   r      s%   ‡ Ø
ƒIØ
ƒIØ€Dˆ-ÓØƒLØ€HˆcÖr   r   c                  óD   • \ rS rSr% S\S'   \" \S9rS\S'   SrS\S	'   S
r	g)ÚStaticAnalysisResulté   ÚboolÚsuccess)Údefault_factoryúList[StaticViolation]Ú
violationsÚ r   r   r   N)
r   r   r   r   r   r	   Úlistr&   r   r   r   r   r   r    r       s!   ‡ ØƒMÙ(-¸dÑ(C€JÐ%ÓCØ€GˆSÖr   r    c                  ó   • \ rS rSrSS jrSrg)ÚStaticAnalyzeré   c             ƒ  ó   #   • g 7f©Nr   ©ÚselfÚ
source_dirs     r   ÚanalyzeÚStaticAnalyzer.analyze   s   é € È#ùs   ‚r   N©r0   r   Úreturnr    )r   r   r   r   r1   r   r   r   r   r*   r*      s   † ßMr   r*   c                  ó,   • \ rS rSrSrSS jrSS jrSrg)	ÚMockStaticAnalyzeré"   z$No-op analyzer for local/dev and CI.c                ó   • / U l         g r-   ©Úcalls)r/   s    r   Ú__init__ÚMockStaticAnalyzer.__init__%   s	   € Ø "ˆ�
r   c             ƒ  óh   #   • U R                   R                  [        U5      5        [        S/ SS9$ 7f)NTzMock static analysis passed©r#   r&   r   )r:   Úappendr   r    r.   s     r   r1   ÚMockStaticAnalyzer.analyze(   s1   é € Ø�
‰
×Ñœ#˜j›/Ô*Ü#ØØØ1ñ
ð 	
ùs   ‚02r9   N)r4   ÚNoner3   ©r   r   r   r   Ú__doc__r;   r1   r   r   r   r   r6   r6   "   s   † Ù.ô#÷
r   r6   c                  ó0   • \ rS rSrSrSSS jjrS	S jrSrg)
ÚPmdStaticAnalyzeré1   z>Run PMD CLI against Apex classes and triggers under force-app.Nc                ó4   • U=(       d
    [        5       U l        g r-   )r   Úsettings)r/   rH   s     r   r;   ÚPmdStaticAnalyzer.__init__4   s   € Ø ×2¤L£Nˆ�r   c             ƒ  ó  #   • UR                  5       (       d  [        S/ SS9$ [        UR                  S5      5      [        UR                  S5      5      -   nU(       d  [        S/ SS9$ U R                  R
                  =(       d    SR                  5       n/ nU GHM  nUR                  UR                  R                  R                  5      nUSS	[        U5      S
SSS/n[        R                  " U[        R                  R                  [        R                  R                  S.6I S h  v•N nUR                  5       I S h  v•N u  pšU	=(       d    SR                  SSS9nU
=(       d    SR                  SSS9nUR                   S;  a   [        S/ SUR                    SUS S  3S9s  $ UR                  5       (       d  GM)  UR#                  [%        U[        U5      5      5        GMP     [        SUS['        U5       S3S9$  NÙ NÃ7f)NTu3   No force-app source dir â€” static analysis skippedr>   z*.clsz	*.triggeru)   No Apex files â€” static analysis skippedÚpmdÚcheckz-dz-Rzrulesets/apex/quickstart.xmlz-fÚxml)ÚstdoutÚstderrr   zutf-8Úreplace)Úerrors)r   é   FzPMD failed (z): iô  z
PMD found z violation(s))Úexistsr    r(   ÚrglobrH   Úpmd_binÚstripÚrelative_toÚparentr   ÚasyncioÚcreate_subprocess_execÚ
subprocessÚPIPEÚcommunicateÚdecodeÚ
returncodeÚextendÚ_parse_pmd_xmlÚlen)r/   r0   Ú
apex_filesrU   r&   Ú	apex_fileÚrelÚcmdÚprocÚstdout_bÚstderr_brN   rO   s                r   r1   ÚPmdStaticAnalyzer.analyze7   sò  é € Ø× Ñ ×"Ñ"Ü'ØØØMñð ô ˜*×*Ñ*¨7Ó3Ó4´t¸J×<LÑ<LÈ[Ó<YÓ7ZÑZˆ
ÞÜ'ØØØCñð ð —=‘=×(Ñ(×1¨E×8Ñ8Ó:ˆØ,.ˆ
Ü#ˆIØ×'Ñ'¨
×(9Ñ(9×(@Ñ(@×(GÑ(GÓHˆCàØØÜ�I“ØØ.ØØð	ˆCô !×7Ò7ØÜ×)Ñ)×.Ñ.Ü×)Ñ)×.Ñ.ò÷ ˆDð
 (,×'7Ñ'7Ó'9×!9ÑˆHØ—o #×-Ñ-¨g¸iÐ-ÐHˆFØ—o #×-Ñ-¨g¸iÐ-ÐHˆFØ�‰ fÓ,Ü+Ø!Ø!Ø*¨4¯?©?Ð*;¸3¸vÀdÀs¸|¸nÐMñò ð
 �|‰|�~Œ~Ø×!Ñ!¤.°¼¸S»Ó"B×Cñ7 $ô: $ØØ!Ø ¤ Z£Ð 1°Ð?ñ
ð 	
ñ#ñ
 ":ùs,   ‚D)H	Ä+HÄ,H	ÅHÅA;H	ÇAH	ÈH	©rH   r-   )rH   úOptional[Settings]r4   rA   r3   rB   r   r   r   rE   rE   1   s   † ÙHö3÷3
r   rE   c                óî  • / n [         R                  " U 5      nSS0nUR                  SU5      =(       d    UR                  S5       GH  nUR	                  S5      =(       d    UnUR                  SU5      =(       d    UR                  S5       HÀ  nUR	                  S5      =(       d    UR	                  S	5      nUR                  [        UR	                  S
5      =(       d    SUU(       a   UR                  5       (       a  [        U5      OS UR                  =(       d    SR                  5       UR	                  S5      =(       d    SS95        MÂ     GM     U$ ! [         R                   a    Us $ f = f)NrK   z'http://pmd.sourceforge.net/report/2.0.0z.//pmd:filez.//fileÚnamezpmd:violationÚ	violationÚ	beginliner   r   ÚPMDr'   Úpriorityr   )r   r   r   r   r   )ÚETÚ
fromstringÚ
ParseErrorÚfindallÚgetr?   r   ÚisdigitÚintÚtextrV   )	Úxml_textÚdefault_filer&   ÚrootÚnsÚfile_elÚ	file_pathÚvÚline_raws	            r   ra   ra   m   s-  € Ø(*€JðÜ�}Š}˜XÓ&ˆð Ð:Ð	;€BØ—<‘< ¨rÓ2×M°d·l±lÀ9Ó6MÓMˆØ—K‘K Ó'×7¨<ˆ	Ø—‘ °"Ó5×U¸¿¹ÈÓ9UÒUˆAØ—u‘u˜[Ó)×:¨Q¯U©U°6«]ˆHØ×ÑÜØŸ™˜v›×/¨%Ø"Þ*2°x×7GÑ7G×7IÑ7Iœ˜XœÈtØŸV™VŸ\ r×0Ñ0Ó2ØŸe™e JÓ/×;°8ñöô Vñ Nð Ðøô! �=‰=ó ØÒðús   „E ÅE4Å3E4zOptional[MockStaticAnalyzer]Ú_mock_singletonc                óŒ   • U =(       d
    [        5       n U R                  S:X  a  [        U 5      $ [        c
  [	        5       q[        $ )NrK   )r   Ústatic_analysis_providerrE   rƒ   r6   rk   s    r   Úget_static_analyzerr†   ‡   s;   € à×)œ<›>€HØ×(Ñ(¨EÓ1Ü  Ó*Ð*ÜÑÜ,Ó.ˆÜÐr   c                 ó"   • [        5       q[        $ r-   )r6   rƒ   r   r   r   Úreset_mock_static_analyzerrˆ   ‘   s   € ä(Ó*€OÜÐr   )r{   r   r|   r   r4   r%   r-   )rH   rl   r4   r*   )r4   r6   )rC   Ú
__future__r   rY   ÚjsonÚxml.etree.ElementTreeÚetreeÚElementTreers   Úpathlibr   Útypingr   r   r   Úpydanticr   r	   Úpackages.configr
   r   r   r    r*   r6   rE   ra   rƒ   r   r†   rˆ   r   r   r   Ú<module>r’      s}   ðÚ @å "ã Û ß "Ð "Ý ß +Ñ +ç %ç 2ô�iô ô˜9ô ôN�Xô N÷
ñ 
÷9
ñ 9
ôxð. 15€Ð-Ó 4öõr   