Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Uma extensão do Visual Studio pode classificar a sintaxe de um documento, permitindo que o texto seja colorido adequadamente, o que é obtido contribuindo com um tagger que retorna os valores de ClassificationTag
.
Uma descrição detalhada de como fornecer um tagger pode ser encontrada no artigo Extending Visual Studio editor with a new tagger.
Para fornecer classificação, primeiro implementamos um provedor de marcação e um tagger:
[VisualStudioContribution]
internal class MyClassificationTaggerProvider :
ExtensionPart,
ITextViewTaggerProvider<ClassificationTag>,
ITextViewChangedListener
{
...
internal class MyClassificationTagger :
TextViewTagger<ClassificationTag>
{
...
Como queremos que a colorização do documento apareça o mais rápido possível, a geração de marcadores precisa ser o mais rápida possível. Este artigo destaca a importância de:
- gerando apenas marcas para a parte do documento solicitada (ou um pequeno superconjunto dele), não o documento inteiro;
- evitar a análise de todo o documento para gerar etiquetas.
Depois que a estrutura do tagger estiver pronta e a análise de sintaxe para o formato de arquivo específico for implementada, o tagger poderá fornecer classificação de texto, criando ClassificationTag
valores usando os valores de conhecimento disponíveis ClassificationType
e chamando 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);
No momento, o VisualStudio.Extensibility ainda não dá suporte à definição de cores de texto para novos tipos de classificação, portanto, devemos usar tipos de classificação existentes (ClassificationType.KnownValues
).
A extensão in-proc VisualStudio.Extensibility pode usar ClassificationTypeDefinition para definir novos tipos de classificação. O nome deles pode ser referenciado usando ClassificationType.Custom
.