- # * -> *
- 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)
- for m in model.mmodules do
- summaryCSV.add_line(m.name, m.nm, m.nc, m.ni, m.nac, m.ngc, m.ngi)
- end
- 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)
- for m in model.mmodules do
- if m.intro_mclasses.is_empty and m.in_nesting.greaters.length == 1 then continue
- inheritanceCSV.add_line(m.name, m.dit, m.dui, m.ccdui, m.cidui, m.iidui, m.inhf, m.ccif, m.icif, m.iiif)