Logo

Ruby/Rails 代码静态分析

avatar dino 27 Sep 2016

目的

引入代码静态分析是为了让开发人员可以检查项目的代码,根据 Ruby GuideRails Best Practices 等等code style可以写出更美观,更易读,更高效, 更易维护,更安全的代码。

使用的工具

  1. RuboCop. View on Github
  2. 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非常清晰直观:
RuboCop Report

Configuration

RuboCop可以通过读取.rubocop.yml配置文件来配置参数设置等。并且可以在.rubocop.yml里继承其他定义好的文件:

inherit_from:
  - ../.rubocop.yml
  - ../conf/.rubocop.yml

这样就可以非常方便的将一些全局性的,常用的配置放在一个global的配置文件内,具体项目配置文件再继承就可以了。可以理解为global configlocal config

Caching

通过在.rubocop.yml中配置AllCops: UseCachetrue,可以开启缓存的功能。在针对大型项目的时候非常有用!
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 也支持HTMLformatter参数,具体有多少种Formatters不太清楚。

rails_best_practices -f html .

输出的HTML文件:

Rails Best Practices Report

在这份report上,我们只能看到简单的 Warning Message,需要通过点击 Warning Message,跳转到Rails Best Practices上查看详细的描述以及原由。
但是有一点好处就是它提供警告类型分类,用户可以通过点击checkbox来选择需要显示的分类。

Rails Best Practices小结

优点:

  • 有很多很好的对于Rails项目的建议。
  • 使用简单。

缺点:

  • 官网上的内容已经很久没有更新了,git repo时有更新。

总结

通过对RuboCopRails Best Practices的简单了解,我觉得开发人员可以把RuboCop集成到编辑器或者集成到项目上,这样就可以在开发的过程中避免一下简单的错误,写出符合Ruby Style的代码。而Rails Best Practices,可以集成到项目里面。在一个合适的项目开发时期(QA期或者维护期),开发人员可以根据Report进行代码优化或者重构,提升项目和代码的维护性、扩展可能性等等。

Tags
rails
ruby
Code Analyzer
RuboCop
Rails Best Practices
联系我们