nitx: introduce search calls to MProperty
[nit.git] / src / nitx.nit
1 # This file is part of NIT ( http://www.nitlanguage.org ).
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 # http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14
15 # `nitx`, is a command tool that displays useful informations about the code.
16 #
17 # Features:
18 #
19 # * Display comment from name/namespace
20 # * Display documentation page from Nitdoc in console
21 # * Find type usage in parameters, returns and news.
22 # * Find usage of a specific property.
23 module nitx
24
25 import modelbuilder
26 import doc::doc_phases::doc_console
27
28 redef class ToolContext
29
30 # Nittx generation phase.
31 var docx: Phase = new NitxPhase(self, null)
32
33 # Used to shortcut the prompt and display directly the result in console.
34 var opt_query = new OptionString("Nitx query to perform", "-q", "--query")
35
36 init do option_context.add_option opt_query
37 end
38
39 # Nitx phase explores the model and prepares the console rendering.
40 private class NitxPhase
41 super Phase
42 redef fun process_mainmodule(mainmodule, mmodules)
43 do
44 var doc = new DocModel(mainmodule.model, mainmodule)
45
46 var phases = [
47 new ExtractionPhase(toolcontext, doc),
48 new MakePagePhase(toolcontext, doc),
49 new ConcernsPhase(toolcontext, doc),
50 new StructurePhase(toolcontext, doc): DocPhase]
51
52 for phase in phases do
53 toolcontext.info("# {phase.class_name}", 1)
54 phase.apply
55 end
56
57 # start nitx
58 var nitx = new Nitx(toolcontext, doc)
59 var q = toolcontext.opt_query.value
60 if q != null then # shortcut prompt
61 print ""
62 nitx.do_query(q)
63 return
64 end
65 nitx.start
66 end
67 end
68
69 # build toolcontext
70 var toolcontext = new ToolContext
71 var tpl = new Template
72 tpl.add "Usage: nitx [OPTION]... <file.nit>... [query]\n"
73 tpl.add "Displays specific pieces of API information from Nit source files."
74 toolcontext.tooldescription = tpl.write_to_string
75
76 # process options
77 toolcontext.process_options(args)
78 var arguments = toolcontext.option_context.rest
79
80 # build model
81 var model = new Model
82 var mbuilder = new ModelBuilder(model, toolcontext)
83 var mmodules = mbuilder.parse_full(arguments)
84
85 # process
86 if mmodules.is_empty then return
87 mbuilder.run_phases
88 toolcontext.run_global_phases(mmodules)