
    Vh                        d Z ddlmZ ddlZddlZddlmZ ddlmZ ddl	m
Z
 dd	lmZ dd
lmZ ddZddZddZddZy)zAnalyze C# import statements.    )annotationsN   )open_text_file)display   )resolve_csharp_ps_util)data_context)
TestTargetc                   t               }i }| D ]&  }t        |j                  |d      ||j                  <   ( |D ]&  }t        |j                  |d      ||j                  <   ( |D ci c]  }|t                }}|j	                         D ]   \  }}|D ]  }||   j                  |        " t        |      D ]   }||   r	t        j                  d|z         " |S c c}w )zRReturn a dictionary of module_utils names mapped to sets of powershell file paths.FTz0No imports found which use the "%s" module_util.)	enumerate_module_utils#extract_csharp_module_utils_importspathsetitemsaddsortedr   warning)	powershell_targetscsharp_targetsmodule_utilsimports_by_target_pathtargetmodule_utilimportstarget_pathmoduless	            \/home/dcms/DCMS/lib/python3.12/site-packages/ansible_test/_internal/classification/csharp.pyget_csharp_module_utils_importsr      s   )+L$ t.QRXR]R]_kmr.sv{{+t ! s.QRXR]R]_kmq.rv{{+s KW#W;K$6#WG#W 6 < < > 2W" 	2KK $$[1	22 g ^{#OONQ\\]^ N $Xs   'Cc                   t               j                  j                  }t               j                  j                  r/dt               j                  j                  j                  z   dz   }nd}|t
        j                  j                  t
        j                  j                  | |            d   j                  t
        j                  j                  d      z   }|S )z=Return a namespace and name from the given module_utils path.zansible_collections.zplugins.module_utils. r   .)r	   contentmodule_utils_csharp_path
collectionprefixosr   splitextrelpathreplacesep)r   	base_pathr%   names       r   get_csharp_module_utils_namer-   5   s    &&??I~((',.*@*@*K*K*R*RRUllBGG$$RWW__T9%EFqIQQRTRYRYR]R]_bccDK    c                     t        d t               j                  j                  t               j                  j                        D              S )z/Return a set of available module_utils imports.c              3  |   K   | ]4  }t         j                  j                  |      d    dk(  rt        |       6 yw)r   z.csN)r&   r   r'   r-   ).0ps     r   	<genexpr>z)enumerate_module_utils.<locals>.<genexpr>E   s9      3''""1%a(E1 ,A. 3s   :<)r   r	   r"   
walk_filesr#    r.   r   r   r   C   s=     3$..99,.:P:P:i:ij3 3 3r.   c                H   t               }|rt        j                  d      }nt        j                  d      }t        |       5 }t	        |d      D ]  \  }}t        j
                  ||      }|st        |j                  d      |       }	|	|v r|j                  |	       Pt               j                  j                  s1|	j                  dt               j                  j                  z        st        j                  d| ||	fz          	 ddd       |S # 1 sw Y   |S xY w)zHReturn a set of module_utils imports found in the specified source file.z2(?i)^using\s((?:Ansible|AnsibleCollections)\..+);$zQ(?i)^#\s*ansiblerequires\s+-csharputil\s+((?:Ansible|ansible.collections|\.)\..+)r   zansible_collections.%sz%%s:%d Invalid module_utils import: %sN)r   recompiler   	enumeratesearchr   groupr   r	   r"   
is_ansible
startswithr%   r   r   )
r   r   is_pure_csharpr   patternmodule_fileline_numberlinematchimport_names
             r   r   r   J   s    eG**RS**qr		 l!*;!: 	lKIIgt,E0QFKl*K(''22**+ClnF\F\FcFc+cd G4Q\^iJj jk	ll Nl Ns   B+D/DD!)r   list[TestTarget]r   rE   returnzdict[str, set[str]])r   strrF   rG   )rF   set[str])r   rG   r   rH   r>   boolrF   rH   )__doc__
__future__r   r&   r7   ior   utilr   commonr   datar	   r   r
   r   r-   r   r   r5   r.   r   <module>rP      s>    # " 	 	
23r.   