😺

C# 文字列リテラルのシンタックスハイライト

2024/07/25に公開

C# 文字列リテラルのシンタックスハイライト

JetBrains Rider や Visual Studio には文字列リテラル内の文字列のシンタックスハイライトや文法検査や入力補完機能があります。

スクリーンショットは Rider のものですが、Visual Studio でも同じだと思います。

もちろんこの機能はユーザーコードではデフォルトでは利用できません。

ユーザーコードでこれらの機能を提供する方法を紹介します。

.NET 標準

まずは StringSyntaxAttribute を使う方法です。

関数のパラメーターだけでなく、フィールドやプロパティにも指定できます。

属性以外にもコメントに lang=Regex とする方法もあります。

正規表現以外だけでなく、Json / Uri / Xml にも対応しています。

また、DateOnlyFormat と指定すると、日付のフォーマット文字列の補完ができるようになります。

(Rider では // lang=DateOnlyFormat が効きませんでした)

フォーマット関係は他にもあります。詳しくは StringSyntaxAttribute のフィールド一覧を見ればわかります。

JetBrains Rider

JetBrains Rider は .NET 標準ではない方法を以前から提供しています。

コメントで指定する場合は language=json などとします。

対応しているものは .NET 標準より多く、正規表現・JavaScript・CSS・JSON・XML・SQL となります。

属性を使う場合は、JetBrains.Annotations を参照して、LanguageInjectionAttribute を利用します。参照を追加する必要のないコメント方式を利用したほうがよいでしょう。

ただし、関数パラメーターへの `/* language=regexp */ は効きませんでした。RegexPatternAttribute が必要になるようです。

余談ですが Rider は language=sql をつけなくても、SQL 文を自動検出します。ついでに、Rider にデータソースを設定しておくと、そのデータベースのテーブルやカラムの補完が効くようになります。

カスタムはできないっぽい

.NET 標準も Rider も、独自のシンタックスハイライト (例えば YAML とか) を提供できないようです。そのうち何とかならないかな?

どうしてもという場合は、Rider や Visual Studio のプラグインを書くことになるようです。

Discussion