1 # This file is part of NIT ( http://www.nitlanguage.org ).
3 # Copyright 2012 Jean Privat <jean@pryen.org>
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
9 # http://www.apache.org/licenses/LICENSE-2.0
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
17 # A program that collects various metrics on nit programs and libraries
24 # Create a tool context to handle options and paths
25 var toolcontext
= new ToolContext
26 # We do not add other options, so process them now!
27 toolcontext
.process_options
30 var arguments
= toolcontext
.option_context
.rest
31 if arguments
.is_empty
or toolcontext
.opt_help
.value
then
32 toolcontext
.option_context
.usage
36 # We need a model to collect stufs
38 # An a model builder to parse files
39 var modelbuilder
= new ModelBuilder(model
, toolcontext
)
41 # Here we load an process all modules passed on the command line
42 var mmodules
= modelbuilder
.parse_and_build
(arguments
)
43 modelbuilder
.full_propdef_semantic_analysis
45 if mmodules
.length
== 0 then return
47 var mainmodule
: MModule
48 if mmodules
.length
== 1 then
49 mainmodule
= mmodules
.first
51 # We need a main module, so we build it by importing all modules
52 mainmodule
= new MModule(model
, null, "<main>", new Location(null, 0, 0, 0, 0))
53 mainmodule
.set_imported_mmodules
(mmodules
)
56 print
"*** METRICS ***"
58 # All metrics computation ?
59 var all
= toolcontext
.opt_all
.value
61 # Inheritance usage metrics
62 if all
or toolcontext
.opt_inheritance
.value
then
64 compute_inheritance_metrics
(toolcontext
, model
)
67 # Refinement usage metrics
68 if all
or toolcontext
.opt_refinement
.value
then
70 compute_refinement_metrics
(model
)
74 if all
or toolcontext
.opt_self
.value
then
76 compute_self_metrics
(modelbuilder
)
80 if all
or toolcontext
.opt_nullables
.value
then
82 compute_nullables_metrics
(modelbuilder
)
85 # Static types metrics
86 if all
or toolcontext
.opt_static_types
.value
then
88 compute_static_types_metrics
(modelbuilder
)
92 if all
or toolcontext
.opt_tables
.value
then
94 compute_tables_metrics
(mainmodule
)
98 if all
or toolcontext
.opt_rta
.value
then
100 compute_rta_metrics
(modelbuilder
, mainmodule
)
104 if toolcontext
.opt_generate_hyperdoc
.value
then
105 generate_module_hierarchy
(toolcontext
, model
)
106 generate_classdef_hierarchy
(toolcontext
, model
)
107 generate_class_hierarchy
(toolcontext
, mainmodule
)
108 generate_model_hyperdoc
(toolcontext
, model
)