25 lines
816 B
Plaintext
25 lines
816 B
Plaintext
import "io" for File
|
|
import "os" for Process
|
|
import "./pattern" for Pattern
|
|
import "./set" for Bag
|
|
import "./sort" for Sort
|
|
import "./fmt" for Fmt
|
|
|
|
var args = Process.arguments
|
|
if (args.count != 1) {
|
|
Fiber.abort("There should be exactly one argument - the file path to be analyzed")
|
|
}
|
|
var p = Pattern.new("[+1/x.+1/x](")
|
|
var source = File.read(args[0])
|
|
var matches = p.findAll(source)
|
|
var bag = Bag.new(matches.map { |m| m.captures[0].text })
|
|
var methodCalls = bag.toMap.toList
|
|
var cmp = Fn.new { |i, j| (j.value - i.value).sign }
|
|
Sort.quick(methodCalls, 0, methodCalls.count-1, cmp)
|
|
System.print("Top ten method/function calls in %(args[0]):\n")
|
|
System.print("Called Method/Function")
|
|
System.print("------ ----------------")
|
|
for (mc in methodCalls.take(10)) {
|
|
Fmt.print(" $2d $s", mc.value, mc.key)
|
|
}
|