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);

     

  • 相关阅读:
    2
    1
    java10
    java8
    java9
    java7
    java6
    java5
    java4
    java3
  • 原文地址:https://www.cnblogs.com/TianFang/p/5204110.html
Copyright © 2011-2022 走看看