VSCode C#の#if falseで囲んだ行の色を変更する方法


C#は、プリプロセッサディレクティブ ( #if false など) で条件付きコンパイルを実現できる。

https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/preprocessor-directives#conditional-compilation

VSCodeでC#を書くと、プリプロセッサディレクティブを用いてコンパイルが通らないようにした行も他の行と同じテキスト色で表示してしまう。これでは、実際にはコンパイルされず処理が通らない行であっても、そうでないかのように勘違いされてしまう。

コンパイルが通らない行は、「コメントアウトした行」のように、文字色が薄い灰色になっていることが好ましい。今回はVSCodeの設定を書き換えることで、この問題を解決した。

必要な設定

setting.jsonに以下を記述するだけでOK。

"editor.semanticTokenColorCustomizations": {
    "rules": {
        "excludedCode": "#88846f"
    }
},

補足: Inspect Editor Tokens and Scopes機能について

VSCodeには、エディタ内の文字にカーソルを当てると、色定義キーや、今使っているカラーコードなどの情報を取得できる「開発者: エディター トークンとスコープの検査 / Developer: Inspect Editor Tokens and Scopes」という機能がある。

今回文字色を変えた「#if false」で囲まれた部分は、「excludedCode」というキーが割り当てられていた。これをもとに setting.json を書き換えている。

もっと細かく色を設定できるようだが、詳細はここでは省く。詳しく知りたい場合はVSCodeの公式ドキュメント等を参照のこと。

https://code.visualstudio.com/api/language-extensions/semantic-highlight-guide

参考資料

C# プリプロセッサ ディレクティブ | Microsoft Docs

Syntax Highlight Guide | Visual Studio Code Extension API

Semantic Highlight Guide | Visual Studio Code Extension API

Change colour of inactive preprocessor blocks in C# · Issue #69513 · microsoft/vscode
(VSCodeのC#プラグインの標準機能として対応する気はなさそう。これくらいは直してほしいなあ……)

c# - VSCode C#の プリプロセッサディレクティブ #if 行の色につきまして - スタック・オーバーフロー