<!-- Generated with Stardoc: http://skydoc.bazel.build -->

<a name="#check_sources"></a>

## check_sources

<pre>
check_sources(<a href="#check_sources-name">name</a>, <a href="#check_sources-required_param">required_param</a>, <a href="#check_sources-bool_param">bool_param</a>, <a href="#check_sources-srcs">srcs</a>, <a href="#check_sources-string_param">string_param</a>, <a href="#check_sources-int_param">int_param</a>, <a href="#check_sources-dict_param">dict_param</a>,
              <a href="#check_sources-struct_param">struct_param</a>)
</pre>

Runs some checks on the given source files.

This rule runs checks on a given set of source files.
Use `bazel build` to run the check.


### Parameters

<table class="params-table">
  <colgroup>
    <col class="col-param" />
    <col class="col-description" />
  </colgroup>
  <tbody>
    <tr id="check_sources-name">
      <td><code>name</code></td>
      <td>
        required.
        <p>
          A unique name for this rule.
        </p>
      </td>
    </tr>
    <tr id="check_sources-required_param">
      <td><code>required_param</code></td>
      <td>
        required.
        <p>
          Use your imagination.
        </p>
      </td>
    </tr>
    <tr id="check_sources-bool_param">
      <td><code>bool_param</code></td>
      <td>
        optional. default is <code>True</code>
      </td>
    </tr>
    <tr id="check_sources-srcs">
      <td><code>srcs</code></td>
      <td>
        optional. default is <code>[]</code>
        <p>
          Source files to run the checks against.
        </p>
      </td>
    </tr>
    <tr id="check_sources-string_param">
      <td><code>string_param</code></td>
      <td>
        optional. default is <code>""</code>
      </td>
    </tr>
    <tr id="check_sources-int_param">
      <td><code>int_param</code></td>
      <td>
        optional. default is <code>2</code>
        <p>
          Your favorite number.
        </p>
      </td>
    </tr>
    <tr id="check_sources-dict_param">
      <td><code>dict_param</code></td>
      <td>
        optional. default is <code>{}</code>
      </td>
    </tr>
    <tr id="check_sources-struct_param">
      <td><code>struct_param</code></td>
      <td>
        optional. default is <code>struct(foo = "bar")</code>
      </td>
    </tr>
  </tbody>
</table>


<a name="#deprecated_do_not_use"></a>

## deprecated_do_not_use

<pre>
deprecated_do_not_use()
</pre>

This function is deprecated.

### Deprecated

Use literally anything but this function.



<a name="#param_doc_multiline"></a>

## param_doc_multiline

<pre>
param_doc_multiline(<a href="#param_doc_multiline-complex">complex</a>)
</pre>

Has a complex parameter.

### Parameters

<table class="params-table">
  <colgroup>
    <col class="col-param" />
    <col class="col-description" />
  </colgroup>
  <tbody>
    <tr id="param_doc_multiline-complex">
      <td><code>complex</code></td>
      <td>
        required.
        <p>
          A parameter with some non-obvious behavior.

 For example, it does things that require **multiple paragraphs** to explain.

Note: we should preserve the nested indent in the following code:

```json
{
    "key": "value"
}
```
        </p>
      </td>
    </tr>
  </tbody>
</table>


<a name="#returns_a_thing"></a>

## returns_a_thing

<pre>
returns_a_thing(<a href="#returns_a_thing-name">name</a>)
</pre>

Returns a suffixed name.

### Returns

A suffixed version of the name.

### Parameters

<table class="params-table">
  <colgroup>
    <col class="col-param" />
    <col class="col-description" />
  </colgroup>
  <tbody>
    <tr id="returns_a_thing-name">
      <td><code>name</code></td>
      <td>
        required.
        <p>
          A unique name for this rule.
        </p>
      </td>
    </tr>
  </tbody>
</table>


<a name="#undocumented_function"></a>

## undocumented_function

<pre>
undocumented_function(<a href="#undocumented_function-a">a</a>, <a href="#undocumented_function-b">b</a>, <a href="#undocumented_function-c">c</a>)
</pre>



### Parameters

<table class="params-table">
  <colgroup>
    <col class="col-param" />
    <col class="col-description" />
  </colgroup>
  <tbody>
    <tr id="undocumented_function-a">
      <td><code>a</code></td>
      <td>
        required.
      </td>
    </tr>
    <tr id="undocumented_function-b">
      <td><code>b</code></td>
      <td>
        required.
      </td>
    </tr>
    <tr id="undocumented_function-c">
      <td><code>c</code></td>
      <td>
        required.
      </td>
    </tr>
  </tbody>
</table>


