Перейти к содержимому

Языковые серверы (LSP)

Инструмент lsp подключает к агенту тот же языковой сервер, который работает в твоей IDE. Разница с текстовым поиском принципиальная: Grep находит совпадения строк, а языковой сервер отвечает на вопросы о символах.

Пользоваться этим стоит на любом проекте, где сервер для языка существует. Настройка не требуется, а качество работы агента растёт заметно.

Вопрос Через поиск по тексту Через языковой сервер
Где определён save Десятки совпадений: методы разных классов, строки, комментарии Одно место, именно для этого символа
Кто вызывает эту функцию Совпадения по имени, включая одноимённые в других модулях Реальные вызовы, включая переименованные импорты и реэкспорт
Что вернёт это выражение Не отвечает Тип, как его видит компилятор
Что сломает переименование Не отвечает Полный список мест, которые придётся тронуть
Правка корректна Только после запуска сборки Ошибки приходят сразу после записи файла

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

Второй эффект это экономия контекста. Вместо чтения десятка файлов в поисках нужного места агент получает точные координаты, см. Окно контекста.

Диагностика по файлу и проекту, переход к определению, поиск использований, hover с типом и документацией, список символов файла или всего проекта, предпросмотр переименования, code actions.

Ничего настраивать не нужно. Сервер запускается сам, если выполнены два условия: бинарь есть в PATH и в проекте найден корневой маркер языка (Cargo.toml, go.mod, package.json и подобные). Команда /lsp показывает, какие серверы готовы, а какие нужно доустановить.

Язык Сервер Установка
Rust rust-analyzer rustup component add rust-analyzer
Go gopls go install golang.org/x/tools/gopls@latest
Python pyright npm i -g pyright
TypeScript, JavaScript typescript-language-server npm i -g typescript typescript-language-server
C, C++ clangd brew install llvm или пакет clangd в дистрибутиве
Lua lua-language-server brew install lua-language-server

Обычно агент обращается к серверу сам. Прямая просьба помогает там, где иначе он пойдёт грепать:

  • «через lsp найди все использования PaymentProvider и покажи, где реализуется интерфейс».
  • «покажи, что сломается при переименовании parseConfig в loadConfig: сначала предпросмотр, потом решим».
  • «после правки прогони диагностику по проекту и почини только новые ошибки».

Если сервер не поднялся, агент молча вернётся к текстовому поиску. Поэтому на незнакомом проекте проверить /lsp в начале сессии полезно: это несколько секунд, а разница в точности большая.

  • Языка нет в списке выше: остаются Grep, Glob и Outline.
  • Динамика без типов: значение собирается в рантайме, серверу нечего разрешать.
  • Шаблоны, конфиги, миграции: там текстовый поиск как раз уместен.
  • В монорепозитории сервер иногда жалуется на неразрешённые импорты соседних пакетов, если рабочая область настроена не полностью. На правки это не влияет, но лишний шум в диагностике возможен.
  • Крупные проекты: rust-analyzer и pyright заметно едят память, а первая индексация занимает время. Пока она идёт, ответы сервера неполные.