Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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
.