Visual Studio intellisense uygulamasına bir uzantı yazıyorum ve imleçten hemen önce C# düzenleyicisinde öğenin türünü almak istiyorum.Öğenin türünü C# düzenleyicisi penceresinde geçerli konumla bul
Şu anda mevcut kaynak dosyayı almak için kullanabileceğiniz bir ITextBuffer
var.
Ben de aşağıda editörü mevcut konumu alabilirsiniz: Şu anda editörü imlecin arkasındaki öğenin türünü tespit etmek için nasıl çok emin değilim Ancak
var dte = Microsoft.VisualStudio.Shell.ServiceProvider.GlobalProvider.GetService(typeof(EnvDTE._DTE)) as EnvDTE.DTE;
TextSelection sel = (TextSelection)dte.ActiveDocument.Selection;
. Roslyn kullanarak denedim ama bu daha yapmak için daha basit bir şey olmalı. Roslyn bunu yapmak için en iyi araçtır (belgeyi derlemek ve belgede doğru konuma gitmek) veya daha iyi bir yol var mı? Aşağıda
Roslyn kullanarak öğenin türünü bulma benim girişimi: (. Hiçbir bulanık mantık)ITextSnapshot snapshot = m_textBuffer.CurrentSnapshot;
SnapshotPoint? triggerPoint = session.GetTriggerPoint(snapshot);
var tree = SyntaxTree.ParseCompilationUnit(m_textBuffer.CurrentSnapshot.GetText());
var nodes = tree.GetRoot().DescendantNodes();
var element = nodes.Where(n => n.Span.End <= triggerPoint.Value.Position).Last();
var comp = Compilation.Create("test", syntaxTrees: new[] { tree });
var semModel = comp.GetSemanticModel(tree);
//I cant work out what to do here to get the type as the element doesnt seem to be of the required type
var s = semModel.GetTypeInfo((AttributeSyntax)element);
+1 Eric'in bunun hakkında söyleyeceklerini duymak ilginç olacak. – MoonKnight
Neden "ITextView.Caret.Position" kullanıyorsunuz? – leppie
@leppie VS sdk için oldukça yeni ama geçerli imleç pos almak için çok daha kolay bir yol gibi geliyor, ben değiştireceğim –