X-Git-Url: http://nitlanguage.org diff --git a/src/nitcatalog.nit b/src/nitcatalog.nit index fe6d8c7..ba0cb1c 100644 --- a/src/nitcatalog.nit +++ b/src/nitcatalog.nit @@ -33,7 +33,7 @@ # * [ ] reify people # * [ ] separate information gathering from rendering # * [ ] move up information gathering in (existing or new) service modules -# * [ ] add command line options +# * [X] add command line options # * [ ] harden HTML (escaping, path injection, etc) # * [ ] nitcorn server with RESTful API # @@ -382,50 +382,52 @@ class Catalog if cat != null then cat2proj[cat].add mpackage score += ts2.length.score - var reqs = deps[mpackage].greaters.to_a - reqs.remove(mpackage) - alpha_comparator.sort(reqs) - res.add "

Requirements

\n" - if reqs.is_empty then - res.add "none" - else - var list = new Array[String] - for r in reqs do - var direct = deps.has_direct_edge(mpackage, r) - var s = "" - if direct then s += "" - s += r.to_s - if direct then s += "" - s += "" - list.add s + if deps.has(mpackage) then + var reqs = deps[mpackage].greaters.to_a + reqs.remove(mpackage) + alpha_comparator.sort(reqs) + res.add "

Requirements

\n" + if reqs.is_empty then + res.add "none" + else + var list = new Array[String] + for r in reqs do + var direct = deps.has_direct_edge(mpackage, r) + var s = "" + if direct then s += "" + s += r.to_s + if direct then s += "" + s += "" + list.add s + end + res.add_list(list, ", ", " and ") end - res.add_list(list, ", ", " and ") - end - reqs = deps[mpackage].smallers.to_a - reqs.remove(mpackage) - alpha_comparator.sort(reqs) - res.add "

Clients

\n" - if reqs.is_empty then - res.add "none" - else - var list = new Array[String] - for r in reqs do - var direct = deps.has_direct_edge(r, mpackage) - var s = "" - if direct then s += "" - s += r.to_s - if direct then s += "" - s += "" - list.add s + reqs = deps[mpackage].smallers.to_a + reqs.remove(mpackage) + alpha_comparator.sort(reqs) + res.add "

Clients

\n" + if reqs.is_empty then + res.add "none" + else + var list = new Array[String] + for r in reqs do + var direct = deps.has_direct_edge(r, mpackage) + var s = "" + if direct then s += "" + s += r.to_s + if direct then s += "" + s += "" + list.add s + end + res.add_list(list, ", ", " and ") end - res.add_list(list, ", ", " and ") - end - score += deps[mpackage].greaters.length.score - score += deps[mpackage].direct_greaters.length.score - score += deps[mpackage].smallers.length.score - score += deps[mpackage].direct_smallers.length.score + score += deps[mpackage].greaters.length.score + score += deps[mpackage].direct_greaters.length.score + score += deps[mpackage].smallers.length.score + score += deps[mpackage].direct_smallers.length.score + end var contributors = mpackage.contributors if not contributors.is_empty then @@ -598,10 +600,12 @@ class Catalog res.add "name\n" res.add "maint\n" res.add "contrib\n" - res.add "reqs\n" - res.add "direct
reqs\n" - res.add "clients\n" - res.add "direct
clients\n" + if deps.not_empty then + res.add "reqs\n" + res.add "direct
reqs\n" + res.add "clients\n" + res.add "direct
clients\n" + end res.add "modules\n" res.add "classes\n" res.add "methods\n" @@ -615,10 +619,12 @@ class Catalog if p.maintainers.not_empty then maint = p.maintainers.first res.add "{maint}" res.add "{p.contributors.length}" - res.add "{deps[p].greaters.length-1}" - res.add "{deps[p].direct_greaters.length}" - res.add "{deps[p].smallers.length-1}" - res.add "{deps[p].direct_smallers.length}" + if deps.not_empty then + res.add "{deps[p].greaters.length-1}" + res.add "{deps[p].direct_greaters.length}" + res.add "{deps[p].smallers.length-1}" + res.add "{deps[p].direct_smallers.length}" + end res.add "{mmodules[p]}" res.add "{mclasses[p]}" res.add "{mmethods[p]}" @@ -645,6 +651,13 @@ end var model = new Model var tc = new ToolContext +var opt_dir = new OptionString("Directory where the HTML files are generated", "-d", "--dir") +var opt_no_git = new OptionBool("Do not gather git information from the working directory", "--no-git") +var opt_no_parse = new OptionBool("Do not parse nit files (no importation information)", "--no-parse") +var opt_no_model = new OptionBool("Do not analyse nit files (no class/method information)", "--no-model") + +tc.option_context.add_option(opt_dir, opt_no_git, opt_no_parse, opt_no_model) + tc.process_options(sys.args) tc.keep_going = true @@ -664,6 +677,7 @@ for p in model.mpackages do modelbuilder.scan_group(g) # Load the module to process importation information + if opt_no_parse.value then continue modelbuilder.parse_group(g) catalog.deps.add_node(p) @@ -674,14 +688,18 @@ for p in model.mpackages do catalog.deps.add_edge(p, ip) end end +end +if not opt_no_git.value then for p in model.mpackages do catalog.git_info(p) end # Run phases to modelize classes and properties (so we can count them) -#modelbuilder.run_phases +if not opt_no_model.value then + modelbuilder.run_phases +end -var out = "out" +var out = opt_dir.value or else "catalog.out" out.mkdir # Generate the css (hard coded) @@ -805,12 +823,14 @@ index.add """ index.add "

Highlighted Packages

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

Most Required

\n" -var reqs = new Counter[MPackage] -for p in model.mpackages do - reqs[p] = catalog.deps[p].smallers.length - 1 +if catalog.deps.not_empty then + index.add "

Most Required

\n" + 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) end -index.add catalog.list_best(reqs) index.add "

By First Tag

\n" index.add catalog.list_by(catalog.cat2proj, "cat_")