Property definitions

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