发现 vscode 在 python 项目中始终无法启动 go to definition 功能,表现为右键代码内容并没有 go to defenition 的选项。
根据问题排查路径,对需要确认或可以尝试的排查方式进行分点罗列:
languageServe 设置
搜索了大量博客,发现不同语言的解决方法不同但本质一致,大部分情况下都是需要安装并选择一致的languageServer:对于 python 而言,可以是 pylance 也可以是 jedi,一般情况下在 default 的推荐下也能自动完成配置。
这部分设置的时候需要注意 setting 时是在 User 下的还是 workspace 下的,亦或是其他想要生效的环境下,确认方式是当修改 setting 中的设置时,项目目录下的 .vscode 的 setting.json 应该更新出对应的变动。
interpreter
进一步的问题可能是需要进行 interpreter 的选择,这个问题在 vscode 右下角进行选择,或者命令进入 selected interpreter 。
Python>Analysis:Exclude
这并不是值得尝试的解决方法,或者说是需要根据项目进行评判的,这里写出来的方式为了防止未来遇到类似的场景,进行一个记录:
可以在 setting 中对 exclude 进行设置,这是在 languageServe 正确启动后,由于项目过于庞大导致 analysis 一直 loading 卡住的情况,通过添加一些 exclude 目录进行冗余分析的减少,使 analysis 能正常 load 完成。(大部分项目应该不会到这种卡住的程度)
上述的两种排查其实非常简单,我认为不应该过度的深入 setting.json 进行一些博客里面提供的修改,过度的添加自己不了解的内容只会适得其反,应该适当的相信 vscode 的自动适配能力。 所以当尝试完上述两种方式还是无法出现 go to definition 时候,网上基本上博客能覆盖的解法已经尝试完了,这意味着可能是触发到了一些罕见问题。
导致踩坑的反思有两点:
- 在看 github.com/microsoft/v… 内容的时候,并没有明确
Open the Python output panel or select the command Python: Show Output是在描述什么,而是选择了直接跳过这个 issues 的阅读; - 在看 zhuanlan.zhihu.com/p/344118024 评论中关于 exclude 讨论的时候,并没有研究一下
是因为加载的文件太多了,导致一直在 analyzing 中是通过什么方式得知的。
这两个忽略导致了一直在对着各种博客绕相同的坑...
其实他们指向了同样的一个进一步定位方式:看 output 的 python 内容。
当意识到这点后解决问题瞬间就变得顺畅起来了,因为我发现我的 output 中有一个 [error] Failed to start language server: [Error: The language client requires VS Code version ^1.91.0 but received version 1.89.1
那么在 Code 中选择 Check for Updates 即可。导致我 vscode 没有自动更新的原因来源于另一个乌龙:Cannot update while running on a read-only volume. The application is on a read-only volume. ,这是因为我使用的是 macos,而我在当初下载 vscode 的时候偷懒没有把 vscode 移动到 Appliction 中...导致没有权限进行自动更新。
更新并重启后 go to defenition 就能正常使用了
总的来说,当遇到问题的时候一定要时刻提醒自己不要逃避思考,理解不同博客中的不同解决方法,才能更好的明确思路找到分析逻辑,而不是一直绕圈圈浪费时间。