一個C#語法高亮插件


語法高亮對程序員閱讀代碼來說有着不小的幫助,雖然VisualStudio本身支持C#語法高亮,但也只是對關鍵字、類名、字符串等少數元素加了標記,而我們代碼中主題:變量、函數、屬性、事件等都沒有進行高亮,如下所示:

    var nodes = from id in GetIdentifiersInSpans(doc.Workspace, doc.SemanticModel, spans)
                let node = doc.SyntaxRoot.FindNode(id.TextSpan)
                let symbol = doc.SemanticModel.GetSymbolInfo(GetExpression(node)).Symbol
                where symbol != null
                let type = RoslynSymbolParser.GetSymbolType(symbol)
                where type != null
                let classficationType = _classificationMap[type]
                select id.TextSpan.ToTagSpan(spans[0].Snapshot, classficationType);

有一些第三方控件如Visual Assist針對這一不足進行了增強,不過VisualAssist是一個收費控件,之前我找到了一個控件,這個控件雖然效果非常不錯,不過它的語法解析功能太弱,在代碼中間修改的時候,一旦有語法錯誤,它的語法高亮就時效了,導致界面出現不停的閃爍現象。這個Bug導致該語法高亮特性基本不可用。本來想自己寫的,結果發現VisualStudio擴展的相關文檔太少,又沒有什么時間投入研究它,便一度擱置了。

今天在GitHub上發現了一個語法高亮控件的項目roslyn-colorizer,這個項目本身做的並不完善,因此並沒有作為插件發布。不過倒是一個很好的示例代碼,基於它簡單的改了一下,增加了參數、成員變量、屬性、事件、枚舉、函數等幾種元素的語法高亮,前面的代碼加上語法高亮插件后就變成了如下形式:

    var nodes = from id in GetIdentifiersInSpans(doc.Workspace, doc.SemanticModel, spans)
                let node = doc.SyntaxRoot.FindNode(id.TextSpan)
                let symbol = doc.SemanticModel.GetSymbolInfo(GetExpression(node)).Symbol
                where symbol != null
                let type = RoslynSymbolParser.GetSymbolType(symbol)
                where type != null
                let classficationType = _classificationMap[type]
                select id.TextSpan.ToTagSpan(spans[0].Snapshot, classficationType);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM