用于检查应用程序中有多少行代码的Ruby脚本

时间:2011-06-30 17:23:16

标签: ruby

如何编写像get_lines.rb file_name.rb这样的ruby脚本,它返回通过文件夹>递归的应用程序中的代码总数/行数。文件夹>如app / modes,app / controllers等...所有文件!

3 个答案:

答案 0 :(得分:2)

http://www.ruby-doc.org/stdlib/libdoc/find/rdoc/classes/Find.html

实现类似find

之类的模块

页面上的示例给出了获取目录中所有文件大小的示例。将它改为计算总线数应该是非常简单的。

我建议不要在红宝石中这样做,除非你也有...

wc -l `find /path/to/dir -type f` | tail -1

答案 1 :(得分:1)

通常我不会 - 我会使用shell实用程序。严重。

另外,您想要添加评论吗?等等。

对此有一个非常好的答案,而不是在这里使用Ruby:How to count all the lines of code in a directory recursively?

如果我接近这个目的是为了实际做到这一点,我会这样做:

Dir['**/*.*'].each do |fname|
  puts "#{fname} #{linecount(fname)}"
end

Linecount就像是

def linecount(fname)
  File.open(fname, "r") do |f|
    return f.readlines.length
  end
end

顺便说一句,这是一个讨厌的黑客行为,因为它只是为了查看数组的长度而将整个文件读入内存,你可能想要获取每一行并在阅读时计算它们。

只有通过递增计数器,你才能摆脱只有评论的空白或行。

这样的东西
lines = f.readlines
lines.delete_if { |l| l =~ /^[[:space:]]*#|^$/ }
return lines.length

顺便说一下,我没有测试过regexp。

作为读者的练习 - 弄清楚你需要在句号结束时使用'if'语句来阻止它在目录上bar:D

答案 2 :(得分:1)

@Ghoti,我会将此添加为您的评论,但没有足够的状态。

使用File.file?和File ::目录?将有助于区分这两者,以便您知道是否需要深入挖掘目录或读取文件。