1
雖然很容易在DiagnosticAnalyzer
中獲取需要的語法節點(因爲它傳遞給您),但您不清楚如何在其他上下文中獲取Roslyn中的語法節點。例如,Roslyn語法可視化器(源代碼看起來不可用)如何獲得光標下的語法節點?在命令處理程序中獲取Roslyn語法節點
我想要做的是實現一個命令,該命令可以在調用該命令的位置使用Roslyn語法樹來定位遊標的位置。我一直無法以這種方式找到使用Roslyn。
雖然很容易在DiagnosticAnalyzer
中獲取需要的語法節點(因爲它傳遞給您),但您不清楚如何在其他上下文中獲取Roslyn中的語法節點。例如,Roslyn語法可視化器(源代碼看起來不可用)如何獲得光標下的語法節點?在命令處理程序中獲取Roslyn語法節點
我想要做的是實現一個命令,該命令可以在調用該命令的位置使用Roslyn語法樹來定位遊標的位置。我一直無法以這種方式找到使用Roslyn。
首先,您需要獲取當前的文本緩衝區。這有點牽扯,我個人使用Mads Kristensen編寫的代碼在他的開源WebEssentials中。請參閱ProjectHelpers.cs中的GetCurentTextBuffer()
。其次,要檢索適當的Roslyn結構(例如Document
),可以使用Roslyn中的擴展方法之一(請參閱Microsoft.CodeAnalysis.Text.Extensions)。這個特殊位受到blog post by Josh Varty的啓發。
從那裏可以直接得到Roslyn文檔的SyntaxTree並找到插入位置的節點。
也許Roslyn正在使用標準標籤和分類器系統? https://msdn.microsoft.com/en-us/library/dd885240.aspx#tagsandclassifiers – MickyD
@MickyDuncan它有自己的代表位置和範圍 - https://github.com/dotnet/roslyn/blob/master/ src /編譯器/核心/便攜式/診斷/ Location.cs(這可能是兩個地圖之間的映射,但我希望有一個正確的方法來做到這一點...) –
有趣的是,我正在調查一樣。出於好奇,你的擴展是做什麼的? –