stdlib/strings: Moved Buffer to FlatBuffer, Buffer is now abstract.
[nit.git] / src / nitx.nit
index 8915412..456a5eb 100644 (file)
@@ -17,7 +17,6 @@ module nitx
 
 import model_utils
 import modelize_property
-import frontend
 
 # Main class of the nit index tool
 # NitIndex build the model using the toolcontext argument
@@ -30,6 +29,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 +119,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)
@@ -146,7 +158,7 @@ class NitIndex
                else
                        var category = parts[0]
                        var keyword = parts[1]
-                       if keyword.first == ' ' then keyword = keyword.substring_from(1)
+                       if keyword.chars.first == ' ' then keyword = keyword.substring_from(1)
                        return new IndexQueryPair(str, keyword, category)
                end
        end
@@ -252,7 +264,7 @@ end
 # Code Analysis
 
 redef class ToolContext
-       private var nitx_phase: NitxPhase = new NitxPhase(self, [typing_phase])
+       private var nitx_phase: NitxPhase = new NitxPhase(self, [modelize_property_phase])
 end
 
 # Compiler phase for nitx
@@ -342,7 +354,7 @@ private class PagerMatchesRenderer
 end
 
 private class Pager
-       var content = new Buffer
+       var content = new FlatBuffer
        var indent = 0
        fun add(text: String) do
                add_indent
@@ -357,16 +369,16 @@ 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
 
@@ -395,7 +407,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 +420,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]
@@ -465,7 +464,7 @@ redef class MClass
        # return the generic signature of the class
        #       [E, F]
        private fun signature: String do
-               var res = new Buffer
+               var res = new FlatBuffer
                if arity > 0 then
                        res.append("[")
                        for i in [0..intro.parameter_names.length[ do
@@ -481,7 +480,7 @@ redef class MClass
        # class name is displayed with colors depending on visibility
        #       abstract interface Foo[E]
        private fun prototype: String do
-               var res = new Buffer
+               var res = new FlatBuffer
                res.append("{kind} ")
                if visibility.to_s == "public" then res.append("{name}{signature}".bold.green)
                if visibility.to_s == "private" then res.append("{name}{signature}".bold.red)
@@ -577,7 +576,7 @@ redef class MClassDef
        end
 
        fun to_console: String do
-               var res = new Buffer
+               var res = new FlatBuffer
                if not is_intro then res.append("redef ")
                res.append(mclass.prototype)
                return res.to_s
@@ -709,7 +708,7 @@ end
 
 redef class MMethodDef
        redef fun to_console do
-               var res = new Buffer
+               var res = new FlatBuffer
                if not is_intro then res.append("redef ")
                if not mproperty.is_init then res.append("fun ")
                res.append(mproperty.to_console.bold)
@@ -724,7 +723,7 @@ end
 
 redef class MVirtualTypeDef
        redef fun to_console do
-               var res = new Buffer
+               var res = new FlatBuffer
                res.append("type ")
                res.append(mproperty.to_console.bold)
                res.append(": {bound.to_console}")
@@ -734,7 +733,7 @@ end
 
 redef class MAttributeDef
        redef fun to_console do
-               var res = new Buffer
+               var res = new FlatBuffer
                res.append("var ")
                res.append(mproperty.to_console.bold)
                res.append(": {static_mtype.to_console}")
@@ -744,7 +743,7 @@ end
 
 redef class MSignature
        redef fun to_console do
-               var res = new Buffer
+               var res = new FlatBuffer
                if not mparameters.is_empty then
                        res.append("(")
                        for i in [0..mparameters.length[ do
@@ -762,7 +761,7 @@ end
 
 redef class MParameter
        fun to_console: String do
-               var res = new Buffer
+               var res = new FlatBuffer
                res.append("{name}: {mtype.to_console}")
                if is_vararg then res.append("...")
                return res.to_s
@@ -779,7 +778,7 @@ end
 
 redef class MGenericType
        redef fun to_console do
-               var res = new Buffer
+               var res = new FlatBuffer
                res.append("{mclass.name}[")
                for i in [0..arguments.length[ do
                        res.append(arguments[i].to_console)
@@ -862,8 +861,8 @@ redef class String
 
        private fun escape: String
        do
-               var b = new Buffer
-               for c in self do
+               var b = new FlatBuffer
+               for c in self.chars do
                        if c == '\n' then
                                b.append("\\n")
                        else if c == '\0' then