Nasıl benim kod tanı sözdizimi yapmak düğüm eylem kapalı dosyalar üzerinde çalışabilir miyim?
Kod tanılama Roslyn kullanarak (VS2015 Önizleme) bir dizi inşa ediyorum. İdeal olarak, eğer normal bir dil kuralı ihlal olsaydım gibi sürekli hatalar olarak hareket etmek ürettikleri hataları isterim.
Seçenekleri bir sürü var, ama hiçbirini sürekli çalışmak için yaşıyorum. Temel sözdizimi düğüm bir eylem uygulamak için idare ettik, yani bir kayıtlı
context.RegisterSyntaxNodeAction(AnalyzeSyntaxNode, SyntaxKind.InvocationExpression);
tanı sınıfımdan Initialize
yöntemi. Açtığım karşına ne çıksa beğenirsin, tanı VSIX proje çalışırken (), VS2015 bu gösterileri ihlal eden bir dosya hatası:
- Kod doğru biraz altında kırmızı şeyler
- Marjin kırmızı blok
- Hata listesi hata
Ancak, hata dosyayı kapatıyorum.
De context.RegisterCompilationEndAction
kullanarak denedim, ama bu iki sorunu var:
- Tutarsız ateş gibi görünüyor.Genellikleçözüm açtığımda ateş edebiliyor, ama her zaman değil. Temiz/tuhaf görünüyor yeniden, ateş değil.
Teşhis oluşturulan rağmendoğrudantanı uygulamak için analiz yöntemi Yangında, ziyaretçi, beceriksiz olabilir, bu gibi kullanıyorum:
private static void AnalyzeEndCompilation(CompilationEndAnalysisContext context) { foreach (var tree in context.Compilation.SyntaxTrees) { var visitor = new ReportingVisitor(context.Compilation.GetSemanticModel(tree)); visitor.Visit(tree.GetRoot()); foreach (var diagnostic in visitor.Diagnostics) { context.ReportDiagnostic(diagnostic); } } }
Tanı oluşturulan olduğunu biliyorum -
ReportDiagnostic
satırında bir kesme noktası birkaç kez vurdu ama hata listesinde göremiyorum. (Bu yöntemi başındaReportDiagnostic
oysa benzer bir çağrı, ya da dosya yolu ile sözdizimi ağaç başınayokgösterilir.)
Burada yanlış ne yapıyorum? İlk yaklaşım (sözdizimi düğüm bir eylem) ideal uygun oLurdu - Benim ihtiyacım olan şey tam bağlam verir. Orada derleyici "tam projesi" yanı sıra "IDE" kullanma? derleme sadece etkileşimli bunun için yapmam gereken proje özellikleri bazı ayar Bu belki de henüz bitmiş değil, oldukça Roslyn entegrasyon biraz?
(Eğer yararlı olacaktır eğer sınıf için tam kodu dahil edebilirim - bu durumda sinyal daha fazla gürültü olacağını sanıyorum.)
CEVAP
Kapalı dosya sorunları için, tüm tanılama bildirdi amacımız o, açık veya kapalı ya da Dosyaları. Kapalı dosyalarda teşhis eklemek için geçiş yapabilirsiniz Araçlar\Seçenekler\Text Editor\C#\Gelişmiş önizleme için kullanıcı bir seçenek yoktur. VS 2015 yayımlanmadan önce bu varsayılan yapmak için umut. Ancak, bu seçenek yalnızca VS içinde analiz için geçerlidir. Eğer Çözümleyicisi iletilir derleyici (ekleyerek analiz içinde Çözüm Gezgini, ya da ekleyerek bir NuGet paketi başvuru paketi ile analiz karşıt olarak, yükleme bir VSIX içine Visual Studio), sonra derleyici raporutümdosyaları açık olup olmadığını veya kullanıcı oluşturduğunda teşhis ne olursa olsun.
RegisterCompilationEndedAnalyzer
, ikinci sorun için güvenilir VS 2015 Preview Visual Studio içinde adı değil. Bu bazı iyileştirmeler yeniden analiz "" yöntemi vücudumuzun içinde. yerel değişiklikler için her şeyi önlemek için yapıyoruz çünkü. Benzer nedenlerle, biz şu anda konumları ile raporlanan hata raporu yokyöntem gövdesi. Biz sadece son zamanlarda değişti o yüzden VS olacak kapalı bir tam re-analiz sonra daha uzun bir gecikme ve RegisterCompilationEndedAnalyzer
çağrılmalıdır güvenilir bir gelecek inşa edeceğiz rapor hataları ne olursa olsun konum.
Ancak, sizin durumunuz için doğru bir SyntaxNodeAnalyzer kal, VS seçeneği kapalı dosyaları tanılama etkinleştirmek için anahtarı ve proje derleme seçenekleri için tanı takın.
Bu yardımcı olur umarım!
Nasıl nrepl-ritz-jack-in yapmak işe uz...
Nasıl kontrol "global değişken&qu...
Nasıl Android bir URL açmak'benim...
Nasıl bir DOM düğüm üzerinde olay dinl...
Nasıl göster .* Eclipse alabilir miyim...