Навигация по коду в Claude Code стала быстрее в 900 раз. Разбираемся, как включить LSP и зачем это нужно
Я уже год периодически думал - почему Клод не использует встроенные функции Vs code - форматирование, поиск, заменить все и т.п. Команда Антропика сделала первую, супер важную фичу с использованием LSP, который встроен в Vs Code.
Представьте: вы просите Claude Code найти определение функции processPayment в проекте на 200 тысяч строк. Раньше он честно грепал весь проект, перебирая 847 совпадений в 203 файлах: имена классов, переменные, комментарии, импорты, CSS-классы, SQL-колонки. Где-то среди всего этого шума - то, что вам реально нужно. На это уходило 30-60 секунд.
А теперь тот же запрос выполняется за 50 миллисекунд. С точностью 100%. Один файл, одна строка, без мусора.
Это не маркетинговое преувеличение. Anthropic добавила в Claude Code (начиная с версии 2.0.74) нативную поддержку Language Server Protocol, и разница настолько драматическая, что хочется разобраться, как это работает и почему оно не включено по умолчанию.
Что вообще такое LSP и почему это важно
LSP (Language Server Protocol) - протокол, который Microsoft придумала в 2016 году для стандартизации взаимодействия между редакторами кода и языковыми серверами. Именно благодаря LSP ваш VS Code умеет делать "Go to Definition", подсвечивать ошибки на лету и показывать типы при наведении.
До LSP каждый редактор должен был реализовывать поддержку каждого языка отдельно. Комбинаторный взрыв, который тормозил всё развитие инструментов. LSP решил эту проблему элегантно: один языковой сервер для Python (тот же Pyright) работает одинаково хорошо в VS Code, Neovim, Sublime Text и теперь - в Claude Code.
Вывод: LSP - это не просто ускорение. Это переход от текстового поиска к семантическому пониманию кода. grep обращается с кодом как с текстом. LSP понимает его структуру, типы и взаимосвязи.
Было/стало: что меняется на практике
Без LSP у Claude Code есть три инструмента навигации: Grep, Glob и Read. По сути, это очень быстрый разработчик с терминалом, который умеет искать паттерны в тексте. Умный - но всё равно текстовый поиск.
С LSP Claude Code получает:
- Go to Definition - переход к определению символа за миллисекунды вместо секунд перебора файлов
- Find References - поиск всех мест использования функции, класса или переменной (реальных использований, а не текстовых совпадений)
- Hover - информация о типах и документация по наведению
- Real-time Diagnostics - после каждого редактирования языковой сервер анализирует изменения и сообщает об ошибках автоматически
Интересно: по данным из дебаг-логов, навигация через LSP занимает около 50мс на запрос. Тот же запрос через grep - 30-60 секунд. Это разница не в проценты, а в порядки.
На практике это означает: рефакторинг становится точнее (Claude видит все реальные ссылки на символ), меньше токенов тратится на контекст (не нужно читать 200 файлов, чтобы понять структуру), а навигация по незнакомым кодовым базам превращается из мучения в удовольствие.
Как включить: пошаговая инструкция
А вот здесь начинается самое интересное. LSP не включён по умолчанию, и документация по его настройке... скажем так, не самая очевидная. Фича была обнаружена сообществом через GitHub issue #15619, а не через официальные доки.
Шаг 1: Включаем флаг ENABLE_LSP_TOOL
Вариант А: Временно, на одну сессию
ENABLE_LSP_TOOL=1 claude
Вариант Б: Постоянно
Добавляем в профиль оболочки (~/.bashrc или ~/.zshrc):
export ENABLE_LSP_TOOL=1
Не забудьте перезагрузить профиль:
source ~/.zshrc
Вариант В: Через настройки Claude Code
Добавьте в файл ~/.claude/settings.json:
{ "ENABLE_LSP_TOOL": "1" }
Шаг 2: Устанавливаем языковой сервер
Сам флаг без языкового сервера бесполезен. Нужно установить бинарник для вашего языка:
Python:
pip install pyright # или brew install pyright
TypeScript/JavaScript:
npm install -g typescript-language-server typescript
Go:
go install golang.org/x/tools/gopls@latest
Rust:
rustup component add rust-analyzer
C#:
choco install omnisharp
Шаг 3: Устанавливаем плагин в Claude Code
Запускаем Claude Code и в сессии вводим /plugin, затем выбираем нужный плагин из маркетплейса. Или через CLI:
Для Python - claude plugin install typescript-lsp
Для TS - claude plugin install vtsls@claude-code-lsps
Для C# - claude plugin install omnisharp@claude-code-lsps
Важно: команды claude plugin install нужно выполнять вне активной сессии Claude Code. Изнутри сессии они не работают.
Шаг 4: Перезапускаем Claude Code
После установки плагинов нужно перезапустить Claude Code, чтобы языковые серверы загрузились. Проверить, что всё заработало, можно через /plugin - вкладка Errors покажет проблемы, если что-то пошло не так.
Devhack: Если видите ошибку "Executable not found in $PATH", значит бинарник языкового сервера не установлен или не доступен в PATH. Вернитесь к шагу 2.
Заставляем Claude реально использовать LSP
Дааа, тут есть нюанс. Даже после полной настройки Claude Code может по привычке тянуться к старым инструментам - Grep и Glob. Это самая частая жалоба после установки.
Решение: явно сказать Claude, что предпочитать. Добавьте в ваш CLAUDE.md (глобально в ~/.claude/CLAUDE.md или в корень проекта):
Code Navigation Rules When tracing where a symbol is defined or finding all references to it, use LSP (goToDefinition, findReferences, hover) instead of Grep. LSP gives exact results; Grep gives text matches. Use Grep/Glob for discovery (finding files, searching patterns). Use LSP for understanding (definitions, references, type info). After locating a file with Grep/Glob, use LSP to navigate within it rather than reading the whole file.
Ключевая идея здесь - не просто "предпочитай LSP", а описать рабочий процесс: Grep/Glob для поиска, LSP для понимания. Это работает значительно лучше, чем абстрактное указание.
Альтернативный способ: просто скажите Claude в разговоре "remember to always prefer LSP over Grep for code navigation". Он сохранит это в auto memory и будет следовать в будущих сессиях. Но учитывайте, что auto memory привязана к рабочей директории, так что для каждого репозитория придётся повторить.
Поддерживаемые языки
На момент написания LSP-плагины доступны для 14+ языков:
- Python (Pyright)
- TypeScript/JavaScript (vtsls)
- Go (gopls)
- Rust (rust-analyzer)
- Java (Eclipse JDT)
- C/C++ (clangd)
- C# (OmniSharp)
- PHP (Intelephense)
- Kotlin
- Ruby
- PowerShell
- HTML/CSS
- OCaml
- Dart/Flutter
- Vue.js (vue-language-server 2.x)
Внимание: поддержка Vue ограничена версией 2.x языкового сервера. Версия 3.x убрала внутренний коммуникационный слой TypeScript, и простая LSP-интеграция Claude Code с ней не работает. А для Svelte плагина пока нет вообще - LSP обрабатывает только .ts и .js файлы, а .svelte возвращает "No LSP server available for file type".
Подводные камни и честные ограничения
Было бы нечестно писать только о плюсах. Вот что стоит учитывать:
- Фича ещё сырая. Anthropic сами предупреждают: ожидайте баги с разными языковыми серверами
- LSP не замена grep. LSP требует конкретный путь к файлу, номер строки и позицию символа. Он не умеет "искать" в абстрактном смысле. Grep и Glob - инструменты обнаружения, LSP - инструмент точного понимания
- Потребление памяти. Языковые серверы потребляют память пропорционально размеру проекта. Для типичных проектов до 100K строк - ожидайте 200-500МБ дополнительной памяти. Для крупных монорепозиториев может понадобиться больше
- Не все операции используются. По наблюдениям разработчиков, Claude чаще всего вызывает goToDefinition и hover, реже - findReferences, и почти никогда - call hierarchy
- Флаг недокументированный. ENABLE_LSP_TOOL был обнаружен через GitHub issue, а не официальную документацию. Это означает, что поведение может измениться в будущих версиях
Что в итоге
LSP в Claude Code - это переход от "полезного ИИ-ассистента" к "полноценной среде разработки". Семантическое понимание кода вместо текстового поиска, точная навигация вместо перебора, мгновенная диагностика вместо ручной проверки.
Настройка занимает буквально пару минут. Даже если LSP срабатывает не в 100% случаев, в те моменты, когда он работает - результат заметно лучше: один точный ответ вместо трёх приблизительных.
Два действия прямо сейчас:
- Добавьте export ENABLE_LSP_TOOL=1 в ваш .zshrc
- Установите плагин для вашего основного языка через /plugin
А какой языковой сервер вы бы хотели увидеть следующим? Делитесь в комментариях.
Ссылки:
- GitHub Issue #15619 - оригинальный feature request, где всё началось
- Официальная документация по плагинам
- Piebald-AI/claude-code-lsps - маркетплейс LSP-плагинов