nWire è un plugin per eclipse Galileo e per Zend Studio 7 che offre la possibilità di navigare nel codice in maniera veloce e intuitiva.
Si propone come uno strumento indispensabile per la gestione di grandi progetti con migliaia di file e centinaia di classi da gestire.
Gli IDE di ultima generazione hanno ormai tutti integrati dei sistemi di analisi del codice, che semplificano la navigazione del codice, permettendo ad esempio di saltare con un click al punto in cui una costante è stata definita; oppure di saltare alla definizione di una classe semplicemente cliccando sul nome della classe stessa.
Tutte queste semplificazioni aiutano il programmatore a muoversi con maggiore agilità all‘interno del progetto.
Purtroppo però data l‘incredibile versatilità del php l‘editor non è sempre in grado di capire di che tipo è una determinata variabile;

In aiuto vengono i commenti nel formato PHPDoc che forniscono preziose informazioni all‘inspector.

Altri, come Zend Studio ad esempio, propongono anche una sintassi di commenti comprensibile dal suo inspector, in modo da istruirlo sul tipo di variabile:

Ovviamente tutte queste soluzioni impongono al programmatore uno stile di codice che magari non gli appartiene, ma che è costretto a rispettare se vuole godere dei benefici dell‘inspector.
Proprio qui entra in gioco nWire, che offre molte più possibilità dell‘inspector nativo dell‘editor, ma non obbliga a mantenere uno stile di codifica differente da quello che si è abituati a usare.
Installazione
L‘installazione è semplicissima; grazie anche alle funzionalità (decisamente migliorate) di Eclipse Galileo nella gestione dei repository di plugins.
Basta infatti aggiungere un nuovo sito nella sezione dedicata alla gestione dei siti, ed ecco che le funzionalità di questo plugin sono pronte per essere installate.

Il plugin offre 2 vesti diverse, una specifica per PHP e una specifica per JAVA, ovviamente ho provato quella dedicata a PHP.

Primo impatto
A dire il vero sono rimasto sorpreso, immaginavo che questo plugin una volta installato mi inondasse l‘IDE con pulsanti inutili e con pannelli criptici, e invece non ho notato nessun cambiamento nel‘IDE, tanto da credere che fosse andato qualcosa storto nell‘installazione.
Dopo qualche minuto a spulciare la documentazione ho notato i due pulsanti che erano stati aggiunti nella barra in alto.

Il pulsante a sinistra una volta cliccato apre l‘overview testuale dell‘inspector, quello a destra apre invece la ricerca veloce.
Inoltre è stata aggiunta una nuova voce nel menù contestuale del progetto che permette di abilitare o disabilitare l‘inspector su quel progetto.

L‘overview
Qui la cosa si fa interessante. L‘overview le legata all‘editor: si aggiorna al volo mostrando il contesto in cui il cursore si trova in quel momento, se ad esempio il cursore si trova all‘interno di una classe, ma all‘esterno dei metodi, l‘overview fa partire la sua analisi dalla classe, mostrandoci l‘elenco dei metodi e delle proprietà, quante volte la classe viene istanziata, il partent. etc. Se ci spostiamo sul nome di un metodo, ecco che la visuale cambia, e il focus si concentra sul metodo, mostrandoci cose come i metodi di cui questo fa l‘override, quante volte è invocato, quali proprietà della classe intacca, etc.

Una volta indicato cosa ispezionare il plugin fornisce queste informazioni:
- la classe parent e tutte le eventuali classi che estendono questa
- quante volte e dove è istanziata una classe
- quante volte e dove è usata una istanza di quella classe
- quali metodi (nell‘intero scope del progetto) restituiscono un oggetto che è una istanza di quella classe
- quante volte e dove un metodo viene invocato
- quali metodi e funzioni un metodo invoca
- quante volte e dove un file è incluso
- quali metodi modificano la proprietà di una classe

Ovviamente è possibile navigare anche usando l‘overview stessa, basta cliccare l‘elemento che si vuole ispezionare e si apre un nuovo pannello sulla destra che mostra le informazioni desiderate e così via.
Prestazioni
Temevo che l‘indicizazione del progetto da parte di questo plugin inchiodasse l‘IDE, invece impiega un po‘ meno del tempo che ci mette Zend Studio a fare la build del progetto stesso. La parte scocciante è forse solo quando il plugin si accorge di modifiche strutturali al codice e lancia di nuovo l‘indicizazione, questo inchioda l‘editor per qualche secondo; ma è un settaggio che si può modificare nelle preferenze del plugin stesso.
Per completezza riporto un po‘ di dati sullo scenario in cui ho provato nWire:
Grandezza del progetto: +60MB di file sorgenti
Numero di classi: +6.000
Computer: MAC Pro dual Core con 2 GB di ram
Overview Grafica
Sinceramente non l‘ho trovata molto utile. Non è altro che la visualizzazione con blocchi e frecce dell‘overview testuale. Navigabile alla stessa maniera, ma che non offre nulla in più. A mio avviso sarebbe stato un ottimo addon anche senza questa funzionalità

Ricerca rapida
L‘ho trovata davvero utile! Un aggiunta molto potente alla ricerca integrata nell‘IDE, la funzionalità che più mi ha colpito è quella che permette la ricerca in base al CameCase dei nomi: basta infatti scrivere nella ricerca “gH“ e è come aver scritto “g*H*“.

Conclusioni
Sono convito che se si manutiene un progetto di grosse dimensioni e si intende refattorizzare spesso l‘architettura del codice, questo sia uno strumento più che indispensabile. L‘ho usato per solo 2 ore e ho trovato decide i posti in cui non avevo aggiornato il codice per adeguarlo ad un refactoring recente (si lo so... i tests... ma non tutti i meandri del progetto sono coperti dai tests, non scordate che sono 60MB di sorgenti!).
Sul costo non mi esprimo (59$ per la versione solo PHP), visto che secondo la mia esperienza, se un tool è indispensabile al proprio lavoro.. il costo è l‘ultimo aspetto da considerare. Una nota però va fatta: i ragazzi di nWire offrono una copia gratuita del plugin se si possiede un blog e si scrive un post che lo valuti ;)
- Arsenio Siani's blog
- Login per inviare commenti


