Condividi tramite


Estensione dell'editor di Visual Studio con un nuovo tagger di classificazione

Un'estensione di Visual Studio può classificare la sintassi di un documento consentendo di colorare di conseguenza il testo, che viene ottenuto contribuendo a un tagger che restituisce ClassificationTag valori.

Una descrizione dettagliata di come fornire un tagger è disponibile nell'articolo Estensione dell'editor di Visual Studio con un nuovo tagger .

Per fornire la classificazione, implementiamo prima un provider di tagger e un tagger:

[VisualStudioContribution]
internal class MyClassificationTaggerProvider :
    ExtensionPart,
    ITextViewTaggerProvider<ClassificationTag>,
    ITextViewChangedListener
{
    ...
internal class MyClassificationTagger :
    TextViewTagger<ClassificationTag>
{
    ...

Poiché vogliamo che la colorazione del documento venga visualizzata il più rapidamente possibile, la generazione di taggger deve essere il più veloce possibile. Questo articolo sottolinea l'importanza di:

  • solo generando tag per la parte del documento richiesta (o un piccolo superset di esso), non l'intero documento;
  • evitando di analizzare l'intero documento per generare tag.

Quando la struttura del tagger è pronta e viene implementata l'analisi della sintassi per il formato di file specifico, il tagger può fornire la classificazione del testo, creando ClassificationTag valori con i valori noti disponibili ClassificationType e chiamando 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);

A questo punto, VisualStudio.Extensibility non supporta ancora la definizione dei colori del testo per i nuovi tipi di classificazione, quindi è necessario usare i tipi di classificazione esistenti (ClassificationType.KnownValues).

L'estensione visualStudio.Extensibility in-proc può usare ClassificationTypeDefinition per definire nuovi tipi di classificazione. È possibile fare riferimento al nome usando ClassificationType.Custom.