Skip to content

fix(editor): distinguish SSH remote files from folders - #565

Open
wang-kaopu wants to merge 1 commit into
omdsh-dev:mainfrom
wang-kaopu:fix/564-ssh-open-file
Open

fix(editor): distinguish SSH remote files from folders#565
wang-kaopu wants to merge 1 commit into
omdsh-dev:mainfrom
wang-kaopu:fix/564-ssh-open-file

Conversation

@wang-kaopu

Copy link
Copy Markdown
Contributor

变更说明

修复 SSH Remote 场景下「在应用中打开」无法正确打开文件的问题,对应 #564

此前 #522 已将 VS Code / Cursor 等 VSCode-family 的 SSH Remote 链接从 DSH 服务端转移到浏览器客户端执行,解决了无头远程服务器无法处理 vscode:// / cursor:// 协议的问题。但该修复没有保留文件与目录的资源类型语义。对于 vscode://vscode-remote/ssh-remote+<host>/<path>
VS Code 会将没有显式文件定位信息的远程路径按目录处理,因此目录能够正常打开,而普通文件(尤其无扩展名文件)会被错误地作为目录打开。

本 PR 补全文件 / 目录语义:

  • 文件 URL 增加 :1:1,显式触发 VS Code Remote 的 file / goto 语义
  • 目录 URL 保留尾随 /,继续按 folder 语义打开
  • FileTree 利用已有的 isDir 信息,在进入 URL opener 前保留资源类型
  • File Manager reveal 仍使用原始路径,不受 URL 路径规范化影响
  • VS Code、Cursor 和自定义 VSCode-family editor 共用相同行为

例如:

# 文件
vscode://vscode-remote/ssh-remote+dev/home/u/a.ts:1:1

# 无扩展名文件
vscode://vscode-remote/ssh-remote+dev/home/u/README:1:1

# 目录
vscode://vscode-remote/ssh-remote+dev/home/u/project/

问题原因

VS Code 对 vscode://vscode-remote/... 的协议 URL 会区分 remote file 与 remote folder。此前生成的文件 URL:

vscode://vscode-remote/ssh-remote+dev/home/u/a.ts

没有携带文件定位语义,会被 VS Code 按远程目录处理。#522 解决的是「协议由客户端还是服务端执行」的问题,现在进一步解决「客户端收到协议后按文件还是目录解释」的问题。

测试

补充 / 更新回归测试,覆盖:

  • SSH Remote 普通文件生成 :1:1 文件 URL
  • SSH Remote 无扩展名文件不会被误判为目录
  • SSH Remote 目录保留尾随 /
  • Cursor 使用相同的文件 / 目录语义
  • VSCode-family 自定义编辑器使用相同规则
  • FileTree 文件 URL target 保持文件路径
  • FileTree 目录 URL target 传递尾随 /
  • File Manager reveal 仍使用未经修改的目录路径

已实际运行:

pnpm test

测试通过。

范围说明

本 PR 仅修复 DSH-better-sidebar 仓库侧的 SSH Remote 文件 / 目录 URL 构建逻辑,不修改 DSH 源码,也不改变现有 host/client opener 分流设计。

Fixes #564

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

VSCode SSH无法打开文件(后续)

1 participant