
    Vh                        d Z ddlmZ ddlZddlZddlmZmZ ddl	m
Z
mZmZmZmZmZm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  G d de
      Zy)Sanity test using shellcheck.    )annotationsN)
fromstringElement   )SanityVersionNeutralSanityMessageSanityFailureSanitySuccessSanitySkippedSanityTargetsSANITY_ROOT   )
TestResult)
TestTarget)SubprocessErrorread_lines_without_commentsfind_executable)run_command)SanityConfigc                  2    e Zd ZdZedd       ZddZddZy)	ShellcheckTestr   c                     y)zError code for ansible-test matching the format used by the underlying test program, or None if the program does not use error codes.AT1000 )selfs    a/home/dcms/DCMS/lib/python3.12/site-packages/ansible_test/_internal/commands/sanity/shellcheck.py
error_codezShellcheckTest.error_code0   s         c                    |D cg c]4  }t         j                  j                  |j                        d   dk(  s3|6 c}S c c}w )z\Return the given list of test targets, filtered to include only those relevant for the test.r   z.sh)ospathsplitext)r   targetstargets      r   filter_targetszShellcheckTest.filter_targets5   s6    %,Z60@0@0Ma0PTY0YZZZs
   4AAc                V   t         j                  j                  t        dd      }t	        t        |dd            }| j                  |      }|j                  D cg c]  }|j                   }}t        dd      st        | j                        S dddj                  t        |            d	d
g|z   }	 t        ||d      \  }	}
d}|
s|dkD  rt        |||
|	      |j"                  rt%        | j                        S t'        |	      }g }|D ]  }|D ]  }|j)                  t+        |j,                  d   |j,                  d   t/        |j,                  d         t/        |j,                  d         |j,                  d   |j,                  d   j1                  dd                     |j3                  ||      }|rt5        | j                  |      S t%        | j                        S c c}w # t        $ r/}|j                  }	|j                  }
|j                   }Y d }~Zd }~ww xY w)N
shellcheckzexclude.txtT)remove_blank_linesoptionalwarning)requiredz-e,z--format
checkstyle)capturer   r   )cmdstatusstderrstdoutmessagenamelinecolumnseveritysourcezShellCheck. )r4   r"   r6   r7   levelcode)messages)r!   r"   joinr   setr   load_processorincluder   r   r5   sortedr   r   r3   r2   r1   explainr   r   appendr	   attribintreplaceprocess_errorsr
   )r   argsr$   exclude_fileexcludesettingsr%   pathsr0   r3   r2   r1   exrootresultsitementrys                    r   testzShellcheckTest.test9   s   ww||K}M1,SWbfgh&&t,+2??;;;|i@ ++ #((6'?+
 		(sDANFFF VaZ!c&PVWW<< ++ #6* 		D }!LL3V,U\\&12u||H56,,z2h/77rJ  		 ))'59 W==TYY''] <  	YYFYYFYYF	s   G+6G0 0	H(9$H##H(N)returnzt.Optional[str])r$   list[TestTarget]rT   rU   )rI   r   r$   r   rT   r   )__name__
__module____qualname____doc__propertyr   r&   rS   r   r   r   r   r   -   s"    ' [4(r   r   )rY   
__future__r   r!   typingtxml.etree.ElementTreer   r   r:   r   r	   r
   r   r   r   r   rS   r   r%   r   utilr   r   r   util_commonr   configr   r   r   r   r   <module>rb      sR    # " 	 
   
@() @(r   