簡體   English   中英

如何使用 helm-semantic-or-imenu 進行帶有類型注釋的 Python 代碼的代碼導航

[英]How to use helm-semantic-or-imenu for code navigation with type annotated python code

我想使用 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

我找到了 emacs 26.2 的源代碼,發現確實 python-el 負責解析 python 文件的語義。 它還在內部使用 python-wy 來識別大部分語言組件。 但不幸的是,那是我撞到磚牆的地方。 我希望能夠通過 re 或其他東西來修補識別函數定義的函數,但語義實際上以正確的方式解決了問題。 所以Python-WY似乎是從一個正式的語法定義文件自動生成的(在Emacs的git管理/語法/ python.wy),並找出如何修改令人遺憾是遠遠超出我的能力。

語義 python 后端似乎沒有正確解析類型注釋(據我所知,這些庫最近沒有太多發展)。 由於helm-semantic-or-imenu在活動時傾向於語義,因此您可以完全禁用 python 緩沖區的語義,除非您使用它的其他功能(我個人只將它用於 C/C++)。

加載特定於語義模式的庫時,它們會設置imenu-create-default-create-indeximenu-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)
        ))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM