scyther/src/find-unused-functions.py

60 lines
1.4 KiB
Python
Executable File

#!/usr/bin/python
import commands
import sys
def findfunctions(excludes):
"""
Extract functions from tags file
"""
fh = open("tags",'r')
dict = {}
for l in fh.readlines():
data = l.strip().split('\t')
if len(data) >= 4:
fn = data[0]
sourcefile = data[1]
etype = data[3]
if not fn.startswith("!_TAG_"):
if sourcefile not in excludes:
if etype in ['f']:
dict[fn] = sourcefile
return dict
def main():
args = []
if len(sys.argv) > 0:
args = sys.argv[1:]
mincount = 0
if len(args) > 0:
mincount = int(args[0])
""" Force indent """
cmd = "indent *.c *.h"
output = commands.getoutput(cmd)
""" Force ctags """
cmd = "ctags *.c *.h"
output = commands.getoutput(cmd)
excludes = ['scanner.c','scanner.h','parser.c','parser.h']
fnames = findfunctions(excludes)
for fname in fnames.keys():
"""
The ..* construct makes sure that function definitions are
skipped (based on the indent settings
"""
cmd = "grep '..*%s' *.c" % (fname)
#print cmd
output = commands.getoutput(cmd).splitlines()
if len(output) <= mincount:
print "%s\t%s" % (fnames[fname],fname)
if len(output) > 0:
print output
if __name__ == '__main__':
main()