2012-03-20 65 views
3

我正在尋找一個ruby代碼質量檢查器,可以捕獲或通知如果像'調試器'語句的東西被意外提交到紅寶石代碼。如果它可以查看rails項目並掃描任何可能包含ruby代碼(如haml文件)的地方,它也將是理想的。ruby​​代碼質量檢查器,可以捕獲調試器語句

這個想法是,這將與cruisecontrol.rb運行,並針對測試覆蓋漏洞的代碼庫。

回答

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精心改編)

您也可能要考慮搜索過的Javascript文件"debugger",以及,可能"console.log"

您可能還希望使這一更加嚴格使用類似/^\s*debugger\s*$/只匹配以減少誤報當它是唯一的行時。使其適用於HAML可能需要更多:/^\s*[-=]\s*debugger\s*$/

+0

謝謝,這將會訣竅。 – Vince 2012-03-20 22:23:24

+1

如果OP使用Git,這可以很好地作爲預提交鉤子。 – zetetic 2012-03-20 22:26:09

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腳本,我們的持續集成構建仔細檢查,我們不亂放調試語句...