先日VSコードを使っていた際、ハイライト機能や予測変換が無効になって解決に30分ぐらいかかりました・・・
環境によって理由は様々かもしれませんが、1つの解決策としてまとめておきます。
VSCodeで予測変換やハイライトが無効になってしまう原因
理由は単純でした。
存在しない、認識されていないヘッダファイルをインクルードしているためです。
今回自分はMPLABのプロジェクトをVSCodeで開いていたのですが、開発環境側のヘッダファイルをインクルードしていませんでした。
(MPLABでコンパイルするときはちゃんと通るし別にいいや・・・ぐらいに思ってました・・・)
この状態でファイルを開いていると、他にインクルードしているヘッダファイルでの定義までもが、正しく読み込まれなくなります。
※注意点ですが、今回はC言語開発で、下記の拡張機能を入れている場合を紹介します。

症状から確認
実際の症状を確認していきます。
今回自分はMPLABのプロジェクトをVSCodeで開き、編集していました。
MPLABの場合、コンパイル時に使用する共通のインクルードファイルは、プロジェクトファイルの場所とは別にあります。


このような場合、下の「00_PIC16F1827_ccp_pwm_mode」をVSCodeで開いても、「.../include」に存在するファイルは当然、読み込まれません。
この状態でプロジェクトを開くと下記のような表示になり、正しく認識出てきていないヘッダファイルに赤線が付きます。

このように、正常に認識されていないヘッダファイルがある状態でコードを書いていくと、下記のような症状が発生します。

正直ヘッダファイルの認識がずれてるだけでこんなに問題起こるんだ、と少し驚きました。
余談ですが、少し前までヘッダファイルが正しく認識されていなくても、こうはならなかった気がします。
アップデートで変わったのかな・・・
解決策
解決方法を紹介します。
解決方法は簡単で、ヘッダファイルのパスをVSCodeに強制的に認識させるだけです。
設定方法の例を紹介します。
まずはVSCodeの左下にカーソルを合わせ、「Settings:設定」を開きます。

次に、上部の検索ウィンドウで「include」と入力します。

検索すると「include」に関連した設定一覧が表示されます。
その後、拡張機能の中から下記の設定ウィンドウを選択して表示させます。

ここで、「C_Cpp > Default: Include Path (Not synced)」という項目の「Add Item」ボタンを押します。
ここに、強制的に認識させたいヘッダファイルのパスを入力します。
今回の場合、自分はPIC16シリーズの共通ヘッダファイルである「xc.h」を認識させたいと考えていました。
このため、下記のフォルダパスを取得し、下記のように貼り付け、「OK」を押します。
C:\Program Files\Microchip\MPLABX\v6.05\packs\Microchip\PIC12-16F1xxx_DFP\1.3.90\xc8\pic\include

これで外部のフォルダにあるヘッダファイルを認識させることができました。
注意点として、VSCode側のコメントに下記の様なことが書かれています。
C_Cpp ' 既定値: インクルード・パス (同期されない)
includePathがc_cpp_properties.jsonで指定されていない場合に設定で使用する値です。includePathが指定されている場合は、${default}を配列に追加して、この設定の値を挿入します。通常は、システム・インクルードを含めるべきではありません。代わりに、C_Cpp ' Default: コンパイラー・パス。
ざっくりですが、開いているプロジェクトファイル内で正式に認識されているわけではない(パスを指定して強制的にOKとしてる?)ので、本来は設定すべきではない、みたいな感じかと思います。
本当であればJsonファイルをいじって・・・というのが正しいのかな~と思います。
設定としては以上になります。
プロジェクトファイルを再度確認してみる
設定を完了した後、プロジェクトの中のソースファイルを開き、変化を確認してみます。
下記のように、問題が解消されていることが確認できました。

注意点ですが、強制的に認識させたファイルがあるフォルダパス内の定義は全部参照されてしまいます。
不必要に予測変換を表示させたくない場合は空のファイルなどを用意して特定のフォルダに保存し、参照させるのも良いかもしれません。
まとめ
今回はVSCodeにて予測変換、文字の色付け機能が動作しなくなってしまう問題と、解決策の1つを紹介してみました。
今回紹介した原因以外でも、同様の問題が起こる可能性はあるので、全部はカバーできないかもしれませんが、割とオールマイティに対応できる解決策、かもしれません。(ちゃんと認識させているわけではないので・・・)
本来はjsonファイルをいじるべきなんでしょうが、
私のように、コンパイルは開発環境側、VSCodeは最小限の機能だけ入れて、見やすいエディタとして使うだけ、というライトユーザーにとっては今回の方法でも十分なのかな~と思います。
・・・・VSCodeで赤い波線が出てたら気にしろよ!というのが正論かもしれません、、、、、(笑)
それでは、また。