Skip to content

Instantly share code, notes, and snippets.

@prati0100
Created October 25, 2019 01:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save prati0100/0f3ef903ad1658e76ea0b95f001b4865 to your computer and use it in GitHub Desktop.
Save prati0100/0f3ef903ad1658e76ea0b95f001b4865 to your computer and use it in GitHub Desktop.
#!/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