日記

日本語の勉強のためのブログ

【VSCode/C++】変数の補完が効かなくなった

結論

C_Cpp: Intelli Sense EngineTag Parserになっていたのが原因だった。 Defaultにしたら直った。

環境

起きた問題

VSCodeC++のコードを書いているときに、変数名が補完候補に出てこないことに気づいた(図1)。
また、コード内の変数にカーソルを当てると、普通はその変数の型などがポップアップされるのだが、自分の場合表示されなかった(図2)。

f:id:kalax:20211003012521p:plain
図1. 変数名が補完候補にない様子

f:id:kalax:20211003012412p:plain
図2. 変数の説明が表示されない様子(わかりづらいがhelloにカーソルを当てている)

やったこと

そこで以下のことを行ったが、どれもうまくいかなかった。

  • c_cpp_properties.jsonにおいて、WSLのUbuntuに入っている/usr/bin/gccが参照できないとエラーが出ていたので、Ubuntuを初期化してみる。→ダメでした
  • ここによると、「WSL内のフォルダはWindowsからは参照できないのでは」ということなので、仕方なくMinGWをインストールしてここの通りに設定する。→/usr/bin/gccのエラーは消えたが変数の問題は依然として解決せず
  • ここを斜め読みして拡張パックを入れる。 → ダメでした

重要な事実

ここで重要な事実に気が付いた。この問題が起こっているのはC++ファイルのみなのだ。試しにPythonのプログラムを書いてみるとちゃんとポップアップが出る(図3)。

f:id:kalax:20211003014150p:plain
図3. Pythonでは問題は起きていない

また以下のページから、ポップアップ表示の表示・非表示を設定で切り替えられることが分かった。 https://teratail.com/questions/114891

これら2つの知見から、「VSCodeC++設定のどれかをいじってしまった結果、問題が発生してしまっている」と判断し、設定(ファイル→ユーザー設定→設定)を確認してみた。

するとC_Cpp: Intelli Sense EngineTag Parserになっていたことが発覚。これをDefaultに直したら補完(図5)、ポップアップ(図6)ともに動作が確認できた。

f:id:kalax:20211003015205p:plain
図5. 変数の補完が効いている様子

f:id:kalax:20211003015106p:plain
図6. ポップアップが表示されている様子(わかりづらいがhelloにカーソルを当てている)

なぜこんな問題が起きたのか

数か月前に、VSCodeArduinoの開発をしようとしてVSCodeの設定をいろいろ変更していたのが原因だった。結局VSCode上での開発はやめたのだが、その際に設定をもとに戻すことを怠っていた。

反省と対策

  • 使用頻度の高いアプリの設定を変更する際は、変更箇所を書き残すかバックアップを取る。