50 lines
2.2 KiB
Bash
Executable File
50 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -e
|
|
|
|
############################################################################
|
|
#
|
|
# find-dead-code.sh
|
|
#
|
|
# This script analyzes the edx-platform for dead code instances using
|
|
# vulture, a static analysis tool that ranks potential unused code using
|
|
# the following confidence scores:
|
|
# - 100% = completely unreachable code: code that follows return, continue
|
|
# or raise statements, or code that cannot logically be run, i.e.
|
|
# a condition that can never be True
|
|
# - 90% = unused imports within a file
|
|
# - 60% = unused code: code that has no reference in the code base, aside
|
|
# from definition
|
|
#
|
|
# This script will output a list of dead-code instances with their
|
|
# confidence scores, in descending order of the size of the instance
|
|
# (in lines). This in turn can be used to clean up the edx-platform.
|
|
# However, you shouldn't automatically delete code reported back from
|
|
# vulture. It can report false positives. Often it's not the case that
|
|
# code is truly dead, but has been referenced incorrectly (spelling)
|
|
# elsewhere in the code base, most likely in a refactor. Another example
|
|
# of code that will be interpreted as dead by vulture is anything that
|
|
# is used in a template (which is not considered in the analysis).
|
|
#
|
|
# Therefore, the results of this script should be used as a jumping off
|
|
# point for investigating potential dead code removal
|
|
#
|
|
############################################################################
|
|
|
|
OUTPUT_DIR="reports/vulture"
|
|
mkdir -p "$OUTPUT_DIR"
|
|
OUTPUT_FILE="${OUTPUT_DIR}/vulture-report.txt"
|
|
echo '' > "$OUTPUT_FILE"
|
|
# exclude test code from analysis, as it isn't explicitly called by other
|
|
# code. Additionally, application code that is only called by tests
|
|
# should be considered dead
|
|
EXCLUSIONS='/test,/acceptance,cms/envs,lms/envs,openedx/envs,migrations/,signals.py'
|
|
MIN_CONFIDENCE=90
|
|
# paths to the code on which to run the analysis
|
|
CODE_PATHS=('cms' 'common' 'lms' 'openedx')
|
|
WHITELIST_PATH="$(dirname "${BASH_SOURCE[0]}")/whitelist.py"
|
|
echo "Checking for dead code in the following paths: ${CODE_PATHS[*]}"
|
|
echo "Results can be found in $OUTPUT_FILE"
|
|
vulture "${CODE_PATHS[@]}" "$WHITELIST_PATH" --exclude "$EXCLUSIONS" \
|
|
--min-confidence "$MIN_CONFIDENCE" \
|
|
--sort-by-size |tac > "$OUTPUT_FILE"
|