From ecc8d2b0e905894ac2ea2e26ff3afc1f8abc3751 Mon Sep 17 00:00:00 2001 From: Alexandre Terrasa Date: Sun, 15 Oct 2017 23:18:18 -0400 Subject: [PATCH] nitdoc: update ModelView Signed-off-by: Alexandre Terrasa --- src/doc/doc_base.nit | 3 -- src/doc/doc_phases/doc_readme.nit | 2 +- src/doc/vim_autocomplete.nit | 55 ++++++++++++++++--------------------- 3 files changed, 24 insertions(+), 36 deletions(-) diff --git a/src/doc/doc_base.nit b/src/doc/doc_base.nit index c77c332..6794d9d 100644 --- a/src/doc/doc_base.nit +++ b/src/doc/doc_base.nit @@ -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 diff --git a/src/doc/doc_phases/doc_readme.nit b/src/doc/doc_phases/doc_readme.nit index a31f107..f0e2c31 100644 --- a/src/doc/doc_phases/doc_readme.nit +++ b/src/doc/doc_phases/doc_readme.nit @@ -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) diff --git a/src/doc/vim_autocomplete.nit b/src/doc/vim_autocomplete.nit index 0846e85..395a57d 100644 --- a/src/doc/vim_autocomplete.nit +++ b/src/doc/vim_autocomplete.nit @@ -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 -- 1.7.9.5