mac中lsp不认软连接路径

我把移动硬盘的目录用软连接链到home目录。然后打开这个目录下的rust项目。 这时候lsp虽然启动了,但是启动器总是提示两次这个路径是否安全,让确认。 确认之后打开了代码文件,虽然仍然打开了lsp server。但是跳转到函数之类的功能失效。

把这个项目直接放到本地硬盘里,就不会有这个问题。

哪位知道会是什么原因么?

用链接就可能出现链接路径和真实路径不匹配的情况。

相关的工具可能有时候用的是链接路径,有时候用的是真实路径。某些情况下可能需要用对比路径、或用路径做检索,然后就出现了不匹配的情况:

(when (string-prefix-p project-dir (file-name-directory buffer-file-name))
  ...)
1 个赞

正确编写的代码不会出现这种情况, 用 file-truename

是emacs 29.1 lsp-mode 打开的一个rust项目(很小)。 这个是lsp-mode的bug?如果加上那一行,是会影响整个emacs么?

只是说有可能,未必就一定是。

也未必问题出在 lsp-mode,也可能出在 project[ile] 或着其它什么包。

为了定位问题和排除不必要的干扰,你需要更新 lsp-mode 到最新,加载最小配置。

「正确编写的代码」说起来容易,只要是人写的代码,就难免出现错误。任何时候都用 file-truename 是不现实的,就像你不会去判断每个变量的 t 或 nil,总会有取舍。所以现在搜索 emacs "lsp-mode" symlink 仍然会看到比较近期的相关错误报告。

我刚刚试了一下,更新到 lsp-mode-20230914.1237 仍然会出现无法正确识别链接后的项目根目录的情况。我把 ~/.scratch/rust/helloworld 链接到 ~/Downloads/rust-helloworld 之后,打开链接路径,lsp-mode 给出了错误的建议:

正常情况下,lsp-mode 给出的建议第一项是直接指向项目根目录 ~/Downloads/rust-helloworld/,但是截图显示指向了 ~/

P.S. 我的情况可能比别人复杂,所以未必是同一个问题:

Target                                 Source
-------------------------------------- ------------------------------------
/Users/$USER                           /Volume/HDD/Users/$USER
/Users/$USER/.scratch                  /Users/$USER/Dropbox/scratch
/Users/$USER/Downloads/rust-helloword  /Users/$USER/.scratch/rsut/helloworld

我就是提一嘴 file-truename 给你们参考一下的, lsp-mode 用没用它我也不知道


虽然但是, 用字符串比对来判断路径是否匹配, 会不会太简单粗暴了, 比如 "~/" 你怎么处理?

等周末有空我试试