开发者

Eclipse pydev auto-suggestions don't work in some cases

开发者 https://www.devze.com 2022-12-31 18:54 出处:网络
My question is probably stupid and I hope somebody has succeeded in solving this issue. Sometimes I cannot see right suggestions in auto-completion box (Eclipse 3.5.2, PyDev 1.5.7). For example:

My question is probably stupid and I hope somebody has succeeded in solving this issue.

Sometimes I cannot see right suggestions in auto-completion box (Eclipse 3.5.2, PyDev 1.5.7). For example:

import em开发者_运维问答ail
fp = open('my.eml', 'rb')
msg = email.message_from_file(fp)

msg now is a Message object. And functions like get_payload() works fine.

msg.get_payload()

But I don't get get_payload() in auto-completion list.

I think PyDev has no idea of what msg is, so it doesn't know what to show.

Maybe I should import something else, not only email module?

Thanks in advance!


I struggled with this question quite a bit too, until I came across this link. I used the second solution suggested in that link, and it works like a charm.

Basically you need to insert assert isinstance(msg, Message) after you get msg from the function call.


Chances are, the current PyDev build hasn't gone to a point to be able to extract from a function (message_from_file() in your case) to know what kind of object it returns in order to provide auto-completion hinting.

See http://sourceforge.net/projects/pydev/forums/forum/293649/topic/3697707.

Edit: I believe there is interest in PyDev to support the new Python 3 function syntax, PEP 3107, which will solve some of your problems ... in the future.


I know @type in docstring works. As in:

from collections import deque

def foo(a):
''' code completion sample
@type a: deque
'''
return a.popleft()  # Code completion will work here

I have not been able to find a way to do it inline within code (except in ways mentioned elsewhere where you simply pretend to assign the variable an instance of a type) as in:

from collections import deque

def foo(a):
''' code completion sample '''
if false: a = deque()
return a.popleft()  # Code completion will also work here

But I'm not fond of this method because it probably imposes some performance / code size penalty. I don't know / haven't checked if Python is smart enough to remove this assignment during compile time.

Thanks to SiSoie, here's a link to page explaining possibilities.

0

精彩评论

暂无评论...
验证码 换一张
取 消