文档 chevron_right VS Code 簇面板 — 解读 Deslop 克隆簇

VS Code 簇面板

簇面板是 Deslop 重复代码发现结果背后的详细视图。它展示单个簇、Deslop 将这些位置归为一组的原因,以及可用于检查或比较各副本的编辑器操作。

你看到的是什么

Deslop VS Code 扩展正在分析实时工作区:侧边栏中以最严重优先排序的 Top Offenders 树与按目录划分的 Duplication 占比,编辑器中标出规范副本并带有 Compare、View cluster 与 Copy for AI 操作的实时克隆警告,以及与规范出现位置的并排 Compare 差异对比。
Deslop VS Code 扩展正在分析实时工作区——侧边栏(左)、编辑器中的实时克隆警告(中),以及与规范出现位置的 Compare 差异对比(右)。每个面板都会随你输入而刷新。

图中可见三个界面,它们读取的是同一份实时报告:

  • 侧边栏(左) 堆叠了三个视图。Top Offenders 是工作区中每个克隆簇的最严重优先排序列表——每一行显示簇 id、严重程度圆点和人类可读的分桶("Identical code"、"Nearly identical code"),并可展开为各出现位置;簇 #1 是影响最大的单一项,始终一键可达。Duplication 沿工作区 → 目录 → 文件逐层下钻,每个节点都标注重复占比——这正是 CI 门禁所依据的全仓库数字。Session 显示运行中的服务器:嵌入模型选择器(语义层面的行为相同但代码不同阶段,在选择模型前处于关闭状态)、缓存大小、文件数量,以及实时的分析 State。
  • 编辑器(中) 是 LSP 就地绘制发现结果的地方。重复片段在你输入时被加上下划线,提示信息标明分桶与副本数量——"Identical code × 3 — Safe to extract — every copy is the same."——随后标出用作比较锚点的规范出现位置。发现结果上提供三个操作:Compare with canonicalView clusterCopy for AI(面向 AI 的上下文块,在每个 Deslop 界面上都可用)。
  • Compare 差异对比(右) 是 VS Code 原生的并排编辑器,由 Compare with canonical 打开:当前出现位置在左、规范副本在右,逐行对齐,让你在提取共享辅助函数之前先确认重复确实存在。

这里的一切都是响应式的。编辑代码后,树、占比、就地警告与差异对比都会随你输入而刷新。同一份实时报告也支撑着 MCP 工具(find-similartop-offenderscluster-by-id),因此驱动你编辑器的智能体会在写下副本之前就看到这个重复。本页其余部分是对该视图中每个标签、分数和操作的实用指南。

簇 Id

簇 id 是这个重复代码组的稳定句柄。它由簇内容派生而来,因此除非底层代码变化到足以形成不同的簇,否则同一个克隆在多次刷新之间会保持相同的 id。

当你需要在 issue、智能体提示词或 MCP cluster-by-id 流程中引用某个发现结果时,请使用该 id。

克隆分桶

分桶标签是人类可读的克隆类型:

分桶 含义
Identical code 这些副本在归一化之后结构上完全相同。
Nearly identical code 这些副本很接近,但细微的差异可能很重要。
Same shape, different content 这些副本仅在归一化后的 AST 形状上匹配,没有 token 或语义层面的重叠。属同类样板代码;在排名中降权。
Loosely similar code Deslop 发现了较弱的重叠。请将其视为线索,而非定论。
Same behavior, different code 嵌入(向量嵌入)阶段发现了语义相似性。请审查这两处位置。

分桶下方的句子给出了该分桶的默认解读。它是参考指引,而非自动重构指令。

AI 匹配

当语义嵌入贡献了决定性信号时,会出现 AI MATCH。这通常意味着代码看起来不同,但似乎在做同样的事情。

不要盲目合并语义匹配。请阅读两处出现位置,并在提取共享代码之前使用 Compare。

排名

排名徽章显示该簇在当前报告中的位置。#1 是按重复影响计算的最严重的重复。其颜色分桶遵循与诊断信息和 Top Offenders 树相同的排名策略。

权重

权重是 Deslop 的重复影响评分。权重越高,意味着重复的片段越大、被复制的次数越多,或跨越的源代码越多。用它来决定优先检查什么。

权重不是百分比,也不是 CI 门禁。请使用仓库重复百分比和阈值来做通过或失败的判定。

大小

大小是该簇所代表的被克隆 AST 成员的数量。大小越大,通常意味着重复的单元是更大的结构性片段。

出现次数

出现次数是该簇中编辑器位置的数量。它可能大于面板中显示的行数,因为 Deslop 会限制单个超大簇发送到面板的出现位置数量。

规范出现位置

规范出现位置是 Deslop 用作比较锚点的第一个出现位置。Compare 会以该锚点为基准打开其他出现位置,使差异对比有一致的左右两侧。

规范并不意味着“最佳”或“真相来源”。它只是用于导航和比较的稳定锚点。

信号

信号解释了这些位置为何被归为一组。评分范围从 0.001.00;分数越高表示该信号检测到的相似性越强。

结构

structural 衡量在标识符和字面量被归一化之后的 AST 形状相似性。高结构评分能捕捉到完全相同的克隆和重命名的克隆。

Jaccard

jaccard 衡量在忽略格式、注释和琐碎内容之后的归一化词元重叠。高 Jaccard 评分能捕捉到那些仍共享大部分文本的近似漏检情况。

嵌入

embedding 衡量来自所选本地嵌入模型的语义相似性。即使语法发生分歧,它也能找到行为相似的代码。

在新的实时会话中,嵌入处于关闭状态,直到选择了某个模型为止。

融合

fused 是 Deslop 的综合克隆评分。它将结构、词元和嵌入证据结合在一起,是用于判定某一对是否值得报告的评分。

出现位置

出现位置是克隆出现的具体文件位置。每一行展示的是面向人类的编辑器目标,而非原始字节偏移。

出现位置定位

出现位置定位是 Open 将导航到的文件以及行号和列号。当行号和列号不可用时,面板会回退到仅显示路径,并告知你扩展宿主无法读取该源文件。

隐藏的出现位置

hidden 表示该路径匹配了 report_hide 配置。Deslop 仍然知道该范围,但隐藏的行不会抬高可见报告的排名。

Open 操作

Open 会将 VS Code 移动到该出现位置并选中克隆范围。

Compare 操作

Compare 会打开 VS Code 的差异编辑器,将所选出现位置与规范出现位置进行对比。它在规范行上被禁用,因为将锚点与其自身比较不会显示有用的信息。

簇导航

Previous cluster 和 Next cluster 会在与 Top Offenders 视图相同的最严重者优先列表中移动。它们在 webview 内部本地更新所选的簇。

键盘快捷键

当焦点位于 webview 内部时,面板支持键盘导航:

快捷键 操作
j / k 移动聚焦的出现位置行。
n / p 移动到下一个或上一个簇。
Enter 打开聚焦的出现位置。
? 切换详细的键盘帮助。