Языковой сервер
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
Диагностика обновляется по мере набора текста через систему оверлеев документов.
Смотрите также
- Линтер - Проверка кода из командной строки
- Типы - Документация по системе типов
- Конфигурация - Конфигурация среды выполнения