# О dbt LSP

Преимущества dbt v2 не ограничиваются скоростью и мощностью фреймворка. Расширение dbt для VS Code, Studio IDE и Insights предоставляют широкий набор возможностей на базе нашего протокола языкового сервера (LSP), которые позволяют ускорить разработку и повысить её эффективность. Во всех этих инструментах поддерживаются следующие возможности:

|                                                      | VS Code extension | Studio IDE  | Insights |
| ---------------------------------------------------- | ----------------- | ----------- | -------- |
| Автодополнение имён функций                          | ✅                | ✅          | ❌       |
| Автодополнение аргументов ref/source                 | ✅                | ✅          | ✅       |
| Предпросмотр CTE                                     | ✅                | ✅          | ✅       |
| Отслеживание происхождения данных на уровне столбцов | ✅                | ❌          | ❌       |
| Локальное сравнение изменений                        | ✅                | ❌          | ❌       |
| Палитра команд                                       | ✅                | Неприменимо | ❌       |
| Обнаружение ошибок                                   | ✅                | ✅          | ✅       |
| Переход к определению                                | ✅                | ✅          | ❌       |
| Переход к месту использования                        | ✅                | ✅          | ❌       |
| Инкрементальная компиляция                           | ✅                | ✅          | ❌       |
| Ленивая компиляция                                   | ✅                | ✅          | ❌       |
| Предпросмотр результатов запроса                     | ✅                | Неприменимо | ❌       |
| Вкладка «Проблемы»                                   | ✅                | ✅          | ❌       |
| Распространение переименований столбцов              | ✅                | ❌          | ❌       |
| Распространение переименований моделей               | ✅                | ❌          | ❌       |
| Отображение типа столбца при наведении               | ✅                | ✅          | ✅       |
| Отображение скомпилированного SQL                    | ✅                | ✅          | ❌       |
| Просмотр происхождения данных на уровне таблиц       | ✅                | Неприменимо | ❌       |
| Обнаружение предупреждений                           | ✅                | ✅          | ❌       |

dbt v1 и v2 поддерживают расширение dbt для VS Code. Функции, зависящие от встроенного синтаксического анализа SQL, такие как отслеживание происхождения данных на уровне столбцов, переход к определению столбца и поиск ссылок на него, а также раскрытие `SELECT *`, требуют настройки [`static_analysis: strict`](https://docs.getdbt.tech/reference/resource-configs/static-analysis.md?version=2).

## Отложенная компиляция

Языковой сервер dbt использует компиляцию по требованию, также называемую отложенной компиляцией. Отложенная компиляция запускается автоматически при открытии файла модели; выполнять `dbt compile` для её запуска не нужно. Сервер компилирует только те узлы, которые нужны для обработки запросов о файле, с которым вы работаете, вместо того чтобы сначала ждать завершения компиляции всего проекта. Это повышает производительность: функции редактора для активного файла становятся доступны гораздо быстрее.

### Что компилируется в первую очередь

Когда вы открываете модель или переключаетесь на неё, сервер определяет минимальный набор узлов для компиляции, необходимый для получения актуальных результатов LSP для этой модели. В этот набор входят текущая модель и её вышестоящие зависимости (предки в DAG), поскольку итоговый SQL и результаты анализа зависят от `ref`, источников и контекста, унаследованного от родительских узлов.

Узлы, с которыми вы сейчас не работаете, остаются в состоянии `not compiled`, пока до них не дойдёт фоновая компиляция. Время ожидания зависит от размера проекта. Пока узел не скомпилирован, результаты LSP для него недоступны.

При переключении на другой файл сервер повторно использует результаты уже завершённых компиляций. Если на момент переключения компиляция ещё выполнялась, она отменяется, а её частичные результаты отбрасываются; затем сервер планирует новую компиляцию модели, на которую вы переключились, и её зависимостей.

### Фоновая компиляция

После минимально необходимой компиляции для активного файла сервер продолжает компилировать остальную часть проекта в фоновом режиме. Этот проход дополняет сведения о состоянии всего проекта, не мешая использовать инструменты для моделей, компиляция которых уже завершена.

После завершения фоновой компиляции становится доступен анализ всего проекта. До этого некоторые функции, которым нужен полный граф, могут быть ограничены. За ходом компиляции можно следить в строке состояния редактора. Когда уведомления о ходе выполнения исчезнут, фоновая компиляция завершена.

dbt и языковой сервер работают независимо друг от друга. Выполнение команд, таких как `dbt run` или `dbt compile`, из терминала не прерывает компиляцию LSP и не влияет на неё.

## Управление версиями

CLI v2 и языковой сервер поставляются в одном исполняемом файле, поэтому их версии всегда совпадают и не могут оказаться несовместимыми друг с другом. Расширение dbt для VS Code указывает, какие версии dbt оно поддерживает, и при запуске проверяет установленный исполняемый файл. Матрицу совместимости и инструкции по проверке исполняемых файлов при ручной установке или установке в изолированной среде см. в разделе [Совместимость версий](https://docs.getdbt.tech/docs/dbt-versions/dbt-version-compatibility.md).
