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

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

<!-- {% raw %} -->
<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>
    </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())
              <code>${param.type}</code>;
            #end
            #if (!$param.defaultValue.isEmpty())
             default = ${param.defaultValue}<br/>
            #else
             required<br/>
            #end
              ${param.documentation}
            </td>
          </tr>
        #end
        </tbody>
      </table>
    #end
    ${method.returnTypeExtraMessage}
  #end
#end

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