import modelbuilder
import phase
import modelize::modelize_class
-import model_utils
+import model::model_collect
redef class ToolContext
# Phase generating the files for the Vim plugin
stream.write line_separator*2
stream.write "## Properties"
stream.write line_separator
- var props = mclass.all_mproperties(mainmodule, protected_visibility).to_a
+ var props = mclass.collect_accessible_mproperties(protected_visibility).to_a
alpha_comparator.sort props
for prop in props do
if mclass.name == "Object" or prop.intro.mclassdef.mclass.name != "Object" then
-
- if prop.visibility == public_visibility then
- stream.write "+ "
- else stream.write "~ " # protected_visibility
-
- if prop isa MMethod then
- if prop.is_init and prop.name != "init" then stream.write "init "
- if prop.is_new and prop.name != "new" then stream.write "new "
- end
-
- stream.write prop.name
-
- if prop isa MMethod then
- stream.write prop.intro.msignature.to_s
- end
-
- var mdoc = prop.intro.mdoc
- if mdoc != null then
- stream.write " # "
- stream.write mdoc.content.first
- end
- stream.write line_separator
+ prop.write_synopsis(mainmodule, stream)
end
end
end
# Can it be instantiated?
if mclass.kind != interface_kind and mclass.kind != abstract_kind then
- for prop in mclass.all_mproperties(mainmodule, public_visibility) do
+ for prop in mclass.collect_accessible_mproperties(public_visibility) do
if prop isa MMethod and prop.is_init then
mclass_intro.target_constructor = prop.intro
mclass_intro.write_doc(mainmodule, constructors_stream)
end
end
end
+
+redef class MModule
+ redef fun write_extra_doc(mainmodule, stream)
+ do
+ # Introduced classes
+ var class_intros = collect_intro_mclasses(protected_visibility).to_a
+ if class_intros.not_empty then
+ alpha_comparator.sort class_intros
+ stream.write line_separator*2
+ stream.write "## Introduced classes"
+
+ for c in class_intros do
+ stream.write line_separator
+ stream.write "* {c.name}"
+ var doc = c.intro.mdoc
+ if doc != null then stream.write ": {doc.content.first}"
+ end
+ end
+
+ # Introduced properties
+ var prop_intros = new Array[MPropDef]
+ for c in mclassdefs do
+ prop_intros.add_all c.collect_intro_mpropdefs(protected_visibility)
+ end
+
+ if prop_intros.not_empty then
+ alpha_comparator.sort prop_intros
+ stream.write line_separator*2
+ stream.write "## Introduced properties"
+ stream.write line_separator
+
+ for p in prop_intros do
+ p.mproperty.write_synopsis(mainmodule, stream)
+ end
+ end
+ end
+end
+
+redef class MProperty
+ private fun write_synopsis(mainmodule: MModule, stream: Writer)
+ do
+ if visibility == public_visibility then
+ stream.write "+ "
+ else stream.write "~ " # protected_visibility
+
+ if self isa MMethod then
+ if is_new and name != "new" then
+ stream.write "new "
+ else if is_init and name != "init" then
+ stream.write "init "
+ end
+ end
+
+ stream.write name
+
+ if self isa MMethod then
+ var intro = intro
+ assert intro isa MMethodDef
+ stream.write intro.msignature.to_s
+ end
+
+ var mdoc = intro.mdoc
+ if mdoc != null then
+ stream.write " # "
+ stream.write mdoc.content.first
+ end
+ stream.write line_separator
+ end
+end