X-Git-Url: http://nitlanguage.org diff --git a/src/nitcatalog.nit b/src/nitcatalog.nit index 6aba6f1..c843b51 100644 --- a/src/nitcatalog.nit +++ b/src/nitcatalog.nit @@ -12,23 +12,23 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Basic catalog generator for Nit projects +# Basic catalog generator for Nit packages # # See: # -# The tool scans projects and generates the HTML files of a catalog. +# The tool scans packages and generates the HTML files of a catalog. # # ## Features # -# * [X] scan projects and their `.ini` -# * [X] generate lists of projects -# * [X] generate a page per project with the readme and most metadata +# * [X] scan packages and their `.ini` +# * [X] generate lists of packages +# * [X] generate a page per package with the readme and most metadata # * [ ] link/include/be included in the documentation -# * [ ] propose `related projects` +# * [ ] propose `related packages` # * [ ] show directory content (a la nitls) # * [X] gather git information from the working directory # * [ ] gather git information from the repository -# * [ ] gather project information from github +# * [ ] gather package information from github # * [ ] gather people information from github # * [ ] reify people # * [ ] separate information gathering from rendering @@ -48,13 +48,13 @@ # How to use the tool as the basis of a Nit code archive on the web usable with a package manager is not clear. module nitcatalog -import loader # Scan&load projects, groups and modules +import loader # Scan&load packages, groups and modules import doc::doc_down # Display mdoc import md5 # To get gravatar images import counter # For statistics import modelize # To process and count classes and methods -redef class MProject +redef class MPackage # Return the associated metadata from the `ini`, if any fun metadata(key: String): nullable String do @@ -139,7 +139,7 @@ class CatalogPage end redef class Int - # Returns `log(self+1)`. Used to compute score of projects + # Returns `log(self+1)`. Used to compute score of packages fun score: Float do return (self+1).to_f.log end @@ -150,46 +150,46 @@ class Catalog # used to access the files and count source lines of code var modelbuilder: ModelBuilder - # Projects by tag - var tag2proj = new MultiHashMap[String, MProject] + # Packages by tag + var tag2proj = new MultiHashMap[String, MPackage] - # Projects by category - var cat2proj = new MultiHashMap[String, MProject] + # Packages by category + var cat2proj = new MultiHashMap[String, MPackage] - # Projects by maintainer - var maint2proj = new MultiHashMap[String, MProject] + # Packages by maintainer + var maint2proj = new MultiHashMap[String, MPackage] - # Projects by contributors - var contrib2proj = new MultiHashMap[String, MProject] + # Packages by contributors + var contrib2proj = new MultiHashMap[String, MPackage] - # Dependency between projects - var deps = new POSet[MProject] + # Dependency between packages + var deps = new POSet[MPackage] - # Number of modules by project - var mmodules = new Counter[MProject] + # Number of modules by package + var mmodules = new Counter[MPackage] - # Number of classes by project - var mclasses = new Counter[MProject] + # Number of classes by package + var mclasses = new Counter[MPackage] - # Number of methods by project - var mmethods = new Counter[MProject] + # Number of methods by package + var mmethods = new Counter[MPackage] - # Number of line of code by project - var loc = new Counter[MProject] + # Number of line of code by package + var loc = new Counter[MPackage] - # Number of commits by project - var commits = new Counter[MProject] + # Number of commits by package + var commits = new Counter[MPackage] - # Score by project + # Score by package # # The score is loosely computed using other metrics - var score = new Counter[MProject] + var score = new Counter[MPackage] - # Scan, register and add a contributor to a project - fun add_contrib(person: String, mproject: MProject, res: Template) + # Scan, register and add a contributor to a package + fun add_contrib(person: String, mpackage: MPackage, res: Template) do var projs = contrib2proj[person] - if not projs.has(mproject) then projs.add mproject + if not projs.has(mpackage) then projs.add mpackage var name = person var email = null var page = null @@ -239,19 +239,19 @@ class Catalog end - # Compute information and generate a full HTML page for a project - fun project_page(mproject: MProject): Writable + # Compute information and generate a full HTML page for a package + fun package_page(mpackage: MPackage): Writable do var res = new CatalogPage - var score = score[mproject].to_f - var name = mproject.name.html_escape + var score = score[mpackage].to_f + var name = mpackage.name.html_escape res.more_head.add """{{{name}}}""" res.add """

{{{name}}}

""" - var mdoc = mproject.mdoc_or_fallback + var mdoc = mpackage.mdoc_or_fallback if mdoc != null then score += 100.0 res.add mdoc.html_documentation @@ -262,21 +262,21 @@ class Catalog """ - self.score[mproject] = score.to_i + self.score[mpackage] = score.to_i return res end - # Return a short HTML sequence for a project + # Return a short HTML sequence for a package # # Intended to use in lists. - fun li_project(p: MProject): String + fun li_package(p: MPackage): String do var res = "" var f = "{p.name}.html" @@ -456,14 +456,14 @@ class Catalog return res end - # List projects by group. + # List packages by group. # # For each key of the `map` a `

` is generated. - # Each project is then listed. + # Each package is then listed. # # The list of keys is generated first to allow fast access to the correct `

`. # `id_prefix` is used to give an id to the `

` element. - fun list_by(map: MultiHashMap[String, MProject], id_prefix: String): Template + fun list_by(map: MultiHashMap[String, MPackage], id_prefix: String): Template do var res = new Template var keys = map.keys.to_a @@ -478,7 +478,7 @@ class Catalog res.add "

{e} ({projs.length})

\n
    \n" for p in projs do res.add "
  • " - res.add li_project(p) + res.add li_package(p) res.add "
  • " end res.add "
" @@ -486,8 +486,8 @@ class Catalog return res end - # List the 10 best projects from `cpt` - fun list_best(cpt: Counter[MProject]): Template + # List the 10 best packages from `cpt` + fun list_best(cpt: Counter[MPackage]): Template do var res = new Template res.add "
    " @@ -496,7 +496,7 @@ class Catalog if i > best.length then break var p = best[best.length-i] res.add "
  • " - res.add li_project(p) + res.add li_package(p) # res.add " ({cpt[p]})" res.add "
  • " end @@ -504,10 +504,10 @@ class Catalog return res end - # Collect more information on a project using the `git` tool. - fun git_info(mproject: MProject) + # Collect more information on a package using the `git` tool. + fun git_info(mpackage: MPackage) do - var ini = mproject.ini + var ini = mpackage.ini if ini == null then return # TODO use real git info @@ -515,7 +515,7 @@ class Catalog #var branch = ini.get_or_null("upstream.git.branch") #var directory = ini.get_or_null("upstream.git.directory") - var dirpath = mproject.root.filepath + var dirpath = mpackage.root.filepath if dirpath == null then return # Collect commits info @@ -523,30 +523,30 @@ class Catalog var contributors = new Counter[String] var commits = res.split("\n") if commits.not_empty and commits.last == "" then commits.pop - self.commits[mproject] = commits.length + self.commits[mpackage] = commits.length for l in commits do var s = l.split_once_on(';') if s.length != 2 or s.last == "" then continue # Collect date of last and first commit - if mproject.last_date == null then mproject.last_date = s.first - mproject.first_date = s.first + if mpackage.last_date == null then mpackage.last_date = s.first + mpackage.first_date = s.first # Count contributors contributors.inc(s.last) end for c in contributors.sort.reverse_iterator do - mproject.contributors.add c + mpackage.contributors.add c end end - # Produce a HTML table containig information on the projects + # Produce a HTML table containig information on the packages # - # `project_page` must have been called before so that information is computed. - fun table_projects(mprojects: Array[MProject]): Template + # `package_page` must have been called before so that information is computed. + fun table_packages(mpackages: Array[MPackage]): Template do - alpha_comparator.sort(mprojects) + alpha_comparator.sort(mpackages) var res = new Template res.add "\n" res.add "\n" @@ -563,7 +563,7 @@ class Catalog res.add "\n" res.add "\n" res.add "" - for p in mprojects do + for p in mpackages do res.add "" res.add "" var maint = "?" @@ -612,8 +612,8 @@ for a in tc.option_context.rest do modelbuilder.identify_file(a) end -# Scan projects and compute information -for p in model.mprojects do +# Scan packages and compute information +for p in model.mpackages do var g = p.root assert g != null modelbuilder.scan_group(g) @@ -624,7 +624,7 @@ for p in model.mprojects do catalog.deps.add_node(p) for gg in p.mgroups do for m in gg.mmodules do for im in m.in_importation.direct_greaters do - var ip = im.mproject + var ip = im.mpackage if ip == null or ip == p then continue catalog.deps.add_edge(p, ip) end @@ -741,28 +741,28 @@ css.write_to_file(out/"style.css") # PAGES -for p in model.mprojects do +for p in model.mpackages do # print p var f = "{p.name}.html" - catalog.project_page(p).write_to_file(out/f) + catalog.package_page(p).write_to_file(out/f) end # INDEX var index = new CatalogPage -index.more_head.add "Projects in Nit" +index.more_head.add "Packages in Nit" index.add """
    -

    Projects in Nit

    +

    Packages in Nit

    """ -index.add "

    Highlighted Projects

    \n" +index.add "

    Highlighted Packages

    \n" index.add catalog.list_best(catalog.score) index.add "

    Most Required

    \n" -var reqs = new Counter[MProject] -for p in model.mprojects do +var reqs = new Counter[MPackage] +for p in model.mpackages do reqs[p] = catalog.deps[p].smallers.length - 1 end index.add catalog.list_best(reqs) @@ -778,7 +778,7 @@ index.add """
    linesscore
    {p.name}