Языковой сервер

Wippy включает встроенный LSP-сервер (Language Server Protocol), предоставляющий функции IDE для Lua-кода. Сервер работает как часть среды выполнения Wippy и подключается к редакторам через TCP или HTTP.

Возможности

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

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

Включите LSP-сервер в .wippy.yaml:

version: "1.0"

lua:
  type_system:
    enabled: true

lsp:
  enabled: true
  address: ":7777"

Поля конфигурации

Поле По умолчанию Описание
enabled false Включить TCP-сервер
address :7777 Адрес TCP для прослушивания
http_enabled false Включить HTTP-транспорт
http_address :7778 Адрес HTTP для прослушивания
http_path /lsp Путь HTTP-эндпоинта
http_allow_origin * Разрешённый источник CORS
max_message_bytes 8388608 Максимальный размер входящего сообщения (байт)

TCP-транспорт

TCP-сервер использует JSON-RPC 2.0 со стандартным форматом LSP-сообщений (заголовки Content-Length). Это основной транспорт для интеграции с редакторами.

HTTP-транспорт

HTTP-транспорт принимает POST-запросы с JSON-RPC-нагрузкой. Полезен для браузерных редакторов и веб-инструментов. Заголовки CORS включены для кросс-доменного доступа.

lsp:
  enabled: true
  http_enabled: true
  http_address: ":7778"
  http_path: "/lsp"
  http_allow_origin: "*"

Схема URI документов

LSP-сервер использует схему URI wippy:// для идентификации записей реестра:

wippy://namespace:entry_name

Редакторы сопоставляют эти URI с идентификаторами записей в реестре. Принимаются как формат wippy://, так и формат namespace:entry_name.

Индексирование

LSP-сервер поддерживает индекс всех записей кода для быстрого поиска. Индексирование происходит в фоновом режиме с использованием нескольких потоков.

Ключевые особенности:

  • Записи индексируются в порядке зависимостей (зависимости сначала)
  • Изменения вызывают переиндексацию затронутых записей
  • Несохранённые изменения в редакторе хранятся в оверлее
  • Индекс инкрементальный - повторно обрабатываются только изменённые записи

Поддерживаемые методы LSP

Метод Описание
initialize Согласование возможностей
textDocument/didOpen Отслеживание открытых документов
textDocument/didChange Полная синхронизация документа
textDocument/didClose Освобождение документов
textDocument/hover Информация о типе под курсором
textDocument/definition Переход к определению
textDocument/references Поиск всех ссылок
textDocument/completion Автодополнение кода
textDocument/signatureHelp Сигнатуры функций
textDocument/diagnostic Диагностика файла
textDocument/documentSymbol Символы файла
workspace/symbol Глобальный поиск символов
textDocument/prepareCallHierarchy Иерархия вызовов
callHierarchy/incomingCalls Поиск вызывающих
callHierarchy/outgoingCalls Поиск вызываемых

Автодополнение

Механизм автодополнения разрешает типы через граф кода. Он предоставляет:

  • Дополнение членов после . и : (поля, методы)
  • Дополнение локальных переменных
  • Дополнение символов уровня модуля
  • Триггерные символы: ., :

Диагностика

Диагностика вычисляется при индексировании и включает:

  • Ошибки парсинга (синтаксические проблемы)
  • Ошибки проверки типов (несоответствия, неопределённые символы)
  • Уровни серьёзности: error, warning, information, hint

Диагностика обновляется по мере набора текста через систему оверлеев документов.

Смотрите также

  • Линтер - Проверка кода из командной строки
  • Типы - Документация по системе типов
  • Конфигурация - Конфигурация среды выполнения