2010-11-15 40 views
1

Je reçois un peu décevant achèvement et go-to-définition résultats avec ropemacs dans des endroits où j'utiliser plusieurs nom-bindings pour le même objet. Compte tenu de mon exemple de code inventé et contesté ci-dessous, est-ce que quelqu'un sait pourquoi corde ne présenterait pas des complétions ou des résultats de définition?Une limitation assez ringardes des ropemacs rencontrés avec plusieurs liaisons de nom

exemple de code du projet:

from Package import BigObjectWithLotsOfMethods 

class GLOBAL: 
    variable = None 

big = BigObjectWithLotsOfMethods() 
GLOBAL.variable = big 

comportement Emacs en question:

Quand je rentre:

big. 

puis tapez M-/, je reçois un liste des noms de méthodes candidates comme prévu. Vive la corde!

Pourtant, d'autre part quand je rentre:

GLOBAL.variable. 

par exemple, puis tapez M-/ je reçois ce qui suit dans Emacs minibuffer:

Completions for GLOBAL.variable.: [No Match] 

En outre, s'il vous plaît Imaginez fire() était une méthode de BigObjectWithLotsOfMethods puis en tapant Ccg sur le code GLOBAL.variable.fire() ne me prend pas à la définition de fire() comme prévu, mais plutôt juste produit les éléments suivants dans le Emacs minibuffer:

Cannot find the definition! 

Depuis GLOBAL.variable représente simplement un autre nom de liaison à l'instance BigObjectWithLotsOfMethods Je suis surpris que la corde ne fait pas quelque chose intelligent comme inférer la définition de ce qu'il sait sur big.

La question:

Pourquoi un tel niveau de soutien apparemment trivial pour l'introspection de code en présence de plusieurs noms de liaison ne fonctionne pas dans la corde? Ai-je manqué quelque chose de fondamental dans ma configuration de projet de corde qui aborde ceci par exemple?

Toute aide reçue avec gratitude.

Répondre

0

On pourrait imaginer que parce que vous introduisez un niveau d'indirection, cette corde n'est plus intelligente.

Note Je n'ai pas joué avec Rope depuis un moment parce que je l'ai trouvé gênant plus que aidé. De plus, c'était un peu lent. Principalement en utilisant M-/ avec une combinaison de pyflakes/flymake à la place sur emacs. (Un inconvénient à M-/ étant que vous devez taper la méthode la première fois). Bien sûr, si Rope commençait à donner plus de bang et coûtait moins cher, je serais peut-être tenté de le revoir.

Je me demande si les moteurs py-dev, pycharm sont assez intelligents pour gérer cela.