## 事象
以下の `Snacks.bufdelete()` みたいに `Snacks` キーワードを使うと
```lua
return {
"folke/snacks.nvim",
lazy = false,
keys = {
{ "<C-j>f", function() Snacks.picker.files() end, silent = true },
}
}
```
以下のような警告が表示される。
```warning
Undefined global `Snacks`. [undefined-global]
```
[[snacks.nvim]]は実行時にちゃんと動作するので問題ないはず。通常は `require` を使うが、[[snacks.nvim]]の設定例では `require` を使っていないので、この状態のまま解決してほしい。
[[lazydev.nvim]]の設定は以下。
```lua
return {
{
"folke/lazydev.nvim",
ft = "lua",
opts = {
library = {
{ path = "luvit-meta/library", words = { "vim%.uv" } },
},
},
},
{ "Bilal2453/luvit-meta", lazy = true },
}
```
### 環境
| 対象 | バージョン |
| ---------------- | ----------- |
| [[Ubuntu]] | 24.04.1 LTS |
| [[Neovim]] | 0.10.3 |
| [[snacks.nvim]] | bc0630e |
| [[lazydev.nvim]] | 2367a6c |
## 原因
先ほど記載したとおり `rquire` でモジュールが読み込まれていないため `Snacks` のキーワードが解決しないから。
## 解決方法
[[lazydev.nvim]]で該当モジュールを読み込むように `snacks.nvim/lua/snacks` を追加する。グローバルなので `words` の指定は不要。
```lua
return {
{
"folke/lazydev.nvim",
ft = "lua",
opts = {
library = {
{ path = "luvit-meta/library", words = { "vim%.uv" } },
-- [追加]
{ path = "snacks.nvim/lua/snacks" },
},
},
},
{ "Bilal2453/luvit-meta", lazy = true },
}
```
`Snacks.picker.todo_comments` だけは定義が[[Todo Comments]]側にあるので、そこだけ[[Diagnostics (LuaLS)|Diagnostics]]を除外する。
```lua
--- @diagnostic disable-next-line: undefined-field todo_commentsはsnacks以外に定義があるため無視
{ "<C-j>m", function() Snacks.picker.todo_comments() end, silent = true },
```