我们有一些代码在生产中咬了我们,我想知道是否有一种方法可以在未来防止它。我们正在使用Ruby和rubocop,但我可以找到一个警察,以满足我的需要。
代码如下所示:
a = 1
b = 1
return ((a == 1) || (b = 2)) # should return a boolean, false in this case
第3行是我们遇到问题的地方,我们在计算布尔值时遗漏了一个等号(所以它是一个单等号而不是双等号)。
在ruby或rubocop中,有没有现成的东西可以用来捕捉这个错误?
谢谢
2条答案
按热度按时间j1dl9f461#
这些被视为赋值,它不能确保和确认用户正在提供赋值或他正在验证相等性。
我遇到过类似的事情(不同的用例),我通过创建自定义COP扩展实现。
这不是一个值得赞赏的方式来覆盖现有的功能,但无论如何,你可以通过创建自己的扩展来定义自定义的警察来实现这一点。
例如你可以创建一个新的ruby-rubocop文件,如assignment_mistake_correction_cop. rb,你可以在这个文件中进行必要的修改。
在yaml文件中,可以包括如下文件
. rubocop. yml
require:'./assignment_error_correction_cop. rb'
作为assignment_mistake_correction_cop文件的示例更改,检查下面的代码,我已经实现了一些其他用例,此代码将根据您的要求进行更新。
注意:这是一个我根据你的用例修改的示例代码。
更多的参考资料,也许你可以看看rubocop/cop/corrector.rb文件。
这里,校正器类负责应用修正(即,自动校正修正)。
tyky79it2#
有一个cop Lint/AssignmentInCondition。如果你写了:
那么它会报告:
但是由于表达式已经被 Package 在(不必要的)括号中,RuboCop忽略了这一点。