ni: fix display
[nit.git] / src / ni.nit
index 1ee2b26..1b9ecfe 100644 (file)
@@ -120,9 +120,13 @@ class NitIndex
                var pager = new Pager
                for mmodule in mmodules do
                        var nmodule = mbuilder.mmodule2nmodule[mmodule]
-                       pager.add("# module {mmodule.name}\n".bold)
-                       pager.add("import {mmodule.in_importation.direct_greaters.join(", ")}")
-                       #TODO add kmown clients
+                       pager.add("# module {mmodule.namespace}\n".bold)
+                       if not mmodule.in_importation.direct_greaters.is_empty then
+                               pager.add("import ".bold + "{mmodule.in_importation.direct_greaters.join(", ")}\n")
+                       end
+                       if not mmodule.in_importation.direct_smallers.is_empty then
+                               pager.add("known clients: ".bold + "{mmodule.in_importation.direct_smallers.join(", ")}\n")
+                       end
                        pager.add_rule
                        pager.addn(nmodule.comment.green)
                        pager.add_rule
@@ -134,9 +138,10 @@ class NitIndex
 
                        for cat, list in cats do
                                if not list.is_empty then
-                                       pager.add("# {cat}\n".bold)
+                                       pager.add("# {cat}".bold)
                                        for mclass in list do
                                                var nclass = mbuilder.mclassdef2nclassdef[mclass.intro].as(AStdClassdef)
+                                               pager.add("")
                                                if not nclass.short_comment.is_empty then
                                                        pager.add("\t# {nclass.short_comment}")
                                                end
@@ -153,7 +158,6 @@ class NitIndex
                                                                pager.add("\t\t" + "refined in {mclassdef.namespace}".gray)
                                                        end
                                                end
-                                               pager.add("")
                                        end
                                end
                        end
@@ -167,34 +171,23 @@ class NitIndex
                for mclass in mclasses do
                        var nclass = mbuilder.mclassdef2nclassdef[mclass.intro].as(AStdClassdef)
 
-                       pager.add("# {mclass.intro_mmodule.public_owner.name}::{mclass.name}\n".bold)
-                       pager.add("{mclass.short_doc} ")
-                       #TODO add kmown subclasses
+                       pager.add("# {mclass.namespace}\n".bold)
+                       pager.add("{mclass.short_doc}")
                        pager.add_rule
                        pager.addn(nclass.comment.green)
                        pager.add_rule
                        if not mclass.parameter_types.is_empty then
-                               pager.add("# formal types\n".bold)
+                               pager.add("# formal types".bold)
                                for ft, bound in mclass.parameter_types do
-                                       pager.add("\t{ft.to_s.green}: {bound}")
                                        pager.add("")
+                                       pager.add("\t{ft.to_s.green}: {bound}")
                                end
                        end
                        if not mclass.virtual_types.is_empty then
-                               pager.add("# virtual types\n".bold)
+                               pager.add("# virtual types".bold)
                                for vt in mclass.virtual_types do
-                                       if vt.visibility.to_s == "public" then pager.add("\t{vt.to_s.green}: {vt.intro.bound.to_s}")
-                                       if vt.visibility.to_s == "private" then pager.add("\t{vt.to_s.red}: {vt.intro.bound.to_s}")
-                                       if vt.visibility.to_s == "protected" then pager.add("\t{vt.to_s.yellow}: {vt.intro.bound.to_s}")
-                                       if vt.intro_mclassdef != mclass.intro then
-                                               pager.add("\t\t" + "introduced in {vt.intro_mclassdef.namespace}::{vt}".gray)
-                                       end
-                                       for mpropdef in vt.mpropdefs do
-                                               if mpropdef != vt.intro then
-                                                       pager.add("\t\t" + "refined in {mpropdef.mclassdef.namespace}".gray)
-                                               end
-                                       end
                                        pager.add("")
+                                       vt_fulldoc(pager, vt)
                                end
                        end
                        pager.add_rule
@@ -207,27 +200,10 @@ class NitIndex
 
                        for cat, list in cats do
                                if not list.is_empty then
-                                       pager.add("# {cat}\n".bold)
+                                       pager.add("\n# {cat}".bold)
                                        for mprop in list do
-                                               #TODO verifier cast
-                                               var nmethod = mbuilder.mpropdef2npropdef[mprop.intro].as(AMethPropdef)
-                                               if not nmethod.short_comment.is_empty then
-                                                       pager.add("\t# {nmethod.short_comment}")
-                                               end
-                                               if cat == "refined methods" then
-                                                       pager.add("\tredef {nmethod}")
-                                               else
-                                                       pager.add("\t{nmethod}")
-                                               end
-                                               if not mprop.intro_mclassdef == mclass.intro then
-                                                       pager.add("\t\t" + "introduced in {mprop.intro_mclassdef.namespace}".gray)
-                                               end
-                                               for mpropdef in mprop.mpropdefs do
-                                                       if mpropdef != mprop.intro then
-                                                               pager.add("\t\t" + "refined in {mpropdef.mclassdef.namespace}".gray)
-                                                       end
-                                               end
                                                pager.add("")
+                                               method_fulldoc(pager, mprop)
                                        end
                                end
                        end
@@ -238,29 +214,56 @@ class NitIndex
 
        private fun props_fulldoc(mprops: List[MProperty]) do
                var pager = new Pager
+               # TODO group by module
                for mprop in mprops do
-                       var nprop = mbuilder.mpropdef2npropdef[mprop.intro]
-                       if nprop isa AMethPropdef then
-                               pager.add("# {mprop.intro_mclassdef.namespace.bold}\n")
-                               if not nprop.short_comment.is_empty then
-                                       pager.add("\t# {nprop.short_comment}")
+                       if mprop isa MMethod and mbuilder.mpropdef2npropdef.has_key(mprop.intro) then
+                               method_fulldoc(pager, mprop)
+                               pager.add_rule
+                       else if mprop isa MVirtualTypeProp then
+                               vt_fulldoc(pager, mprop)
+                               pager.add_rule
+                       end
+               end
+               pager.render
+       end
+
+       private fun method_fulldoc(pager: Pager, mmethod: MMethod) do
+               if mbuilder.mpropdef2npropdef.has_key(mmethod.intro) then
+                       var nmethod = mbuilder.mpropdef2npropdef[mmethod.intro]
+                       if nmethod isa AMethPropdef then
+                               if not nmethod.short_comment.is_empty then
+                                       pager.add("\t# {nmethod.short_comment}")
                                end
-                               pager.add("\t{nprop}")
-                               pager.add("\t\t" + "introduced in {mprop.intro_mclassdef.namespace}".gray)
-                               for mpropdef in mprop.mpropdefs do
-                                       if mpropdef != mprop.intro then
+                               pager.add("\t{nmethod}")
+                               pager.add("\t\t" + "introduced in {mmethod.intro_mclassdef.namespace}".gray)
+                               for mpropdef in mmethod.mpropdefs do
+                                       if mpropdef != mmethod.intro then
                                                pager.add("\t\t" + "refined in {mpropdef.mclassdef.namespace}".gray)
                                        end
                                end
                        end
-                       pager.add_rule
                end
-               pager.render
+       end
+
+       private fun vt_fulldoc(pager: Pager, vt: MVirtualTypeProp) do
+               pager.add("\t{vt.short_doc}")
+               pager.add("\t\t" + "introduced in {vt.intro_mclassdef.namespace}::{vt}".gray)
+               for mpropdef in vt.mpropdefs do
+                       if mpropdef != vt.intro then
+                               pager.add("\t\t" + "refined in {mpropdef.mclassdef.namespace}".gray)
+                       end
+               end
        end
 end
 
 # Printing facilities
 
+redef class MModule
+       private fun namespace: String do
+               return full_name
+       end
+end
+
 redef class MClass
 
        redef fun to_s: String do
@@ -280,9 +283,15 @@ redef class MClass
                if visibility.to_s == "public" then ret = "{ret}{to_s.green}"
                if visibility.to_s == "private" then ret = "{ret}{to_s.red}"
                if visibility.to_s == "protected" then ret = "{ret}{to_s.yellow}"
-               ret = "{ret} super {parents.join(", ")}"
+               if not parents.is_empty then
+                       ret = "{ret} super {parents.join(", ")}"
+               end
                return ret
        end
+
+       private fun namespace: String do
+               return "{intro_mmodule.public_owner.name}::{name}"
+       end
 end
 
 redef class MClassDef
@@ -291,6 +300,16 @@ redef class MClassDef
        end
 end
 
+redef class MVirtualTypeProp
+       private fun short_doc: String do
+               var ret = ""
+               if visibility.to_s == "public" then ret = "{to_s.green}: {intro.bound.to_s}"
+               if visibility.to_s == "private" then ret = "\t{to_s.red}: {intro.bound.to_s}"
+               if visibility.to_s == "protected" then ret = "\t{to_s.yellow}: {intro.bound.to_s}"
+               return ret
+       end
+end
+
 redef class AModule
        private fun comment: String do
                var ret = ""
@@ -436,11 +455,10 @@ toolcontext.process_options
 var ni = new NitIndex(toolcontext)
 ni.start
 
-# TODO seek properties: method, attribute, vt, ft
 # TODO seek methods by return type :<type>
 # TODO seek methods by param type: (<type>)
 # TODO seek subclasses and super classes <.<class> >.<class>
 # TODO seek subclasses and super types <:<type> >:<type>
 # TODO sort by alphabetic order
 # TODO seek with regexp
-# TODO standardize namespacesq
+# TODO standardize namespaces with private option