<html devsite>
<head>
  <meta name="project_path" value="/_project.yaml">
  <meta name="book_path" value="/versions/6.2.0/_book.yaml">
</head>
<body>

<h1 class="page-title" id="modules.coverage_common">coverage_common</h1>

<!-- {% raw %} -->

Helper functions to access coverage-related infrastructure.

<h2>Members</h2>
<ul>
    <li>
    <a href="#instrumented_files_info">instrumented_files_info</a>
  </li>
  </ul>

      <h2 id="instrumented_files_info">instrumented_files_info</h2>
        <p><pre class="rule-signature"><a class="anchor" href="InstrumentedFilesInfo.html">InstrumentedFilesInfo</a> coverage_common.instrumented_files_info(ctx, *, source_attributes=[], dependency_attributes=[], extensions=None)</pre></p>

    Creates a new <a class="anchor" href="InstrumentedFilesInfo.html">InstrumentedFilesInfo</a> instance. Use this provider to communicate coverage-related attributes of the current build rule.

          <!-- hide-from-toc is a class used by DevSite for the public Bazel site
      (https://developers.google.com/devsite/reference/styles/headings#hide_headings_from_the_toc) -->
      <h3 class="hide-from-toc">Parameters</h3>
      <table class="table table-bordered table-condensed table-params">
        <colgroup>
          <col class="col-param">
          <col class="param-description">
        </colgroup>
        <thead>
          <tr>
            <th>Parameter</th>
            <th>Description</th>
          </tr>
        </thead>
        <tbody>
                  <tr>
            <td id="instrumented_files_info.ctx">
              <code>ctx</code>
            </td>
            <td>
                                     required<br/>
                          The rule context.
            </td>
          </tr>
                  <tr>
            <td id="instrumented_files_info.source_attributes">
              <code>source_attributes</code>
            </td>
            <td>
                                     default = []<br/>
                          A list of attribute names which contain source files processed by this rule.
            </td>
          </tr>
                  <tr>
            <td id="instrumented_files_info.dependency_attributes">
              <code>dependency_attributes</code>
            </td>
            <td>
                                     default = []<br/>
                          A list of attribute names which might provide runtime dependencies (either code dependencies or runfiles).
            </td>
          </tr>
                  <tr>
            <td id="instrumented_files_info.extensions">
              <code>extensions</code>
            </td>
            <td>
                          <code><a class="anchor" href="list.html">sequence</a> of <a class="anchor" href="string.html">string</a>s; or <a class="anchor" href="globals.html#None">None</a></code>;
                                     default = None<br/>
                          File extensions used to filter files from source_attributes. For example, 'js'. If not provided (or None), then all files from source_attributes will be added to instrumented files, if an empty list is provided, then no files from source attributes will be added.
            </td>
          </tr>
                </tbody>
      </table>


</body>
</html>

<!-- {% endraw %} -->
