(二)如何利用C# Roslyn编译器写一个简单的代码提示/错误检查?
上一篇我们讲了如何建立一个简单的Roslyn分析项目如分析检查我们的代码。
今天我们主要介绍各个项目中具体的作用以及可视化分析工具。

还是这种截图,可以看到解决方案下一共有三个项目。
Analyzer1 : 这是比较核心的模块,主要包括两块内容,代码问题的诊断(diagnostics )和代码问题的修复(fix),该项目编译后会生成一个analyzer DLL文件。当然,同时也会生成一个NuGet package。
Analyzer1.Vsix: 这是一个扩展插件,会把第一个项目生成的analyzer Dll文件嵌入进去。我们启动/调试项目的时候会运行Analyzer.Vsix这个项目,会生成一个VS窗口实例。(对于VS扩展插件知识,其实了解的同学如果觉得VS有些按钮或功能不足,完全可以通过自定义VS扩展插件实现自己想要的IDE功能)
Analyzer1.Test: 单侧项目不用多说,主要测试analyzer 项目代码work情况。
大家主要看看Analyzer1里的核心代码即可,当然如果要写出好的检查分析代码,则必须要借助一个工具 Syntax Visualizer :

这是左侧的Syntax Visualizer 语法可视化工具,当你点击任意节点时,右侧则会自动选中相关的代码或空格符号等内容。

简单理解,蓝色为代码结构,绿色表示一些独立的单词、数字、符号等。红色的则表示空格、注释等。
这里我找了一个Syntax Visualizer 结构树的图:

其代码内容为:
Regex.Match("my text", @"\pXXX"); 大家可以比对上面的图看看。
今天基本上就是这样,大家可以看一下代码,自己操作一遍。后面将会开始我们第一个诊断程序的编写。
(二)如何利用C# Roslyn编译器写一个简单的代码提示/错误检查?的更多相关文章
- 如何利用C# Roslyn编译器写一个简单的代码提示/错误检查?
OK, 废话不多说,这些天在写C#代码时突然对于IDE提示有了一些想法,之前也有了解过,不过并没有深入. 先看个截图: 一段再简单不过的代码了,大家注意看到 count 字段下面的绿色波浪线了吗,我们 ...
- 利用SpringBoot+Logback手写一个简单的链路追踪
目录 一.实现原理 二.代码实战 三.测试 最近线上排查问题时候,发现请求太多导致日志错综复杂,没办法把用户在一次或多次请求的日志关联在一起,所以就利用SpringBoot+Logback手写了一个简 ...
- Roslyn如何实现简单的代码提示
假如需要实现一个代码编辑器,其中一个很重要的功能是实现代码提示,类似VS的代码智能提示.下面用Roslyn编译器来实现一个简单的代码提示功能. 代码提示,首先必须需要知道对象的类型信息,然后通过迭代获 ...
- 分享:计算机图形学期末作业!!利用WebGL的第三方库three.js写一个简单的网页版“我的世界小游戏”
这几天一直在忙着期末考试,所以一直没有更新我的博客,今天刚把我的期末作业完成了,心情澎湃,所以晚上不管怎么样,我也要写一篇博客纪念一下我上课都没有听,还是通过强大的度娘完成了我的作业的经历.(当然作业 ...
- (原创)如何使用boost.asio写一个简单的通信程序(二)
先说下上一篇文章中提到的保持io_service::run不退出的简单办法.因为只要异步事件队列中有事件,io_service::run就会一直阻塞不退出,所以只要保证异步事件队列中一直有事件就行了, ...
- 利用windows.h头文件写一个简单的C语言倒计时
今天写一个简单的倒计时函数 代码如下: #include<stdio.h> #include<windows.h> int main() { int i; printf(&qu ...
- 用C写一个简单的推箱子游戏(二)
下面接着上一篇随笔<用C写一个简单的推箱子游戏(一)>来写 tuidong()函数是用来判断游戏人物前方情况的函数,是推箱子游戏中非常重要的一个函数,下面从它开始继续介绍推箱子的小程序怎么 ...
- 【阿菜做实践】利用go语言写一个简单的Pow样例
本篇博客的主要内容是用go写一个简单的Proof-of-Work共识机制,不涉及到网络通信环节,只是一个本地的简单demo.开发IDE用的是JB Golang. 整个项目的文件结构如下: PoWdem ...
- 一步一步写一个简单通用的makefile(三)
上一篇一步一步写一个简单通用的makefile(二) 里面的makefile 实现对通用的代码进行编译,这一章我将会对上一次的makefile 进行进一步的优化. 优化后的makefile: #Hel ...
随机推荐
- MongoDB与RoboMongo的安装+python基本操作MongoDB
MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是可以应用于各种规模的企业.各个行业以及各类应用程序的开源数据库.作为一个适用于敏捷开发的数据库,MongoDB的数据 ...
- OpenVirtex安装
目录 环境 安装 环境 我使用的java以及maven版本如下: jdk7下载地址:https://www.oracle.com/technetwork/java/javase/downloads/j ...
- Git如何永久删除某个重要文件文件或文件夹 (包括历史记录) 强制
有些时候不小心上传了一些敏感文件(例如密码), 或者不想上传的文件(没及时或忘了加到.gitignore里的), 而且上传的文件又特别大的时候, 这将导致别人clone你的代码或下载zip包的时候也必 ...
- git sub module
https://github.com/ViRb3/de4dot-cex/blob/master/.gitmodules git submodule sync command - what is it ...
- 【Python】把文件名命名成canlendar.py竟然导致无法使用canlendar模块 附赠2020年月历
这个bug困扰了我一阵,直到在 http://www.codingke.com/question/15489 找到了解决问题的钥匙,真是没想到居然是这个原因导致的. 下面是出错信息,可以看到只要目录下 ...
- ? 原创: 铲子哥 搜狗测试 今天 shell编程的时候,往往不会把所有功能都写在一个脚本中,这样不太好维护,需要多个脚本文件协同工作。那么问题来了,在一个脚本中怎么调用其他的脚本呢?有三种方式,分别是fork、source和exec。 1. fork 即通过sh 脚本名进行执行脚本的方式。下面通过一个简单的例子来讲解下它的特性。 创建father.sh,内容如下: #!/bin/bas
? 原创: 铲子哥 搜狗测试 今天 shell编程的时候,往往不会把所有功能都写在一个脚本中,这样不太好维护,需要多个脚本文件协同工作.那么问题来了,在一个脚本中怎么调用其他的脚本呢?有三种方式,分别 ...
- github又提交不了代码了..... X_X
如下: 我们使用git提交代码过程中,突然就登录不上了 原因是 用户名被更改了:git@gitlab.0easy.com 是你的用户名 造成的原因是: 我们clone代码过程中选择了SSH的地址 解决 ...
- Vuex 通俗版教程告诉你Vuex怎么用
写在文前: 最近一直在用vue开发项目,写来写去就是那么些方法,对于简单的项目一些常用的vue方法足以解决,但是涉及到页面状态,权限判断等一些复杂的传值,vuex是必须的.对于vuex也运用一段时间, ...
- eclipse手动添加本地jar包到本地maven仓库
在使用maven进行构建项目时,有时候中央仓库不包含所需的jar包,就需要下载到本地后手动添加到本地仓库中.这里介绍下利用eclipse进行本地jar安装到maven本地仓库. 在Eclipse项目中 ...
- nginx指定允许的IP访问
接下来我们将tomcat.i4t.com 也就是10.4.82.140进行配置权限 #只允许10.4.82.142访问 cat /usr/local/nginx/conf/nginx.conf use ...