Neovim: команды¶
Все команды, которые определяет плагин.
Запуск сессии¶
:DebugStart [профиль]¶
Запускает сессию отладки для текущего проекта. Без аргумента берётся профиль
default из .bugsaur/config.toml, с аргументом — названный. Имена дополняются
по Tab и читаются из конфига проекта.
Если конфига нет, отладчик опознаёт язык, создаёт конфиг, сообщает об этом и продолжает.
Используются сохранённые точки останова из .bugsaur/breakpoints.json. Если их
нет, начальной становится текущая строка.
:DebugTest¶
Отлаживает тест под курсором. Курсор должен находиться внутри тестовой функции —
в Rust годится и строка #[test]. На строке тестовой группы, например
mod tests или PHP-класса с распознанными тестовыми методами, запускается вся
группа. Обычный PHP-класс отвергается.
Требуется сохранённый буфер: бэкенд читает файл с диска. В отличие от
:DebugStart, сохранённые точки останова не подхватываются — используются
только точки текущего запроса.
Управление выполнением¶
| Команда | Что делает |
|---|---|
:DebugContinue |
выполнять до следующей точки останова |
:DebugStepOver |
выполнить текущую строку, остановиться на следующей |
:DebugStepInto |
войти в вызов на текущей строке |
:DebugStepOut |
доработать до возврата из текущей функции |
:DebugPause |
прервать работающую программу |
:DebugStop |
завершить сессию |
Они соответствуют тем же операциям, что и клавиши в самом окне; см. Работа с Bugsaur → Шаги.
Точки останова¶
:ToggleBreakpoint [условие]¶
Ставит или снимает точку останова на текущей строке. С аргументом точка становится условной:
Выражение пишется на языке отлаживаемой программы. :ToggleBreakpoint —
единственная точка входа, которая проверяет, может ли строка удержать точку
останова: она работает от курсора, а буфер загружен.
Окно¶
:DebugFocus¶
Выводит окно отладчика вперёд. Полезно, когда остановку вызвали не из редактора — например, запросом к PHP-приложению из браузера — и окно осталось позади чего-то ещё.
С gui_focus_on_stop = true в setup() это происходит само на каждой
остановке.
Lua API для расширений¶
Кроме команд, модуль отдаёт функции для скриптов:
local bugsaur = require("bugsaur")
bugsaur.list(opts) -- записи; opts.root или opts.path сужают выборку
bugsaur.set(path, line, cond) -- поставить или заменить условие; true, если набор изменился
bugsaur.remove(path, line) -- снять одну; true, если было что снимать
bugsaur.remove_file(path) -- снять все в файле; сколько снято
bugsaur.clear(opts) -- снять всё или всё в opts.root
Запись из list(), сортировка по пути, затем по строке:
{
path = "/abs/src/main.rs",
relative = "src/main.rs", -- nil, если файл вне любого корня
root = "/abs", -- nil там же
line = 42,
condition = nil,
state = "verified", -- "verified" | "rejected" | "pending"
}
list() без аргументов отдаёт всё, что сейчас в памяти. opts.root сначала
дочитывает набор указанного корня с диска — так список покажет проект, файлы
которого в этом Neovim ещё не открывали.
Любое изменение набора — из этих функций, из :ToggleBreakpoint или при чтении
файла с диска — стреляет автокомандой:
vim.api.nvim_create_autocmd("User", {
pattern = "BugsaurBreakpointsChanged",
callback = function(event)
-- event.data.paths — затронутые файлы
end,
})
Две оговорки
bugsaur.set не проверяет, есть ли на строке исполняемое место — буфер
может быть даже не загружен. Проверяет только :ToggleBreakpoint, потому
что работает по курсору.
bugsaur.state — внутреннее состояние плагина, а не контракт. Полагаться на
него нельзя.