26 de gener 2010

Python: Llistar les funcions orfes

Quan es programa un projecte que amb el temps es va fent gran i més gran, sovint apareixen funcions que es queden orfes, que mai més les cridarem. Això passa perquè amb el temps hi ha funcions que havíem fet que perden la seva utilitat.

Per tenir un codi net, és interessant eliminar aquestes funcions que s'ens tornen obsoletes, per això he creat aquest programet, que el que fa és llistar les funcions que no es criden:
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os

funcions_utils = []
funcions_orfes = []
funcions = []
instancies = []
#funcions = os.popen ("ls -l")
print "start [OK]"
pop_funcions = os.popen ("grep \"def \" *.py | cut -d ' ' -f2")
for l in pop_funcions.readlines():
#elimina el salt de linia final:
aux = l[:-1]
aux = aux.split('(')[0]
funcions.append(aux)
print "llistat funcions [OK]"
util = False
for f in funcions:
pop_instancies = os.popen ("grep "+f+" *.py | cut -d':' -f2")
for inst in pop_instancies.readlines():
#elimina el salt de linia final:
i = inst[:-1]
instancies.append (i)
for i in instancies:
if not(i.startswith ("def ") or i.startswith("\tdef ") or "#" in i):
util = True
if util:
funcions_utils.append(f)
instancies = []
util = False
funcions_utils = set (funcions_utils)
funcions_orfes = filter(lambda x:x not in funcions_utils, funcions)
print "llista funcions orfes [OK]"
for f in funcions_orfes:
print f

NOTES:
Aquest programa no us servirà de gaire si poseu el símbol "#" a la mateixa línia de codi, és a dir si feu coses com aquestes:
res = nom_funcio()#a res hi poso el resultat

Tot i que sintàcticament és correcte, no sóc partidari de posar els comentaris d'aquesta manera, amb tot, no us serà gaire complicat modificar el codi d'aquest programa per a que també tingui en compte aquesta possibilitat.
També heu de tindre en compte que només revisa els fitxers *.py del mateix directori.
No hem faig responsable si aquest programa no fa el que dic que fa i.e. abans de borrar les funcions feliçment, verifiqueu a mà que realment no les fareu servir :P
Merda el codi no queda indexat... joders merda de blogspot... abans ho indexava bé... en fi, qui vulgui el codi del programa que ho digui en un comentari ;P