如何计算代码行?

AnA*_*ice 53 ruby ruby-on-rails ruby-on-rails-3

我试过,rake stats但这似乎非常不准确.也许它会忽略几个目录?

Phr*_*ogz 103

我使用免费的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
-------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

  • `brew install cloc` (45认同)
  • 它似乎不支持`erb`视图文件.`cloc app/views`:100个文本文件.96个独特的文件.忽略了100个文件.**更新:`cloc app/views --force-lang = html,erb`** (4认同)
  • 用于linux的`apt-get install cloc` (3认同)

Ami*_*ana 32

这是一个简单的解决方案.它计算rails项目的app文件夹中的代码行 - CSS,Ruby,CoffeeScript等.在项目的根目录下,运行以下命令:

find ./app -type f | xargs cat | wc -l
Run Code Online (Sandbox Code Playgroud)

  • 我真的不确定为什么会这么多.它只是计算文件行,包括来自任何源代码,配置文件,日志文件,二进制文件的空白行和注释,以便大声喊叫.这与**非常不同,可以通过任何可能的定义构成一行代码.在我目前的rails项目中,这会报告35K行,而不是来自cloc的更准确的19K行. (8认同)
  • Neat:添加了这个:"find ./app -type f -name\*.rb | xargs cat | wc -l"来计算ruby代码 (3认同)
  • 如果你不关心你正在计算的行的语义,那么比cloc快几个数量级 (2认同)

zen*_*ngr 16

您可以尝试以下两个选项:

  1. 破解rake统计数据

来自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"
Run Code Online (Sandbox Code Playgroud)
  1. metric_fu - 用于轻松度量报告生成的Ruby Gem

PS:我没有尝试过上述任何一种,但metric_fu听起来很有趣,请参阅输出的截图.


use*_*029 12

这个计算文件数,代码总数,注释和每个文件的平均LOC.它还会在名称中包含"vendor"的目录中排除文件.

用法:

count_lines('rb')
Run Code Online (Sandbox Code Playgroud)

码:

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
Run Code Online (Sandbox Code Playgroud)

  • 这很简单,很漂亮 (2认同)