X-Git-Url: http://nitlanguage.org diff --git a/src/nitx.nit b/src/nitx.nit index 9db4abd..0e0d345 100644 --- a/src/nitx.nit +++ b/src/nitx.nit @@ -45,21 +45,16 @@ class NitIndex init(toolcontext: ToolContext) do # We need a model to collect stufs self.toolcontext = toolcontext - self.toolcontext.option_context.options.clear self.arguments = toolcontext.option_context.rest - if arguments.is_empty or arguments.length > 2 then - print "usage: ni path/to/module.nit [expression]" - toolcontext.option_context.usage + if arguments.length > 2 then + print toolcontext.tooldescription exit(1) end model = new Model mbuilder = new ModelBuilder(model, toolcontext) - # Here we load an process std modules - #var dir = "NIT_DIR".environ - #var mmodules = modelbuilder.parse_and_build(["{dir}/lib/standard/standard.nit"]) var mmodules = mbuilder.parse([arguments.first]) if mmodules.is_empty then return mbuilder.run_phases @@ -106,7 +101,7 @@ class NitIndex fun prompt do printn ">> " - search(stdin.read_line) + search(sys.stdin.read_line) end fun search(entry: String) do @@ -354,7 +349,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 @@ -383,22 +378,18 @@ redef class MModule end redef fun preview(index, pager) do - if index.mbuilder.mmodule2nmodule.has_key(self) then - var node = index.mbuilder.mmodule2nmodule[self] - 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 + var mdoc = self.mdoc + if mdoc != null then + pager.add(mdoc.short_comment.green) end pager.add(prototype) pager.add("{namespace}".bold.gray + " (lines {location.lines})".gray) end redef fun content(index, pager) do - if index.mbuilder.mmodule2nmodule.has_key(self) then - var node = index.mbuilder.mmodule2nmodule[self] - 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 + var mdoc = self.mdoc + if mdoc != null then + for comment in mdoc.content do pager.add(comment.green) end pager.add(prototype) pager.add("{namespace}".bold.gray + " (lines {location.lines})".gray) @@ -464,7 +455,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 @@ -480,7 +471,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) @@ -498,11 +489,9 @@ redef class MClass redef fun content(index, pager) do # intro comment - if index.mbuilder.mclassdef2nclassdef.has_key(intro) then - var node = index.mbuilder.mclassdef2nclassdef[intro] - if node isa AStdClassdef and not node.n_doc == null and not node.n_doc.comment.is_empty then - for comment in node.n_doc.comment do pager.add(comment.green) - end + var mdoc = intro.mdoc + if mdoc != null then + for comment in mdoc.content do pager.add(comment.green) end pager.add(intro.to_console) pager.add("{intro.namespace}".bold.gray + " (lines {intro.location.lines})".gray) @@ -576,29 +565,25 @@ 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 end redef fun preview(index, pager) do - if index.mbuilder.mclassdef2nclassdef.has_key(self) then - var node = index.mbuilder.mclassdef2nclassdef[self] - if node isa AStdClassdef and not node.n_doc == null and not node.n_doc.short_comment.is_empty then - pager.add(node.n_doc.short_comment.green) - end + var mdoc = self.mdoc + if mdoc != null then + pager.add(mdoc.short_comment.green) end pager.add(to_console) pager.add("{namespace}".bold.gray + " (lines {location.lines})".gray) end redef fun content(index, pager) do - if index.mbuilder.mclassdef2nclassdef.has_key(self) then - var node = index.mbuilder.mclassdef2nclassdef[self] - if node isa AStdClassdef and not node.n_doc == null and not node.n_doc.comment.is_empty then - for comment in node.n_doc.comment do pager.add(comment.green) - end + var mdoc = self.mdoc + if mdoc != null then + for comment in mdoc.content do pager.add(comment.green) end pager.add(to_console) pager.add("{namespace}".bold.gray + " (lines {location.lines})".gray) @@ -684,22 +669,18 @@ redef class MPropDef end redef fun preview(index, pager) do - if index.mbuilder.mpropdef2npropdef.has_key(self) then - var nprop = index.mbuilder.mpropdef2npropdef[self] - if not nprop.n_doc == null and not nprop.n_doc.short_comment.is_empty then - pager.add(nprop.n_doc.short_comment.green) - end + var mdoc = self.mdoc + if mdoc != null then + pager.add(mdoc.short_comment.green) end pager.add(to_console) pager.add("{namespace}".bold.gray + " (lines {location.lines})".gray) end redef fun content(index, pager) do - if index.mbuilder.mpropdef2npropdef.has_key(self) then - var nprop = index.mbuilder.mpropdef2npropdef[self] - if not nprop.n_doc == null and not nprop.n_doc.comment.is_empty then - for comment in nprop.n_doc.comment do pager.add(comment.green) - end + var mdoc = self.mdoc + if mdoc != null then + for comment in mdoc.content do pager.add(comment.green) end pager.add(to_console) pager.add("{namespace}".bold.gray + " (lines {location.lines})".gray) @@ -708,22 +689,21 @@ 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) if msignature != null then res.append(msignature.to_console) - # FIXME: modifiers should be accessible via the model - #if self isa ADeferredMethPropdef then ret = "{ret} is abstract" - #if self isa AInternMethPropdef then ret = "{ret} is intern" - #if self isa AExternMethPropdef then ret = "{ret} is extern" + if is_abstract then res.append " is abstract" + if is_intern then res.append " is intern" + if is_extern then res.append " is extern" return res.to_s end 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}") @@ -733,7 +713,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}") @@ -743,7 +723,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 @@ -761,7 +741,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 @@ -778,7 +758,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) @@ -797,17 +777,9 @@ redef class MVirtualType redef fun to_console do return mproperty.name end -redef class ADoc - private fun comment: List[String] do - var res = new List[String] - for t in n_comment do - res.add(t.text.replace("\n", "")) - end - return res - end - +redef class MDoc private fun short_comment: String do - return n_comment.first.text.replace("\n", "") + return content.first end end @@ -861,7 +833,7 @@ redef class String private fun escape: String do - var b = new Buffer + var b = new FlatBuffer for c in self.chars do if c == '\n' then b.append("\\n") @@ -891,7 +863,8 @@ end # Create a tool context to handle options and paths var toolcontext = new ToolContext -toolcontext.process_options +toolcontext.tooldescription = "Usage: nitx [OPTION]... [query]\nDisplays specific pieces of API information from Nit source files." +toolcontext.process_options(args) # Here we launch the nit index var ni = new NitIndex(toolcontext)