+ # UD -> SL
+ udduisl = div(udduisl_count * 100, ncud + niud)
+ udccduisl = div(udccduisl_count * 100, ncud)
+ udciduisl = div(udciduisl_count * 100, ncud)
+ udiiduisl = div(udiiduisl_count * 100, niud)
+
+ # UD -> UD
+ udduiud = div(udduiud_count * 100, ncud + niud)
+ udccduiud = div(udccduiud_count * 100, ncud)
+ udciduiud = div(udciduiud_count * 100, ncud)
+ udiiduiud = div(udiiduiud_count * 100, niud)
+ udinhfud = div(udifud_count * 100, ncud + niud)
+ udccifud = div(udccifud_count * 100, ncud)
+ udicifud = div(udicifud_count * 100, niud)
+ udiiifud = div(udiiifud_count * 100, niud)
+
+ # CSV generation
+ if toolcontext.opt_generate_csv.value then
+ # summary_metrics
+ var summaryCSV = new CSVDocument(toolcontext.output_dir.join_path("summary_metrics.csv"))
+ summaryCSV.set_header("scope", "NMD", "NC", "NI", "NAC", "NGC", "NGI")
+ summaryCSV.add_line("global", nmd, nc, ni, nac, ngc, ngi)
+ summaryCSV.add_line("std-lib", nmdsl, ncsl, nisl, nacsl, ngcsl, ngisl)
+ summaryCSV.add_line("user-defined", nmdud, ncud, niud, nacud, ngcud, ngiud)
+ summaryCSV.save
+
+ # inheritance metrics
+ var inheritanceCSV = new CSVDocument(toolcontext.output_dir.join_path("inheritance_metrics.csv"))
+ inheritanceCSV.set_header("scope", "DIT", "DUI", "CCDUI", "CIDUI", "IIDUI", "IF", "CCIF", "ICIF", "IIIF")
+ inheritanceCSV.add_line("global", dit, dui, ccdui, cidui, iidui, inhf, ccif, icif, iiif)
+ inheritanceCSV.add_line("SL -> *", "", sldui, slccdui, slcidui, sliidui, slinhf, slccif, slicif, sliiif)
+ inheritanceCSV.add_line("SL -> SL", "", sldui, slccdui, slcidui, sliidui, slinhfsl, slccifsl, slicifsl, sliiifsl)
+ inheritanceCSV.add_line("SL -> UD", "", 0, 0, 0, 0, slinhfud, slccifud, slicifud, sliiifud)
+ inheritanceCSV.add_line("UD -> *", "", uddui, udccdui, udcidui, udiidui, udinhf, udccif, udicif, udiiif)
+ inheritanceCSV.add_line("UD -> SL", "", udduisl, udccduisl, udciduisl, udiiduisl, 0, 0, 0, 0)
+ inheritanceCSV.add_line("UD -> UD", "", udduiud, udccduiud, udciduiud, udiiduiud, udinhfud, udccifud, udicifud, udiiifud)
+ inheritanceCSV.save
+
+ # scalar metrics
+ var scalarCSV = new CSVDocument(toolcontext.output_dir.join_path("global_scalar_metrics.csv"))
+ var udscalarCSV = new CSVDocument(toolcontext.output_dir.join_path("ud_scalar_metrics.csv"))
+ scalarCSV.set_header("mclass", "type", "DIT", "DITC", "DITI", "NOP", "NOPC", "NOPI", "NOA", "NOAC", "NOAI", "NOC", "NOCC", "NOCI", "NOD", "NODC", "NODI")
+ udscalarCSV.set_header("mclass", "type", "DITUD", "DITCUD", "DITIUD", "NOPUD", "NOPCUD", "NOPIUD", "NOAUD", "NOACUD", "NOAIUD", "NOCUD", "NOCCUD", "NOCIUD", "NODUD", "NODCUD", "NODIUD")
+ for mclass in model.mclasses do
+ var name = mclass.name
+ var typ = "class"
+ if mclass.is_interface then typ = "interface"
+ scalarCSV.add_line(name, typ, mclass.dit, mclass.ditc, mclass.diti, mclass.nop, mclass.nopc, mclass.nopi, mclass.noa, mclass.noac, mclass.noai, mclass.noc, mclass.nocc, mclass.noci, mclass.nod, mclass.nodc, mclass.nodi)
+ udscalarCSV.add_line(name, typ, mclass.ditud, mclass.ditcud, mclass.ditiud, mclass.nopud, mclass.nopcud, mclass.nopiud, mclass.noaud, mclass.noacud, mclass.noaiud, mclass.nocud, mclass.noccud, mclass.nociud, mclass.nodud, mclass.nodcud, mclass.nodiud)
+ end
+ scalarCSV.save
+ udscalarCSV.save
+ end
+