DSH·去重复 diff 展示插件

DSH 的内置 DiffBlock 在展示文件差异时,会将未变化的行在删除区(红色 -)和新增区(绿色 +)各渲染一遍,造成视觉冗余。当只修改一行时,这种重复会导致上下文混杂,难以一眼看清真实改动。

这个插件接管 DSH 浏览器的 edit / write 工具卡片,利用近线性行级 diff 算法,只渲染真实变化的行,并支持行内字符高亮,从而消除重复显示。

基本信息

  • 名称:dsh-edit-diff
  • 维护者:better-er
  • 类别:工作流
  • 许可证:MIT
  • 定位:DSH·去重复 diff 展示插件

核心功能

插件提供差异行的过滤与高亮展示,核心能力如下:

  1. 仅差异行:完全相同的行不渲染,只显示真实变化的删除行(红 -)与新增行(绿 +),消除重复。
  2. 行内字符高亮:当删/增行数相等时,对替换对进行字符级 diff,用下划线在行内标出真正改动的字符。
  3. 近线性算法:先对公共前缀/后缀进行线性收缩,仅对中间的小差异带运行 Myers diff,复杂度与差异量成正比,超大文件也流畅。
  4. 默认收起与二次折叠:卡片默认只显示一行摘要,点开才显示 diff 体。展开后若差异行超过 14 行,会折叠为“头 +⋯ 展开其余 N 行差异 + 尾”。
  5. 对齐原生观感:使用内置 DiffBlock/ToolRow 的 --dsw-* 主题变量,保持视觉一致。
  6. 复制与统计:复制内容仅包含带 -/+ 前缀的差异行;底部显示变更统计 └ +A -R · N file(s)。
  7. 接管范围:支持 edit / write 双接管,覆盖新建场景。同时兼容 PTC 模式下的 run_code 子调用。
  8. 接管其他工具:通过 extraTools 配置,接管其他工具(如 dsh-remote-file-system 的 edit_remote / write_remote)。

安装与启用

在 DSH 环境中执行以下命令安装。两种安装方式均会自动挂载,重启 DSH web 后生效,无需手工编辑配置。

从 GitHub 安装(推荐,会自动构建):

dsh plugin --profile web add github:better-er/dsh-edit-diff

从 npm 安装(使用预构建产物):

dsh plugin --profile web add dsh-edit-diff

配置

插件通过 extraTools 配置接管除 edit / write 之外的其他工具。默认已接管 dsh-remote-file-system 的 edit_remote 和 write_remote。

默认接管配置

插件自带的 cordis.patch.yml 提供了默认接管配置:

- insert:
    - id: dsh-edit-diff
      name: dsh-edit-diff
      config:
        extraTools:
          - name: edit_remote
          - name: write_remote

自定义接管配置

若需接管参数名不同的工具,可在 profile 的 cordis.patch.yml 中按 id 覆盖配置。每条 extraTool 需指定 name,以及可选的 pathKey、oldKey、newKey、contentKey。

- id: dsh-edit-diff
  config:
    extraTools:
      - name: some_tool
        pathKey: target
        oldKey: before
        newKey: after
        contentKey: body

判定规则

渲染逻辑由参数决定:同时包含旧文本与新文本则按 edit 型渲染,否则包含整文件内容则按 write 型渲染。

适用场景

  • 需要清晰查看代码或文本修改内容的 edit / write 工作流。
  • 使用 run_code 进行代码编辑并需要展示 diff 的 PTC 模式。
  • 需要处理远程文件变更并展示差异的场景(已默认接管 dsh-remote-file-system)。

插件以标准形态挂载,通过 settings 命名空间向浏览器端传递配置,所有渲染在浏览器端完成。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜