LoginSignup
7
0
この記事誰得? 私しか得しないニッチな技術で記事投稿!

Neovim Lua LS で「undefined global vim」警告が出ないようにしたい

Last updated at Posted at 2023-06-18

先日、Neovim のプラグインの設定をアップデートしている時にひとつ問題に出会しました。Lua 言語サーバー が出してくれる診断結果メッセージは、通常はうっかりミスを防ぐのに便利なのですが、なかには許容できる警告もあります。その一つが、「undefined global vim」という警告です。この警告を出ないようにする具体的な方法がなかなかネット検索では見つからず苦労しました。需要があるのかどうか知りませんが、忘れないうちにメモします。

対策

~/.config/nvim/luarc.json をつくって、Lua 言語サーバーの挙動を微調整する。

.config/nvim/luarc.json
{
  "diagnostics": {
    // 明示的に定義されていない vim モジュールをよしとする場合
    "globals": ["vim"],
    // 細かい助言がいらない場合
    "hint.enable": false
  }
}

Neovim の vim モジュール

Neovim ドキュメントによると Nvim Lua の「標準ライブラリ」(stdlib) は、vim モジュールとして利用することができ、それは自動的に読み込まれるので require("vim") の宣言は不要とのことです。

The Nvim Lua "standard library" (stdlib) is the vim module, which exposes various functions and sub-modules. It is always loaded, thus require("vim") is unnecessary.

ですので、Neovimの設定を書く際には、特に何もしなくても vim モジュールにアクセスできるようになっています。これ自体には特に何の問題もありません。

言語サーバープロトコル (LSP)

  • プログラミング言語の機能を公開するために便利な共通の枠組みを提供
  • プログラミング言語の機能を開発ツールに統合しやすくする

Lua 言語サーバー (Lua LS)

  • Lua 言語の言語サーバーの実装

Lua 言語サーバーの診断機能

  • Lua 言語のコードを診断
  • 情報、警告、エラーなど、さまざまな重大度の情報を報告

Neovim ではうっかり文法を間違った場合は、このような診断報告がでます。

CleanShot 2023-06-17 at 20.28.35.png

無効にしたい診断機能

ある時点から「undefined global vim」という警告がでるようになりました。なぜかはよくわかりません。

これは Neovim の仕様なので間違いではありません。この警告を無効にしたいです。

CleanShot 2023-06-17 at 17.44.53.png

場合によっては重要度の低い情報は無効にした方がスッキリするかもしれません。世の中にあるいくつかのサンプルコードでは使わない引数を含む関数が登場します。例えば、それらを何らかの理由で残しておきたいときにはそれに対する助言は無駄になります。

CleanShot 2023-06-17 at 18.43.49.png

.luarc.json

Lua言語サーバーの動作をカスタマイズする方法が複数あるそうです。その一つが .luarc.json ファイルです。

Lua 言語サーバー自身にも .luarc.json ファイルがありました。

.luarc.json ファイルを Neovim の設定のあるディレクトリに作成することにより、Lua言語サーバーの動作を補正できるようです。詳しいメカニズムはしりません。

Elixir 言語でコードの静的解析をする方法については @koga1020 さんの記事が参考になります。

コミュニティ

闘魂コミュニティ

みんなでわいわい楽しく自由に闘魂プログラミングをしています。

ぜひお気軽にお立ち寄りください。

Nervesで組み込み開発するコミュニティ

「Elixir で IoT!?ナウでヤングで cool な Nerves フレームワーク」です。

Elixir 言語でワクワクするコミュニティ

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0