nitc :: Catalog :: package_page
# 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
if mdoc != null then
score += 100.0
score += mdoc.content.length.score
end
var metadata = mpackage.metadata
var tryit = metadata.tryit
if tryit != null then
score += 1.0
end
var apk = metadata.apk
if apk != null then
score += 1.0
end
var homepage = metadata.homepage
if homepage != null then
score += 5.0
end
var maintainer = metadata.maintainer
if maintainer != null then
score += 5.0
var person = register_contrib(maintainer, mpackage)
mpackage.metadata.maintainers.add person
var projs = maint2proj[person]
if not projs.has(mpackage) then projs.add mpackage
end
var license = metadata.license
if license != null then
score += 5.0
end
var browse = metadata.browse
if browse != null then
score += 5.0
end
var tags = metadata.tags
for tag in tags do
tag2proj[tag].add mpackage
end
if tags.not_empty then
var cat = tags.first
cat2proj[cat].add mpackage
score += tags.length.score
end
if deps.has_vertex(mpackage) then
score += deps.predecessors(mpackage).length.score
score += deps.get_all_predecessors(mpackage).length.score
score += deps.successors(mpackage).length.score
score += deps.get_all_successors(mpackage).length.score
end
var contributors = mpackage.metadata.contributors
var more_contributors = metadata.more_contributors
for c in more_contributors do
register_contrib(c, mpackage)
end
score += contributors.length.to_f
var mmodules = 0
var mclasses = 0
var mmethods = 0
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
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
for msg in source.messages do
if msg.level == 2 then
errors += 1
else
warnings += 1
end
end
end
var am = modelbuilder.mmodule2node(m)
if am != null then
var file = am.location.file
if file != null then
loc += file.line_starts.length - 1
end
end
var ms = gs
if m.is_test 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 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
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
end
end
end
self.mmodules[mpackage] = mmodules
self.mclasses[mpackage] = mclasses
self.mmethods[mpackage] = mmethods
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
src/catalog/catalog.nit:334,2--471,4