#! /bin/bash
target_module="$1"
-shift
+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" '
+| 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)
sub("\\(.*$", "", called_function)
if (called_function ~ /^[a-z][a-zA-Z_0-9]+$/) {
- Calls[called_function]++
- Calls_from[caller_module_file, called_function]++
- Caller_modules[caller_module_file]++
+ 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", \
END {
indent = " "
+
+ print "group-by-caller"
for (caller_module_file in Caller_modules) {
- print caller_module_file;
+ 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, call[2] | "sort";
+ printf "%s%s\n", indent indent, call[2] | "sort";
}
close("sort")
}
- print ""
- printf "Inferred API of %s:\n", target_module
+ print "all"
for (called_function in Calls)
printf "%s%s\n", indent, called_function | "sort"
close("sort")