Sublime Text 3: как можно поработать с командой goto_definition?

#python #plugins #command #sublimetext3

#python #Плагины #команда #sublimetext3

Вопрос:

Это не запрос переназначения клавиатуры. Моя текущая дилемма заключается в невозможности редактировать goto_definition команду (привязанную к F12 по умолчанию). Если бы я мог найти для нее файл .py, это было бы (надеюсь) проще простого.

Больший объем моего проекта требует, чтобы я изменил функциональность goto_definition , чтобы она была более похожа на эквивалентную функцию в CodeWright. Я работаю в ST3, и возврат к ST2 не является вариантом.

Позвольте мне более четко рассказать о моих препятствиях:

  • Найдите файл .py, который содержит информацию, которая goto_definition используется при его запуске.

  • Измените природу этой команды, чтобы она была немного более гибкой:

    • По сути, существует несколько методов, EditElementHandleR , MSBsplineCurveCR GetElementDescrP GetModelRef ,,,,,,,,,,, и несколько других схожего характера.

    • К некоторым из них добавлены «теги», и если имя метода должно содержать тег, это будет один из следующих четырех: CR , CP , R и P .

    • Существуют также методы с этими именами, без тегов.

    • Поведение CodeWright при переходе программиста к определению заключается в указании на эквивалентное имя метода без тегов, даже если курсор в данный момент находился на имени метода с тегами.

    • Sublime не может найти исходный метод, если я нажимаю F12 (напомним: goto_definition ), пока курсор находится в «помеченном» имени метода.

Вот идеальная ситуация: мой курсор находится в методе с именем EditElem|entHandleR ( | обозначает курсор), и я нажимаю F12 . Затем Sublime приводит меня к EditElementHandle определению.

Ответ №1:

К сожалению, goto_definition не реализован на Python, это часть скомпилированного исполняемого файла Sublime (в основном написанного на C ), поэтому он не может быть изменен пользователем. Однако доступно несколько плагинов code intelligence, включая SublimeCodeIntel и Anaconda , которые могут быть более приспособлены к вашим потребностям. Анализ кода — это не волшебство, он просто использует (в вашем случае нечеткий) поиск, чтобы сопоставить то, что находится под курсором, с тем, что находится в индексе языковой библиотеки. Все, что вам нужно было бы сделать, это немного изменить логику поиска, чтобы проверить возможное присутствие одного из ваших «тегов», и просто игнорировать его. Возможно, вы даже сможете написать оболочку для goto_definition , которая сделает это за вас, и не утруждать себя изучением большой кодовой базы. API Sublime должен помочь, как и пристальный взгляд на исходный код sublime.py и sublime_plugin.py , поскольку существуют некоторые недокументированные функции.

Комментарии:

1. «К сожалению, goto_definition не реализовано в Python» — это неправда — это в Packages/Default/symbol.py

2. @KeithHall теперь, почему я не мог найти это, когда искал 2 1/2 года назад? Я думаю, я перепишу свой ответ. Спасибо за предупреждение!