Merge: Added contributing guidelines and link from readme
[nit.git] / src / catalog.nit
index d8a04ad..92510bc 100644 (file)
@@ -235,6 +235,9 @@ 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]
 
@@ -254,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
@@ -354,8 +362,9 @@ class Catalog
                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
+                       var gs = 1.0
+                       entity_score += gs
+                       if g.mdoc != null then doc_score += gs
                        for m in g.mmodules do
                                var source = m.location.file
                                if source != null then
@@ -374,21 +383,23 @@ class Catalog
                                                loc += file.line_starts.length - 1
                                        end
                                end
-                               entity_score += 1.0
-                               if m.mdoc != null then doc_score += 1.0
+                               var ms = gs
+                               if m.is_test_suite then ms /= 100.0
+                               entity_score += ms
+                               if m.mdoc != null then doc_score += ms else ms /= 10.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
+                                       var cs = ms * 0.2
+                                       if not cd.is_intro then cs /= 100.0
+                                       if not cd.mclass.visibility <= private_visibility then cs /= 100.0
+                                       entity_score += cs
+                                       if cd.mdoc != null then doc_score += cs
                                        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
+                                               var ps = ms * 0.1
+                                               if not pd.is_intro then ps /= 100.0
+                                               if not pd.mproperty.visibility <= private_visibility then ps /= 100.0
+                                               entity_score += ps
+                                               if pd.mdoc != null then doc_score += ps
                                                if not pd isa MMethodDef then continue
                                                mmethods += 1
                                        end
@@ -401,6 +412,9 @@ 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