python 定义函数时加上 type hint,不会被识别了。

这两天,我改了改习惯,把 Python 的代码加上 type hint 之后,我发现了一个问题,自动补全的时候,不会被识别为函数了,当然 eldoc 也用不了了…无论是 anaconda,还是用 lsp 都这样…

如图

不知道是个例,还是原来就这样?(突然后悔完全把原来的配置删掉)

1 个赞

还有 lsp-python 的图,可以发现,有 type hint 的时候,是没有 doc 的:

;; 有 doc

;; 没有 doc

Imenu 直接没有识别出来(好奇怪呀!)

正常,type hint本来lsp-python就还没有支持的吧。javascript也是,es6 arrow function现在好像还是显示成property。

我见到原始的 python language server (使用 jedi )是支持的,原来是 lsp-mode 的问题吗?好好奇是哪部分导致的。

但是,anaconda 和 elpy 也不支持呢…

唉,doc 倒是无所谓,imenu 和 补全不见了太伤了。。。

要是谁能推荐一个支持 type hint 的就好了!

我用的 elpy ,测试了一下 company 和 imenu 都支持 type hint 的。

version control没有的嘛?


关键字用花体字,好像是个不错的主意,是主题自带的还是自己加的?另外这个花体字体名字是?

诶!可以分享一下嘛?我自己用 elpy 测试了一下,还是不行(我现在怀疑是什么地方出问题了!

这是我的 elpy 的

(use-package elpy
  :straight t
  :init (setq elpy-rpc-backend "jedi"
              elpy-rpc-python-command "python3")
  (elpy-enable)
  :hook ((python-mode . elpy-mode)
         (elpy-mode . (lambda () (setq elpy-modules (delq 'elpy-module-flymake elpy-modules))))))

早期的混乱不堪,这次为了督促自己,彻底删掉了(

关键字那个是自己加的,

 '(custom-comment ((t (:background "#3d4551" :foreground "#cbe3e7" :slant italic))))
 '(font-lock-keyword-face ((t (:foreground "#ff8080" :slant italic))))

字体是 operator mono,经 nerd font patch 过。

1 个赞

我的 python 配置基本上就是把 spacemacs 的 python layer 里面的 anaconda mode 替换成了 elpy。基本上还是一个 giant mess …

最精简的大概就是这样吧( company 用的 spacemacs 的 global 设置,没有 python 的改动):

(use-package python
  :defer t
  :mode (("\\.py\\'" . python-mode))
  :init
  (progn
    (setq-default python-indent-offset 4)))

(use-package jedi
  :after python)

(use-package elpy
  :after (python jedi)
  :config
  (progn
    (elpy-enable)
    (setq elpy-rpc-backend "jedi")))

有没有可能和 jedi 有关系?

jedi 啊。我也是在想。因为我这里每个都不行,而,大家补全都是用 Jedi…不过也有可能是 python 版本的问题,我已经用着 3.7 了。我去试试看

对了,乃 Jedi 版本是什么?

λ pip show jedi
Name: jedi
Version: 0.12.1
Summary: An autocompletion tool for Python that can be used for text editors.
Home-page: https://github.com/davidhalter/jedi
Author: David Halter
Author-email: [email protected]
License: MIT
Location: /usr/local/lib/python3.7/site-packages
Requires: parso
Required-by: python-language-server, ptpython, ipython

和你的基本一样

Name: jedi
Version: 0.12.1
Summary: An autocompletion tool for Python that can be used for text editors.
Home-page: https://github.com/davidhalter/jedi
Author: David Halter
Author-email: [email protected]
License: MIT
Location: ~/anaconda3/lib/python3.7/site-packages
Requires: parso
Required-by: ipython

神奇!我单独弄个只有 elpy 的环境试试看…

还是不行🙅…如果可以的话,可以用一用看您的完整的设置吗?(

elpy-layer,希望能有帮助。

感谢!我去试试看

依然不行,真是奇怪

operator mono不是免费的,还特别贵。。有什么别的花体mono字体不?

如果 imenu 识别不出来,就要看看你把 imenu-generic-expression 变量改成什么样了,跟其他都无关。

在我这边无论 imenu 还是 lsp-mode 都正常:

01_AM 43_AM

没准是你的 imenu 设置错误,导致了一些列问题。

现在 imenu 倒是正常的,就是 company 出不来… (可以试试看乃的配置嘛?

我的 company 没有特别针对 python 做任何设置。你应该检视自己的配置,把不必要的配置去掉(二分法)试试,而不是看别人的。