X-Git-Url: http://nitlanguage.org diff --git a/src/catalog.nit b/src/catalog.nit index 5516f52..dd891ac 100644 --- a/src/catalog.nit +++ b/src/catalog.nit @@ -268,6 +268,9 @@ class Catalog # used to access the files and count source lines of code var modelbuilder: ModelBuilder + # List of all packages by their names + var mpackages = new HashMap[String, MPackage] + # Packages by tag var tag2proj = new MultiHashMap[String, MPackage] @@ -315,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 @@ -336,12 +345,15 @@ class Catalog projs.add mpackage mpackage.metadata.contributors.add p end + name2person[p.name] = p return p end # Compute information for a package fun package_page(mpackage: MPackage) do + mpackages[mpackage.full_name] = mpackage + var score = score[mpackage].to_f var mdoc = mpackage.mdoc_or_fallback @@ -513,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