проверка качества кода ruby, которая может перехватить оператор отладчика - PullRequest
3 голосов
/ 20 марта 2012

Я ищу средство проверки качества кода ruby, которое может перехватить или уведомить, если что-то вроде оператора 'debugger' будет случайно зафиксировано в коде ruby. Также было бы идеально, если бы он мог смотреть в проекте rails и сканировать любые места, которые могут содержать код ruby, например, файл haml.

Идея будет заключаться в том, что это будет выполняться с cruisecontrol.rb и против базы кода, где есть пробелы в тестовом покрытии.

Ответы [ 2 ]

5 голосов
/ 21 марта 2012

Не переусердствуйте! Просто напишите простой скрипт для поиска по каталогу вашего приложения.

Использование командной строки grep:

grep -r --include='*.rb' debugger .

Использование ack:

ack --type=ruby debugger

Использование Ruby's grep:

Dir['**/*.rb'].each do |path|
  File.open(path, 'r') do |file|
    file.grep /debugger/ do
      puts path
    end
  end
end

(Ruby-код с любовью адаптирован из _why's Ношение Ruby Slippers to Work )

Вы также можете рассмотреть поиск в файлах Javascript для "debugger", а также, возможно, "console.log" и т. Д.

Возможно, вы также захотите сделать это более строгим, чтобы уменьшить количество ложных срабатываний, используя что-то вроде /^\s*debugger\s*$/, чтобы сопоставлять его только тогда, когда это единственное в строке. Адаптация этого к работе для HAML, вероятно, требует немного больше: /^\s*[-=]\s*debugger\s*$/.

2 голосов
/ 07 февраля 2013

Отличный ответ @Andrew Mashall. Для нашего проекта рельсов мы используем слегка модифицированную версию:

#!/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 скрипт и в нашу сборку с непрерывной интеграцией, чтобы перепроверить, что мы не оставляем отладочные операторы вокруг ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...