可以捕获调试器语句的ruby代码质量检查器

时间:2012-03-20 19:45:29

标签: ruby-on-rails ruby code-metrics

我正在寻找一个ruby代码质量检查器,如果像'debugger'语句被意外地提交给ruby代码,它可以捕获或通知。如果它可以查看rails项目并扫描任何可能包含像haml文件这样的ruby代码的地方,那也是理想的选择。

这个想法是,这将使用cruisecontrol.rb和测试覆盖中存在漏洞的代码库运行。

2 个答案:

答案 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脚本和我们的持续集成构建中,以便仔细检查我们是否不会将调试语句留在...