zoukankan      html  css  js  c++  java
  • 一个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);

     

  • 相关阅读:
    git的突出解决--git rebase之abort、continue、skip
    servlet中service() 和doGet() 、doPost() 学习笔记
    Spring IoC容器初始化过程学习
    浅探SpringMVC中HandlerExecutionChain之handler、interceptor
    常用路由命令
    路由配置命令
    cout 计算顺序问题
    第一次作业
    记录一个微信网页授权中不小心踩到的坑(Curl请求返回false)
    善用mysql中的FROM_UNIXTIME()函数和UNIX_TIMESTAMP()函数
  • 原文地址:https://www.cnblogs.com/TianFang/p/5204110.html
Copyright © 2011-2022 走看看