lib/config: fix doc
[nit.git] / src / catalog.nit
index c5fcfc2..dd891ac 100644 (file)
@@ -318,9 +318,15 @@ class Catalog
        # The score is loosely computed using other metrics
        var score = new Counter[MPackage]
 
-       # List of known people
+       # List of known people by their git string
        var persons = new HashMap[String, Person]
 
+       # Map person short names to person objects
+       var name2person = new HashMap[String, Person]
+
+       # Package statistics cache
+       var mpackages_stats = new HashMap[MPackage, MPackageStats]
+
        # Scan, register and add a contributor to a package
        fun register_contrib(person: String, mpackage: MPackage): Person
        do
@@ -339,6 +345,7 @@ class Catalog
                        projs.add mpackage
                        mpackage.metadata.contributors.add p
                end
+               name2person[p.name] = p
                return p
        end
 
@@ -346,6 +353,7 @@ class Catalog
        fun package_page(mpackage: MPackage)
        do
                mpackages[mpackage.full_name] = mpackage
+
                var score = score[mpackage].to_f
 
                var mdoc = mpackage.mdoc_or_fallback
@@ -517,10 +525,132 @@ class Catalog
                for c in contributors.sort.reverse_iterator do
                        register_contrib(c, mpackage)
                end
+       end
+
+       # Compose package stats
+       fun mpackage_stats(mpackage: MPackage): MPackageStats do
+               var stats = new MPackageStats
+               stats.mmodules = mmodules[mpackage]
+               stats.mclasses = mclasses[mpackage]
+               stats.mmethods = mmethods[mpackage]
+               stats.loc = loc[mpackage]
+               stats.errors = errors[mpackage]
+               stats.warnings = warnings[mpackage]
+               stats.warnings_per_kloc = warnings_per_kloc[mpackage]
+               stats.documentation_score = documentation_score[mpackage]
+               stats.commits = commits[mpackage]
+               stats.score = score[mpackage]
+
+               mpackages_stats[mpackage] = stats
+               return stats
+       end
+
+       # Compose catalog stats
+       var catalog_stats: CatalogStats is lazy do
+               var stats = new CatalogStats
+               stats.packages = mpackages.length
+               stats.maintainers = maint2proj.length
+               stats.contributors = contrib2proj.length
+               stats.tags = tag2proj.length
+               stats.modules = mmodules.sum
+               stats.classes = mclasses.sum
+               stats.methods = mmethods.sum
+               stats.loc = loc.sum
+               return stats
+       end
+end
+
+# Catalog statistics
+class CatalogStats
+
+       # Number of packages
+       var packages = 0
+
+       # Number of maintainers
+       var maintainers = 0
+
+       # Number of contributors
+       var contributors = 0
+
+       # Number of tags
+       var tags = 0
+
+       # Number of modules
+       var modules = 0
+
+       # Number of classes
+       var classes = 0
+
+       # Number of methods
+       var methods = 0
+
+       # Number of line of codes
+       var loc = 0
+end
+
+# MPackage statistics for the catalog
+class MPackageStats
+
+       # Number of modules
+       var mmodules = 0
+
+       # Number of classes
+       var mclasses = 0
+
+       # Number of methods
+       var mmethods = 0
 
+       # Number of lines of code
+       var loc = 0
+
+       # Number of errors
+       var errors = 0
+
+       # Number of warnings and advices
+       var warnings = 0
+
+       # Number of warnings per 1000 lines of code (w/kloc)
+       var warnings_per_kloc = 0
+
+       # Documentation score (between 0 and 100)
+       var documentation_score = 0
+
+       # Number of commits by package
+       var commits = 0
+
+       # Score by package
+       #
+       # The score is loosely computed using other metrics
+       var score = 0
+end
+
+# Sort the mpackages by their score
+class CatalogScoreSorter
+       super Comparator
+
+       # Catalog used to access scores
+       var catalog: Catalog
+
+       redef type COMPARED: MPackage
+
+       redef fun compare(a, b) do
+               if not catalog.mpackages_stats.has_key(a) then return 1
+               if not catalog.mpackages_stats.has_key(b) then return -1
+               var astats = catalog.mpackages_stats[a]
+               var bstats = catalog.mpackages_stats[b]
+               return bstats.score <=> astats.score
        end
 end
 
+# Sort tabs alphabetically
+class CatalogTagsSorter
+       super Comparator
+
+       redef type COMPARED: String
+
+       redef fun compare(a, b) do return a <=> b
+end
+
 # Execute a git command and return the result
 fun git_run(command: String...): String
 do