lib: csv get file to save in save instead of init
[nit.git] / src / metrics / static_types_metrics.nit
index 24796c6..f467e98 100644 (file)
@@ -20,6 +20,20 @@ module static_types_metrics
 private import metrics_base
 import modelbuilder
 import modelize_class
+import frontend
+
+redef class ToolContext
+       var static_types_metrics_phase = new StaticTypesMetricsPhase(self, null)
+end
+
+private class StaticTypesMetricsPhase
+       super Phase
+       redef fun process_mainmodule(mainmodule)
+       do
+               if not toolcontext.opt_static_types.value and not toolcontext.opt_all.value then return
+               compute_static_types_metrics(toolcontext.modelbuilder)
+       end
+end
 
 # The job of this visitor is to resolve all types found
 private class ATypeCounterVisitor
@@ -29,7 +43,7 @@ private class ATypeCounterVisitor
 
        var typecount: Counter[MType]
 
-       # Get a new visitor on a classef to add type count in `typecount'.
+       # Get a new visitor on a classef to add type count in `typecount`.
        init(modelbuilder: ModelBuilder, nclassdef: AClassdef, typecount: Counter[MType])
        do
                self.modelbuilder = modelbuilder
@@ -68,32 +82,7 @@ do
        print "Total number of explicit static types: {typecount.total}"
        if typecount.total == 0 then return
 
-       # types sorted by usage
-       var types = typecount.sort
-
-       # Display most used types (ie the last of `types')
-       print "Most used types: "
-       var min = 10
-       if types.length < min then min = types.length
-       for i in [0..min[ do
-               var t = types[types.length-i-1]
-               print "  {t}: {typecount[t]}"
-       end
-
-       # Compute the distribution of type usage
-       print "Distribution of type usage:"
-       var count = 0
-       var sum = 0
-       var limit = 1
-       for t in types do
-               if typecount[t] > limit then
-                       print "  <={limit}: {count} ({div(count*100,types.length)}% of types; {div(sum*100,typecount.total)}% of usage)"
-                       count = 0
-                       sum = 0
-                       while typecount[t] > limit do limit = limit * 2
-               end
-               count += 1
-               sum += typecount[t]
-       end
-       print "  <={limit}: {count} ({div(count*100,types.length)}% of types; {div(sum*100,typecount.total)}% of usage)"
+       print "Statistics of type usage:"
+       typecount.print_summary
+       typecount.print_elements(10)
 end