V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ClericPy
V2EX  ›  Visual Studio Code

有关 VSCODE 使用微软 LSP 时, 相对引用的库无法正常 go to definition 的问题

  •  
  •   ClericPy ·
    ClericPy · 2020-02-08 15:23:52 +08:00 · 3274 次点击
    这是一个创建于 1784 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. 问题描述

    win10, 最新版 vscode, Python3.7

    from asyncio.base_events import tasks
    

    代码如上, 从 base_events alt-click 跳转过去以后, 找到 37 行附近的

    from . import constants
    from . import coroutines
    from . import events
    

    这里再想跳转就失灵了

    1. 暂时解决方案

      进入 C:\Users\XX\AppData\Local\Microsoft\Python Language Server 目录, 删除那堆 pyi 文件, 重启 VSCODE

      可以正常跳转了, 因为没有缓存的情况下, 可以正常跳转, 应该是缓存的问题

    2. 尝试失败方案

      确定是 LSP 的缓存问题, 所以尝试修改了 "python.analysis.cachingLevel": "None", 重启发现依然创建了缓存文件

    请教到底怎么处理这个情况啊... 目标就是让我正常跳转到定义, 实在不行我就给文件夹禁止写入了. github 之类的地方搜了很多, 但基本都不是这个情况

    以及, 不要回帖推荐 Pycharm 什么的, 我知道 Pycharm 是正常的, 甚至把 LSP 关了用 jedi 也是正常跳转.......

    第 1 条附言  ·  2020-02-08 16:38:04 +08:00
    找到 issue 了, 等官方回复吧
    问题基本定位了: LSP 对新打开的非本工作区 py 文件不做代码解析, 所以无法跳转; 但是对启动前就打开的文件, 会做分析
    第 2 条附言  ·  2020-03-30 01:11:25 +08:00
    官方已经修复
    8 条回复    2020-09-02 12:37:36 +08:00
    ClericPy
        1
    ClericPy  
    OP
       2020-02-08 15:39:14 +08:00
    重新试了下... 好像和缓存没关系
    好像是保持那个想跳转的 py 文件打开状态的话, 重启下就可以正常跳转了

    比如 从 from asyncio.base_events 跳转打开了 base_events.py 文件, 这时候没法继续跳转 from . import coroutines

    但如果不关闭 base_events.py 文件, Reload 下, 就可以跳转了...
    gitopen
        2
    gitopen  
       2020-02-08 18:51:43 +08:00
    @ClericPy #1 我也遇到了这个问题,所以这几天切回到 pycharm 了。。借楼问,vscode 的代码提示,光标移动到某个函数,提示框一直显示 loading.... 遇到过这个问题吗
    ClericPy
        3
    ClericPy  
    OP
       2020-02-08 19:01:02 +08:00
    @gitopen #2 切换到 jedi 如果还 loading 那就还是 LSP 的问题. 我这边不能跳转的显示的是 Code analysis is in progress..., 实际已经停止了, 就启动时候分析了一次, 新打开的非工作区文件都不会再分析

    我在找有什么办法能强制启动一次 LSP 的 analysis, 现在 diagnosticPublishDelay 参数貌似不能让它检查到什么自己启动
    chaleaoch
        4
    chaleaoch  
       2020-08-30 21:59:22 +08:00
    但是我还是有这个问题用的 pylance...
    ClericPy
        5
    ClericPy  
    OP
       2020-08-30 22:04:27 +08:00
    @chaleaoch pylance 刚出我就试用了... 也是跳转 pyi, 看了官方 issues, 貌似就是这么设计的... 没找到好办法跳转到原 py 文件...
    至于官方 lsp 的跳转, 我删了 pyi 文件就跳过去了... 你有什么好办法推荐下么
    chaleaoch
        6
    chaleaoch  
       2020-08-30 23:19:26 +08:00
    @ClericPy 我的只有 pylance 工作,其他两种都不工作...
    ClericPy
        7
    ClericPy  
    OP
       2020-09-01 23:25:22 +08:00
    @chaleaoch 太久了, 就算当时 watch 了, 后来估计也取关了...

    PS: 刚才在电脑上把 3.7 换到 3.8, 微软 LSP 下载太慢, 所以换了 pylance, 意外发现居然不是 pyi 了... 不知道什么情况
    chaleaoch
        8
    chaleaoch  
       2020-09-02 12:37:36 +08:00
    @ClericPy pylance import csv 这种非相对导入的不好用.不信你试试.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3076 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 10:54 · PVG 18:54 · LAX 02:54 · JFK 05:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.