# Extract metrics about modules from the model.
private class MModulesMetricsPhase
super Phase
redef fun process_mainmodule(mainmodule, given_mmodules)
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
var model = toolcontext.modelbuilder.model
print toolcontext.format_h1("\n# MModules metrics")
var metrics = new MetricSet
metrics.register(new MNOA(model, mainmodule))
metrics.register(new MNOP(model, mainmodule))
metrics.register(new MNOC(model, mainmodule))
metrics.register(new MNOD(model, mainmodule))
metrics.register(new MDIT(model, mainmodule))
metrics.register(new MNBI(model, mainmodule))
metrics.register(new MNBR(model, mainmodule))
metrics.register(new MNBCC(model, mainmodule))
metrics.register(new MNBAC(model, mainmodule))
metrics.register(new MNBIC(model, mainmodule))
var mmodules = new HashSet[MModule]
for mpackage in model.mpackages do
print toolcontext.format_h2("\n ## package {mpackage}")
for mgroup in mpackage.mgroups do
if mgroup.mmodules.is_empty then continue
# Scalar metrics
print toolcontext.format_h3(" `- group {mgroup.full_name}")
mmodules.add_all(mgroup.mmodules)
metrics.clear
metrics.collect(new HashSet[MModule].from(mgroup.mmodules))
metrics.to_console(1, not toolcontext.opt_nocolors.value)
if csv then metrics.to_csv.write_to_file("{out}/{mgroup}.csv")
end
end
if not mmodules.is_empty then
# Global metrics
print toolcontext.format_h2("\n ## global metrics")
metrics.clear
metrics.collect(mmodules)
metrics.to_console(1, not toolcontext.opt_nocolors.value)
if csv then metrics.to_csv.write_to_file("{out}/summary.csv")
end
end
end
src/metrics/mmodules_metrics.nit:29,1--80,3