---
layout: documentation
title: ${module.title}
---

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

<a href="../concepts.html">Extensions</a> &gt;
<a href="skylark-overview.html">API reference</a> &gt;
${module.title}

<h1 id="modules.${module.name}">${module.title}</h1>

${module.documentation}

#if (!$module.methods.isEmpty())
<div class="toc">
  <h2>Members</h2>
  <ul>
  #foreach ($method in $module.methods)
    #if ($method.documented())
    <li>
      <a href="#${method.name}">${method.name}</a>
      #if (${method.deprecated})
      (Deprecated)
      #end
    </li>
    #end
  #end
  </ul>
</div>
#end

#foreach ($method in $module.methods)
  #if ($method.documented())
    <h2 id="${method.name}">${method.name}</h2>
    #if (!$method.signature.isEmpty())
    <p><pre class="rule-signature">${method.signature}</pre></p>
    #end

    ${method.documentation}

    #if (!$method.params.isEmpty())
      <!-- no_toc is a class used by the jekyll-toc plugin for docs.bazel.build -->
      <h3 class="no_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>
        #foreach ($param in $method.params)
          <tr>
            <td id="${param.method.name}.${param.name}">
              <code>${param.name}</code>
            </td>
            <td>
            #if (!$param.type.isEmpty())
              <p><code>${param.type}</code></p>
            #end
              <p>${param.documentation}</p>
            </td>
          </tr>
        #end
        </tbody>
      </table>
    #end
    ${method.returnTypeExtraMessage}
  #end
#end

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