邓嘉文Jarvan

V1

2022/09/30阅读:30主题:橙心

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

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

项目地址: https://github.com/dengjiawen8955/copy-paste-detector

基础架构
基础架构

快速开始

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/patent/CN106294139B/zh

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

分类:

后端

标签:

后端

作者介绍

邓嘉文Jarvan
V1