É possível implementar Python código-conclusão no TextMate?
-
03-07-2019 - |
Pergunta
PySmell parece ser um bom ponto de partida.
Eu acho que deveria ser possível, idehelper.py
de PySmell faz a maioria do material complexo, deve ser apenas um caso de dar-lhe a linha atual, oferecendo-se as conclusões (o pouco que eu não estou certo sobre) e, em seguida, substituindo o linha com o selecionado.
>>> 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)'}]
Isso nunca vai ser perfeito, mas seria extremamente útil (mesmo que apenas para completar os módulos stdlib, que nunca deve mudar, para que você não terá que constantemente regenerar o arquivo PYSMELLTAGS sempre que você adicionar uma função)
Progredindo! Eu tenho a absoluta-básico de conclusão no lugar - apenas funciona, mas é perto ..
Eu corri 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 o seguinte em um script TextMate bundle, set "input: documento inteiro", "saída: inserção como texto", "ativação: chave equivalentes: alt + esc", "seletor de escopo: 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
Então eu fiz um novo documento python, digitei "urll importação" e hit alt + escape, e completou-o para "urllib importação"!
Como eu disse, é inteiramente uma obra em andamento, por isso não usá-lo ainda ..
Última actualização:
Orestis integrou esta em código do projeto PySmell! Qualquer outra mexer vai acontecer no github
Solução
EDIT: Eu realmente levou seu código acima e integrados em um comando. Ela vai mostrar corretamente uma lista de conclusão para você escolher.
Você pode agarrá-lo aqui: http://github.com/orestis/pysmell/tree / master (download batida e não python setup.py install). É difícil, mas ele funciona. - Por favor relate quaisquer erros na http://code.google.com/p/pysmell/
-
Oi, eu sou o desenvolvedor PySmell. Eu também uso um Mac, por isso, se você pode me enviar um e-mail (informações de contato é no código fonte) com o seu progresso até agora, eu posso tentar integrá-lo:)
Oh BTW é chamado PySmell - 's' não à direita:)
Outras dicas
Isto não é exatamente o que você está procurando, mas ele pode ser capaz de começar:
Eles parecem ser um pouco Django específico, mas alguns trechos podem ajudar com suas necessidades. Você também pode ser capaz de construir em cima do que com PySmells.
Não é perfeito, mas você pode experimentá-lo: http://mtod.org/tempy
Em TextMate PHP tem uma auto-realização simples na forma de um conjunto codificado de nomes de funções. Sons tão feio como PHP, mas na prática é bom o suficiente para ser útil.