Aracılığıyla paylaş


Visual Studio düzenleyicisini yeni bir sınıflandırma tagger'ı ile genişletme

Visual Studio uzantısı, bir belgenin söz dizimini sınıflandırarak metnin uygun şekilde renklendirilmesine olanak tanıyabilir ve bu, değerleri döndüren ClassificationTag bir etikete katkıda bulunarak elde edilir.

Yeni bir etiketleyici ile Visual Studio düzenleyicisini genişletme makalesinde, bir etiketleyiciyi nasıl sağlayacağınıza ilişkin ayrıntılı bir açıklama bulabilirsiniz.

Sınıflandırma sağlamak için önce bir etiketleyici sağlayıcısı ve bir etiketleyici uygularız.

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

Belge renklendirmesinin mümkün olduğunca çabuk görünmesini istediğimizden, etiket oluşturma işleminin mümkün olduğunca hızlı olması gerekir. Bu makalede aşağıdakilerin önemi vurgulanabilir:

  • belgenin tamamı için değil, yalnızca istenen belge bölümü (veya küçük bir üst kümesi) için etiketler oluşturma;
  • etiket oluşturmak için belgenin tamamını ayrıştırmaktan kaçının.

Tagger yapısı hazır olduktan ve belirli dosya biçimi için söz dizimi ayrıştırma uygulandıktan sonra, ClassificationTag bilinen değerleri kullanarak ClassificationType değerler oluşturabilir ve UpdateTagsAsync çağırarak metin sınıflandırması sağlayabilir.

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);

Şu anda VisualStudio.Genişletilebilirlik henüz yeni sınıflandırma türleri için metin renklerini tanımlamayı desteklemediğinden mevcut sınıflandırma türlerini (ClassificationType.KnownValues) kullanmalıyız.

VisualStudio.Extensibility in-proc uzantısı, classificationTypeDefinition kullanarak yeni sınıflandırma türlerini tanımlayabilir. Adlarına `ClassificationType.Custom` kullanılarak başvurulabilir.