Ruby/Rails 代码静态分析

目的
引入代码静态分析是为了让开发人员可以检查项目的代码,根据 Ruby Guide
、Rails Best Practices
等等code style可以写出更美观,更易读,更高效, 更易维护,更安全的代码。
使用的工具
- RuboCop. View on Github
- Rails Best Practices. View on Github
RuboCop
RuboCop是一款针对ruby代码的静态语法分析
工具,主要是以Ruby Style Guide为参考依据。
Quick start:
$ cd my/cool/ruby/project
$ rubocop
Report
RuboCop 接受Formatters参数,常用参数有:
- Progress Formatter (default)
- Emacs Style Formatter
- File List Formatter
- JSON Formatter
- HTML Formatter
- …
例如:rubocop --format html -o rubocop.html
,就会将输出结果以HTML
的形式输出到rubocop.html文件上。
输出的HTML Report非常清晰直观:
Configuration
RuboCop可以通过读取.rubocop.yml
配置文件来配置参数设置等。并且可以在.rubocop.yml
里继承其他定义好的文件:
inherit_from:
- ../.rubocop.yml
- ../conf/.rubocop.yml
这样就可以非常方便的将一些全局性的,常用的配置放在一个global的配置文件内,具体项目配置文件再继承就可以了。可以理解为global config
与local config
。
Caching
通过在.rubocop.yml
中配置AllCops: UseCache
为true
,可以开启缓存的功能。在针对大型项目的时候非常有用!
当rubocop
运行时被中断后,再次运行将会先从cache
文件中读取缓存好的信息,而不是重新开始读取分析项目文件
。
RuboCop小结
优点:
- 默认提供多种formatters的输出方式。
- 有缓存功能,在针对大型项目时非常有用!
- 拓展容易,可以自己定制Cop和Formatter。
- 可以集成到编辑器上!
缺点:
- 输入的结果列表没有分类,只是简单的排列,不便于查找与管理。
Rails Best Practices
Rails Best Practices是针对Rails Projects
的静态代码质量分析
工具。主要是根据ruby开发人员
在网站上总结出来的众多最佳实现方式
来分析项目的代码。包括方法的定义,使用
、数据查询
、视图渲染
等等。
Quick start
$ cd my/cool/ruby/project
$ rails_best_practices .
常见的建议
Rails Best Practices总结了很多最佳实践,常见的有以下几种类型:
- Move code from Controller to Model
- RESTful Conventions
- Model
- Migration
- Controller
- …
Custom Configuration
首先跑下面这个命令:
rails_best_practices -g
会生出一个rails_best_practices.yml
的配置文件。接着我们就可以在这个文件内制定不同的配置了。
Report
Rails Best Practices 也支持HTML
formatter参数,具体有多少种Formatters不太清楚。
rails_best_practices -f html .
输出的HTML文件:
在这份report上,我们只能看到简单的 Warning Message
,需要通过点击 Warning Message,跳转到Rails Best Practices上查看详细的描述以及原由。
但是有一点好处就是它提供警告类型分类,用户可以通过点击checkbox来选择需要显示的分类。
Rails Best Practices小结
优点:
- 有很多很好的对于Rails项目的建议。
- 使用简单。
缺点:
- 官网上的内容已经很久没有更新了,git repo时有更新。
总结
通过对RuboCop
和Rails Best Practices
的简单了解,我觉得开发人员可以把RuboCop
集成到编辑器或者集成到项目上,这样就可以在开发的过程中避免一下简单的错误,写出符合Ruby Style的代码。而Rails Best Practices
,可以集成到项目里面。在一个合适的项目开发时期(QA期或者维护期),开发人员可以根据Report进行代码优化或者重构,提升项目和代码的维护性、扩展可能性等等。