コード内で長い年月熟成されたTODOに頭を抱えているRailsエンジニアの方々、お疲れ様です。
これ以上のTODOが生まれないように、CIで検知するためのコード書いたので、参考にどうぞ。
参考
rails/source_annotation_extractor.rb at master · rails/rails https://github.com/rails/rails/blob/master/railties/lib/rails/source_annotation_extractor.rb
コード
Rails 4.2.5 で動作確認してます。
ソースコード見る限り、たぶん Rails 5.0.0.beta1 でも動くと思う。
# Rakefile unless Rails.env.production? require_relative 'lib/tasks/monkey/rails' end # lib/tasks/monkey/rails.rb class SourceAnnotationExtractor class Annotation def self.max_size ENV['SOURCE_ANNOTATION_MAX_SIZE'].to_i end end def self.enumerate(tag, options={}) extractor = new(tag) dirs = options.delete(:dirs) || Annotation.directories results = extractor.find(dirs) extractor.display(results, options) results_size = results.values.flatten.size if results_size > 0 puts "#{tag}: #{results_size}" puts exit 1 if Annotation.max_size < results_size end end end
使い方
% bin/rake notes app/models/user.rb: * [12] [FIXME] Please implement someone a feature. I cannot do it. OPTIMIZE|FIXME|TODO: 1 % echo $? 1
現在の該当行数が表示されるので、頑張って0を目指しましょう。
また、環境変数SOURCE_ANNOTATION_MAX_SIZE
で閾値を調整できるようにしてあります。
新たなTODOが生まれないように(もし生まれても、短期間で直すように)CIに設定しておきましょう。