lsp-pyright 不自动使用 python-pyright 作为 flycheck checker

@seagle0128 大神,最近转到您写的 lsp-pyright, 发现它并没有自动启动 python-right 作为flycheck 的 python checker。启用lsp mode之后,默认都使用 lsp checker,不理解 lsp checker的背后原理,但是感觉也应该使用默认的 language server 获取 diagnostics 信息,但是至少在我的 python mode 下它并没有默认 fallback 到 python-pyright,求教为什么。 :pray:

有个 hack 的方法可以绕过去,但是感觉这个比较丑陋:

(use-package lsp-pyright
  :ensure t
  :hook (python-mode . (lambda ()
                         (setq lsp-diagnostics-provider :none) ;; don't use 'lsp as default flycheck checker, this will turn off the flycheck auto-start too.
                         (setq flycheck-checker 'python-pyright) ;; use 'python-pyright instead as python checker.
                         (global-flycheck-mode) ;; enable flycheck manually.
                         (require 'lsp-pyright) ;; use lsp-pyright lsp
                         (lsp-deferred)

使用lsp-mode默认使用的是lsp checker,用hook方式可以强制使用python-pyright。用flycheck-verify-checkerC-c ! v)可以查看当前buffer使用的checker信息。用flychecker-disable-checker可以禁用lsp.

1 个赞

大佬,我现在使用pyright 用virtualenv管理虚拟环境,怎么让pyright切换环境啊

  1. direnv 等自动切换,Emacs 中需要相关包配合
  2. .dir-locals.elpyproject.toml 指定虚拟环境

我现在用pyvenv激活环境然后再lsp-workspace-restart重启服务,但是找不到我装的cv2里面的方法

你这样说太泛了,不能确定问题在哪

除了 cv2 别的装的包的方法能找到么(或者 import 包的时候是否报错,如果不报错说明切换虚拟环境成功了)

image 环境切换成功了,但是cv里的函数都找不到,torch包有的能找到有的找不到,这该怎么排查啊

cv2 和 torch 可能很多不是用 Python 实现的,所以即使打开 useLibraryCodeForTypes 也不行。

微软维护了一个常见包的 type-stubs 包括 cv2,你可以把stubPath(也即 lsp-pyright-stub-path)设置成这个。https://github.com/microsoft/python-type-stubs

建议去看下 pyright 的文档和配置,有个大概的理解。 然后有问题建议新开帖

感谢大佬,我重新开个贴