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" } } }

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

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

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

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

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

Транспорт TCP/сокет

Для серверов, использующих транспорт TCP или Unix-сокет:

{ "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 поддерживает конфигурационные файлы .lsp.json в стиле Claude Code, использующие формат с ключами-языками, определённый в справочнике плагинов 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 режим песочницы?

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

Last updated on