#if (!$singlePage)
---
layout: documentation
title: ${ruleFamily.name} Rules
---
#end
#if (!$singlePage)
#parse("com/google/devtools/build/docgen/templates/be/header.vm")
#end

<h1>${ruleFamily.name} Rules</h1>

${ruleFamily.summary}

#if (!$singlePage)
<div class="toc">
  <h2>Rules</h2>
  <ul>
#foreach ($rule in $ruleFamily.rules)
    <li>
      <a href="#${rule.ruleName}">
        ${rule.ruleName}#if($rule.isDeprecated()) (deprecated)#end
      </a>
    </li>
#end
  </ul>
</div>
#end

#foreach ($rule in $ruleFamily.rules)
  <h2 id="${rule.ruleName}"#if($rule.isDeprecated()) class="deprecated"#end>
    ${rule.ruleName}
  </h2>

  <pre class="rule-signature">${rule.attributeSignature}</pre>

  $rule.htmlDocumentation

  <h3 id="${rule.ruleName}_args">Arguments</h3>
  <table class="table table-condensed table-bordered table-params">
    <colgroup>
      <col class="col-param" />
      <col class="param-description" />
    </colgroup>
    <thead>
      <tr>
        <th colspan="2">Attributes</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td id="${rule.ruleName}.name"><code>name</code></td>
        <td>
          <p><code><a href="../build-ref.html#name">Name</a>; required</code></p>
          <p>A unique name for this target.</p>
          ${rule.nameExtraHtmlDoc}
        </td>
      </tr>
    #foreach ($attribute in $rule.attributes)
      #if (!$attribute.isCommonType())
      <tr>
        <td id="${rule.ruleName.toLowerCase()}.${attribute.attributeName}"#if($attribute.isDeprecated()) class="deprecated"#end>
          <code>${attribute.attributeName}</code>
        </td>
        <td>
          #if (!$attribute.synopsis.isEmpty())
          <p><code>${attribute.synopsis}</code></p>
          #end
          $attribute.htmlDocumentation
        </td>
      </tr>
      #end
    #end
    </tbody>
  </table>
  #if ($rule.isPublicByDefault())
    The default visibility is public: <code>visibility = ["//visibility:public"]</code>.
  #end
#end

#if (!$singlePage)
#parse("com/google/devtools/build/docgen/templates/be/footer.vm")
#end
