# Extract metrics about mclasses from model.
private class MClassesMetricsPhase
super Phase
redef fun process_mainmodule(mainmodule, given_mmodules)
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
var model = toolcontext.modelbuilder.model
var filter = new ModelFilter(private_visibility)
print toolcontext.format_h1("\n# MClasses metrics")
var metrics = new MetricSet
metrics.register(new CNOA(model, mainmodule, filter))
metrics.register(new CNOP(model, mainmodule, filter))
metrics.register(new CNOC(model, mainmodule, filter))
metrics.register(new CNOD(model, mainmodule, filter))
metrics.register(new CDIT(model, mainmodule, filter))
metrics.register(new CNBP(model, mainmodule, filter))
metrics.register(new CNBA(model, mainmodule, filter))
metrics.register(new CNBI(model, mainmodule, filter))
metrics.register(new CNBM(model, mainmodule, filter))
metrics.register(new CNBV(model, mainmodule, filter))
metrics.register(new CNBIP(model, mainmodule, filter))
metrics.register(new CNBRP(model, mainmodule, filter))
metrics.register(new CNBHP(model, mainmodule, filter))
var mclasses = new HashSet[MClass]
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
metrics.clear
# Scalar metrics
print toolcontext.format_h3(" `- group {mgroup.full_name}")
var mod_mclasses = new HashSet[MClass]
for mmodule in mgroup.mmodules do mod_mclasses.add_all(mmodule.intro_mclasses)
if mod_mclasses.is_empty then continue
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.write_to_file("{out}/{mgroup}.csv")
end
end
if not mclasses.is_empty then
metrics.clear
# Global metrics
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.write_to_file("{out}/summary.csv")
end
end
end
src/metrics/mclasses_metrics.nit:29,1--88,3