PySmell似乎是一个很好的起点。
我认为应该是可行的,PySmell的idehelper.py
可以处理大多数复杂的事情,这只是给它当前行,提供补全(我不确定的一点),然后用选择一个。
>>> import idehelper
>>> # The path is where my PYSMELLTAGS file is located:
>>> PYSMELLDICT = idehelper.findPYSMELLDICT("/Users/dbr/Desktop/pysmell/")
>>> options = idehelper.detectCompletionType("", "" 1, 2, "", PYSMELLDICT)
>>> completions = idehelper.findCompletions("proc", PYSMELLDICT, options)
>>> print completions
[{'dup': '1', 'menu': 'pysmell.pysmell', 'kind': 'f', 'word': 'process', 'abbr': 'process(argList, excluded, output, verbose=False)'}]
它永远不会是完美的,但是它将非常有用(即使只是为了完成不应更改的stdlib模块,因此您每次添加功能时都不必不断重新生成PYSMELLTAGS文件)
进步!我已经完全完成了基本工作-几乎行不通,但是已经接近了。
我跑了
python pysmells.py /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/*.py -O /Library/Python/2.5/site-packages/pysmell/PYSMELLTAGS
将以下内容放置在TextMate bundle 脚本中,设置“输入:整个文档”,“输出:以文本形式插入”,“激活:等效项:alt + esc”,“作用域选择器:source.python”
#!/usr/bin/env python
import os
import sys
from pysmell import idehelper
CUR_WORD = os.environ.get("TM_CURRENT_WORD")
cur_file = os.environ.get("TM_FILEPATH")
orig_source = sys.stdin.read()
line_no = int(os.environ.get("TM_LINE_NUMBER"))
cur_col = int(os.environ.get("TM_LINE_INDEX"))
# PYSMELLS is currently in site-packages/pysmell/
PYSMELLDICT = idehelper.findPYSMELLDICT("/Library/Python/2.5/site-packages/pysmell/blah")
options = idehelper.detectCompletionType(cur_file, orig_source, line_no, cur_col, "", PYSMELLDICT)
completions = idehelper.findCompletions(CUR_WORD, PYSMELLDICT, options)
if len(completions) > 0:
new_word = completions[0]['word']
new_word = new_word.replace(CUR_WORD, "", 1) # remove what user has already typed
print new_word
然后,我制作了一个新的python文档,键入“import urll”,然后按alt + escape,它完成了对“import urllib”的导入!
正如我所说,这完全是一个进行中的工作,因此请不要使用它。
最后更新:
orestis已将其集成到PySmell项目的代码中!任何进一步的摆弄都会发生on github
最佳答案
编辑:我实际上已经把您的代码放在上面并集成到命令中。它将正确显示完成列表供您选择。
您可以在这里获取它:http://github.com/orestis/pysmell/tree/master(点击下载并执行python setup.py安装)。这很粗糙,但是有效。 -请报告有关http://code.google.com/p/pysmell/的任何错误
-
嗨,我是PySmell的开发人员。我也使用Mac,因此,如果您可以向我发送电子邮件(联系信息在源代码中)以及到目前为止的进展,我可以尝试将其集成:)
哦,顺便说一句,它叫做PySmell-没有尾随的's':)