Commit | Line | Data |
---|---|---|
2b05907b SK |
1 | #! /bin/bash |
2 | ||
3 | target_module="$1" | |
15f22284 SK |
4 | target_fun_regex="$2" |
5 | shift 2 | |
2b05907b SK |
6 | dirs=$@ |
7 | ||
8 | find $dirs -type f -name '*.erl' -exec grep -Hn "\<$target_module\>:" '{}' \; \ | |
9 | | sed 's/%.*$//g' \ | |
15f22284 SK |
10 | | awk \ |
11 | -F "${target_module}:" \ | |
12 | -v target_module="$target_module" \ | |
13 | -v target_fun_regex="$target_fun_regex" ' | |
2b05907b SK |
14 | $1 && $2 { |
15 | caller_module_file = $1 | |
16 | sub(":.*$", "", caller_module_file) | |
17 | ||
18 | called_function = $2 | |
19 | sub("\\(.*$", "", called_function) | |
20 | ||
21 | if (called_function ~ /^[a-z][a-zA-Z_0-9]+$/) { | |
fc84ff9c | 22 | # Gather full API of the target_module |
2b05907b | 23 | Calls[called_function]++ |
fc84ff9c SK |
24 | |
25 | # Gather target call sites | |
26 | if (called_function ~ target_fun_regex) { | |
27 | Calls_from[caller_module_file, called_function]++ | |
28 | Caller_modules[caller_module_file]++ | |
29 | } | |
2b05907b SK |
30 | } else { |
31 | printf \ | |
32 | "[WARN] skipped an invalid erlang function name. File: \"%s\", function: \"%s\", original line: \"%s\"\n", \ | |
33 | caller_module_file, called_function, $0 \ | |
34 | > "/dev/stderr" | |
35 | } | |
36 | } | |
37 | ||
38 | END { | |
39 | indent = " " | |
40 | for (caller_module_file in Caller_modules) { | |
41 | print caller_module_file; | |
42 | for (cf in Calls_from) { | |
43 | split(cf, call, SUBSEP); | |
fc84ff9c | 44 | if (call[1] == caller_module_file) |
2b05907b SK |
45 | printf "%s%s\n", indent, call[2] | "sort"; |
46 | } | |
47 | close("sort") | |
48 | } | |
49 | ||
50 | print "" | |
51 | printf "Inferred API of %s:\n", target_module | |
52 | for (called_function in Calls) | |
53 | printf "%s%s\n", indent, called_function | "sort" | |
54 | close("sort") | |
55 | }' |