a3a86854e9458ada1de6d958ab77ea8064482b09
[khome.git] / home / bin / erlcode-find-calls-to-module
1 #! /bin/bash
2
3 target_module="$1"
4 target_fun_regex="$2"
5 shift 2
6 dirs=$@
7
8 find $dirs -type f -name '*.erl' -exec grep -Hn "\<$target_module\>:" '{}' \; \
9 | sed 's/%.*$//g' \
10 | awk \
11 -F "${target_module}:" \
12 -v target_module="$target_module" \
13 -v target_fun_regex="$target_fun_regex" '
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);
39 if (call[1] == caller_module_file && call[2] ~ target_fun_regex)
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 }'
This page took 0.042096 seconds and 3 git commands to generate.