[Python] piccolo editor con autocompletamento del codice
germano carella
germano.carella a gmail.com
Lun 6 Lug 2015 17:26:04 CEST
Salve a tutti,
Rieccomi a rompere le scatole... lo so, lo so...
Ho per il momento lasciato da parte il discorso PyQt5, perché Phil
Tomson sta studiando il problema accessibilità... ma è stato molto
collaborativo e questo mi rincuora non poco.
Nel frattempo però, vorrei proseguire col mio lavoro, anche se a
rilento, di creare un editor accessibile con autocompletamento del codice.
Intanto sto usando il .net, con python for .net, che lavora bene coi
windows forms, che sono accessibili di default...
Ho diviso l'interfaccia grafica dal resto, quindi non sarà un problema
usarne un'altra.
Comunque, veniamo al problema:
per l'autocompletamento sto usando rlcompleter, che fa quello che deve
fare, nel senso che mi completa parole chiave, membri di moduli, di
classi... insoma tutto.
Il guaio è che quando sono all'interno di una funzione e assegno una
variabile, foss'anche una lista o un dizionario, non ho modo di
completare i suoi membri.
Mentre scrivo il codice c'è una code.InteractiveConsole che lavora in
background, a cui vengono passate le linee del codice che scrivo
nell'editor col metodo push.
Ora, fin quando siamo a livello di modulo, le istruzioni vengono
eseguite in realtime e posso recuperare le variabili assegnate dal
namespace che ho assegnato all'istanza di InteractiveConsole; fin qui
tutto ok.
Però, quando inizio a scrivere una classe, o una funzione,
InteractiveConsole non aggiorna il suo namespace fino a quando non
ritiene che la funzione o la classe sia terminata; il contenuto viene
messo nel buffer e viene eseguito solo alla fine.
Ciò vuol dire che in quel momento non posso completare mai le variabili
che istanzio all'interno della funzione o della classe.
Facciamo un esempio (tenete conto che le indentazioni le faccio di un
solo spazio, sennò non ci sto nella riga del display braille che è di
quaranta caratteri)
class prova(object):
def __init__(self):
self.l = list()
self.l. # e qui mi dovrebbero comparire i membri di list, che però
giustamente non compaiono, perché la console non ha finito di eseguire
il codice.
Ora, c'è secondo voi un modo di utilizzare l'autocompletamento anche in
questo senso? Un debugger? un analizzatore di codice? O forse qualche
altra idea che ora non mi viene in mente?
O magari istanziare una console temporanea che resta in vita solo mentre
sto scrivendo la classe e le faccio credere che tutte le variabili siano
a livello del suo namespace... ma devo lavorare di stringhe, togliendo
self e indentazioni varie... non so... sono bloccato.
Ciao!
Maggiori informazioni sulla lista
Python