我正在編寫Visual Studio intellisense的擴展,並希望在C#編輯器中的光標之前獲取該項目的類型。在C#編輯器窗口中的當前位置查找項目的類型
我目前有一個ITextBuffer
我可以用它來獲取當前的源文件。
我也可以得到如下的編輯器的當前位置:
var dte = Microsoft.VisualStudio.Shell.ServiceProvider.GlobalProvider.GetService(typeof(EnvDTE._DTE)) as EnvDTE.DTE;
TextSelection sel = (TextSelection)dte.ActiveDocument.Selection;
不過我也不太清楚如何檢測目前暫列光標在編輯器中的項目類型。我試過使用Roslyn,但它似乎應該是一個比這更簡單的事情。 Roslyn是做這件事的最佳工具(通過編譯文檔並導航到文檔中的正確位置)還是有更好的方法。
下面是我在尋找項目的使用羅斯林類型的嘗試:(無模糊)
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對此有何評論會很有趣。 – MoonKnight
爲什麼你不使用'ITextView.Caret.Position'? – leppie
@leppie即時通訊相當新的VS sdk,但這聽起來像一個更簡單的方法來獲取當前的光標位置,我會改變它 –