Skip to content

ReformatCode una delle nuove funzionalità di Xojo2017r2

Una delle funzionalità introdotte dalla release Xojo2017r2 è la possibilità di scrivere uno script per modificare il codice man mano che lo scriviamo.

Già la release 2017r1 aveva introdotto la modifica del codice (rispetto delle regole delle formali di scrittura cfr Linee guida per scrivere il codice) che potevano essere attivate e disattivate dalle preferenze di Xojo.

Con la release 2017r2 possiamo personalizzare questa operazione con proprie regole formali o anche con vere e proprie nuove sostituzioni.

Il tutto è possibile scrivendo un IDE script che verrà caricato all’avvio di Xojo e che sostituisce il comando originale di riformattazione.

Questo script accede a quanto appena scritto o incollato e tramite un’analisi per token permette la riscrittura del codice.

Lo script deve chiamarsi ReformatCode.xojo_script ed essere presente nella cartella Script dell’installazione di Xojo. Pur essendo presente poi nel menù degli IDE script non sarà direttamente richiamabile in quanto deve contenere una Sub CleanBlock() che potrà essere richiamata dal modulo di formattazione dell’IDE.

All’interno di questa sub abbiamo a disposizione alcuni metodi del contesto come:

DebugLog(message As String)
che permette di stampare sul log di sistema una stringa
LineCount As Integer
che restituisce il numero di righe da riformattare
Line(i As Integer, Assigns s As String) e Line(i as Integer) as String
Per modificare e leggere una riga del testo da riformattare
NextToken As Boolean
Per sapere se c’è ancora un Token di testo oltre la riga
RemainingLine As String
che restituisce il resto della riga oltre i token (as esempio il commento)
TokenText As String
Per leggere il testo del Token corrente
TokenType As Integer
Per individuare il tipo di Token corrente (esistono tutte le costanti numeriche per identificare i vari Token)
StartTokenizer(code As String)
Che avvia il riconoscimento dei Token del codice passato (in genere la riga di testo)

Queste sono le funzionalità del contesto di riformattazione (parliamo sempre di uno script quindi vive in un contesto).

Ma oltre queste esiste una utile funzione che permette di leggere le costanti di un progetto ConstantValue(propName As String) As String e che permette quindi di attivare o meno certe funzionalità per la riformattazione.

Esempi di quello che è possibile fare sono diversi, sta all’abilità del programmatore e alle sue necessità.

Ad esempio è possibile, se presente un Modulo che gestisce le asserzioni e lo abbiamo attivato (quindi leggendo la costante del modulo) decidere di modificare

@assert(i>0, "Attenzione la variabile i risulta maggiore di zero")

in

#if ModuloAsserzioni.attivo
    ModuloAsserzioni.assert(i>0"Attenzione la variabile i risulta maggiore di zero)
#endif

O se abbiamo del codice tipo C o siamo abituati alle sue abbreviazioni possiamo scrivere:

a++

e quando andiamo a campo vederlo trasformato nel sintatticamente corretto per Xojo:

a=a+1
Il file si deve chiamare ReformatCode.xojo_script e deve esistere nella cartella Script dell’installazione di Xojo.
Questo file viene riconosciuto e compilato solo all’avvio di Xojo, quindi non è possibile verificare immediatamente le modifiche apportate ma va chiuso e rilanciato Xojo. Questo comporta una certa difficolta in caso di errori nella codifica in quanto il file non viene compilato correttamente e silenziosamente viene ignorato.