Compartir a través de


Extender el editor de Visual Studio con un nuevo etiquetador de clasificación

Una extensión de Visual Studio puede clasificar la sintaxis de un documento, permitiendo colorear el texto en consecuencia, lo cual se logra mediante la contribución de un etiquetador que devuelve valores ClassificationTag.

Puede encontrar una descripción detallada sobre cómo implementar un tagger en el artículo Extender el Editor de Visual Studio con un Nuevo Tagger.

Para proporcionar clasificación, primero implementamos un proveedor de etiquetas y un etiquetador.

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

Puesto que queremos que la coloración del documento aparezca lo más instantáneamente posible, la generación de taggers debe ser lo más rápida posible. En este artículo se destaca la importancia de:

  • generar solo etiquetas para la parte del documento solicitada (o un pequeño superconjunto de él), no todo el documento;
  • evitando analizar todo el documento para generar etiquetas.

Una vez que la estructura de tagger está lista y se implementa el análisis de sintaxis para el formato de archivo específico, el tagger puede proporcionar clasificación de texto creando valores ClassificationTag a partir de los valores conocidos disponibles ClassificationType y realizando llamadas a 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);

En este momento, VisualStudio.Extensibility no admite la definición de colores de texto para los nuevos tipos de clasificación, por lo que debemos usar los tipos de clasificación existentes (ClassificationType.KnownValues).

La extensión in-proc de VisualStudio.Extensibility puede usar ClassificationTypeDefinition para definir nuevos tipos de clasificación. Se puede hacer referencia a su nombre mediante ClassificationType.Custom.