golang轻量级的代码复制粘贴检查器 cpd

golang轻量级的代码复制粘贴检查器 cpd

项目地址: https://github.com/dengjiawen...

golang轻量级的代码复制粘贴检查器 cpd_第1张图片

快速开始

clone

git clone https://github.com/dengjiawen8955/copy-paste-detector.git
cd copy-paste-detector

配置文件 vim cpd.toml

minRepeatLine = 4  # 最小重复行
parseFolder   = "out"   # 解析的文件夹路径
Ignore        = [] # 过滤的正则表达式
Contain       = [] # 匹配的正则表达式文件, 优先级高于 Ignore

编译

go build copy-paste-detector .

可选: 指定配置文件

$ ./copy-paste-detector -h
Usage of ./copy-paste-detector:
      --config string   config file (default "cpd.toml")
pflag: help requested

run

$ ./copy-paste-detector 
+------+------+--------------+
| 片段 | 序号 | 文件名:行数  |
+------+------+--------------+
|    1 |    1 | out1.txt:2-5 |
|    1 |    2 | out2.txt:6-9 |
+------+------+--------------+
b
c
d
3

实现思路

  • Parser 主要返回 map[string][]IDLine 重复的 IDLine 可以通过 IDLine 查询到确定的文件和确定的行
  • Detector 主要返回 BlockMatrix [][]*Block{Start, End} 重复代码块, 遍历链表, 通过重复 map 的 IDLine 获取重复代码块

优化思路

重复代码检测专利: https://patents.google.com/pa...

参考 jscpd: https://github.com/kucherenko...

本文由mdnice多平台发布

你可能感兴趣的:(后端)