文档 chevron_right 快速开始 — 安装 Deslop 并查找重复代码

快速开始

Deslop 在九种编程语言中查找重复代码,按影响程度排列最值得移除的重复,并在相似代码已经存在时告诉你的编码智能体。 它运行于你的工作区,并随你的输入实时更新 —— Claude Code、Cursor、Copilot、Continue、Codex 以及你的编辑器读取的都是同一份实时分析。

安装它的首选方式是 VS Code 扩展。一次安装即可获得全部三个接口面:实时编辑器警告、智能体写代码前所做的那次检查,以及 CLI。

安装(首选) —— VS Code 扩展

VS Code Marketplace 安装:

  • 在 VS Code 中: 打开扩展⇧⌘X / Ctrl+Shift+X),搜索 Deslop,点击安装
  • 命令行: code --install-extension nimblesite.deslop-live
  • 浏览器: 打开 Deslop.live Marketplace 页面 并点击安装

随后打开一个受支持的源文件(.cs.rs.py.dart.js.mjs.cjs.jsx.ts.tsx.php.fs.fsx.go)。实时气泡会立即生效,并且随着文件监视器触发,Top Offenders 树状视图会随之填充。

该扩展捆绑了面向 darwin-arm64darwin-x64linux-x64linux-arm64win32-x64 的原生二进制文件 —— 系统会自动为你选择正确的那一个。

Deslop VS Code 扩展正在分析实时工作区:侧边栏中以最严重优先排序的 Top Offenders 树与按目录划分的 Duplication 占比,编辑器中光标处的实时克隆警告,以及与规范出现位置的 Compare 差异对比。
实时工作区中的扩展——侧边栏里以最严重优先排序的克隆簇与按目录划分的重复占比、光标处的实时克隆警告,以及与规范副本的 Compare 差异对比。逐面板完整解读 →

离线或隔离网络环境?发布页最新的 GitHub release 获取 .vsix,并通过**扩展面板 → 菜单 → 从 VSIX 安装…**进行安装。

仅安装 CLI(Homebrew / Scoop / curl)

macOS / Linux(Homebrew)

brew install nimblesite/tap/deslop
deslop --version

Homebrew 配方源:github.com/Nimblesite/homebrew-tap

Windows(Scoop)

scoop bucket add nimblesite https://github.com/Nimblesite/scoop-bucket
scoop install deslop
deslop --version

Bucket 源:github.com/Nimblesite/scoop-bucket

macOS / Linux(curl)

没有 Homebrew?直接从最新的 GitHub 发布版拉取归档文件。以下脚本会解析最新版本号,选择对应平台,校验官方发布的 SHA-256 校验和,并安装与 Homebrew 配方相同的三个二进制文件(deslopdeslop-lspdeslop-mcp)。脚本采用失败即终止的方式:下载或校验和验证失败时,不会解压也不会安装任何内容:

(
  set -euo pipefail
  base="${DESLOP_RELEASE_BASE:-https://github.com/Nimblesite/Deslop/releases}"
  tag="${DESLOP_TAG:-$(curl -fsSLI -o /dev/null -w '%{url_effective}' "${base}/latest")}"
  tag="${tag##*/}"      # 例如 v1.2.3
  version="${tag#v}"    # 例如 1.2.3
  case "$(uname -s)-$(uname -m)" in
    Linux-x86_64)  platform=linux-x64 ;;
    Linux-aarch64) platform=linux-arm64 ;;
    Darwin-arm64)  platform=macos-arm64 ;;
    Darwin-x86_64) platform=macos-x64 ;;
    *) echo "unsupported platform: $(uname -s)-$(uname -m)" >&2; exit 1 ;;
  esac
  archive="deslop-${version}-${platform}.tar.gz"
  workdir="$(mktemp -d)"
  trap 'rm -rf "$workdir"' EXIT
  cd "$workdir"
  curl -fsSLO "${base}/download/${tag}/${archive}"
  curl -fsSLO "${base}/download/${tag}/${archive}.sha256"
  if command -v sha256sum >/dev/null; then sha256sum -c "${archive}.sha256"; else shasum -a 256 -c "${archive}.sha256"; fi
  tar -xzf "$archive"
  sudo install -m 755 "deslop-${version}-${platform}"/deslop{,-lsp,-mcp} /usr/local/bin/
  deslop --version
)

若想安装到用户目录,可将 sudo install 那一行换成 mkdir -p ~/.local/bin && install -m 755 "deslop-${version}-${platform}"/deslop{,-lsp,-mcp} ~/.local/bin/(无需 sudo),并确保 ~/.local/bin 在你的 PATH 中。

若要固定某个特定版本而非最新版,可在运行脚本前于环境中设置 DESLOP_TAG=vX.Y.Z

直接下载

发布页最新的 GitHub release 获取对应平台的归档文件,并将二进制文件放入你的 PATH

运行 CLI

deslop .

这会扫描当前目录、写入三份报告,并将最严重的簇打印到你的终端。Deslop 写出的所有内容都会放进被扫描项目根目录下的同一个 .deslop/ 目录——把 .deslop/ 加入你的 .gitignore 即可:

.deslop/
  deslop-report.json   # 权威格式,供智能体读取
  deslop-report.txt    # 按行组织的纯文本
  deslop-report.html   # 独立文件,供人阅读
  logs/                # 按时间戳命名的运行日志
  cache/               # 指纹与嵌入缓存;可安全删除

使用 --output <prefix> 可以把报告(及其日志)改写到别处。

调整阈值

默认的最小 AST 节点数量经过精心选择,以避免琐碎的 getter 污染报告顶部。可按运行逐次覆盖:

deslop . --min-nodes 20

对于只想关注重大重复的大型代码库,可以调高它。在追查微观模式时,则调低它。

启用语义检测 —— 行为相同、代码不同(Type-4)

结构与词元通道是确定性的,无需联网即可运行。行为相同的匹配(Type-4) —— 行为相同、语法不同 —— 需要嵌入(向量嵌入)。嵌入默认关闭

deslop . --embeddings auto

auto 会探测本地 Ollama 提供方,若无法连通则发出警告并回退。使用 --embeddings required 可在无法联系到提供方时直接硬性失败。默认模型为 nomic-embed-text;任何 Ollama 嵌入模型均可通过 --embedding-model 选择。

参见 工作原理 了解信号融合的数学原理。

排除噪声

生成的代码与构建产物默认会被过滤。仅为项目特定的依赖、迁移或训练集代码添加 .deslop.toml

[defaults]
exclude = [
  "**/bin/**",
  "**/obj/**",
  "**/node_modules/**",
  "**/target/**",
  "**/*.Designer.cs",
]

report_hide = [
  "**/*.g.cs",
]

exclude 完全跳过解析。report_hide 会解析但从最终排名中省略 —— 对于你仍希望保留在缓存中的训练集代码很有用。

以重复阈值对 CI 设置门禁

默认情况下,无论发现多少重复,deslop 都会以 0 退出 —— 它只报告,不评判,因此绝不会破坏一个你并未要求它把关的构建。一旦选择启用门禁,当全仓库范围的重复超过你的上限时,它会以 3 退出(使构建失败)。可以传入一个标志用于一次性运行,或将上限提交入库,让本地运行、CI 与智能体共享同一个数值:

deslop . --fail-over 5.0          # 已分析 LOC 中的重复超过 5% 时以 3 退出
# .deslop.toml
[threshold]
max_duplication_percent = 5.0

--fail-over 会覆盖配置键;--fail-over 0 在任何重复时都会失败;--no-fail-over 会为单次本地运行清除门禁。完整的退出码对照表在配置参考中,而 GitHub Action 为 CI 封装了同一套门禁。