rails/tools/line_statistics

43 lines
1.1 KiB
Plaintext

# Class used to calculate LOC for a provided file list.
#
# Example:
# files = FileList["lib/active_record/**/*.rb"]
# CodeTools::LineStatistics.new(files).print_loc
module CodeTools
class LineStatistics
# @param files [Array, FileList, Enumerable]
# e.g. FileList["lib/active_record/**/*.rb"]
def initialize(files)
@files = Array(files).compact
end
# Calculates LOC for each file
# Outputs each file and a total LOC
def print_loc
lines, codelines, total_lines, total_codelines = 0, 0, 0, 0
@files.each do |file_name|
next if file_name =~ /vendor/
File.open(file_name, 'r') do |f|
while line = f.gets
lines += 1
next if line =~ /^\s*$/
next if line =~ /^\s*#/
codelines += 1
end
end
puts "L: #{sprintf("%4d", lines)}, LOC #{sprintf("%4d", codelines)} | #{file_name}"
total_lines += lines
total_codelines += codelines
lines, codelines = 0, 0
end
puts "Total: Lines #{total_lines}, LOC #{total_codelines}"
end
end
end