Языковые серверы (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 заметно едят память, а первая индексация занимает время. Пока она идёт, ответы сервера неполные.