Довольно ограниченное количество веревочных карт, встречающихся с несколькими привязками имен - PullRequest
1 голос
/ 15 ноября 2010

Я получаю некоторые разочаровывающие завершение и переход к определению результаты с ropemacs в местах, где я использую несколько привязок имен к одному и тому же объекту.

Принимая во внимание мой придуманный и стилистически сложный пример кода, приведенный ниже, кто-нибудь знает, почему веревка не будет отображать дополнения или результаты определения?

Пример кода проекта:

from Package import BigObjectWithLotsOfMethods

class GLOBAL:
    variable = None

big = BigObjectWithLotsOfMethods()
GLOBAL.variable = big

Рассматриваемое поведение Emacs:

Когда я ввожу:

big. 

, затем введите M - / , я получаю список подходящих имен методов, как и ожидалось.Ура для веревки!

Еще с другой стороны, когда я ввожу:

GLOBAL.variable.

например, а затем набираю M - / Я получаю следующее в Emacsминибуфер:

Completions for GLOBAL.variable.: [No Match]

Кроме того, представьте себе, fire() был метод BigObjectWithLotsOfMethods, тогда набрав Cc g в коде GLOBAL.variable.fire() не требуетсяВ соответствии с определением fire(), как и ожидалось, в минимафере Emacs просто выводится следующее:

Cannot find the definition! 

Поскольку GLOBAL.variable представляет просто другое имя, связывающее экземпляр BigObjectWithLotsOfMethods, я удивлен, что веревкане делает что-то умное, например выводит определение из того, что ему известно о big.

Вопрос:

Почему такой явно тривиальный уровень поддержки кодаСамоанализ при наличии нескольких имен привязки не работает под веревкой?Я упускаю что-то фундаментальное в моей конфигурации проекта веревки, которая обращается к этому, например?

Любая помощь с благодарностью получена.

1 Ответ

0 голосов
/ 16 ноября 2010

Можно было бы предположить, что, поскольку вы вводите один уровень косвенности, эта веревка перестает быть умной.

Примечание. Я давно не играл с Rope, потому что обнаружил, что она мешает больше, чемэто помогло.Также это было немного медленно.Чаще всего используется M-/ с комбинацией pyflakes / flymake вместо emacs.(Одним из недостатков M-/ является то, что вы должны набрать метод в первый раз).Конечно, если бы Rope начал давать больше ударов и стоить меньше денег, я мог бы испытать желание вернуться к нему.

Интересно, достаточно ли умен py-dev, pycharm, чтобы справиться с этим?

...