X-Git-Url: http://nitlanguage.org diff --git a/src/nitx.nit b/src/nitx.nit index 8915412..456a5eb 100644 --- a/src/nitx.nit +++ b/src/nitx.nit @@ -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