Neovim で neotest でのテスト環境を構築する方法
Posted: | Categories: neovim | Tags: golang, neotest, neovim
この記事では、Neovim で Golang のテストを実行するまでの手順を紹介します
必要なツールと前提条件
- Neovim: v0.10.5
- Go: Go の実行環境および go.mod で管理されたプロジェクトが必要です。
- LazyVim / lazy.nvim
- Neovim の設定管理ツールとして LazyVim を使用しています。
- プラグイン
neotest の基本設定
私はrafi/vim-configを利用しています。
“extras” plugins として lazyvim.plugins.extras.test.core がリストの中にありました。
:LazyExtras でLazyVimのメニューを出し、testで検索、xで有効、neovimの再起動でインストールされました。
neotest 使い方
<leader> t でテスト関連のメニューが開き
- t テストファイルを開いた状態で実行すると、そのテストファイルの内容が実行される
- T と押すと全てのテストが実行
まずは、nvim-dap を LazyVim の仕組みを利用して設定します。 以下のサンプル設定では、Go 用のアダプタとして Delve を利用し、単一ファイル実行と動的な CLI 引数入力の2種類のデバッグ構成を用意しています。
-- ~/.config/nvim/lua/plugins/nvim-dap.lua
return {
"mfussenegger/nvim-dap",
event = "VeryLazy", -- lazy.nvim の遅延読み込みイベント
config = function()
local dap = require("dap")
-- Go 用のアダプタ設定(Delve を利用)
dap.adapters.go = {
type = "executable",
command = "dlv",
args = { "dap" },
}
-- デバッグ構成の定義
dap.configurations.go = {
{
type = "go",
name = "Launch file",
request = "launch",
program = "${file}",
cwd = "${workspaceFolder}",
},
{
type = "go",
name = "Launch file (with arguments)",
request = "launch",
program = "${file}",
cwd = "${workspaceFolder}",
args = function()
local input = vim.fn.input("Enter CLI arguments: ")
return vim.split(input, " ", { trimempty = true })
end,
},
{
type = "go",
name = "Launch package (with arguments)",
request = "launch",
program = "${workspaceFolder}", -- パッケージ全体をビルド対象にする
cwd = "${workspaceFolder}",
args = function()
local input = vim.fn.input("Enter CLI arguments: ")
return vim.split(input, " ", { trimempty = true })
end,
},
{
type = "go",
name = "Debug tests",
request = "launch",
mode = "test",
program = "${file}",
},
}
-- キーマッピングの設定例
vim.keymap.set("n", "<leader>db", dap.toggle_breakpoint, { desc = "Toggle Breakpoint" })
vim.keymap.set("n", "<leader>dc", dap.continue, { desc = "Start Debugging" })
vim.keymap.set("n", "<leader>di", dap.step_into, { desc = "Step Into" })
vim.keymap.set("n", "<leader>do", dap.step_over, { desc = "Step Over" })
vim.keymap.set("n", "<leader>dO", dap.step_out, { desc = "Step Out" })
end,
}
ポイント
- program と cwd の設定
- 単一ファイルの場合は ${file}、複数ファイルを含むパッケージの場合は ${workspaceFolder} を指定します。
- 動的 CLI 引数入力
- args を関数にして、デバッグ開始時にユーザーから CLI 引数を入力させるようにしています。
nvim-dap-ui の導入と設定
続いて、視覚的にデバッグ情報を表示するために nvim-dap-ui を設定します。 nvim-dap-ui は nvim-dap に依存するため、LazyVim の設定では dependencies を指定しておきます。
Read more...