@@ -144,9 +144,11 @@ defmodule ExDoc.Retriever do
144
144
145
145
moduledoc_groups = Map . get ( metadata , :groups , [ ] )
146
146
147
- { docs_groups , docs } =
147
+ docs_groups =
148
148
get_docs_groups ( moduledoc_groups ++ config . docs_groups ++ module_data . default_groups , docs )
149
149
150
+ docs = Enum . map ( docs , & Map . put ( & 1 , :group , & 1 . group . title ) )
151
+
150
152
metadata = Map . put ( metadata , :kind , module_data . type )
151
153
group = GroupMatcher . match_module ( config . groups_for_modules , module , module_data . id , metadata )
152
154
{ nested_title , nested_context } = module_data . nesting_info || { nil , nil }
@@ -204,54 +206,6 @@ defmodule ExDoc.Retriever do
204
206
filter_defaults ( nodes )
205
207
end
206
208
207
- defp get_docs_groups ( module_groups , doc_nodes ) do
208
- module_groups = Enum . map ( module_groups , & normalize_group / 1 )
209
-
210
- # Doc nodes already have normalized groups
211
- nodes_groups = Enum . map ( doc_nodes , & & 1 . group )
212
- nodes_groups_descriptions = Map . new ( nodes_groups , & { & 1 . title , & 1 . description } )
213
-
214
- normal_groups = module_groups ++ nodes_groups
215
-
216
- { docs_groups , _ } =
217
- Enum . flat_map_reduce ( normal_groups , % { } , fn
218
- group , seen when is_map_key ( seen , group . title ) ->
219
- { [ ] , seen }
220
-
221
- group , seen ->
222
- seen = Map . put ( seen , group . title , group . description )
223
-
224
- group =
225
- case group do
226
- % { description: nil } ->
227
- description = Map . get ( nodes_groups_descriptions , group . title , nil )
228
- Map . put ( group , :description , description )
229
-
230
- _ ->
231
- group
232
- end
233
-
234
- { [ group ] , seen }
235
- end )
236
-
237
- docs_groups =
238
- Enum . map ( docs_groups , fn group ->
239
- doc_ast =
240
- case group . description do
241
- nil -> nil
242
- text -> doc_ast ( "text/markdown" , % { "en" => text } , [ ] )
243
- end
244
-
245
- Map . merge ( group , % { doc: doc_ast , rendered_doc: nil } )
246
- end )
247
-
248
- # We do not need the full group data in each doc node anymore, only the
249
- # title.
250
- doc_nodes = Enum . map ( doc_nodes , & Map . put ( & 1 , :group , & 1 . group . title ) )
251
-
252
- { docs_groups , doc_nodes }
253
- end
254
-
255
209
defp get_doc ( doc , doc_data , module_data , source , group_for_doc , annotations_for_docs ) do
256
210
{ :docs_v1 , _ , _ , content_type , _ , module_metadata , _ } = module_data . docs
257
211
{ { type , name , arity } , anno , _signature , source_doc , metadata } = doc
@@ -315,6 +269,49 @@ defmodule ExDoc.Retriever do
315
269
end )
316
270
end
317
271
272
+ defp get_docs_groups ( module_groups , doc_nodes ) do
273
+ module_groups = Enum . map ( module_groups , & normalize_group / 1 )
274
+
275
+ # Doc nodes already have normalized groups
276
+ nodes_groups = Enum . map ( doc_nodes , & & 1 . group )
277
+ nodes_groups_descriptions = Map . new ( nodes_groups , & { & 1 . title , & 1 . description } )
278
+
279
+ normal_groups = module_groups ++ nodes_groups
280
+
281
+ { docs_groups , _ } =
282
+ Enum . flat_map_reduce ( normal_groups , % { } , fn
283
+ group , seen when is_map_key ( seen , group . title ) ->
284
+ { [ ] , seen }
285
+
286
+ group , seen ->
287
+ seen = Map . put ( seen , group . title , true )
288
+ group = finalize_group ( group , nodes_groups_descriptions )
289
+ { [ group ] , seen }
290
+ end )
291
+
292
+ docs_groups
293
+ end
294
+
295
+ defp finalize_group ( group , description_fallbacks ) do
296
+ description =
297
+ case group . description do
298
+ nil -> Map . get ( description_fallbacks , group . title )
299
+ text -> text
300
+ end
301
+
302
+ doc_ast =
303
+ case description do
304
+ nil -> nil
305
+ text -> doc_ast ( "text/markdown" , % { "en" => text } , [ ] )
306
+ end
307
+
308
+ Map . merge ( group , % {
309
+ description: description ,
310
+ doc: doc_ast ,
311
+ rendered_doc: nil
312
+ } )
313
+ end
314
+
318
315
## General helpers
319
316
320
317
defp nil_or_name ( name , arity ) do
0 commit comments