码迷,mamicode.com
首页 > Windows程序 > 详细

一个C#语法高亮插件

时间:2016-02-20 22:52:32      阅读:455      评论:0      收藏:0      [点我收藏+]

标签:

语法高亮对程序员阅读代码来说有着不小的帮助,虽然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);

?

一个C#语法高亮插件

标签:

原文地址:http://www.cnblogs.com/TianFang/p/5204110.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!