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
fun prompt do
printn ">> "
- search(stdin.read_line)
+ search(sys.stdin.read_line)
end
fun search(entry: String) do
end
private class Pager
- var content = new Buffer
+ var content = new FlatBuffer
var indent = 0
fun add(text: String) do
add_indent
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)
# 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
# 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)
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)
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)
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)
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}")
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}")
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
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
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)
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
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")
# Create a tool context to handle options and paths
var toolcontext = new ToolContext
-toolcontext.process_options
+toolcontext.tooldescription = "Usage: nitx [OPTION]... <file.nit> [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)