+++ /dev/null
-#! /bin/bash
-
-target_module="$1"
-target_fun_regex="$2"
-shift 2
-dirs=$@
-
-find $dirs -type f -name '*.erl' -exec grep -Hn "\<$target_module\>:" '{}' \; \
-| sed 's/%.*$//g' \
-| awk \
- -F "${target_module}:" \
- -v target_module="$target_module" \
- -v target_fun_regex="$target_fun_regex" '
- $1 && $2 {
- caller_module_file = $1
- sub(":.*$", "", caller_module_file)
-
- called_function = $2
- sub("\\(.*$", "", called_function)
-
- if (called_function ~ /^[a-z][a-zA-Z_0-9]+$/) {
- if (called_function ~ target_fun_regex) {
- Calls[called_function]++
- Calls_from[caller_module_file, called_function]++
- Caller_modules[caller_module_file]++
- }
- } else {
- printf \
- "[WARN] skipped an invalid erlang function name. File: \"%s\", function: \"%s\", original line: \"%s\"\n", \
- caller_module_file, called_function, $0 \
- > "/dev/stderr"
- }
- }
-
- END {
- indent = " "
-
- print "group-by-caller"
- for (caller_module_file in Caller_modules) {
- printf "%s%s\n", indent, caller_module_file;
- for (cf in Calls_from) {
- split(cf, call, SUBSEP);
- if (call[1] == caller_module_file)
- printf "%s%s\n", indent indent, call[2] | "sort";
- }
- close("sort")
- }
-
- print "all"
- for (called_function in Calls)
- printf "%s%s\n", indent, called_function | "sort"
- close("sort")
- }'