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, установите «вход: весь документ», «вывод: вставить как текст», «активация: эквивалент ключа: 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, набрал «url импорта» и нажал «alt + escape», и он завершил «import urllib»!
Как я уже сказал, это полностью незавершенное производство, поэтому пока не используйте его ..
Последнее обновление:
orestis интегрировал это в код проекта PySmell! Дальнейшее возмущение произойдет на github