すがブロ

sugamasaoのhatenablogだよ

プログラム数カウントしちゃうよ

なんか作りたくなったので作ってみた

ruby のスクリプトの空行とコメントと実際の行数を計算する。
複数行のコメント分(begin 〜 end)だとうまく計算できないけれど、あまりコメント形式として使われないから良いよね^^

base = '/tmp'
ext = '.rb'


result = []
Dir.glob("#{base}*/**").each do |dir|
  next if File.directory?(dir) or File.extname(dir) !~ /#{ext}$/

  comment = 0
  blank_line = 0
  src_line = 0
  File.open(dir).readlines.each do |line|
    line.strip!
    if line =~ /^#/
      comment = comment + 1
    elsif line.empty?
      blank_line = blank_line + 1
    else
      src_line = src_line + 1
    end
  end
  result << {
      :file => dir,
      :comment => comment,
      :blank_line => blank_line,
      :src_line => src_line,
      :total_line => comment + blank_line + src_line,
  }
end

puts "filename, comment, blank_line, src_line, total_line"
result.each do |res|
  puts "#{File.basename(res[:file])},#{res[:comment]}, #{res[:blank_line]}, #{res[:src_line]}, #{res[:total_line]}"
end

TODO(気が向いたら)

  • 拡張子と調査対象のベースディレクトリを引数で指定する
    • ベースディレクトリを引数で受け取るなら、最後にスラッシュがこないように除去するプログラムも必要かな
  • 出力時の形式をカンマ区切り以外でもできるように