运行一个脚本,看看你的项目的代码质量吧

2017-09-20 18:18:45 +08:00
 xcatliu

代码质量有很多指标:

  1. 源代码行数
  2. 代码重复率
  3. 圈复杂度
  4. 报错量( Bug 数)占比
  5. 测试覆盖率
  6. 开发约束(代码块行数等)

我做了一个脚本可以测出上面的 1, 2, 3

大家都来试一试吧!

Installation

npm install -g cqc

Usage

cqc [options] <pattern ...>

Examples:

cqc src/**/*.js

Output:

Number of files:            8
Souce lines of code:        357
Duplicate rate:             5.62%
Max complexity:             15
Complexity > 5  (count):    3
Complexity > 10 (count):    1
Complexity > 20 (count):    0

Multiple patterns

cqc src/**/*.js src/**/*.jsx

--ignore-pattern

cqc src/**/*.js --ignore-pattern src/vendor/**/*.js
cqc src/**/*.js --ignore-pattern src/vendor/**/*.js,src/third-party/**/*.js

--ignore-file

cqc src/**/*.js --ignore-file .gitignore
cqc src/**/*.js --ignore-file .gitignore,.eslintignore

--format

cqc src/**/*.js --format json

Output:

{
    "numberOfFiles": 8,
    "sloc": {
        "source": 357
    },
    "jscpd": {
        "percentage": "5.62"
    },
    "complexity": {
        "max": 15,
        "gt5Count": 3,
        "gt10Count": 1,
        "gt20Count": 0
    }
}
15193 次点击
所在节点    程序员
86 条回复
xcatliu
2017-09-20 18:25:45 +08:00
先来贴一个我们团队的项目的:

Number of files: 997
Souce lines of code: 94524
Duplicate rate: 12.17%
Max complexity: 89
Complexity > 5 (count): 292
Complexity > 10 (count): 76
Complexity > 20 (count): 17

重复代码率有点高,一般在 5% 以内比较正常。
最大圈复杂度有点太大了。。。
iluhcm
2017-09-20 18:50:16 +08:00
试了一下,Mac 运行报错。

env: node\r: No such file or directory

Node:v8.1.3
xcatliu
2017-09-20 19:02:41 +08:00
@iluhcm 感谢反馈,已修复,是换行符的问题。
可以安装新版本试试啦
npm i cqc@0.1.2 -g
siteshen
2017-09-20 19:10:35 +08:00
看标题还以为支持所有语言,结果打开 GitHub 才发现只支持前端的内容。

发在“程序员”节点,希望标题里有“前端”、“ Javascript ” 之类的字样。
xcatliu
2017-09-20 19:13:20 +08:00
@siteshen 因为 complexity 是用 eslint 实现的,所以暂不支持其他语言的 complexity。重复度检查是给予 jscpd 的,所以支持很多语言。
spring5413
2017-09-20 19:31:47 +08:00
请问大神,这个检查重复原理是什么
vardarling
2017-09-20 19:46:33 +08:00
"Souce lines of code" bug +1 😆
xcatliu
2017-09-20 19:51:04 +08:00
@vardarling lines of source code 😂
xcatliu
2017-09-20 19:55:41 +08:00
@vardarling 第一次还没看出来,原来是少了个 r 😂
xcatliu
2017-09-20 20:02:36 +08:00
@vardarling 已修复,谢谢反馈 😀
xcatliu
2017-09-20 20:04:12 +08:00
@spring5413 是基于 jscpd 的,原理应该就是静态的分析两个文件有没有连续的重复行,超过五行即视为代码有重复。
https://github.com/kucherenko/jscpd
vardarling
2017-09-20 20:06:15 +08:00
@xcatliu 第一次发现我眼睛这么好😂
zhlssg
2017-09-20 20:53:02 +08:00
这个有点厉害
mhycy
2017-09-20 22:05:49 +08:00
“您的代码质量分已超过 90%程序员,点击按钮一键优化”
xcatliu
2017-09-20 22:22:20 +08:00
@mhycy 这个可以😂
AlloVince
2017-09-20 22:23:50 +08:00
Number of files: 342
Source lines of code: 38967
Duplicate rate: 3.29%
Max complexity: 27
Complexity > 5 (count): 73
Complexity > 10 (count): 18
Complexity > 20 (count): 2
xcatliu
2017-09-20 22:53:12 +08:00
@AlloVince 很健康的数据啊
AlloVince
2017-09-20 22:56:40 +08:00
@xcatliu 不知道源代码里一些 ES 的语法是怎么处理的,扫描的源码里使用了 decorators,object rest spread 等一些需要 babel 的语法
binux
2017-09-20 23:12:50 +08:00
Number of files: 95
Source lines of code: 6233
Duplicate rate: 0.19%
Max complexity: 45
Complexity > 5 (count): 18
Complexity > 10 (count): 6
Complexity > 20 (count): 3
momocraft
2017-09-20 23:17:00 +08:00
cqc... 这名字怎么这么谐

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/392337

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX