如何计算代码行数?

我试图rake stats但似乎很不准确。 也许它忽略了几个目录?

你可以试试这两个选项:

  1. 黑客耙统计

从blogpost的rakestats片段:

 namespace :spec do desc "Add files that DHH doesn't consider to be 'code' to stats" task :statsetup do require 'code_statistics' class CodeStatistics alias calculate_statistics_orig calculate_statistics def calculate_statistics @pairs.inject({}) do |stats, pair| if 3 == pair.size stats[pair.first] = calculate_directory_statistics(pair[1], pair[2]); stats else stats[pair.first] = calculate_directory_statistics(pair.last); stats end end end end ::STATS_DIRECTORIES << ['Views', 'app/views', /\.(rhtml|erb|rb)$/] ::STATS_DIRECTORIES << ['Test Fixtures', 'test/fixtures', /\.yml$/] ::STATS_DIRECTORIES << ['Email Fixtures', 'test/fixtures', /\.txt$/] # note, I renamed all my rails-generated email fixtures to add .txt ::STATS_DIRECTORIES << ['Static HTML', 'public', /\.html$/] ::STATS_DIRECTORIES << ['Static CSS', 'public', /\.css$/] # ::STATS_DIRECTORIES << ['Static JS', 'public', /\.js$/] # prototype is ~5384 LOC all by itself - very hard to filter out ::CodeStatistics::TEST_TYPES << "Test Fixtures" ::CodeStatistics::TEST_TYPES << "Email Fixtures" end end task :stats => "spec:statsetup" 
  1. metric_fu – 用于简单度量标准报告生成的Ruby Gem

PS:我没有尝试过上面的任何一个,但metric_fu听起来很有趣,请参阅输出的屏幕截图。

我使用免费的Perl脚本cloc 。 示例用法:

 phrogz$ cloc . 180 text files. 180 unique files. 77 files ignored. http://cloc.sourceforge.net v 1.56 T=1.0 s (104.0 files/s, 19619.0 lines/s) ------------------------------------------------------------------------------- Language files blank comment code ------------------------------------------------------------------------------- Javascript 29 1774 1338 10456 Ruby 61 577 185 4055 CSS 10 118 133 783 HTML 1 13 3 140 DOS Batch 2 6 0 19 Bourne Shell 1 4 0 15 ------------------------------------------------------------------------------- SUM: 104 2492 1659 15468 ------------------------------------------------------------------------------- 

这是一个简单的解决scheme。 它计数您的rails项目的应用程序文件夹中的代码行 – CSS,Ruby,CoffeeScript等等。 在项目的根目录下,运行以下命令:

 find ./app -type f | xargs cat | wc -l 

这个计算文件的数量,代码的总行数,注释和每个文件的平均LOC。 它也不包括名称中带有“vendor”的目录中的文件。

用法:

 count_lines('rb') 

码:

 def count_lines(ext) o = 0 # Number of files n = 0 # Number of lines of code m = 0 # Number of lines of comments files = Dir.glob('./**/*.' + ext) files.each do |f| next if f.index('vendor') next if FileTest.directory?(f) o += 1 i = 0 File.new(f).each_line do |line| if line.strip[0] == '#' m += 1 next end i += 1 end n += i end puts "#{o.to_s} files." puts "#{n.to_s} lines of code." puts "#{(n.to_f/o.to_f).round(2)} LOC/file." puts "#{m.to_s} lines of comments." end