Visual Studio 拡張機能では、ドキュメントの構文を分類し、それに応じてテキストを色分けすることができます。これは、 ClassificationTag
値を返すタガーを提供することによって実現されます。
タガーを提供する方法の詳細については、新しいタガーを使用 した Visual Studio エディターの拡張 に関する記事を参照してください。
分類を提供するために、最初にタガー プロバイダーとタガーを実装します。
[VisualStudioContribution]
internal class MyClassificationTaggerProvider :
ExtensionPart,
ITextViewTaggerProvider<ClassificationTag>,
ITextViewChangedListener
{
...
internal class MyClassificationTagger :
TextViewTagger<ClassificationTag>
{
...
ドキュメントの色付けを可能な限りすぐに表示する必要があるため、タガーの生成は可能な限り速くする必要があります。 この 記事では、次の重要性について強調します。
- ドキュメント全体ではなく、要求されたドキュメント部分 (またはその小さなスーパーセット) のタグのみを生成する。
- タグを生成するためにドキュメント全体の解析を回避する。
タガー構造の準備が整い、特定のファイル形式の構文解析が実装されたら、使用可能なClassificationTag
の認識値を使用してClassificationType
値を作成し、UpdateTagsAsync
を呼び出すことによって、タガーでテキスト分類を提供できます。
List<TaggedTrackingTextRange<ClassificationTag>> tags = new();
List<TextRange> ranges = new();
...
ranges.Add(new(document, lineStart, lineLength));
tags.Add(
new TaggedTrackingTextRange<ClassificationTag>(
new TrackingTextRange(
document,
tagStartPosition,
tagLength,
TextRangeTrackingMode.ExtendNone),
new ClassificationTag(ClassificationType.KnownValues.Operator)));
...
await this.UpdateTagsAsync(ranges, tags, CancellationToken.None);
現時点では、VisualStudio.Extensibility では、新しい分類の種類に対するテキストの色の定義はまだサポートされていないため、既存の分類の種類 (ClassificationType.KnownValues
) を使用する必要があります。
VisualStudio.Extensibility in-proc 拡張機能では、 ClassificationTypeDefinition を使用して新しい分類の種類を定義できます。 名前は、 ClassificationType.Custom
を使用して参照できます。