tests: fix tests for nitmetrics
[nit.git] / src / doc / doc_phases / doc_intros_redefs.nit
1 # This file is part of NIT ( http://www.nitlanguage.org ).
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 # http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14
15 # Generates lists about intros/redefs in MEntity.
16 #
17 # Actually, this works only for MModules and MclassDefs.
18 module doc_intros_redefs
19
20 import doc_structure
21 import model::model_collect
22
23 # Computes intro / redef mentity list for each DefinitionArticle.
24 class IntroRedefListPhase
25 super DocPhase
26
27 redef fun apply do
28 for page in doc.pages.values do
29 if not page isa MEntityPage then continue
30 page.root.build_intro_redef_list(self, doc, page)
31 end
32 end
33 end
34
35 redef class DocComposite
36
37 # Computes intro / redef lists for this page.
38 #
39 # See `IntroRedefListPhase`.
40 fun build_intro_redef_list(v: IntroRedefListPhase, doc: DocModel, page: MEntityPage) do
41 for child in children do child.build_intro_redef_list(v, doc, page)
42 end
43 end
44
45 redef class DefinitionArticle
46 redef fun build_intro_redef_list(v, doc, page) do
47 var mentity = self.mentity
48 if mentity isa MModule then
49 build_mmodule_list(v, doc, mentity)
50 else if mentity isa MClassDef and mentity.mmodule == page.mentity then
51 build_mclassdef_list(v, doc, mentity)
52 end
53 super
54 end
55
56 # TODO this should move to MEntity?
57 private fun build_mmodule_list(v: IntroRedefListPhase, doc: DocModel, mmodule: MModule) do
58 var section = new IntrosRedefsSection(mentity)
59 var group = new PanelGroup("List")
60 var intros = mmodule.collect_intro_mclassdefs(v.ctx.min_visibility).to_a
61 doc.mainmodule.linearize_mclassdefs(intros)
62 group.add_child new IntrosRedefsListArticle(mentity, "Introduces", intros)
63 var redefs = mmodule.collect_redef_mclassdefs(v.ctx.min_visibility).to_a
64 doc.mainmodule.linearize_mclassdefs(redefs)
65 group.add_child new IntrosRedefsListArticle(mentity, "Redefines", redefs)
66 section.add_child group
67 add_child(section)
68 end
69
70 # TODO this should move to MEntity?
71 private fun build_mclassdef_list(v: IntroRedefListPhase, doc: DocModel, mclassdef: MClassDef) do
72 var section = new IntrosRedefsSection(mentity)
73 var group = new PanelGroup("List")
74 var intros = mclassdef.collect_intro_mpropdefs(v.ctx.min_visibility).to_a
75 # FIXME avoid diff changes
76 # v.ctx.mainmodule.linearize_mpropdefs(intros)
77 group.add_child new IntrosRedefsListArticle(mentity, "Introduces", intros)
78 var redefs = mclassdef.collect_redef_mpropdefs(v.ctx.min_visibility).to_a
79 # FIXME avoid diff changes
80 # v.ctx.mainmodule.linearize_mpropdefs(redefs)
81 group.add_child new IntrosRedefsListArticle(mentity, "Redefines", redefs)
82 section.add_child group
83 add_child(section)
84 end
85
86 end
87
88 # Section that contains the intros and redefs lists.
89 class IntrosRedefsSection
90 super TabbedGroup
91 super MEntitySection
92 end
93
94 # An article that displays a list of introduced / refined mentities.
95 #
96 # FIXME diff hack
97 # This can merged with InheritanceListArticle in a more generic class.
98 class IntrosRedefsListArticle
99 super MEntityArticle
100
101 # Title displayed as header of the list.
102 var list_title: String
103
104 # Intro mentities to list.
105 var mentities: Array[MEntity]
106 end