Подтвердить что ты не робот

Возможно ли реализовать завершение кода Python в TextMate?

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

4b9b3361

Ответ 1

EDIT: я действительно взял ваш код и интегрировал его в команду. Он правильно отобразит список завершений для вас.

Вы можете получить его здесь: http://github.com/orestis/pysmell/tree/master (нажмите скачать и установить python setup.py install). Это грубо, но это работает. - сообщите о любых ошибках http://code.google.com/p/pysmell/

-

Привет, я разработчик PySmell. Я также использую Mac, поэтому, если вы можете отправить мне электронное письмо (контактная информация находится в исходном коде) с вашим прогрессом, я могу попытаться его интегрировать:)

О, BTW, он назвал PySmell - no trailing 's':)

Ответ 2

Это не совсем то, что вы ищете, но возможно, вы сможете начать:

Использование TextMate с Django

Они кажутся несколько специфичными для Django, но некоторые фрагменты могут помочь с вашими потребностями. Вы также можете построить поверх этого с помощью PySmells.

Ответ 3

Это не идеально, но вы можете попробовать: http://mtod.org/tempy

Ответ 4

В TextMate PHP имеет простое автозаполнение в виде жестко заданного набора имен функций. Звучит как уродливый, как PHP, но на практике он достаточно хорош, чтобы быть полезным.