以前大家可能都在用 Rubocop,但实际上 Rubocop 没有标准的,并且 Rubycop 默认的规则还特别不受社区待见,比如 Rails,绝大多数项目都会又一个自己的 .rubocop.yml
。
我也是在我的各种项目里面都有单独的 .rubocop.yml
来覆盖默认的 Rubocop 规则,尤其是其中“单引号”规则,及其讨厌。
关于单引号 or 双引号的问题,也有过
Issue 讨论,作者和主要贡献者认为此项依然有争议,于是问题搁置的。
实际上从 统计情况 来看,社区的著名项目几乎(也包括各种热门 Gem 比如:Devise、Doorkeeper、CarrierWave 以及 Rails)他们都在使用双引号。
于是有人认为我们可能需要一套标准了。
Standard Ruby 1.0
https://blog.testdouble.com/posts/2021-03-04-announcing-standard-ruby-1.0/
Matz 还亲自发帖推荐
https://twitter.com/yukihiro_matz/status/1367646746650628098
项目地址
https://github.com/testdouble/standard
重点特性
不需要配置,以后都是统一的标准。
- 2 spaces – for indentation
- Double quotes for string literals - because pre-committing to whether you'll need interpolation in a string slows people down
- 1.9 hash syntax - When all the keys in a hash literal are symbols, Standard enforces Ruby 1.9's {hash: syntax}
- Braces for single-line blocks - Require {/} for one-line blocks, but allow either braces or do/end for multiline blocks. Like using do/end for multiline blocks? Prefer {/} when chaining? A fan of expressing intent with Jim Weirich's semantic block approach? Standard lets you do you!
- Leading dots on multi-line method chains - chosen for these reasons.
- Spaces inside blocks, but not hash literals - In Ruby, the { and } characters do a lot of heavy lifting. To visually distinguish hash literals from blocks, Standard enforces that (like arrays), no leading or trailing spaces be added to pad hashes
And a good deal more
效果演示
我用 Homeland 试了一下,下面是一些特别变化的地方:
- render json: { ok: 1 }
+ render json: {ok: 1}
{}
在 Hash 的时候,将会去掉左右的空格,这个场景,可能我需要一段时间适应,我们在 Go 里面也是左右带空格的,它这么定义估计是保持和 []
、()
一致。
- scope :popular, -> {where("likes_count > 5")}
+ scope :popular, -> { where("likes_count > 5") }
{}
在 Block 的场景,左右空格依然还保留的。