我正在寻找一个ruby代码质量检查器,如果像'debugger'语句被意外地提交给ruby代码,它可以捕获或通知。如果它可以查看rails项目并扫描任何可能包含像haml文件这样的ruby代码的地方,那也是理想的选择。
这个想法是,这将使用cruisecontrol.rb和测试覆盖中存在漏洞的代码库运行。
答案 0 :(得分:5)
不要过度思考!只需编写一个简单的脚本即可在您的应用程序目录中搜索它。
使用命令行grep
:
grep -r --include='*.rb' debugger .
使用ack
:
ack --type=ruby debugger
使用Ruby的grep
:
Dir['**/*.rb'].each do |path|
File.open(path, 'r') do |file|
file.grep /debugger/ do
puts path
end
end
end
(Ruby代码精心改编自_why的Wearing Ruby Slippers to Work)
您可能还想考虑搜索"debugger"
的Javascript文件,也可能"console.log"
等。
您可能还希望通过使用类似/^\s*debugger\s*$/
之类的东西来减少误报,以便仅在线路上的唯一内容时匹配它。使其适用于HAML可能需要更多:/^\s*[-=]\s*debugger\s*$/
。
答案 1 :(得分:2)
@Andrew Mashall的精彩回答。对于我们的rails项目,我们使用稍加修改的版本:
#!/usr/bin/env ruby
expressions = [/^\s*binding\.pry/, /^\s*debugger/, /^\s*console\.log/, /^\s*save_and_open_page/]
debuggers = []
dirs = `git ls-files |grep '\\(rb\\|haml\\|rake\\|js\\|coffee\\)$'`.split
dirs.each do |path|
File.open(path, 'r') do |file|
contents = file.read
expressions.each do |expr|
contents.match expr do
debuggers << path
end
end
end
end
raise "debugger statements found in #{debuggers.to_s}" unless debuggers.empty?
我们还将其添加到我们的.git/hooks/pre-commit
脚本和我们的持续集成构建中,以便仔细检查我们是否不会将调试语句留在...