Linux | 代码统计工具SLOCCount

2 篇文章 0 订阅
1 篇文章 0 订阅

SLOCCount

Linux/Unix下统计代码行数工具
SLOC means “Source Lines of Code”

Ubuntu14.04下安装

终端下键入命令:
sudo apt-get install sloccount

使用

主要参数

sloccount [–version] [–cached] [–append] [ –datadir directory ]
[–follow] [–duplicates] [–crossdups] [–autogen] [–multiproject]
[–filecount] [–wide] [–details] [ –effort F E ] [ –schedule F E ] [
–personcost cost ] [ –overhead overhead ] [ –addlang language ] [
–addlangall ] [–] directories

–cached

跳过计算过程,直接使用上次结果

–multiproject

如果该文件夹包括一系列的子文件夹,而它们中的每一个都是相对独立开发的不同的项目,那么使用”–multiproject”选项,评估将会正确的考虑到这一点。

–filecount

显示文件数目而非代码行数

–details

显示每个源文件的详细信息

–duplicates

算上所有重复的(默认情况下如果文件有相同的内容,则只算一个)

–crossdups

如果顶目录包含几个不同的项目,并且你想把不同的项目下重复的文件在每个项目中都算上一次,则使用该选项。

支持语言

Ada (.ada, .ads, .adb)
Assembly (.s, .S, .asm)
awk (.awk)
Bourne shell and variants (.sh)
C (.c)
C++ (.C, .cpp, .cxx, .cc)
C shell (.csh)
COBOL (.cob, .cbl) as of version 2.10
C# (.cs) as of version 2.11
Expect (.exp)
Fortran (.f)
Haskell (.hs) as of version 2.11
Java (.java)
lex/flex (.l)
LISP/Scheme (.el, .scm, .lsp, .jl)
Makefile (makefile) - not normally shown.
Modula-3 (.m3, .i3) as of version 2.07
Objective-C (.m)
Pascal (.p, .pas)
Perl (.pl, .pm, .perl)
PHP (.php, .php[3456], .inc) as of version 2.05
Python (.py)
Ruby (.rb) as of version 2.09
sed (.sed)
SQL (.sql) - not normally shown.
TCL (.tcl, .tk, .itk)
Yacc/Bison (.y)

转换成html文件

官网上给出了sloc2html.py 源文件,但有几处小bug。

下面是修正后的文件,并添加了部分注释。
若文件名带空格,会报错。

#!/usr/bin/env python
# Written by Rasmus Toftdahl Olesen <rto@pohldata.dk>
# Modified slightly by David A. Wheeler
# Released under the GNU General Public License v. 2 or higher
from string import *
import sys

NAME = "sloc2html"
VERSION = "0.0.2"

# use sys.argv to attain argument of system.
# sys.argv[0] means the path of this code.
if len(sys.argv) != 2:
    print "Usage:"
    print "\t" + sys.argv[0] + " <sloc output file>"
    print "\nThe output of sloccount should be with --wide and --multiproject formatting"
    sys.exit()

# dict()
colors = { "python" : "blue",
           "ansic" : "yellow",
           "perl" : "purple",
           "cpp" : "green",
           "sh" : "red",
           "yacc" : "brown",
           "lex" : "silver",
           # Feel free to make more specific colors.
           "ruby" : "maroon",
           "cs" : "gray",
           "java" : "navy",
           "ada" : "olive",
           "lisp" : "fuchsia",
           "objc" : "purple",
           "fortran" : "purple",
           "cobol" : "purple",
           "pascal" : "purple",
           "asm" : "purple",
           "csh" : "purple",
           "tcl" : "purple",
           "exp" : "purple",
           "awk" : "purple",
           "sed" : "purple",
           "makefile" : "purple",
           "sql" : "purple",
           "php" : "purple",
           "modula3" : "purple",
           "ml" : "purple",
           "haskell" : "purple"
          }




print "<html>"
print "<head>"
print "<title>Counted Source Lines of Code (SLOC)</title>"
print "</head>"
print "<body>"
print "<h1>Counted Source Lines of Code</h1>"

# open result.txt
file = open ( sys.argv[1], "r" )

print "<h2>Projects</h2>"
line = ""
# read one line and move to next line until find out the string
while line != "SLOC\tDirectory\tSLOC-by-Language (Sorted)\n":
    line = file.readline()

print "<table>"
print "<tr><th>Lines</th><th>Project</th><th>Language distribution</th></tr>"
line = file.readline()
while line != "\n":
    num, project, langs = split ( line )
    print "<tr><td>" + num + "</td><td>" + project + "</td><td>"
    print "<table width=\"500\"><tr>"
    for lang in split ( langs, "," ):
        if langs == '(none)' or lang =='(none)':
            break
        l, n = split ( lang, "=" )
        print "<td bgcolor=\"" + colors[l] + "\" width=\"" + str( float(n) / float(num) * 500 ) + "\">" + l + "=" + n + "&nbsp;(" + str(int(float(n) / float(num) * 100)) + "%)</td>"
    print "</tr></table>"
    print "</td></tr>"
    line = file.readline()
print "</table>"

print "<h2>Languages</h2>"
while line != "Totals grouped by language (dominant language first):\n":
    line = file.readline()

print "<table>"
print "<tr><th>Language</th><th>Lines</th></tr>"
line = file.readline()
while line != "\n":
    lang, lines, per = split ( line )
    lang = lang[:-1]    # exclude the last character
    print "<tr><td bgcolor=\"" + colors[lang] + "\">" + lang + "</td><td>" + lines + " " + per + "</td></tr>"
    line = file.readline()
print "</table>"

print "<h2>Totals</h2>"
while line == "\n":
    line = file.readline()

print "<table>"
print "<tr><td>Total Physical Lines of Code (SLOC):</td><td>" + strip(split(line,"=")[1]) + "</td></tr>"
line = file.readline()
print "<tr><td>Estimated development effort:</td><td>" + strip(split(line,"=")[1]) + " person-years (person-months)</td></tr>"
line = file.readline()
line = file.readline()
print "<tr><td>Schedule estimate:</td><td>" + strip(split(line,"=")[1]) + " years (months)</td></tr>"
line = file.readline()
line = file.readline()
print "<tr><td>Total estimated cost to develop:</td><td>" + strip(split(line,"=")[1]) + "</td></tr>"
print "</table>"

file.close()

print "Please credit this data as \"generated using 'SLOCCount' by David A. Wheeler.\"\n"
print "</body>"
print "</html>"

html格式呈现

把生成的结果转换为带图形统计结果的html文件。 缺点是对中文支持不好。
具体操作:
1. 将上述代码保存为sloc2html.py文件,放在需要统计的工程目录下
2. 在终端进入需要统计的工程目录,键入以下命令:
sloccount --wide --multiproject . > result.txt
将统计结果保存至result.txt文件中
3. 将文本结果转化为html文件:
python sloc2html.py reslut.txt > result.html
4. 用浏览器打开
这里写图片描述

参考

【Linux】代码统计工具sloccount

官网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值