Rimuovere codice inutilizzato in Swift

Andrea Mengoli
3 min readOct 8, 2021

--

Al termine di una migrazione, di un refactor, ma anche alla fine dello sviluppo di una feature la domanda è sempre la stessa: “sono sicuro di aver fatto un lavoro pulito e aver tolto tutto quello che non serve piu?”

No, nonostante la PR review, difficilmente si è sicuri al 100%.

Probabilmente è inutile sottolineare quanto sia importante avere una codebase pulita, che condivida architettura e stile di programmazione; diventa quindi necessario fare questo tipo di intervento di code gardening.

Manualmente però è molto complesso e soggetto a sviste; per questo motivo ho cercato soluzioni automatizzate e tra tutte quella che mi è piaciuta di più si chiama Periphery.

Periphery

Tool open-source del quale è possibile approfondire direttamente nella repo Github, permette di identificare a build time tutte le parti di codice che non vengono usate in alcun modo.

👨‍🏫 In soldoni come funziona?
🙋‍♂️ “Builda” il progetto e sfrutta l’indicizzazione per costruirsi un grafo delle referenze. A questo punto percorrendo questo grafo al contrario è in grado di evidenziare ciò che è inutilizzato.

Periphery è in grado di scovare class, struct, protocol, function, property, constructor, enum, typealias, associatedtype .

Si può lanciare sia da terminale che integrarlo in Xcode. Per una questione puramente di gusto personale e comodità ho preferito la soluzione con Xcode.

Gli step di integrazione sono semplicissimi; bisogna creare un nuovo target dedicato, e tra le sue build phases aggiungere il comando che lancia Periphery: periphery scan.

Dopodiché al run del progetto Periphery inizierà a scansionare l’app e a riportare tanti warning quanto codice inutilizzato viene trovato.

Configurazione di Periphery

Per funzionare a dovere ha bisogno di alcune informazioni che di norma riceve nel comando stesso.

  • Progetto
  • Schema
  • Target
  • Eventuali path da escludere
  • Configurazioni legate ad Xcode e verbosità

Ecco un esempio di comando:

periphery scan --project PROJNAME.xcodeproj --schemes TESTSCHEME --targets TARGET --report-exclude PATH/TO/FILE/TO/IGNORE/* --clean-build --format Xcode

💡 Molto comoda ma meno pubblicizzato è la possibilità di aggiungere al progetto un file di configurazione .periphery.yml nel quale andare a parameterizzare tutti i valori a disposizione.

esempio di configurazione con tutti i parametri disponibili

Una volta sistemato secondo le proprie preferenze e aggiunto questo file nel progetto dalla build phase basterà lanciare periphery scan e il gioco sarà fatto.

Per concludere

Ecco qualche numero: l’output dell’utilizzo di Periphery su un progetto che pensavo fosse tutt’altro che così ricco di codice superfluo.

Eh si, rimuovere codice spesso aiuta a riscrivere anche meglio alcune cose.

Periphery ha pienamente risposto alle mie esigenze e mi ha aperto un mondo sulle possibili evoluzioni. Sarebbe infatti interessante esplorare un’ automatizzazione di questi check per sfruttarla magari in fase di creazione di pull request, per fornire allo sviluppatore una prima review automatica e di grande impatto.

🇺🇸 Qui la versione in inglese.

--

--