Как использовать helm-semantic-or-imenu для навигации по коду с аннотированным Python-кодом типа - PullRequest
1 голос
/ 14 июня 2019

Я бы хотел использовать команду helm-semantic-or-imenu для навигации по компонентам аннотированного кода Python типа, но какой бы анализатор кода не использовался для идентификации компонентов, кажется, не распознает аннотированный код Python типа. Функции с аннотацией возвращаемого типа не распознаются вообще, а функции с аннотированными аргументами показывают тип вместо имен аргументов в сигнатурах see screenshot

Основная проблема, с которой я столкнулся, заключается в том, что я неправильно понимаю компоненты, участвующие в выполнении этой работы (когда она работает). Очевидно, это может помочь как-то обновить анализатор кода, но в каком проекте я нахожу это? шлем? семантическая? imenu? или как кто-то упоминал где-то еще в отношении анализа кода python.el? Я мог бы действительно использовать некоторую помощь, чтобы начать решать эту проблему. Если анализатор кода найден в python.el, могу ли я тогда попытаться изменить и заставить emacs использовать локальную версию преимущественно над установленной?

EDIT: После первоначальной публикации я, наконец, прорвался, пытаясь выяснить, откуда берутся компоненты. Я искал python * .el во всей файловой системе и обнаружил:

. / USR / доли / Emacs / 26,2 / лепет / Cedet / семантического / зубр / 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 admin / grammars / python.wy) и выясняет, как изменить , что , к сожалению, намного выше моих возможностей.

1 Ответ

1 голос
/ 16 июня 2019

Бэкэнд семантического Python, по-видимому, неправильно анализирует аннотации типов (и, насколько я могу судить, в этих библиотеках не было много последних разработок).Поскольку helm-semantic-or-imenu поддерживает семантику, когда она активна, вы можете вообще отключить семантику для буферов python, если не используете другие ее функции (лично я использую ее только для C / C ++).

Когда библиотеки, зависящие от семантического режима,загружаются, они устанавливают imenu-create-default-create-index и imenu-default-goto-function, в результате чего imenu использует семантику вместо функции imenu python.el.

Чтобы отключить семантическую поддержку ваших файлов python, вы можете настроить semantic-new-buffer-setup-functions, добавляя только записидля режимов, для которых вы хотите семантическую поддержку, например.в вашем семантическом хуке (или, альтернативно, с помощью пользовательского интерфейса настройки),

(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)
        ))
...