#!/usr/bin/python # must be started in the npc dir import os import re from optparse import OptionParser parser = OptionParser() parser.add_option("-v", "--verbose", dest="verbose", action="store_true", default=False, help="show the occurrences of that var") parser.add_option("-f", "--file", dest="fname", default="", help="inspect that file", metavar="FILE") parser.add_option("-l", "--localvariables", dest="localvars", action="store_true", default=False, help="show local variables as well") (options, args) = parser.parse_args() def handleFile(fname): f = open(fname) lines = f.readlines(); f.close() rm=[] for l in lines: #remove comments line = l.split(r"//")[0] sp = line.split() # no set command? if not "set" in sp: continue # ignore those lines printing messages if 'mes "' in line: continue #ignore anything before the "set" command: sp = sp[sp.index("set")+1:] line = "".join(sp) endpos = line.find(",") #check for comma if endpos>0: #ok its a oneliner, the comma is in the same line: varname = line[0:endpos].strip() assignment = line[endpos+1:].strip()[:-1] # remove semicolon if assignment != "0": if varname.startswith("@") and not options.localvars: continue if varname.startswith("$"): continue if varname in allvars: if not fname in allvars[varname]: allvars[varname] += [fname] else: allvars[varname] = [fname] else: #print fname if fname == "." + os.sep + "functions" + os.sep + "clear_vars.txt": rm += [varname] else: # ok error, you need to check manually: print "\tline:\t",line return rm if options.fname: path=options.fname else: path=".."+os.sep+"npc" allvars = {} rmvars = [] print "please check manully for vars in here:" os.chdir(path) for tpl in os.walk("."): for fname in tpl[2]: rmvars += handleFile(tpl[0]+os.sep+fname) unusedcounter=0 usedcounter=0 print "These variables are found in the scripts, which are deleted in clear_vars" for var in allvars: if not var in rmvars: continue unusedcounter+=1 print "\t",var if options.verbose: for fname in allvars[var]: print "\t","\t", fname print "These variables are valid variables of the scripts:" for var in allvars: if var in rmvars: continue usedcounter+=1 print "\t",var if options.verbose: for fname in allvars[var]: print "\t","\t", fname print "number of vars used:", usedcounter print "number of vars cleared:", unusedcounter