X-Git-Url: http://nitlanguage.org diff --git a/src/catalog.nit b/src/catalog.nit index f5a3b6c..1743179 100644 --- a/src/catalog.nit +++ b/src/catalog.nit @@ -235,6 +235,12 @@ class Catalog # Number of warnings and advices var warnings = new Counter[MPackage] + # Number of warnings per 1000 lines of code (w/kloc) + var warnings_per_kloc = new Counter[MPackage] + + # Documentation score (between 0 and 100) + var documentation_score = new Counter[MPackage] + # Number of commits by package var commits = new Counter[MPackage] @@ -251,8 +257,13 @@ class Catalog do var p = persons.get_or_null(person) if p == null then - p = new Person.parse(person) - persons[person] = p + var new_p = new Person.parse(person) + # Maybe, we already have this person in fact? + p = persons.get_or_null(new_p.to_s) + if p == null then + p = new_p + persons[p.to_s] = p + end end var projs = contrib2proj[p] if not projs.has(mpackage) then @@ -346,8 +357,13 @@ class Catalog var loc = 0 var errors = 0 var warnings = 0 + # The documentation value of each entity is ad hoc. + var entity_score = 0.0 + var doc_score = 0.0 for g in mpackage.mgroups do mmodules += g.mmodules.length + entity_score += 1.0 + if g.mdoc != null then doc_score += 1.0 for m in g.mmodules do var source = m.location.file if source != null then @@ -366,9 +382,21 @@ class Catalog loc += file.line_starts.length - 1 end end + entity_score += 1.0 + if m.mdoc != null then doc_score += 1.0 for cd in m.mclassdefs do + var s = 0.2 + if not cd.is_intro then s /= 10.0 + if not cd.mclass.visibility <= private_visibility then s /= 10.0 + entity_score += s + if cd.mdoc != null then doc_score += s mclasses += 1 for pd in cd.mpropdefs do + s = 0.1 + if not pd.is_intro then s /= 10.0 + if not pd.mproperty.visibility <= private_visibility then s /= 10.0 + entity_score += s + if pd.mdoc != null then doc_score += s if not pd isa MMethodDef then continue mmethods += 1 end @@ -381,11 +409,17 @@ class Catalog self.loc[mpackage] = loc self.errors[mpackage] = errors self.warnings[mpackage] = warnings + if loc > 0 then + self.warnings_per_kloc[mpackage] = warnings * 1000 / loc + end + var documentation_score = (100.0 * doc_score / entity_score).to_i + self.documentation_score[mpackage] = documentation_score #score += mmodules.score score += mclasses.score score += mmethods.score score += loc.score + score += documentation_score.score self.score[mpackage] = score.to_i end