nitdoc: update ModelView
authorAlexandre Terrasa <alexandre@moz-code.org>
Mon, 16 Oct 2017 03:18:18 +0000 (23:18 -0400)
committerAlexandre Terrasa <alexandre@moz-code.org>
Mon, 16 Oct 2017 03:20:29 +0000 (23:20 -0400)
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

src/doc/doc_base.nit
src/doc/doc_phases/doc_readme.nit
src/doc/vim_autocomplete.nit

index c77c332..6794d9d 100644 (file)
@@ -35,9 +35,6 @@ class DocModel
        # See `add_page`.
        var pages: Map[String, DocPage] = new HashMap[String, DocPage]
 
-       # The entry point of the `model`.
-       var mainmodule: MModule is writable
-
        # Add a `page` to this documentation.
        fun add_page(page: DocPage) do
                if pages.has_key(page.id) then
index a31f107..f0e2c31 100644 (file)
@@ -275,7 +275,7 @@ redef class ListCommand
                if mentity isa MModule then
                        v.add_article new MEntitiesListArticle("Classes", null, mentity.mclassdefs)
                else if mentity isa MClass then
-                       var mprops = mentity.collect_intro_mproperties(mentity.public_view)
+                       var mprops = mentity.collect_intro_mproperties(v.phase.doc)
                        v.add_article new MEntitiesListArticle("Methods", null, mprops.to_a)
                else if mentity isa MClassDef then
                        v.add_article new MEntitiesListArticle("Methods", null, mentity.mpropdefs)
index 0846e85..395a57d 100644 (file)
@@ -49,21 +49,11 @@ redef class ToolContext
        end
 end
 
-redef class Model
-
-       # Get a custom view for vimautocomplete.
-       private fun vim_view: ModelView do
-               var view = new ModelView(self)
-               view.min_visibility = protected_visibility
-               return view
-       end
-end
-
 redef class MEntity
        private fun field_separator: String do return "#====#"
        private fun line_separator: String do return "#nnnn#"
 
-       private fun write_doc(mainmodule: MModule, stream: Writer)
+       private fun write_doc(view: ModelView, stream: Writer)
        do
                # 1. Short name for autocompletion
                stream.write complete_name
@@ -90,9 +80,9 @@ redef class MEntity
                        stream.write mdoc.content.join(line_separator)
                end
 
-               write_location(mainmodule, stream)
+               write_location(view.mainmodule, stream)
 
-               write_extra_doc(mainmodule, stream)
+               write_extra_doc(view, stream)
 
                stream.write "\n"
        end
@@ -106,7 +96,7 @@ redef class MEntity
        private fun complete_mdoc: nullable MDoc do return mdoc
 
        # Extra auto documentation to append to the `stream`
-       private fun write_extra_doc(mainmodule: MModule, stream: Writer) do end
+       private fun write_extra_doc(view: ModelView, stream: Writer) do end
 
        # Location (file and line when available) of related declarations
        private fun write_location(mainmodule: MModule, stream: Writer)
@@ -196,13 +186,13 @@ redef class MClassDef
 end
 
 redef class MClassType
-       redef fun write_extra_doc(mainmodule, stream)
+       redef fun write_extra_doc(view, stream)
        do
                # Super classes
                stream.write line_separator*2
                stream.write "## Class hierarchy"
 
-               var direct_supers = [for s in mclass.in_hierarchy(mainmodule).direct_greaters do s.name]
+               var direct_supers = [for s in mclass.in_hierarchy(view.mainmodule).direct_greaters do s.name]
                if not direct_supers.is_empty then
                        alpha_comparator.sort direct_supers
                        stream.write line_separator
@@ -210,7 +200,7 @@ redef class MClassType
                        stream.write direct_supers.join(", ")
                end
 
-               var supers = [for s in mclass.in_hierarchy(mainmodule).greaters do s.name]
+               var supers = [for s in mclass.in_hierarchy(view.mainmodule).greaters do s.name]
                supers.remove mclass.name
                if not supers.is_empty then
                        alpha_comparator.sort supers
@@ -219,7 +209,7 @@ redef class MClassType
                        stream.write supers.join(", ")
                end
 
-               var direct_subs = [for s in mclass.in_hierarchy(mainmodule).direct_smallers do s.name]
+               var direct_subs = [for s in mclass.in_hierarchy(view.mainmodule).direct_smallers do s.name]
                if not direct_subs.is_empty then
                        alpha_comparator.sort direct_subs
                        stream.write line_separator
@@ -227,7 +217,7 @@ redef class MClassType
                        stream.write direct_subs.join(", ")
                end
 
-               var subs = [for s in mclass.in_hierarchy(mainmodule).smallers do s.name]
+               var subs = [for s in mclass.in_hierarchy(view.mainmodule).smallers do s.name]
                subs.remove mclass.name
                if not subs.is_empty then
                        alpha_comparator.sort subs
@@ -240,11 +230,11 @@ redef class MClassType
                stream.write line_separator*2
                stream.write "## Properties"
                stream.write line_separator
-               var props = mclass.collect_accessible_mproperties(model.protected_view).to_a
+               var props = mclass.collect_accessible_mproperties(view).to_a
                alpha_comparator.sort props
                for prop in props do
                        if mclass.name == "Object" or prop.intro.mclassdef.mclass.name != "Object" then
-                               prop.write_synopsis(mainmodule, stream)
+                               prop.write_synopsis(view.mainmodule, stream)
                        end
                end
        end
@@ -281,8 +271,9 @@ private class AutocompletePhase
 
                # Got all known modules
                var model = mainmodule.model
+               var view = new ModelView(model, mainmodule)
                for mmodule in model.mmodules do
-                       mmodule.write_doc(mainmodule, modules_stream)
+                       mmodule.write_doc(view, modules_stream)
                end
 
                # TODO list other modules from the Nit lib
@@ -295,18 +286,18 @@ private class AutocompletePhase
                        # Can it be instantiated?
                        if mclass.kind != interface_kind and mclass.kind != abstract_kind then
 
-                               for prop in mclass.collect_accessible_mproperties(model.public_view) do
+                               for prop in mclass.collect_accessible_mproperties(view) do
                                        if prop isa MMethod and prop.is_init then
                                                mclass_intro.target_constructor = prop.intro
-                                               mclass_intro.write_doc(mainmodule, constructors_stream)
+                                               mclass_intro.write_doc(view, constructors_stream)
                                        end
                                end
                                mclass_intro.target_constructor = null
                        end
 
                        # Always add to types and classes
-                       mclass.mclass_type.write_doc(mainmodule, classes_stream)
-                       mclass.mclass_type.write_doc(mainmodule, types_stream)
+                       mclass.mclass_type.write_doc(view, classes_stream)
+                       mclass.mclass_type.write_doc(view, types_stream)
                end
 
                # Get all known properties
@@ -316,7 +307,7 @@ private class AutocompletePhase
 
                        # Is it a virtual type?
                        if mproperty isa MVirtualTypeProp then
-                               mproperty.intro.write_doc(mainmodule, types_stream)
+                               mproperty.intro.write_doc(view, types_stream)
                                continue
                        end
 
@@ -324,7 +315,7 @@ private class AutocompletePhase
                        var first_letter = mproperty.name.chars.first
                        if first_letter == '@' or first_letter == '_' then continue
 
-                       mproperty.intro.write_doc(mainmodule, properties_stream)
+                       mproperty.intro.write_doc(view, properties_stream)
                end
 
                # Close streams
@@ -341,10 +332,10 @@ private class AutocompletePhase
 end
 
 redef class MModule
-       redef fun write_extra_doc(mainmodule, stream)
+       redef fun write_extra_doc(view, stream)
        do
                # Introduced classes
-               var class_intros = collect_intro_mclasses(model.protected_view).to_a
+               var class_intros = collect_intro_mclasses(view).to_a
                if class_intros.not_empty then
                        alpha_comparator.sort class_intros
                        stream.write line_separator*2
@@ -361,7 +352,7 @@ redef class MModule
                # Introduced properties
                var prop_intros = new Array[MPropDef]
                for c in mclassdefs do
-                       prop_intros.add_all c.collect_intro_mpropdefs(model.protected_view)
+                       prop_intros.add_all c.collect_intro_mpropdefs(view)
                end
 
                if prop_intros.not_empty then
@@ -371,7 +362,7 @@ redef class MModule
                        stream.write line_separator
 
                        for p in prop_intros do
-                               p.mproperty.write_synopsis(mainmodule, stream)
+                               p.mproperty.write_synopsis(view.mainmodule, stream)
                        end
                end
        end