
    /~h                        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mZ ddlmZ dd	lmZ dd
lmZ ddlmZ erddlmZ  ee      Z G d d      Zy)z'Source file annotation for coverage.py.    )annotationsN)TYPE_CHECKING)Iterable)flat_rootname)
ensure_dirisolate_module)FileReporter)get_analysis_to_report)Analysis)TMorf)Coveragec                  r    e Zd ZdZddZ ej                  d      Z ej                  d      Zd	d
dZ	ddZ
y)AnnotateReportera  Generate annotated source files showing line coverage.

    This reporter creates annotated copies of the measured source files. Each
    .py file is copied as a .py,cover file, with a left-hand margin annotating
    each line::

        > def h(x):
        -     if 0:   #pragma: no cover
        -         pass
        >     if x == 1:
        !         a = 1
        >     else:
        >         a = 2

        > h(2)

    Executed lines use ">", lines not executed use "!", lines excluded from
    consideration use "-".

    c                V    || _         | j                   j                  | _        d | _        y N)coverageconfig	directory)selfr   s     Z/var/www/peopleoo.sandbox-dev.co.uk/venv/lib/python3.12/site-packages/coverage/annotate.py__init__zAnnotateReporter.__init__1   s!     mm**%)    z\s*(#|$)z\s*else\s*:\s*(#|$)Nc                    || _         | j                  j                          t        | j                  |      D ]  \  }}| j	                  ||        y)zIRun the report.

        See `coverage.report()` for arguments.

        N)r   r   get_datar
   annotate_file)r   morfsr   franalysiss        r   reportzAnnotateReporter.report9   sI     # 24==%H 	-LBr8,	-r   c                J   t        |j                        }t        |j                        }t        |j                        }| j                  rrt        | j                         t        j                  j                  | j                  t        |j                                     }|j                  d      sJ |dd dz   }n|j                  }|dz  }t        |dd      5 }d	x}}	d
}
|j                         }t        |j!                  d
      d      D ]{  \  }}|t#        |      k  r$||   |k  r|dz  }|t#        |      k  r	||   |k  r|	t#        |      k  r$||	   |k  r|	dz  }	|	t#        |      k  r	||	   |k  r|t#        |      k  r ||   |k(  r|	t#        |      k\  xs ||	   |kD  }
| j$                  j'                  |      r|j)                  d       n| j*                  j'                  |      rO|	t#        |      k\  r|j)                  d       nj||   ||	   k(  r|j)                  d       nM|j)                  d       n;||v r|j)                  d       n%|
r|j)                  d       n|j)                  d       |j)                  |       ~ 	 ddd       y# 1 sw Y   yxY w)z]Annotate a single file.

        `fr` is the FileReporter for the file to annotate.

        _pyNz.pyz,coverwzutf-8)encodingr   T   )startz  z> z! z- )sorted
statementsmissingexcludedr   r   ospathjoinr   relative_filenameendswithfilenameopensource	enumerate
splitlineslenblank_rematchwriteelse_re)r   r   r   r(   r)   r*   	dest_filedestijcoveredr2   linenolines                 r   r   zAnnotateReporter.annotate_fileD   sU    H//0
))*(++,>>t~~&T^^]2CWCWCY5Z[I%%e,,,!#2.IIX	)S73 	!tIAGYY[F )&*;*;D*A K !#j/)jmf.DFA #j/)jmf.D#g,&71:+>FA #g,&71:+>s:&:a=F+B3w</F71:3FG==&&t,JJt$\\''-CL(

4(#A'!*4

4(

4(x'JJt$JJt$JJt$

4 1!		! 	! 	!s   A+J	1J;DJJ")r   r   returnNoner   )r   zIterable[TMorf] | Noner   z
str | NonerA   rB   )r   r	   r   r   rA   rB   )__name__
__module____qualname____doc__r   recompiler6   r9   r   r    r   r   r   r      s9    **
 rzz+&Hbjj/0G	-/!r   r   )rF   
__future__r   r+   rG   typingr   collections.abcr   coverage.filesr   coverage.miscr   r   coverage.pluginr	   coverage.report_corer
   coverage.resultsr   coverage.typesr   r   r   r   rI   r   r   <module>rS      sG    . " 	 	   $ ( 4 ( 7 %  !BX! X!r   