rta: use callsites to do the analysis
[nit.git] / src / nitx.nit
index 1931b5c..84c0815 100644 (file)
@@ -30,6 +30,19 @@ class NitIndex
        private var arguments: Array[String]
        private var renderer: PagerMatchesRenderer
 
+       # New constructor to use the pre-calculated model when interpreting a module
+       init with_infos(mbuilder: ModelBuilder, mmodule: MModule) do
+
+               self.model = mbuilder.model
+               self.mbuilder = mbuilder
+
+               self.mainmodule = mmodule
+               self.toolcontext = mbuilder.toolcontext
+               self.arguments = toolcontext.option_context.rest
+
+               renderer = new PagerMatchesRenderer(self)
+       end
+
        init(toolcontext: ToolContext) do
                # We need a model to collect stufs
                self.toolcontext = toolcontext
@@ -107,7 +120,7 @@ class NitIndex
                        prompt
                        return
                end
-               if entry == ":q" then exit(0)
+               if entry == ":q" then return
 
                # Parse query string
                var query = parse_query(entry)
@@ -252,7 +265,7 @@ end
 # Code Analysis
 
 redef class ToolContext
-       var nitx_phase: NitxPhase = new NitxPhase(self, [typing_phase])
+       private var nitx_phase: NitxPhase = new NitxPhase(self, [typing_phase])
 end
 
 # Compiler phase for nitx
@@ -357,23 +370,23 @@ end
 redef class MModule
        super IndexMatch
        # prototype of the module
-       #       module ownername::name
+       #       module name
        private fun prototype: String do return "module {name.bold}"
 
        # namespace of the module
-       #       ownername::name
+       #       project::name
        private fun namespace: String do
-               if public_owner == null then
+               if mgroup == null or mgroup.mproject.name == self.name then
                        return self.name
                else
-                       return "{public_owner.namespace}::{self.name}"
+                       return "{mgroup.mproject}::{self.name}"
                end
        end
 
        redef fun preview(index, pager) do
                if index.mbuilder.mmodule2nmodule.has_key(self) then
                        var node = index.mbuilder.mmodule2nmodule[self]
-                       if not node.n_moduledecl.n_doc == null and not node.n_moduledecl.n_doc.short_comment.is_empty then
+                       if node.n_moduledecl != null and not node.n_moduledecl.n_doc == null and not node.n_moduledecl.n_doc.short_comment.is_empty then
                                pager.add(node.n_moduledecl.n_doc.short_comment.green)
                        end
                end
@@ -384,7 +397,7 @@ redef class MModule
        redef fun content(index, pager) do
                if index.mbuilder.mmodule2nmodule.has_key(self) then
                        var node = index.mbuilder.mmodule2nmodule[self]
-                       if not node.n_moduledecl.n_doc == null and not node.n_moduledecl.n_doc.comment.is_empty then
+                       if node.n_moduledecl != null and not node.n_moduledecl.n_doc == null and not node.n_moduledecl.n_doc.comment.is_empty then
                                for comment in node.n_moduledecl.n_doc.comment do pager.add(comment.green)
                        end
                end
@@ -395,7 +408,7 @@ redef class MModule
                # imported modules
                var imports = new Array[MModule]
                for mmodule in in_importation.direct_greaters.to_a do
-                       if not in_nesting.direct_greaters.has(mmodule) then imports.add(mmodule)
+                       imports.add(mmodule)
                end
                if not imports.is_empty then
                        sorter.sort(imports)
@@ -408,19 +421,6 @@ redef class MModule
                        end
                        pager.indent = pager.indent - 1
                end
-               # nested modules
-               var nested = in_nesting.direct_greaters.to_a
-               if not nested.is_empty then
-                       sorter.sort(nested)
-                       pager.add("")
-                       pager.add("== nested modules".bold)
-                       pager.indent = pager.indent + 1
-                       for mmodule in nested do
-                               pager.add("")
-                               mmodule.preview(index, pager)
-                       end
-                       pager.indent = pager.indent - 1
-               end
                # mclassdefs
                var csorter = new MClassDefNameSorter
                var intros = new Array[MClassDef]