问题描述
右侧「资源管理器」对软链接(symlink)完全没有处理:
- 指向目录的软链接被显示成文件图标(无展开箭头),无法像 VSCode 那样直接展开浏览;
- 点击这类链接会走「打开文件」流程,
fs.read 实际读到的是目录,编辑器打开报错(Linux/macOS 下为 EISDIR: illegal operation on a directory, read);
- 指向文件的软链接可以正常打开内容,但没有任何视觉标识,无法区分真身与链接;
- 指向不存在目标的悬空软链接也被当作普通文件展示,点击后报
ENOENT。
复现步骤
-
在会话 cwd(资源管理器根目录)下执行:
mkdir -p /tmp/some-real-dir && echo hi > /tmp/some-real-dir/a.txt
ln -s /tmp/some-real-dir link-to-dir
ln -s /does/not/exist broken-link
-
打开侧边栏「资源管理器」:link-to-dir 显示为文件图标,没有展开箭头;
-
点击 link-to-dir:编辑器尝试按文件打开,报 EISDIR 错误。
原因定位
src/fs-tree.ts 的 listDirectory() 只用 dirent.isDirectory() 判断目录:
isDir: dirent.isDirectory(),
opendir 返回的 Dirent.isDirectory() 不会跟随软链接,因此指向目录的软链接得到 isDir: false,在 src/client/ExplorerView.tsx 中直接落入文件分支(onOpenFile(entry.path))。当前代码库中没有任何 isSymbolicLink / lstat / realpath 相关处理。
期望行为(参考 VSCode)
- 指向目录的软链接:按目录展示并可展开,建议带链接标识(如箭头角标);
- 指向文件的软链接:正常打开,建议加链接标识;
- 悬空软链接:显示失效/错误标识,而不是静默当作普通文件;
- (可选)右键菜单增加「复制真实路径」。
环境
- 插件版本:0.12.0(
cba7e778)
- 平台:Linux(任何支持 symlink 的平台均可复现)
问题描述
右侧「资源管理器」对软链接(symlink)完全没有处理:
fs.read实际读到的是目录,编辑器打开报错(Linux/macOS 下为EISDIR: illegal operation on a directory, read);ENOENT。复现步骤
在会话 cwd(资源管理器根目录)下执行:
打开侧边栏「资源管理器」:
link-to-dir显示为文件图标,没有展开箭头;点击
link-to-dir:编辑器尝试按文件打开,报EISDIR错误。原因定位
src/fs-tree.ts的listDirectory()只用dirent.isDirectory()判断目录:opendir返回的Dirent.isDirectory()不会跟随软链接,因此指向目录的软链接得到isDir: false,在src/client/ExplorerView.tsx中直接落入文件分支(onOpenFile(entry.path))。当前代码库中没有任何isSymbolicLink/lstat/realpath相关处理。期望行为(参考 VSCode)
环境
cba7e778)