首页 > 其他分享 >golang轻量级的代码复制粘贴检查器 cpd

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

时间:2022-09-30 11:25:28浏览次数:74  
标签:IDLine com cpd golang detector copy paste 轻量级

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

本文由mdnice多平台发布

标签:IDLine,com,cpd,golang,detector,copy,paste,轻量级
From: https://www.cnblogs.com/bmft/p/16744324.html

相关文章

  • Golang map 的底层原理
    前言本文介绍golang中map的实现方式,希望对读者和我有所帮助结构map是go语言中的基础的数据结构,在寻找指定key时,复杂度是O(1),在某些场景能发挥很大的作用......
  • Golang 的锁
    前言go语言的锁,一说大家都知道,一个是互斥锁Mutex,一个是读写互斥锁RWMutex,用起来很简单,但是要想在技术上更进一步,还是需要了解其原理基础知识进程同步既然......
  • Golang 常问知识点(简略)
    前言稍微记录一下问题点吧,文章会不断的优化更新有些比较大的知识点,比如锁原理啥的,会单独拎出来写一篇,这里只是大概Go语言的基础数据类型占用大小类型大小......
  • 抽象工厂模式 Golang
    参考链接练习:设计一个电脑主板架构,电脑包括(显卡,内存,CPU)3个固定的插口,显卡具有显示功能(display,功能实现只要打印出意义即可),内存具有存储功能(storage),cpu具有计算功能(calcul......
  • 【Go学习】golang os/exec 执行外部命令
    exec包执行外部命令,它将os.StartProcess进行包装使得它更容易映射到stdin和stdout,并且利用pipe连接i/o.funcLookPath(filestring)(string,error)//LookPath在环境变量......
  • Golang 中的 WaitGroups 指南
    Golang中的WaitGroups指南这个强大功能的简要说明Photoby谢苗鲍里索夫on不飞溅Goroutines是很好用的工具,但是它们有一个问题。在这篇文章中,我们将调查这个问......
  • Golang Redis有序集合(sorted set)
    Redis有序集合(sortedset)和集合一样也是string类型元素的集合,且不允许重复的成员,不同的是每个元素都会关联一个double类型的分数,这个分数主要用于集合元素排序。引用git......
  • leangoo轻量级看板任务协作管理平台
    ​运营和管理一家公司的最大的难点就是无法掌握和跟踪团队人员的工作内容。看板工具可以很好的解决这个问题。leangoo是由Scrum中文网研发的一款轻量化、敏捷化、数字......
  • golang之Time时间函数
    总结常用time包下的方法1)获取前一天的时间packagemainimport"time"nowTime:=time.Now()yesterdayTime:=nowTime.AddDate(0,0,-1);//年,月,日获取前一......
  • golang 的双向循环链表
                如下为go实现的双向循环列表。packagemainimport("fmt")typeRingstruct{prev,......