Property definitions

nitc $ MModulesMetricsPhase :: defaultinit
# 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