Можно ли реализовать завершение кода Python в TextMate? - PullRequest
20 голосов
/ 21 октября 2008

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

Ответы [ 4 ]

9 голосов
/ 30 октября 2008

РЕДАКТИРОВАТЬ: я на самом деле взял ваш код выше и интегрирован в команду. Он правильно покажет список завершения для выбора.

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

-

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

Да, кстати, он называется PySmell - без трейлинга ')

4 голосов
/ 21 октября 2008

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

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

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

1 голос
/ 09 января 2009

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

0 голосов
/ 22 октября 2008

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

...