improve the find-unused-typedefs script
Change-Id: If4ab3bf8759c194e6005091d6df6a3a11cd633b7
This commit is contained in:
@@ -97,6 +97,7 @@ def in_exclusion_set( a ):
|
||||
return True;
|
||||
return False;
|
||||
|
||||
# find defines, excluding the externals folder
|
||||
a = subprocess.Popen("git grep -hP '^#define\s+\w+\s+' -- \"[!e][!x][!t]*\" | sort -u", stdout=subprocess.PIPE, shell=True)
|
||||
|
||||
with a.stdout as txt:
|
||||
|
||||
@@ -2,8 +2,11 @@
|
||||
|
||||
import subprocess
|
||||
|
||||
a = subprocess.Popen("git grep -P '^typedef\s+.+\s+\w+;' -- \"[!e][!x][!t]*\"", stdout=subprocess.PIPE, shell=True)
|
||||
# find typedefs, excluding the externals folder
|
||||
a = subprocess.Popen("git grep -P 'typedef\s+.+\s+\w+;' -- \"[!e][!x][!t]*\"", stdout=subprocess.PIPE, shell=True)
|
||||
|
||||
# parse out the typedef names
|
||||
typedefSet = set()
|
||||
with a.stdout as txt:
|
||||
for line in txt:
|
||||
idx2 = line.rfind(";")
|
||||
@@ -12,6 +15,20 @@ with a.stdout as txt:
|
||||
if typedefName.startswith("*"):
|
||||
typedefName = typedefName[1:]
|
||||
# ignore anything less than 5 characters, it's probably a parsing error
|
||||
if len(typedefName) > 4:
|
||||
print typedefName
|
||||
if len(typedefName) < 5: continue
|
||||
typedefSet.add(typedefName)
|
||||
|
||||
for typedefName in sorted(typedefSet):
|
||||
print("checking: " + typedefName)
|
||||
a = subprocess.Popen(["git", "grep", "-wn", typedefName], stdout=subprocess.PIPE)
|
||||
foundLine2 = ""
|
||||
cnt = 0
|
||||
with a.stdout as txt2:
|
||||
for line2 in txt2:
|
||||
cnt = cnt + 1
|
||||
foundLine2 += line2
|
||||
if cnt == 1:
|
||||
print("remove: " + foundLine2)
|
||||
elif cnt == 2:
|
||||
print("inline: " + foundLine2)
|
||||
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
#
|
||||
# This is a pretty brute-force approach. It takes several hours to run on a top-spec MacbookAir.
|
||||
# It also produces some false positives, so it requires careful examination and testing of the results.
|
||||
#
|
||||
# Algorithm Summary:
|
||||
# First we find all #defines,
|
||||
# then we search for each of them in turn,
|
||||
# and if we find only one instance of a #define, we print it out.
|
||||
#
|
||||
# Algorithm Detail:
|
||||
# (1) find #defines, excluding the externals folder
|
||||
# (2) extract just the constant name from the search results
|
||||
# (3) trim blank lines
|
||||
# (4) sort the results, mostly so I have an idea how far along the process is
|
||||
# (5) for each result:
|
||||
# (6) grep for the constant
|
||||
# (7) use awk to check if only one match for a given constant was found
|
||||
# (8) if so, generate a sed command to remove the #define
|
||||
#
|
||||
bin/find-unused-typedefs.py \
|
||||
| sort -u \
|
||||
| xargs -Ixxx -n 1 -P 8 sh -c \
|
||||
'( git grep -w xxx | awk -f bin/find-unused-defines.awk -v p1=xxx ) && echo xxx 1>&2'
|
||||
|
||||
|
||||
Reference in New Issue
Block a user