2008-10-21 8 views
20

PySmell parece ser un buen punto de partida.¿Es posible implementar el completado de código Python en TextMate?

Creo que debería ser posible, PySmell's idehelper.py hace la mayoría de las cosas complejas, solo debería ser una cuestión de darle la línea actual, ofreciendo las terminaciones (el bit del que no estoy seguro) y luego reemplazando la línea con la seleccionada.

>>> 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)'}] 

Nunca será perfecta, pero sería extremadamente útil (aunque sólo sea por completar los módulos stdlib, que nunca debe cambiar, por lo que no tiene que regenerarse constantemente el archivo PYSMELLTAGS cada vez que agrega una función)


Progreso! Tengo la absoluta-fundamentos de la finalización en el lugar - apenas funciona, pero está cerca ..

me encontré python pysmells.py /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/*.py -O /Library/Python/2.5/site-packages/pysmell/PYSMELLTAGS

Coloque el siguiente en una secuencia de comandos paquete TextMate, ajuste "Entrada: documento completo", "Salida: insertar como texto", "activación: clave equivalente: Alt + Esc", "selector de alcance: 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 

Entonces hice un nuevo documento pitón, mecanografiado "URLL importación" y pulsar Alt + escape, ¡y lo completó para "importar urllib"!

Como ya he dicho, es totalmente una obra en curso, por lo que no deberá ser utilizado sin embargo ..


Última actualización:

orestis ha integrado esta en el proyecto de PySmell ¡código! Cualquier tocar el violín más sucederá on github

Respuesta

9

EDITAR: He tomado su código anterior e integrado en un comando. Se mostrará correctamente una lista de finalización para que usted elija.

Puede obtenerlo aquí: http://github.com/orestis/pysmell/tree/master (pulse descargar y realice la instalación de python setup.py). Es rudo pero funciona. - Por favor, informa de los errores en http://code.google.com/p/pysmell/

-

Hola, soy el desarrollador de PySmell.También uso una Mac, así que si me puedes enviar un correo electrónico (la información de contacto está en el código fuente) con tu progreso hasta ahora, puedo tratar de integrarlo :)

Oh, por cierto, se llama PySmell - no está por detrás ' s':)

+0

me había dado cuenta recientemente las confirmaciones relacionadas con TextMate en el proyecto github. Pensé que el código parecía familiar, pero pensé que era una coincidencia ..: D – dbr

3

Esto no es exactamente lo que estás buscando, pero que podría ser capaz de empezar:

Using TextMate with Django

que parecen ser un tanto Django específicos, pero algunos fragmentos puede ayudar con sus necesidades. También puede construir sobre eso con PySmells.

0

En TextMate PHP tiene una simple finalización automática en forma de conjunto de nombres de funciones codificadas. Suena tan feo como PHP, pero en la práctica es lo suficientemente bueno para ser útil.

Cuestiones relacionadas