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 命名空間向瀏覽器端傳遞配置,所有渲染在瀏覽器端完成。

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

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

小夜