
开发工具代码质量静态分析【免费下载链接】jscpdCopy/paste detector for source code. 220 languages, Rust engine, SARIF/HTML/badge reporters, GitHub Action, MCP server for AI agents.项目地址https://gitcode.com/gh_mirrors/js/jscpd点击查看免费下载jscpd 仓库的benchmark/目录内置了一套完整的跨工具基准测试体系用于在同一份多语言语料fixtures/上对比 jscpd v5Rust 引擎与 jscpd-rs、Fallow、PMD CPD、Duplo、Simian 等主流复制粘贴检测器的检测速度、查全查准与输出格式。本文以 benchmark/tools/README.md 为骨架完整讲解这六个工具的本地安装步骤、二进制路径、验证方式与调用方式并结合 benchmark/benchmark.sh 的源码与 benchmark/BENCHMARK.md 的实测结果帮助你在一台干净的机器上快速复现整套 CPD 基准测试。目录定位benchmark/tools 在基准测试中的角色benchmark/tools/目录存放的是基准测试脚本所需的所有第三方工具它不是 jscpd 的运行时依赖而是对比实验的对照组。整个基准测试的入口在父目录的benchmark.sh脚本首先按本指南安装tools/下的全部工具然后在父目录执行./benchmark.sh脚本会遍历fixtures/语料库依次运行六个检测器把耗时、文件数、克隆数、重复行数写入benchmark/results/benchmark-data.tsv并生成 Markdown 报告benchmark/results/benchmark-report.md。因此本目录的安装质量直接决定基准结果是否可复现。值得一提的是六个工具中只有两个通过 npm 分发jscpd-rs 与 Fallow其余四个jscpd5 本地构建、PMD CPD、Duplo、Simian需要单独准备。快速安装一条命令装好两个 npm 工具对于通过 npm 分发的两个工具安装极为简单cd tools/ npm installtools/package.json中的依赖声明benchmark/tools/package.json如下{ dependencies: { fallow: ^2.96.0, jscpd-rs: ^0.1.12 } }npm 包版本范围安装后命令jscpd-rs^0.1.12node_modules/.bin/jscpd-rsfallow^2.96.0node_modules/.bin/fallownpm install会下载两个包各自内置的预编译 Rust 二进制针对当前平台因此不需要本机安装 Rust 工具链。剩下的四个工具必须手动安装下面逐一说明。逐个工具安装指南jscpd5从仓库rust/目录本地构建jscpd v5 是纯 Rust 实现的复制粘贴检测器二进制直接由本仓库的rust/工作区编译而来。安装命令cd ../../rust/ cargo build --release构建完成后二进制位于../../rust/target/release/jscpd从tools/目录出发即仓库根的rust/target/release/jscpd。从源码结构看该二进制由rust/Cargo.toml声明的多 crate 工作区组成rust/Cargo.tomlcpd-core负责 Rabin-Karp 滚动哈希检测算法cpd-tokenizer负责 224 种语言格式的 token 化cpd-finder负责文件遍历与编排cpd-reporter负责 15 种报告格式输出cpd-semantic提供语义克隆能力详见 rust/README.md。这也解释了为什么 jscpd5 的检测是基于 token 的分段感知它能把.vue、.svelte、.astro等组件文件解析成模板、脚本、样式多个语言段分别匹配。前提本机需要安装 Rust 1.96rust/Cargo.toml中声明的 MSRV开发环境使用rust-toolchain.toml固定的精确工具链版本。jscpd-rsnpm 预编译 Rust 二进制jscpd-rs是独立于本仓库的 npm 包随npm install自动安装到tools/node_modules/。它下载的是自己发布的预编译 Rust 二进制其检测算法与配置默认值可能与仓库本地构建的 jscpd5 略有差异——这正是基准测试要对比的点。安装后调用路径node_modules/.bin/jscpd-rs在 benchmark/BENCHMARK.md 的实测中jscpd-rsnpm v0.1.12在相同语料上报告 222 个克隆、10,317 行重复略多于本地构建的 jscpd5212 个克隆、9,133 行差异被归因于 npm 包默认配置或算法版本不同。Fallow dupesRust 代码情报工具的结构克隆检测Fallow 同样通过npm install安装是一个基于 Rust 的代码情报工具其dupes子命令专门对 TypeScript/JavaScript 项目执行结构克隆检测。安装后二进制路径node_modules/.bin/fallow关键注意点README 特别强调Fallow 不支持路径参数必须从目标目录内部运行。因此基准脚本在调用前会先cd进入 fixtures 目录见下文调用细节。同时它只分析 TS/JS 文件在 547 个文件的语料中仅覆盖 34 个文件不适合多语言代码库。PMD CPDJava 生态的逐语言检测器PMD CPD 是 Java 生态中历史最悠久的 CPD 工具之一macOS 下可用 Homebrew 安装brew install pmd也可以从 PMD 官网下载发行包手动安装。前提条件需要 Java 运行时8pmd命令必须在$PATH中。注意基准脚本会对 PMD 支持的每种语言逐个运行pmd cpd再求和脚本中实际循环了 36 个语言标识符覆盖 apex、coco、cpp、cs、css、dart、ecmascript、fortran、gherkin、go、groovy、html、java、jsp、julia、kotlin、lua、matlab、modelica、objectivec、perl、php、plsql、pom、python、ruby、rust、scala、swift、tsql、typescript、velocity、visualforce、wsdl、xml、xsl 等整个 PMD 环节在实测中耗时约 30 秒是六个工具中最慢的一档。DuploC 实现的预编译二进制仓库在benchmark/tools/duplo附带了macOS arm64 平台的预编译二进制。如果需要替换或升级步骤为从 Duplo 官方 Release 页面下载对应平台二进制放到tools/duplo位置赋予可执行权限chmod x tools/duplo。验证安装./duplo -helpDuplo 是纯文本重复查找器内置语言支持有限C/C、Java、C#、VB.NET、Erlang、TypeScript、Swift且会把所有文本文件一视同仁地处理——因此它报告的克隆数偏高518 个但其中包含大量因格式差异产生的误报。SimianJava 实现的语言无关相似度分析器仓库附带了预构建的 JARbenchmark/tools/simian.jar。替换方式从 Simian 官方站点下载 JAR放到tools/simian.jar位置。它需要 Java 运行时验证命令java -jar tools/simian.jar -helpSimian 是语言无关的相似度分析器可处理任意文本文件但不支持目录递归必须显式给出文件路径基准脚本用文件清单配合xargs传入。它曾是商业软件现以 Apache 2.0 开源。六个工具如何被 benchmark.sh 调用安装完成后六个工具在 benchmark/benchmark.sh 中各自扮演固定角色。脚本开头把路径集中定义为变量工具脚本变量调用要点jscpd5$PROJECT_ROOT/rust/target/release/jscpd--reporters json,silent --output结果写results/jscpd-v5/jscpd-report.jsonjscpd-rs$TOOLS_DIR/node_modules/.bin/jscpd-rs参数同上结果写results/jscpd-rs/jscpd-report.jsonFallow$TOOLS_DIR/node_modules/.bin/fallow(cd fixtures fallow dupes fallow-dupes.txt)必须 cd 进目标目录PMD CPDpmd依赖$PATH循环 36 种语言--minimum-tokens 50 --format text输出逐语言汇总Duplo$TOOLS_DIR/duplo-ml 5 -json 文件清单 输出JSONSimian$TOOLS_DIR/simian.jarcat 文件清单 | xargs java -jar simian.jar -threshold5几个值得注意的工程细节计时方式脚本用date %s%N做外部挂钟计时纳秒精度换算为毫秒记录保证六个工具处于同一计时标准PMD 语言循环每种语言输出一个pmd-cpd-lang.txt脚本用grep -c ^Found a 统计克隆数、grep -oE Found a [0-9] line累计重复行最后追加到总输出Fallow 统计通过grep -cE dup:统计克隆组从duplicated across摘要行解析文件数与重复行数容错处理每个工具都加了|| true或状态标记某个工具缺失时以skip状态记录而不是中断整个基准。结果数据与报告生成脚本运行结束后会产出两类文件benchmark/results/benchmark-data.tsv六列制表符分隔数据tool_key、time_ms、files、clones、dup_lines、status可供后续绘图或二次分析benchmark/results/benchmark-report.md自动生成的 Markdown 报告包含结果汇总表、工具明细表、方法论与原始输出文件清单。参考 benchmark/BENCHMARK.md 中已归档的一轮实测硬件Darwin arm64语料fixtures 547 个文件、21,645 行、150 语言格式ToolTimeFilesClonesDup Linesjscpd5本地构建84ms3472129,133jscpd-rsnpm111ms36022210,317Duplo162ms31951813,049Fallow dupes164ms34103,137Simian964ms54742415,351PMD CPD35.980s71562,267在以 jscpd5 为基准的对比中jscpd5 是唯一在 100ms 内完成的工具84ms检测数量居中——纯文本工具Duplo、Simian因不做 token 化而明显高报逐语言工具PMD CPD则覆盖率不足。这份数据也印证了 README 中的结论token 化检测在查全率与查准率之间取得了平衡。如果你要在自己的机器上复现先完成本目录的安装再回到benchmark/目录执行./benchmark.sh即可在benchmark/results/下得到同构的 TSV 数据与 Markdown 报告。注意结果会受平台脚本当前按 Darwin arm64 记录、fixtures 语料与各工具版本影响属于相对对比而非绝对性能指标。安装与运行中的常见坑Fallow 没有路径参数必须cd到目标目录再执行fallow dupes直接传目录会失败且它只认 TS/JS多语言语料下覆盖率天然偏低PMD CPD 只支持单语言必须配合--language逐语言运行再求和且很多 fixture 格式如自定义扩展名、组件文件不在其支持列表中因此找不到克隆不代表没有重复Duplo 与 Simian 的文本式检测不做 token 化格式差异缩进、换行会显著推高克隆数解释结果时需注意这是其算法特性而非缺陷Simian 无目录递归必须显式提供文件路径列表README 和脚本都采用了文件清单 xargs的方式工具缺失不阻塞benchmark.sh对每个工具做了容错缺失的工具以skip记录但报告中的对比数据会不完整jscpd5 需要本机 Rust 工具链cargo build --release要求 Rust 1.96而 jscpd-rs 与 Fallow 的 npm 包则自带二进制二者不需要。通过本指南安装齐全六个工具后benchmark/tools/就成为了一个自包含的 CPD 对比实验台既有仓库本地构建的 jscpd v5 作为主角也有来自 Java、C、npm 生态的五个对照工具配合benchmark.sh一次运行即可获得完整的横向对比数据为评估复制粘贴检测器的速度、精度与 LLM 友好度提供可复现的量化依据。赞分享开发工具代码质量静态分析【免费下载链接】jscpdCopy/paste detector for source code. 220 languages, Rust engine, SARIF/HTML/badge reporters, GitHub Action, MCP server for AI agents.项目地址https://gitcode.com/gh_mirrors/js/jscpd点击查看免费下载相关推荐jscpd 与其他重复检测工具的对比分析PMD-CPD、Simian等jscpd 与其他重复检测工具的对比分析PMD CPD、Simian等 在软件开发过程中代码重复是一个常见的技术债务问题它会降低代码质量、增加维护成本。j开发工具代码质量静态分析k-skill 中的第三方商标合规使用daishin-report-search 如何把“대신증권”限制在功能说明与出处标识范围内k skill 中的第三方商标合规使用daishin report search 如何把“대신증권”限制在功能说明与出处标识范围内 本篇围绕 daishin开发工具代码质量静态分析jscpd 部署方案大全本地、服务器与云环境的配置jscpd 部署方案大全本地、服务器与云环境的配置 jscpd 是一款强大的代码重复检测工具能够帮助开发团队发现编程源代码中的复制粘贴问题。无论您是在本地开开发工具代码质量静态分析上一篇Zephyr 中的 Space Cubics 航天星载计算机板级支持SC-OBC Module A1 与 V1 实战指南下一篇react-admin 表单防丢数据方案useAutoPersistInStore Hook 深度指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考