Поддержка протокола языкового сервера (LSP)
Qwen Code предоставляет встроенную поддержку протокола языкового сервера (LSP), позволяя использовать расширенные функции интеллектуального анализа кода, такие как переход к определению, поиск ссылок, диагностика и действия с кодом. Эта интеграция позволяет ИИ-агенту глубже понимать ваш код и предоставлять более точную помощь.
Обзор
Поддержка LSP в Qwen Code работает путем подключения к языковым серверам, которые понимают ваш код. Когда вы работаете с TypeScript, Python, Go или другими поддерживаемыми языками, Qwen Code может автоматически запустить соответствующий языковой сервер и использовать его для:
- Навигации к определениям символов
- Поиска всех ссылок на символ
- Получения информации при наведении (документация, информация о типах)
- Просмотра диагностических сообщений (ошибки, предупреждения)
- Доступа к действиям с кодом (быстрые исправления, рефакторинг)
- Анализа иерархии вызовов
Быстрый старт
LSP — это экспериментальная функция в Qwen Code. Чтобы включить её, используйте флаг командной строки --experimental-lsp:
qwen --experimental-lspДля большинства распространённых языков Qwen Code автоматически обнаружит и запустит соответствующий сервер языка, если он установлен в вашей системе.
Предварительные требования
Вам нужно установить языковой сервер для вашего языка программирования:
| Язык | Языковой сервер | Команда установки |
|---|---|---|
| TypeScript/JavaScript | typescript-language-server | npm install -g typescript-language-server typescript |
| Python | pylsp | pip install python-lsp-server |
| Go | gopls | go install golang.org/x/tools/gopls@latest |
| Rust | rust-analyzer | Руководство по установке |
Конфигурация
Файл .lsp.json
Вы можете настроить языковые серверы с помощью файла .lsp.json в корне вашего проекта. Для этого используется формат с ключами языков, описанный в справочнике по настройке LSP плагина Claude Code .
Базовый формат:
{
"typescript": {
"command": "typescript-language-server",
"args": ["--stdio"],
"extensionToLanguage": {
".ts": "typescript",
".tsx": "typescriptreact",
".js": "javascript",
".jsx": "javascriptreact"
}
}
}Параметры конфигурации
Обязательные поля
| Параметр | Тип | Описание |
|---|---|---|
command | string | Команда для запуска LSP-сервера (должна находиться в PATH) |
extensionToLanguage | object | Сопоставляет расширения файлов с идентификаторами языков |
Дополнительные поля
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
args | string[] | [] | Аргументы командной строки |
transport | string | "stdio" | Тип транспорта: stdio или socket |
env | object | - | Переменные окружения |
initializationOptions | object | - | Параметры инициализации LSP |
settings | object | - | Настройки сервера через workspace/didChangeConfiguration |
workspaceFolder | string | - | Переопределение папки рабочей области |
startupTimeout | number | 10000 | Время ожидания запуска в миллисекундах |
shutdownTimeout | number | 5000 | Время ожидания завершения в миллисекундах |
restartOnCrash | boolean | false | Автоматический перезапуск при сбое |
maxRestarts | number | 3 | Максимальное количество попыток перезапуска |
trustRequired | boolean | true | Требуется доверенная рабочая область |
Транспорт TCP/Socket
Для серверов, использующих транспорт TCP или Unix socket:
{
"remote-lsp": {
"transport": "tcp",
"socket": {
"host": "127.0.0.1",
"port": 9999
},
"extensionToLanguage": {
".custom": "custom"
}
}
}Доступные операции LSP
Qwen Code предоставляет функциональность LSP через унифицированный инструмент lsp. Ниже приведены доступные операции:
Навигация по коду
Перейти к определению
Найти место, где символ определен.
Операция: goToDefinition
Параметры:
- filePath: Путь к файлу
- line: Номер строки (начиная с 1)
- character: Номер столбца (начиная с 1)Найти ссылки
Найти все ссылки на символ.
Операция: findReferences
Параметры:
- filePath: Путь к файлу
- line: Номер строки (начиная с 1)
- character: Номер столбца (начиная с 1)
- includeDeclaration: Включить само объявление (необязательно)Перейти к реализации
Найти реализации интерфейса или абстрактного метода.
Операция: goToImplementation
Параметры:
- filePath: Путь к файлу
- line: Номер строки (начиная с 1)
- character: Номер столбца (начиная с 1)Информация о символах
Подсказка
Получить документацию и информацию о типе для символа.
Операция: hover
Параметры:
- filePath: Путь к файлу
- line: Номер строки (начиная с 1)
- character: Номер столбца (начиная с 1)Символы документа
Получить все символы в документе.
Операция: documentSymbol
Параметры:
- filePath: Путь к файлуПоиск символов в рабочем пространстве
Поиск символов по всему рабочему пространству.
Операция: workspaceSymbol
Параметры:
- query: Строка поискового запроса
- limit: Максимальное количество результатов (необязательно)Иерархия вызовов
Подготовить иерархию вызовов
Получить элемент иерархии вызовов в заданной позиции.
Операция: prepareCallHierarchy
Параметры:
- filePath: Путь к файлу
- line: Номер строки (начиная с 1)
- character: Номер столбца (начиная с 1)Входящие вызовы
Найти все функции, которые вызывают заданную функцию.
Операция: incomingCalls
Параметры:
- callHierarchyItem: Элемент из prepareCallHierarchyИсходящие вызовы
Найти все функции, вызываемые заданной функцией.
Операция: outgoingCalls
Параметры:
- callHierarchyItem: Элемент из prepareCallHierarchyДиагностика
Диагностика файла
Получить диагностические сообщения (ошибки, предупреждения) для файла.
Операция: diagnostics
Параметры:
- filePath: Путь к файлуДиагностика рабочей области
Получить все диагностические сообщения в рабочей области.
Операция: workspaceDiagnostics
Параметры:
- limit: Максимальное количество результатов (необязательно)Действия с кодом
Получить действия с кодом
Получить доступные действия с кодом (быстрые исправления, рефакторинги) в указанном месте.
Операция: codeActions
Параметры:
- filePath: Путь к файлу
- line: Номер начальной строки (начиная с 1)
- character: Номер начального столбца (начиная с 1)
- endLine: Номер конечной строки (необязательно, по умолчанию равно line)
- endCharacter: Конечный столбец (необязательно, по умолчанию равно character)
- diagnostics: Диагностики, для которых нужно получить действия (необязательно)
- codeActionKinds: Фильтр по типу действия (необязательно)Типы действий с кодом:
quickfix- Быстрые исправления ошибок/предупрежденийrefactor- Операции рефакторингаrefactor.extract- Извлечь в функцию/переменнуюrefactor.inline- Встроить функцию/переменнуюsource- Действия с исходным кодомsource.organizeImports- Организовать импортыsource.fixAll- Исправить все автоматически исправляемые проблемы
Безопасность
Серверы LSP по умолчанию запускаются только в доверенных рабочих областях. Это связано с тем, что языковые серверы работают с правами вашего пользователя и могут выполнять код.
Управление доверием
- Доверенное рабочее пространство: серверы LSP запускаются автоматически
- Недоверенное рабочее пространство: серверы LSP не будут запускаться, если в конфигурации сервера не установлено
trustRequired: false
Чтобы отметить рабочее пространство как доверенное, используйте команду /trust или настройте доверенные папки в параметрах.
Переопределение доверия для отдельных серверов
Вы можете переопределить требования доверия для конкретных серверов в их конфигурации:
{
"safe-server": {
"command": "safe-language-server",
"args": ["--stdio"],
"trustRequired": false,
"extensionToLanguage": {
".safe": "safe"
}
}
}Устранение неполадок
Сервер не запускается
- Проверьте, установлен ли сервер: Запустите команду вручную для проверки
- Проверьте PATH: Убедитесь, что исполняемый файл сервера находится в системной переменной PATH
- Проверьте доверие к рабочей области: Рабочая область должна быть доверенной для LSP
- Проверьте логи: Ищите сообщения об ошибках в выводе консоли
- Проверьте флаг —experimental-lsp: Убедитесь, что вы используете этот флаг при запуске Qwen Code
Медленная производительность
- Большие проекты: Рассмотрите возможность исключения
node_modulesи других больших каталогов - Таймаут сервера: Увеличьте значение
startupTimeoutв конфигурации сервера для медленных серверов
Нет результатов
- Сервер не готов: Возможно, сервер все еще выполняет индексацию
- Файл не сохранен: Сохраните файл, чтобы сервер мог обработать изменения
- Неправильный язык: Проверьте, запущен ли правильный сервер для вашего языка программирования
Отладка
Включите отладочное логирование, чтобы видеть коммуникацию LSP:
DEBUG=lsp* qwen --experimental-lspИли ознакомьтесь с руководством по отладке LSP в файле packages/cli/LSP_DEBUGGING_GUIDE.md.
Совместимость с Claude Code
Qwen Code поддерживает файлы конфигурации Claude Code в формате .lsp.json, определенном в справочнике плагинов Claude Code . Если вы мигрируете с Claude Code, используйте формат с языком в качестве ключа в вашей конфигурации.
Формат конфигурации
Рекомендуемый формат соответствует спецификации Claude Code:
{
"go": {
"command": "gopls",
"args": ["serve"],
"extensionToLanguage": {
".go": "go"
}
}
}Плагины LSP Claude Code также могут предоставлять lspServers в plugin.json (или в связанном .lsp.json). Qwen Code загружает эти конфигурации при включении расширения, и они должны использовать тот же формат с языком в качестве ключа.
Рекомендации
- Устанавливайте языковые серверы глобально: Это гарантирует их доступность во всех проектах
- Используйте настройки для конкретных проектов: Настройте параметры сервера для каждого проекта при необходимости через
.lsp.json - Поддерживайте актуальность серверов: Регулярно обновляйте языковые серверы для достижения наилучших результатов
- Доверяйте с умом: Доверяйте только рабочим областям из проверенных источников
Часто задаваемые вопросы
В: Как включить LSP?
Используйте флаг --experimental-lsp при запуске Qwen Code:
qwen --experimental-lspВ: Как узнать, какие языковые серверы работают?
Используйте команду /lsp status, чтобы увидеть все настроенные и работающие языковые серверы.
В: Могу ли я использовать несколько языковых серверов для одного типа файлов?
Да, но только один будет использоваться для каждой операции. Побеждает первый сервер, который вернет результаты.
В: Работает ли LSP в режиме песочницы?
Языковые серверы работают вне песочницы, чтобы получить доступ к вашему коду. Они подчиняются контролю доверия рабочей области.