如何计算代码行?

时间:2010-10-17 19:25:35

标签: ruby-on-rails ruby ruby-on-rails-3

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

5 个答案:

答案 0 :(得分:101)

我使用免费的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
-------------------------------------------------------------------------------

答案 1 :(得分:31)

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

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

答案 2 :(得分:16)

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

  1. Hack rake stats
  2. 来自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
    2. PS:我没有尝试过上述任何一项,但是metric_fu听起来很有意思,请参阅输出截图。

答案 3 :(得分:11)

此文件计算文件数,代码总数,注释数和每个文件的平均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

答案 4 :(得分:0)

如果您的代码托管在 GitHub 上,您可以使用这个行数网站。只需输入您的 GitHub URL 并等待结果。

Postgres 示例:https://line-count.herokuapp.com/postgres/postgres

File Type   Files   Lines of Code   Total lines
Text        1336    0               472106
C           1325    1069379         1351222
Perl        182     23917           32443
Shell       5       355             533
...