🐛
Lua製Neovimプラグインのテストをデバッグする
Lua製Neovimプラグインのテスト実行時、インタラクティブにデバッグする方法を紹介する。
デバッグ実行する
以前の記事で書いたようなNeovimプラグインのテストをデバッグ実行する手順を示す。
nluaを使う方法が紹介されている。
やることはほぼ同じだが、ここではvustedを使う形にする。
セットアップ
以下の手順を行う。
- vusted のv2.5.0以上をインストールする
- dap.nvimをインストールする
- local-lua-debugger-vscodeをインストールする
- 以下を設定する
local dap = require("dap")
local lldebugger_path = "/path/to/local-lua-debugger-vscode"
dap.adapters["local-lua"] = {
type = "executable",
command = "node",
args = {
vim.fs.joinpath(lldebugger_path, "extension/debugAdapter.js"),
},
enrich_config = function(config, on_config)
if not config.extensionPath then
local c = vim.deepcopy(config)
c.extensionPath = lldebugger_path
on_config(c)
return
end
on_config(config)
end,
}
-- 好きなようにマッピングやコマンドを定義する
vim.api.nvim_create_user_command("DebugVusted", function()
dap.run({
name = "Debug vusted",
type = "local-lua",
cwd = vim.fs.root(0, ".git") or vim.uv.cwd(),
request = "launch",
program = { command = "vusted" },
args = { "${file}" },
})
end, {})
📝 local-lua-debuggerはvusted側で実行される。
そのため、以下をテストファイルに足す必要はない。
if os.getenv("LOCAL_LUA_DEBUGGER_VSCODE") == "1" then
require("lldebugger").start()
end
実行手順
セットアップができたら特別なことはない。
dap.nvimを利用して以下のようにデバッグ実行できる。
-
:lua require("dap").toggle_breakpoint()
でテストファイルにブレークポイントを設定する -
:DebugVusted
でデバッグを開始する
テスト実行後のNeovimを操作する
デバッグ実行までは不要だが、テスト実行後のNeovimを操作して状態を確認したい場合がある。
つまり、下記の条件を満たす形でテストを実行したい。
- 確認したいテストに絞って実行する
- テスト終了後にプロセスを終了しない
- テスト後のクリーンアップの処理を実行しない
- ヘッドレスで実行しない
vustedを以下のように実行すると実現できる。
VUSTED_DISABLE_EXIT=1 VUSTED_DISABLE_CLEANUP=1 VUSTED_ARGS='-u NONE -i NONE' vusted --filter 'hoge plugin creates new tab' hoge_spec.lua
hoge_spec.lua
local helper = require("vusted.helper")
describe("hoge plugin", function()
after_each(function()
helper.cleanup()
helper.cleanup_loaded_modules("hoge")
end)
it("creates new tab", function()
require("hoge").open()
end)
end)
状態、特に見た目を確認したい場合に便利。
Discussion