Skip to content

v0.5.2 — Windows / macOS 平台兼容:路径方言归一 + 保留设备名 + 跨平台靶子

Choose a tag to compare

@Phy-D Phy-D released this 02 Oct 09:11
· 9 commits to master since this release

v0.5.2 — Windows / macOS 平台兼容:路径方言归一 + 保留设备名 + 跨平台靶子(2026-10-02)

修(都只在 Windows 上才会犯,Linux 上测不出来)

  • 路径方言不再混用。node:path 的 join() 在 Windows 上产出 \,而插件内部约定一律 /
    (lib/notes.js 的 toPosix)——lib/store.js 的路径助手与 lib/service.js 里 3 处漏归一的
    join()(回收站落盘路径、扫描根展开、.dsh-notes/.gitignore)现在全部过 normalizePath()。
    不归一的话,同一个目录会同时存在两种写法,字符串比较与集合键随即静默失配。
    实测依据:在 Windows node(v22.14)上跑那 32 个不依赖 harness 依赖的测试文件,原本 12 条红
    (C:/… vs C:\…);修完插件侧 + 期望值按插件约定归一之后 208/208 全绿,Linux 侧 250/250 全绿
    (Windows 那轮跑的是真实 Windows 文件系统:真建/真读/真改名/真删除,回收站与 CRLF 行尾保真都在里面)。
  • Windows 保留设备名:CON / PRN / AUX / NUL / COM1–COM9 / LPT1–LPT9
    (含 CON.md 这种带后缀也保留的写法)→ sanitizeFileName() 现在会避开(CON → CON-,
    CON.md → CON-.md)。以前在 Windows 上新建一篇标题叫 CON 的笔记会直接失败。
  • 目录选择器的面包屑:官方给的 crumbs[].path 与我们会话 cwd 的大小写可能不同,原来按字符串
    相等找工作区根 → Windows/macOS 上可能整条面包屑不显示;改成「互相都能相对化」判定。

新增

  • test/platform-paths.test.mjs(12 条):喂 Win32 输入的字符串,把「内部只有一种路径写法」
    钉成可执行约定 —— 在 Linux 上跑也照样抓得到回归(注入一次原生 join,实测立刻 1 条红)。
    同时覆盖盘符大小写不敏感、跨盘不相对化、保留设备名、尾随点与空格、单组件长度上限、面包屑匹配。
  • README 新增 ## 平台支持:三平台状态与证据、上面这些差异、以及没有真机的 macOS 边界
    (HFS+ 的 NFD 归一化、Windows 260 字符路径上限)。AGENTS.md 加了「平台约定」一节。

变更

  • 版本 0.5.1 → 0.5.2;lib/client.js 因 browse-path.ts 改动而重建;单测 238 → 250 条。