Языковой сервер¶
Ü обладает реализацией протокола языкового сервера. Данная статья описывает её.
Использование¶
Укажите путь до исполняемого файла языкового сервера в настройках вашего текстового редактора или интегрированной среды разработки. Дополнительно могут быть указаны некоторые опции (см. ниже).
Как он работает¶
Языковой сервер Ü общается с клиентом при помощи стандартных потоков ввода-вывода - он получает JSON запросы и шлёт ответы и оповещения.
Внутри он реализован на основе библиотек компилятора Ü. Для каждого открытого документа запускается его компиляция (фронтенд-часть), чтобы собрать необходимую информацию.
Эта компиляция производится нечасто, т. к. она может быть медленной - только когда не было модификаций документа за последние секунды и только если документ синтаксически-корректен. Компиляция производится в фоновом потоке, чтобы иметь возможность обрабатывать запросы во время компиляции.
Функционал¶
Реализован следующий функционал:
Выделение символов
Поиск объявлений символов
Поиск использования символов (с ограничениями)
Поиск и замена
Построение дерева символов
Автодополнение
Подсказка сигнатур функций
Известные ограничения:
Поиск использований символа и поиск с заменой ограничены текущим документом и документами, которые он импортирует.
Поиск использований символа не находит иногда использований в шаблонах, ветвях
static_if
, функциях, отключённых черезenable_if
, итд.Подсказка сигнатур функций игнорирует введённые аргументы и подсказывает все доступные перегруженные функции.
Известные проблемы:
Автодополнение подсказывает в том числе приватные члены классов, доступ к которым из данного контекста не разрешён
Иногда подсвечиваются имена в строках и комментариях
Файлы информации о проекте не перезагружаются, для этого необходим перезапуск языкового сервера
Взаимодействие со сборочной системой¶
Языковой сервер пытается для каждого открытого документа найти стандартную сборочную директорию (под названием build) и файл описания проекта в ней. Этот файл создаётся при каждой сборке сборочной системой Ü. Языковой сервер делает это чтобы найти необходимые директории включений для документа. Если используется нестандартная сборочная директория, она может быть указана через специальную опцию командной строки (см. ниже).
Интерфейс командной строки¶
Многие опции командной строки языкового сервера работают схожим образом с аналогичными опциями компилятора Ü.
Опция --include-dir
позволяет добавить дополнительную директорию для поиска файлов для импорта.
Может быть указано более одной директории.
Опция --build-dir
указывает сборочную директорию для поиска файла информации о проекте.
Может быть указано множество директорий.
Опция --log-file
указывает путь для файла логов языкового сервера.
Значение по умолчанию пустое, в таком случае языковой сервер не пишет логов.
Опция --error-log-file
позволяет записать что-либо в отдельный файл лога, если языковой сервер завершился с ошибкой (но не всегда).
Опция --num-threads
позволяет указать количество потоков для фоновой компиляции.
Значением по умолчанию является 0, что означает, что будут использованы все доступные ядра процессора.
Опции -O
и -g
аналогичны одноимённым опциям компилятора, но мало на что влияют - в основном только на содержимое файла-прелюдии, генерируемого при компиляции внутри языкового сервера.
Опции --target-vendor
, --target-os
, --target-environment
существуют с той же целью.