PySmell似乎是一个很好的起点。
我认为这应该是可能的,PySmellidehelper.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 捆绑脚本中,设置“输入:整个文档”、“输出:插入为文本”、“激活:等效键: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 url”,按alt+escape,就完成了“import urllib”!
正如我所说,这完全是一个正在进行中的工作,所以不要使用它..
最后更新:
orestis 已将其集成到 PySmell 项目的代码中!任何进一步的摆弄都将在 github 上进行