Skip to Content
Руководство пользователяФункцииПоддержка протокола языкового сервера (LSP)

Поддержка протокола языкового сервера (LSP)

Qwen Code предоставляет встроенную поддержку протокола языкового сервера (LSP), позволяя использовать расширенные функции интеллектуального анализа кода, такие как переход к определению, поиск ссылок, диагностика и действия с кодом. Эта интеграция позволяет ИИ-агенту глубже понимать ваш код и предоставлять более точную помощь.

Обзор

Поддержка LSP в Qwen Code работает путем подключения к языковым серверам, которые понимают ваш код. Когда вы работаете с TypeScript, Python, Go или другими поддерживаемыми языками, Qwen Code может автоматически запустить соответствующий языковой сервер и использовать его для:

  • Навигации к определениям символов
  • Поиска всех ссылок на символ
  • Получения информации при наведении (документация, информация о типах)
  • Просмотра диагностических сообщений (ошибки, предупреждения)
  • Доступа к действиям с кодом (быстрые исправления, рефакторинг)
  • Анализа иерархии вызовов

Быстрый старт

LSP — это экспериментальная функция в Qwen Code. Чтобы включить её, используйте флаг командной строки --experimental-lsp:

qwen --experimental-lsp

Для большинства распространённых языков Qwen Code автоматически обнаружит и запустит соответствующий сервер языка, если он установлен в вашей системе.

Предварительные требования

Вам нужно установить языковой сервер для вашего языка программирования:

ЯзыкЯзыковой серверКоманда установки
TypeScript/JavaScripttypescript-language-servernpm install -g typescript-language-server typescript
Pythonpylsppip install python-lsp-server
Gogoplsgo install golang.org/x/tools/gopls@latest
Rustrust-analyzerРуководство по установке 

Конфигурация

Файл .lsp.json

Вы можете настроить языковые серверы с помощью файла .lsp.json в корне вашего проекта. Для этого используется формат с ключами языков, описанный в справочнике по настройке LSP плагина Claude Code .

Базовый формат:

{ "typescript": { "command": "typescript-language-server", "args": ["--stdio"], "extensionToLanguage": { ".ts": "typescript", ".tsx": "typescriptreact", ".js": "javascript", ".jsx": "javascriptreact" } } }

Параметры конфигурации

Обязательные поля

ПараметрТипОписание
commandstringКоманда для запуска LSP-сервера (должна находиться в PATH)
extensionToLanguageobjectСопоставляет расширения файлов с идентификаторами языков

Дополнительные поля

ПараметрТипПо умолчаниюОписание
argsstring[][]Аргументы командной строки
transportstring"stdio"Тип транспорта: stdio или socket
envobject-Переменные окружения
initializationOptionsobject-Параметры инициализации LSP
settingsobject-Настройки сервера через workspace/didChangeConfiguration
workspaceFolderstring-Переопределение папки рабочей области
startupTimeoutnumber10000Время ожидания запуска в миллисекундах
shutdownTimeoutnumber5000Время ожидания завершения в миллисекундах
restartOnCrashbooleanfalseАвтоматический перезапуск при сбое
maxRestartsnumber3Максимальное количество попыток перезапуска
trustRequiredbooleantrueТребуется доверенная рабочая область

Транспорт 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" } } }

Устранение неполадок

Сервер не запускается

  1. Проверьте, установлен ли сервер: Запустите команду вручную для проверки
  2. Проверьте PATH: Убедитесь, что исполняемый файл сервера находится в системной переменной PATH
  3. Проверьте доверие к рабочей области: Рабочая область должна быть доверенной для LSP
  4. Проверьте логи: Ищите сообщения об ошибках в выводе консоли
  5. Проверьте флаг —experimental-lsp: Убедитесь, что вы используете этот флаг при запуске Qwen Code

Медленная производительность

  1. Большие проекты: Рассмотрите возможность исключения node_modules и других больших каталогов
  2. Таймаут сервера: Увеличьте значение startupTimeout в конфигурации сервера для медленных серверов

Нет результатов

  1. Сервер не готов: Возможно, сервер все еще выполняет индексацию
  2. Файл не сохранен: Сохраните файл, чтобы сервер мог обработать изменения
  3. Неправильный язык: Проверьте, запущен ли правильный сервер для вашего языка программирования

Отладка

Включите отладочное логирование, чтобы видеть коммуникацию 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 загружает эти конфигурации при включении расширения, и они должны использовать тот же формат с языком в качестве ключа.

Рекомендации

  1. Устанавливайте языковые серверы глобально: Это гарантирует их доступность во всех проектах
  2. Используйте настройки для конкретных проектов: Настройте параметры сервера для каждого проекта при необходимости через .lsp.json
  3. Поддерживайте актуальность серверов: Регулярно обновляйте языковые серверы для достижения наилучших результатов
  4. Доверяйте с умом: Доверяйте только рабочим областям из проверенных источников

Часто задаваемые вопросы

В: Как включить LSP?

Используйте флаг --experimental-lsp при запуске Qwen Code:

qwen --experimental-lsp

В: Как узнать, какие языковые серверы работают?

Используйте команду /lsp status, чтобы увидеть все настроенные и работающие языковые серверы.

В: Могу ли я использовать несколько языковых серверов для одного типа файлов?

Да, но только один будет использоваться для каждой операции. Побеждает первый сервер, который вернет результаты.

В: Работает ли LSP в режиме песочницы?

Языковые серверы работают вне песочницы, чтобы получить доступ к вашему коду. Они подчиняются контролю доверия рабочей области.

Last updated on