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