From: Alexandre Terrasa Date: Thu, 6 Mar 2014 06:31:40 +0000 (-0500) Subject: metrics: make MetricSet output csv X-Git-Tag: v0.6.5~47^2~5 X-Git-Url: http://nitlanguage.org metrics: make MetricSet output csv Signed-off-by: Alexandre Terrasa --- diff --git a/src/metrics/inheritance_metrics.nit b/src/metrics/inheritance_metrics.nit index 4ba1dc7..9e2c5d8 100644 --- a/src/metrics/inheritance_metrics.nit +++ b/src/metrics/inheritance_metrics.nit @@ -33,6 +33,9 @@ private class InheritanceMetricsPhase redef fun process_mainmodule(mainmodule) do if not toolcontext.opt_inheritance.value and not toolcontext.opt_all.value then return + var csv = toolcontext.opt_csv.value + var out = "{toolcontext.opt_dir.value or else "metrics"}/inheritance" + out.mkdir print toolcontext.format_h1("\n# Inheritance metrics") @@ -75,8 +78,10 @@ private class InheritanceMetricsPhase mclasses.add_all(mod_mclasses) cmetrics.collect(new HashSet[MClass].from(mod_mclasses)) cmetrics.to_console(1, not toolcontext.opt_nocolors.value) + if csv then cmetrics.to_csv.save("{out}/{mgroup}_classes.csv") hmetrics.collect(new HashSet[MModule].from(mgroup.mmodules)) hmetrics.to_console(1, not toolcontext.opt_nocolors.value) + if csv then hmetrics.to_csv.save("{out}/{mgroup}_inheritance.csv") end end if not mclasses.is_empty then @@ -85,9 +90,11 @@ private class InheritanceMetricsPhase cmetrics.clear cmetrics.collect(mclasses) cmetrics.to_console(1, not toolcontext.opt_nocolors.value) + if csv then cmetrics.to_csv.save("{out}/summary_classes.csv") hmetrics.clear hmetrics.collect(mmodules) hmetrics.to_console(1, not toolcontext.opt_nocolors.value) + if csv then hmetrics.to_csv.save("{out}/summary_inheritance.csv") end end end diff --git a/src/metrics/mclasses_metrics.nit b/src/metrics/mclasses_metrics.nit index f582732..066556f 100644 --- a/src/metrics/mclasses_metrics.nit +++ b/src/metrics/mclasses_metrics.nit @@ -32,6 +32,10 @@ private class MClassesMetricsPhase redef fun process_mainmodule(mainmodule) do if not toolcontext.opt_mclasses.value and not toolcontext.opt_all.value then return + var csv = toolcontext.opt_csv.value + var out = "{toolcontext.opt_dir.value or else "metrics"}/mclasses" + out.mkdir + print toolcontext.format_h1("\n# MClasses metrics") @@ -67,6 +71,7 @@ private class MClassesMetricsPhase mclasses.add_all(mod_mclasses) metrics.collect(new HashSet[MClass].from(mod_mclasses)) metrics.to_console(1, not toolcontext.opt_nocolors.value) + if csv then metrics.to_csv.save("{out}/{mgroup}.csv") end end if not mclasses.is_empty then @@ -74,6 +79,7 @@ private class MClassesMetricsPhase print toolcontext.format_h2("\n ## global metrics") metrics.collect(mclasses) metrics.to_console(1, not toolcontext.opt_nocolors.value) + if csv then metrics.to_csv.save("{out}/summary.csv") end end end diff --git a/src/metrics/metrics_base.nit b/src/metrics/metrics_base.nit index 2bb61cb..14cd0ed 100644 --- a/src/metrics/metrics_base.nit +++ b/src/metrics/metrics_base.nit @@ -50,7 +50,7 @@ redef class ToolContext # --rta var opt_rta = new OptionBool("Compute RTA metrics", "--rta") # --generate-csv - var opt_generate_csv = new OptionBool("Generate CVS format metrics", "--generate-csv") + var opt_csv = new OptionBool("Export metrics in CSV format", "--csv") # --generate_hyperdoc var opt_generate_hyperdoc = new OptionBool("Generate Hyperdoc", "--generate_hyperdoc") # --poset @@ -77,7 +77,7 @@ redef class ToolContext self.option_context.add_option(opt_static_types) self.option_context.add_option(opt_tables) self.option_context.add_option(opt_rta) - self.option_context.add_option(opt_generate_csv) + self.option_context.add_option(opt_csv) self.option_context.add_option(opt_generate_hyperdoc) self.option_context.add_option(opt_poset) self.option_context.add_option(opt_dir) @@ -309,4 +309,32 @@ class MetricSet for metric in metrics do metric.to_console(indent, colors) end + # Export the metric set in CSV format + fun to_csv: CSVDocument do + var csv = new CSVDocument + + # set csv headers + csv.header.add("entry") + for metric in metrics do csv.header.add(metric.name) + + # collect all entries to merge metric results + var entries = new HashSet[ELM] + for metric in metrics do + for entry in metric.values.keys do entries.add(entry) + end + + # collect results + for entry in entries do + var line = [entry.to_s] + for metric in metrics do + if metric.has_element(entry) then + line.add(metric[entry].to_s) + else + line.add("n/a") + end + end + csv.lines.add(line) + end + return csv + end end diff --git a/src/metrics/mmodules_metrics.nit b/src/metrics/mmodules_metrics.nit index 72bf41d..6381726 100644 --- a/src/metrics/mmodules_metrics.nit +++ b/src/metrics/mmodules_metrics.nit @@ -32,6 +32,9 @@ private class MModulesMetricsPhase redef fun process_mainmodule(mainmodule) do if not toolcontext.opt_mmodules.value and not toolcontext.opt_all.value then return + var csv = toolcontext.opt_csv.value + var out = "{toolcontext.opt_dir.value or else "metrics"}/mmodules" + out.mkdir print toolcontext.format_h1("\n# MModules metrics") @@ -52,6 +55,7 @@ private class MModulesMetricsPhase mmodules.add_all(mgroup.mmodules) metrics.collect(new HashSet[MModule].from(mgroup.mmodules)) metrics.to_console(1, not toolcontext.opt_nocolors.value) + if csv then metrics.to_csv.save("{out}/{mgroup}.csv") end end if not mmodules.is_empty then @@ -60,6 +64,7 @@ private class MModulesMetricsPhase metrics.clear metrics.collect(mmodules) metrics.to_console(1, not toolcontext.opt_nocolors.value) + if csv then metrics.to_csv.save("{out}/summary.csv") end end end diff --git a/src/metrics/rta_metrics.nit b/src/metrics/rta_metrics.nit index 58c2698..820c2ef 100644 --- a/src/metrics/rta_metrics.nit +++ b/src/metrics/rta_metrics.nit @@ -120,7 +120,7 @@ do end # CSV generation - if modelbuilder.toolcontext.opt_generate_csv.value then + if modelbuilder.toolcontext.opt_csv.value then var summaryCSV = new CSVDocument summaryCSV.set_header("scope", "NLVT", "NLVTG", "NLCT", "NLVCTG") summaryCSV.add_line("global", nlvt, nlvtg, nlct, nlctg)