Domanda

PySmell sembra un buon punto di partenza.

Penso che dovrebbe essere possibile, idehelper.py di PySmell fa la maggior parte delle cose complesse, dovrebbe essere solo un caso di darle la linea corrente, offrendo i completamenti (il bit I non sono sicuro di) e quindi sostituire la linea con quella selezionata.

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

Non sarà mai perfetto, ma sarebbe estremamente utile (anche se solo per completare i moduli stdlib, che non dovrebbero mai cambiare, quindi non dovrai rigenerare costantemente il file PYSMELLTAGS ogni volta che aggiungi una funzione)


Progredire! Ho le basi del completamento in atto - funziona a malapena, ma è vicino ..

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

Inserisci quanto segue in uno script bundle TextMate, imposta "input: intero documento", "output: inserisci come testo", "attivazione: equivalente chiave: alt + esc", selettore ambito: 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

Quindi ho creato un nuovo documento Python, ho digitato " import urll " e premi alt + escape, e lo completa in " import urllib " ;!

Come ho detto, è interamente un work-in-progress, quindi non usarlo ancora ..


Ultimo aggiornamento:

orestis lo ha integrato nel codice del progetto PySmell! Qualunque ulteriore armeggiamento accadrà su github

È stato utile?

Soluzione

EDIT: ho effettivamente preso il tuo codice sopra e integrato in un comando. Mostrerà correttamente un elenco di completamento tra cui scegliere.

Puoi prenderlo qui: http://github.com/orestis/pysmell/tree / master (premi download e esegui python setup.py install). È difficile ma funziona. - segnala eventuali errori su http://code.google.com/p/pysmell/

-

Ciao, sono lo sviluppatore di PySmell. Uso anche un Mac, quindi se puoi inviarmi un'e-mail (le informazioni di contatto sono nel codice sorgente) con i tuoi progressi finora, posso provare a integrarlo :)

Oh BTW si chiama PySmell - nessuna "s" finale

Altri suggerimenti

Questo non è esattamente quello che stai cercando, ma potrebbe essere in grado di iniziare:

Uso di TextMate con Django

Sembrano essere in qualche modo specifici di Django ma alcuni frammenti possono aiutarti con le tue esigenze. Potresti anche essere in grado di costruirti sopra con PySmells.

Non è perfetto, ma puoi provarlo: http://mtod.org/tempy

In TextMate PHP ha un semplice completamento automatico sotto forma di set di nomi di funzioni codificati. Sembra brutto come PHP, ma in pratica è abbastanza buono per essere utile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top