- # * -> *
- dit = div(ditsum, model.mclasses.length)
- dui = div(dui_count * 100, nc + ni)
- ccdui = div(ccdui_count * 100, nc)
- cidui = div(cidui_count * 100, nc)
- iidui = div(iidui_count * 100, ni)
- inhf = div(if_count * 100, nc + ni)
- ccif = div(ccif_count * 100, nc)
- icif = div(icif_count * 100, ni)
- iiif = div(iiif_count * 100, ni)
-
- # SL -> *
- sldui = div(sldui_count * 100, ncsl + nisl)
- slccdui = div(slccdui_count * 100, ncsl)
- slcidui = div(slcidui_count * 100, ncsl)
- sliidui = div(sliidui_count * 100, nisl)
- slinhf = div(slif_count * 100, ncsl + nisl)
- slccif = div(slccif_count * 100, ncsl)
- slicif = div(slicif_count * 100, nisl)
- sliiif = div(sliiif_count * 100, nisl)
-
- # SL -> SL
- slinhfsl = div(slifsl_count * 100, ncsl + nisl)
- slccifsl = div(slccifsl_count * 100, ncsl)
- slicifsl = div(slicifsl_count * 100, nisl)
- sliiifsl = div(sliiifsl_count * 100, nisl)
-
- # SL -> UD
- slinhfud = div(slifud_count * 100, ncsl + nisl)
- slccifud = div(slccifud_count * 100, ncsl)
- slicifud = div(slicifud_count * 100, nisl)
- sliiifud = div(sliiifud_count * 100, nisl)
-
- # UD -> *
- uddui = div(uddui_count * 100, ncud + niud)
- udccdui = div(udccdui_count * 100, ncud)
- udcidui = div(udcidui_count * 100, ncud)
- udiidui = div(udiidui_count * 100, niud)
- udinhf = div(if_count * 100, ncud + niud)
- udccif = div(ccif_count * 100, ncud)
- udicif = div(icif_count * 100, niud)
- udiiif = div(iiif_count * 100, niud)
-
- # 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)