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]+$/) { | |
22 | Calls[called_function]++ | |
23 | Calls_from[caller_module_file, called_function]++ | |
24 | Caller_modules[caller_module_file]++ | |
25 | } else { | |
26 | printf \ | |
27 | "[WARN] skipped an invalid erlang function name. File: \"%s\", function: \"%s\", original line: \"%s\"\n", \ | |
28 | caller_module_file, called_function, $0 \ | |
29 | > "/dev/stderr" | |
30 | } | |
31 | } | |
32 | ||
33 | END { | |
34 | indent = " " | |
35 | for (caller_module_file in Caller_modules) { | |
36 | print caller_module_file; | |
37 | for (cf in Calls_from) { | |
38 | split(cf, call, SUBSEP); | |
15f22284 | 39 | if (call[1] == caller_module_file && call[2] ~ target_fun_regex) |
2b05907b SK |
40 | printf "%s%s\n", indent, call[2] | "sort"; |
41 | } | |
42 | close("sort") | |
43 | } | |
44 | ||
45 | print "" | |
46 | printf "Inferred API of %s:\n", target_module | |
47 | for (called_function in Calls) | |
48 | printf "%s%s\n", indent, called_function | "sort" | |
49 | close("sort") | |
50 | }' |