[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