Суммарное количество нарушений RuboCop ToDo

Вы все боретесь с правонарушениями 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, но об этом я расскажу в другой раз.

Если вам интересно, пожалуйста, добавьте свои отклики! 🦄 ✨

Оцените статью
devanswers.ru
Добавить комментарий