# Create a tool context to handle options and paths
var toolcontext = new ToolContext
+toolcontext.tooldescription = "Usage: nitmetrics [OPTION]... <file.nit>...\mComputes various metrics on Nit programs."
+
# We do not add other options, so process them now!
-toolcontext.process_options
+toolcontext.process_options(args)
# Get arguments
var arguments = toolcontext.option_context.rest
-if arguments.is_empty or toolcontext.opt_help.value then
- toolcontext.option_context.usage
- return
-end
# We need a model to collect stufs
var model = new Model
var modelbuilder = new ModelBuilder(model, toolcontext)
# Here we load an process all modules passed on the command line
-var mmodules = modelbuilder.parse_and_build(arguments)
+var mmodules = modelbuilder.parse(arguments)
modelbuilder.run_phases
-if mmodules.length == 0 then return
-
-var mainmodule: MModule
-if mmodules.length == 1 then
- mainmodule = mmodules.first
-else
- # We need a main module, so we build it by importing all modules
- mainmodule = new MModule(model, null, "<main>", new Location(null, 0, 0, 0, 0))
- mainmodule.set_imported_mmodules(mmodules)
-end
-
print "*** METRICS ***"
-# All metrics computation ?
-var all = toolcontext.opt_all.value
-
-# Inheritance usage metrics
-if all or toolcontext.opt_inheritance.value then
- print ""
- compute_inheritance_metrics(toolcontext, model)
-end
-
-# Refinement usage metrics
-if all or toolcontext.opt_refinement.value then
- print ""
- compute_refinement_metrics(model)
-end
-
-# Self usage metrics
-if all or toolcontext.opt_self.value then
- print ""
- compute_self_metrics(modelbuilder)
-end
-
-# Nullables metrics
-if all or toolcontext.opt_nullables.value then
- print ""
- compute_nullables_metrics(modelbuilder)
-end
-
-# Static types metrics
-if all or toolcontext.opt_static_types.value then
- print ""
- compute_static_types_metrics(modelbuilder)
-end
-
-# Tables metrics
-if all or toolcontext.opt_tables.value then
- print ""
- compute_tables_metrics(mainmodule)
-end
-
-# RTA metrics
-if all or toolcontext.opt_rta.value then
- print ""
- compute_rta_metrics(modelbuilder, mainmodule)
-end
-
-# Generate Hyperdoc
-if toolcontext.opt_generate_hyperdoc.value then
- generate_module_hierarchy(toolcontext, model)
- generate_classdef_hierarchy(toolcontext, model)
- generate_class_hierarchy(toolcontext, mainmodule)
- generate_model_hyperdoc(toolcontext, model)
-end
+toolcontext.run_global_phases(mmodules)