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

好了,似乎,是我的 Jedi 的问题。

def with_hints(a: int, b: int) -> None:
    return None


def without_hints(a, b):
    return None

with

虽然不知道为什么,我去提个 issue 看看(

似乎,是我的 Jedi 的问题(好奇怪啊

M-x shell-comman RET pip show jedi:

Name: jedi
Version: 0.12.0
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: ~/.pyenv/versions/3.6.5/lib/python3.6/site-packages
Requires: parso
Required-by: python-language-server
  • 检查 jedi 版本
  • 检查 Emacs 和终端是否使用相同的 jedi

楼主等问题解决了请来分享是哪出了问题还有怎么解决的:grinning:。

啊!总算解决了,虽然解决的方法有点奇怪(

问题是出在 jedi,看我提出的这个 issue : Strangely, cannot recognize function with type hinting. · Issue #1198 · davidhalter/jedi · GitHub . jedi 不支持 3.7,于是…出问题了。

解决方法是:

  • 首先我在 $PATH 里面创建了一个文件 pyenv_pyls
#!/usr/bash

pyenv exec python -m pyls
  • 然后是,自己定义 lsp:
(lsp-define-stdio-client lsp-python "python3"
                         #'projectile-project-root
                         '("pyenv_pyls"))

之后就所有都一样了。

一路上有点误区,本来我用了 (setq shell-command-switch "-ic") 来读取 shell 里的 aliases,这样就不用创建 pyenv_pyls 这个文件了,遗憾的是,虽然 M-x shell-comman RET 的时候可以使用 pyenv_pyls ,但是 pyenv_pyls 却不是一个可执行的东西,会导致 lsp-mode 启动失败。

同样的,还有直接在定义的时候,这里用了 '("pyenv exec python -m pyls") 也是同样是失败的。

这样做的缺点在于,如果 local project 的 pyenv 是 3.7 或者 2.7 的就不行了。

解决啦!问题是 jedi