Report only matching functions
[khome.git] / home / bin / erlcode-find-calls-to-module
index 8e4d9e5..46f5d35 100755 (executable)
@@ -1,12 +1,16 @@
 #! /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)
@@ -15,9 +19,11 @@ find $dirs -type f -name '*.erl' -exec grep -Hn "\<$target_module\>:" '{}' \; \
         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", \
@@ -28,18 +34,19 @@ find $dirs -type f -name '*.erl' -exec grep -Hn "\<$target_module\>:" '{}' \; \
 
     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")
This page took 0.019347 seconds and 4 git commands to generate.