Created
October 25, 2019 01:10
-
-
Save prati0100/0f3ef903ad1658e76ea0b95f001b4865 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
function find_globals () { | |
cut_content="$1" | |
# Find all the global declarations | |
globals=$(echo "$cut_content" | grep '^[[:space:]]global ' | sed 's/\s*global //') | |
if test -z "$globals"; then | |
return | |
fi | |
# Join all the global declarations into one line. | |
globals=$(echo "$globals" | paste -sd ' ') | |
for global in $globals; do | |
# Check if this global is used in the funtction. | |
# We don't want to check on declaration lines. | |
usage=$(echo "$cut_content" | grep -v '^[[:space:]]*global ' | grep "$global") | |
# echo "Usage = $usage" | |
if test -z "$usage"; then | |
echo "Global $global declared but not used. Function start at $2:$3" | |
fi | |
done | |
} | |
files=$(git ls-files | grep 'tcl$') | |
for file in $files; do | |
content=$(< $file) | |
# Look for the start of a procedure. But instead of writing a proper parser, | |
# just look for '^proc', which will catch almost all cases. | |
procs=$(grep -n '^proc' $file | cut -f1 -d:) | |
for start_line in $procs; do | |
# Find the end of this proc. The hack we use here is to look for '^}' | |
# after the start of the proc. | |
cut_content=$(tail -n +$start_line $file) | |
# Find out the line at which the procedure ends. | |
end_line=$(echo "$cut_content" | grep -n '^}' | head -n 1 | cut -f1 -d:) | |
cut_content=$(echo "$cut_content" | head -n $end_line) | |
find_globals "$cut_content" $start_line $file | |
done | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment