# dbt™️ Script checks

## `check-script-ref-and-source`

{% hint style="info" %}
**What it does**

Ensures that the script contains only existing sources or macros.

**When to use it**

Make sure you have only valid ref and sources in your script and you do not want to wait for `dbt run` to find them. This hook also finds all missing ref and sources, not find first missing only.
{% endhint %}

**Arguments**

`--manifest`: location of `manifest.json` file. Usually `target/manifest.json`. This file contains a full representation of dbt project. **Default: `target/manifest.json`**

**Example**

<pre class="language-yaml"><code class="lang-yaml">repos:
<strong>  - repo: https://github.com/dbt-checkpoint/dbt-checkpoint
</strong>    rev: v1.0.0
    hooks:
      - id: check-script-ref-and-source
</code></pre>

**Requirements**

| Model exists in `manifest.json` 1 | Model exists in `catalog.json` 2 |
| :-------------------------------: | :------------------------------: |
|               ✅ Yes               |           ❌ Not needed           |

1 It means that you need to run `dbt parse` before run this hook (dbt >= 1.5).\
2 It means that you need to run `dbt docs generate` before run this hook.

## `check-script-semicolon`

{% hint style="info" %}
**What it does**

Ensure that the script does not have a semicolon at the end of the file.

**When to use it**

Make sure you did not provide a semicolon at the end of the file.
{% endhint %}

**Example**

```yaml
repos:
  - repo: https://github.com/dbt-checkpoint/dbt-checkpoint
    rev: v1.0.0
    hooks:
      - id: check-script-semicolon
```

**How it works**

* Hook takes all changed `SQL` files.
* It parses `SQL` and finds all sources and refs. If those objects do not exist in `manifest.json`, the hook fails.

***

**Requirements**

| Model exists in `manifest.json` 1 | Model exists in `catalog.json` 2 |
| :-------------------------------: | :------------------------------: |
|               ✅ Yes               |           ❌ Not needed           |

1 It means that you need to run `dbt parse` before run this hook (dbt >= 1.5).\
2 It means that you need to run `dbt docs generate` before run this hook.

**How it works**

* Hook takes all changed `SQL` files.
* If the file contains a semicolon at the end of the file, the hook fails.

***

## `check-script-has-no-table-name`

{% hint style="info" %}
**What it does**

Ensures that the script is using only source or ref macro to specify the table name.

**When to use it**

To make sure that you have only refs and sources in your `SQL` files.
{% endhint %}

**Arguments**

`--ignore-dotless-table`: consider all tables without dot in name as CTE

**Example**

```yaml
repos:
  - repo: https://github.com/dbt-checkpoint/dbt-checkpoint
    rev: v1.0.0
    hooks:
      - id: check-script-has-no-table-name
```

**Requirements**

| Model exists in `manifest.json` 1 | Model exists in `catalog.json` 2 |
| :-------------------------------: | :------------------------------: |
|            ❌ Not needed           |           ❌ Not needed           |

1 It means that you need to run `dbt parse` before run this hook (dbt >= 1.5).\
2 It means that you need to run `dbt docs generate` before run this hook.

**How it works**

* Hook takes all changed `SQL` files.
* `SQL` is parsed and if it contains direct tables (not ref() or source()), the hook fails.
