Вы все боретесь с правонарушениями RuboCop?
Сегодня я написал простой Ruby скрипт для агрегирования количества правонарушений в .rubocop_todo.yml, поэтому позвольте мне поделиться им в этой статье.
# aggregate_rubocop_todo_offenses.rb
require 'date'
# Aggregate up to 365 days in advance.
365.times do |i|
# Get the 1st commit hash before `i` days.
# The format `%H` means "commit hash". See `git log --help` for more info.
commit_sha = `git log -1 --format='%H' --before=#{i}.day`.rstrip
# Get the .rubocop_todo.yml content at the commit.
rubocop_todo_content = `git show #{commit_sha}:.rubocop_todo.yml`.rstrip
# Get the total count of offenses in the .rubocop_todo.yml.
# The offenses count is described in the form like `# Offense count: 42` per cop.
offenses_count = rubocop_todo_content.scan(/count: (d+)/).flatten.map(&:to_i).sum
# Output date and count in TSV format.
puts [
Date.today - i,
offenses_count
].join("t")
end
Запустите приведенный выше сценарий, и вы увидите следующий результат:
$ ruby aggregate_rubocop_todo_offenses.rb
2022-07-26 164761
2022-07-25 164763
2022-07-24 164764
2022-07-23 165303
2022-07-22 165303
2022-07-21 165296
2022-07-20 165290
...
2021-11-27 193170
В таких случаях удобно вставить данные в Google Spreadsheet для построения графика.
Это безумное количество, но в наше время оно постепенно уменьшается. Хорошо…
На самом деле, я недавно создал рабочий процесс GitHub Action, который автоматически исправляет нарушения и постоянно создает новые запросы, так что количество нарушений постепенно уменьшается только при нажатии кнопки merge, но об этом я расскажу в другой раз.
Если вам интересно, пожалуйста, добавьте свои отклики! 🦄 ✨