StyleCop源码分析
前言:
由于最近在进行项目配置,配置内容:根据一个结构体,一一对应地配置xml文件(两个) 写一个和此结构体对应的类(只包含属性,字段)。反复配置后,觉得太繁琐,因此想到使用程序完成自动配置,网上搜索代码信息提取工具无果,最后想到了stylecop(一个开源代码规范校验工具)。
stylecop简介:(摘自:http://www.oschina.net/p/stylecop)
ourceAnalysis (StyleCop)的终极目标是让所有人都能写出优雅和一致的代码,因此这些代码具有很高的可读性。
SourceAnalysis (StyleCop)不是代码格式化(代码美化)工具,而是代码规范检查工具(Code Review 工具),它不仅仅检查代码格式,而是编码规范,包括命名和注释等。
SourceAnalysis (StyleCop)目的是帮助项目团队执行一系列常用的源代码格式规范,这些规范是关于如何开发布局规整,易读,易维护并且文档良好的优雅代码的 (help teams enforce a common set of best practices for layout, readability, maintainability, and documentation of C# source code)。
SourceAnalysis (StyleCop) 现在包含了 200 个左右的最佳实践规则(best practice rules),这些规则与 Visual Studio 2005 和 Visual Studio 2008 中默认的代码格式化规则是一致的。
SourceAnalysis (StyleCop)可以作为 Visual studio 的插件运行,在VS中(我的是2008)对一个C#文件点击右键后的:

信息提取:
由于stylecop的代码量比较大,实在无耐心看完,因此根据提供的资料和类名进行预分析,最后写下测试代码,最后能正确提取出一个类的所有信息,函数的内容信息可以在函数的document属性中看到。测试代码如下:
修改版的stylecop代码:http://yunpan.cn/QbDZJUFKZMGpb
stylecop源码:http://yunpan.cn/QbDZVhAiHp56d
说明:由于时间的原因,未能完成stylecop的全面研究,此次的研究成果是:自己编写了CSharpParserAdapter类库,实现根据一个代码文件名或代码字符串,提取出对应的代码结构(很全面的)。
存在问题:
1 函数的内容是在函数对象的隐藏字段中,可以调试看到,如果需要查看函数内部内容,需调整代码
2 如果需要查看某个提取结果的具体信息,需要把其强制转换为对应的类的对象查看,这些类型的类位置为:CSharpParser/Elements中
此源码的后续作用:
由于经过分析,发现此次的研究暂时无法应用于现在的工作,所以停止了分析。但是此次的stylecop的代码分析,可以为以后提取代码结构的需要而很好的准备
分析结果共享说明:
希望有需要分析源码的朋友,能在此次的分析基础上,完全分析出所有信息,并共享出来
StyleCop源码分析的更多相关文章
- ABP源码分析一:整体项目结构及目录
ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...
- HashMap与TreeMap源码分析
1. 引言 在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Ja ...
- nginx源码分析之网络初始化
nginx作为一个高性能的HTTP服务器,网络的处理是其核心,了解网络的初始化有助于加深对nginx网络处理的了解,本文主要通过nginx的源代码来分析其网络初始化. 从配置文件中读取初始化信息 与网 ...
- zookeeper源码分析之五服务端(集群leader)处理请求流程
leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcesso ...
- zookeeper源码分析之四服务端(单机)处理请求流程
上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...
- zookeeper源码分析之三客户端发送请求流程
znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...
- java使用websocket,并且获取HttpSession,源码分析
转载请在页首注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6238826.html 一:本文使用范围 此文不仅仅局限于spring boot,普通的sprin ...
- ABP源码分析二:ABP中配置的注册和初始化
一般来说,ASP.NET Web应用程序的第一个执行的方法是Global.asax下定义的Start方法.执行这个方法前HttpApplication 实例必须存在,也就是说其构造函数的执行必然是完成 ...
- ABP源码分析三:ABP Module
Abp是一种基于模块化设计的思想构建的.开发人员可以将自定义的功能以模块(module)的形式集成到ABP中.具体的功能都可以设计成一个单独的Module.Abp底层框架提供便捷的方法集成每个Modu ...
随机推荐
- mysql 异步执行 query //@todo
http://stackoverflow.com/questions/27240421/php-asynchronous-mysql-query http://php.net/manual/en/my ...
- maven3 手动安装本地jar到仓库
安装命令: mvn install:install-file -Dfile={Path/to/your/ojdbc.jar} -DgroupId=com.oracle -DartifactId=ojd ...
- go 的 protoc 插件调用逻辑
要让protoc使用插件,需要做下面事情: Place the plugin binary somewhere in the PATH and give it the name "proto ...
- do-while语句
一.语句格式格式1:do 语句1;while (条件表达式); 格式2:do { 语句1; 语句2; -}while (条件表达式); 语句执行过程:1.执行一遍循环体.2.求出作为循环条件的 ...
- EXT 省市三级联动及默认选择
var provinceStore = Ext.create('Ext.data.Store', { fields: ['id', 'name'], proxy: { type: 'ajax', ur ...
- ThinkPHP 3.2.3 Pager分页
不是很喜欢TP的分页类,因为生成的分页url感觉有点不好理解,例如访问路径xxxx/home/show.html,在模板输出分页后,例如产生了页码,页码链接的路径会变成xxxx/home/show/p ...
- C#字符操作
//字符串转ASCII码 // str1:字符串 str2:ASCII码 ] })[] == )//判断输入是否为字母 { str2= Encoding.GetEncoding(].ToString( ...
- Python从题目中学习:random() module
最近在给公司培训Python,布置了一道题: ----------------------------------------------------------------------------- ...
- angularjs实现 checkbox全选、反选的思考
之前做了一周的打酱油测试,其实感觉其实测试也是上辈子折翼的天使. 好长时间没写代码,感觉好多都不会了. 感谢这周没有单休,我能看熬夜看奥运了.我能有时间出去看个电影,我能有时间出去逛个商城,我能有时间 ...
- SSL协议(HTTPS) 握手、工作流程详解(双向HTTPS流程)
原文地址:http://www.cnblogs.com/jifeng/archive/2010/11/30/1891779.html SSL协议的工作流程: 服务器认证阶段:1)客户端向服务器发送一个 ...