2015-07-13 21 views
5

SORU: Kişisel DocumentationProvider'ımı ağaç sembollerine nasıl uygularım? SymbolFinder.FindSymbolAtPosition()Kaynak ağaç sembolleri için verinin üzerine geldiğinde roslyn'i kullanma

Kullanırken aldığım sembolün türü Özellikle GetDocumentationForSymbol() işlevini geçersiz kılmak istiyorum. Otomatik tamamlama sembollerim için geçersiz kıldım, ancak üzerine geldiğim semboller değil.

AMAÇ:

Merhaba, ben oluşturma bir metin editörü için intellisense toplamak için Roslyn kullanıyorum. Yapmam gereken şeylerden biri hızlı bilgi veya araç ipuçları. Otomatik tamamlama önerileri için çalışıyorum. Bu

compilation = CSharpCompilation.Create(
     "MyIntellisense", 
     new[] { CSharpSyntaxTree.ParseText(dotNetCode) }, 
     assemblies 
    .Select(i => MetadataReference 
    .CreateFromFile(i.Location, MetadataReferenceProperties.Assembly, 
    new DotNetDocumentationProvider(
    new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)); 

gibi görünen bir parçacığını kullanarak bu XML ve dokümantasyon ben gereken şekilde ayrıştırır benim kendi kişisel DotNetDocumentationProvider kullanır. Bu, ben Öneriler.GetRecommendedSymbolsAtPosition() kullandığımda sahip olduğum sembollerin türleri olan montaj sembolleri için çalışır.

DÜZENLEME: Sadece daha arka plan :)

Ben iki farklı şekilde semboller olsun vermek istedi.

var information = symbol.GetDocumentationCommentXml(); 
:

1) Tek yönlü kullanıcı ben gidebilirsiniz Bu sembollerle ve her bir arama için otomatik tamamlama bilgi sorduğunda ben bu kullanmak

var symbols = Recommender.GetRecommendedSymbolsAtPosition(semanticModel, offset, solution.Workspace); 

çağırdığınızda olduğu

protected override string GetDocumentationForSymbol(string documentationMemberID, CultureInfo preferredCulture, CancellationToken cancellationToken = default(CancellationToken)) 
:

Bu sonuçta ben sınıf DocumentationProvider dan geçersiz kıldık bir işlevini çağırır 0

2) İkinci yol aslında kod aynı hattan (aynı işlevi çağırmak

var symbol = SymbolFinder.FindSymbolAtPosition(semanticModel, offset, workspace, cancellationToken); 

üzerinde kullanıcı bu KURU)

var information = symbol.GetDocumentationCommentXml(); 

Ama bu tutarak geldiğinde içindir Benim geçersiz kılma GetDocumentationCommentXml() yerine, varsayılan Roslyn olanı çağırır.

Teşekkürler!

+0

Standart sağlayıcıyla ilgili sorun nedir? – SLaks

+0

Hangi semboller çalışmıyor? – SLaks

+1

Belgeleri editörümüz intellisense'de quickinfo ile açığa çıkarmak istiyoruz. Sorun şu ki, kaynak kodumuz dinamik bir biçimde (ASP.NET gibi) templated bir dilden üretilir ve sonuç olarak, bir çok sentetik ad alanı, sınıf adı ve orijinaline kodlama yapan son kullanıcıya maruz kalmaması gereken diğer şeyler içerir. templated kaynağı. – ReckerDan

cevap

1

Not finding all of the symbols I need,How to find more symbols using the Roslyn API

O zamanlar burada başlamıştı sorunu çözdü bu sorunu çözdüğünde diye sordum başka soru. sorun i

_workspace.CurrentSolution.AddMetadataReferences(_currentProject.Id,_compilation.References); 

ı çalışıyordu çalışma alanını güncelleştirilmiş düşünce olmasıydı. Ama buna eklenen referanslarla bir çözümü döndürür etmez. kaydetmek için

_workspace.TryApplyChanges(referenceSolution); 

'u kullanmam gerekiyordu. Bağlantıya verilen diğer sorumu yanıtlayan Jason'a teşekkürler. Eğer buraya mesaj gönderirsen cevap olarak işaretlerim.