我想使用helm-semantic-or-imenu命令导航带注释的Python代码类型的组件,但是无论使用什么代码分析器来识别这些组件,似乎都无法识别带注释的python代码。带有返回类型注释的函数根本不被识别,带注释参数的函数显示类型而不是签名中的参数名称

我的主要问题是,我没有正确地理解使这个工作所涉及的组件(当它工作时)。显然,以某种方式更新代码分析器可能会有所帮助,但我在哪个项目中发现了这种情况呢?掌舵?语义?伊梅努?或者像其他人提到的关于代码分析的python.el?我真的需要一些帮助才能开始解决这个问题。如果代码分析器是在python.el中找到的,那么我可以尝试修改并使emacs优先使用本地版本而不是已安装的版本吗?
编辑:在做了最初的文章之后,我终于突破了尝试找出组件的来源。我搜索了所有文件系统中的python*.el,发现了以下内容:
./usr/share/emacs/26.2/lisp/cedet/semantic/wisent/python.elc ./usr/share/emacs/26.2/lisp/cedet/semantic/wisent/python-wy.elc
我找到了emacs26.2的源代码,并发现实际上python似乎负责解析python文件的语义。它还在内部使用python来识别语言组件的很大一部分。但不幸的是,那是我撞到砖墙的地方。我本来希望能够通过re或其他东西来对识别函数定义的函数进行猴子补丁,但是语义实际上是以正确的方式解决问题的。所以python.wy似乎是从一个正式的语法定义文件(在emacs、git管理/语法/python.wy中)自动生成的,并且知道如何修改,,不幸的是,这远远超出了我的能力。
发布于 2019-06-16 10:56:13
语义python后端似乎没有正确地解析类型注释(据我所知,在这些库上没有多少最近的开发)。由于helm-semantic-or-imenu在活动时支持语义,所以您可以完全禁用python缓冲区的语义,除非您使用它的其他特性(我个人只对C/C++使用它)。
当加载特定于语义模式的库时,它们会设置imenu-create-default-create-index和imenu-default-goto-function,从而导致imenu使用语义而不是python.el的imenu函数。
若要禁用对python文件的语义支持,可以自定义semantic-new-buffer-setup-functions,只需为您希望得到语义支持的模式添加条目。在语义钩子中(或者使用自定义UI),
(setq semantic-new-buffer-setup-functions
'((c-mode . semantic-default-c-setup)
(c++-mode . semantic-default-c-setup)
(srecode-template-mode . srecode-template-setup-parser)
(texinfo-mode . semantic-default-texi-setup)
;; etc.
;; (makefile-automake-mode . semantic-default-make-setup)
;; (makefile-mode . semantic-default-make-setup)
;; (makefile-gmake-mode . semantic-default-make-setup)
))https://stackoverflow.com/questions/56604290
复制相似问题