Skip to content

Commit c7473e4

Browse files
authored
Remove abstract RendererFactory and template, category, and attribute renderers. (#3612)
* Remove category and attribute renderers. * Fix tests and update Category. * Remove template layout renderer. * Add comment.
1 parent 3ce64a3 commit c7473e4

File tree

10 files changed

+48
-220
lines changed

10 files changed

+48
-220
lines changed

lib/src/generator/template_data.dart

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,9 +107,14 @@ abstract class TemplateData<T extends Documentable> extends TemplateDataBase {
107107
String name, {
108108
String? kind,
109109
bool isDeprecated = false,
110-
}) =>
111-
_packageGraph.rendererFactory.templateRenderer
112-
.composeLayoutTitle(name, kind, isDeprecated);
110+
}) {
111+
var kindText = kind == null ? '' : ' $kind';
112+
if (isDeprecated) {
113+
return '<span class="deprecated">$name</span>$kindText';
114+
} else {
115+
return '$name$kindText';
116+
}
117+
}
113118
}
114119

115120
/// A [TemplateData] which contains a library, for rendering the

lib/src/model/annotation.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5+
import 'dart:convert';
6+
57
import 'package:analyzer/dart/element/element.dart';
68
import 'package:dartdoc/src/element_type.dart';
79
import 'package:dartdoc/src/model/attribute.dart';
@@ -25,7 +27,7 @@ class Annotation extends Attribute with ModelBuilder {
2527

2628
@override
2729
late final String linkedNameWithParameters =
28-
packageGraph.rendererFactory.attributeRenderer.renderAnnotation(this);
30+
'@$linkedName${HtmlEscape().convert(parameterText)}';
2931

3032
@override
3133
String get linkedName => annotation.element is PropertyAccessorElement

lib/src/model/category.dart

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import 'package:dartdoc/src/dartdoc_options.dart';
88
import 'package:dartdoc/src/model/comment_referable.dart';
99
import 'package:dartdoc/src/model/model.dart';
1010
import 'package:dartdoc/src/model/model_object_builder.dart';
11-
import 'package:dartdoc/src/render/category_renderer.dart';
1211
import 'package:dartdoc/src/warnings.dart';
1312

1413
/// A subcategory of a package, containing elements tagged with `{@category}`.
@@ -118,9 +117,37 @@ class Category extends Nameable
118117
@override
119118
String? get belowSidebarPath => null;
120119

121-
String get categoryLabel => _categoryRenderer.renderCategoryLabel(this);
120+
String get categoryLabel {
121+
final buffer = StringBuffer('<span class="category ');
122+
buffer.writeAll(name.toLowerCase().split(' '), '-');
123+
buffer.write(' cp-');
124+
buffer.write(categoryIndex);
122125

123-
String get linkedName => _categoryRenderer.renderLinkedName(this);
126+
if (isDocumented) {
127+
buffer.write(' linked');
128+
}
129+
130+
buffer.write('"'); // Wrap up the class list and begin title
131+
buffer.write(' title="This is part of the ');
132+
buffer.write(name);
133+
buffer.write(' ');
134+
buffer.write(kind);
135+
buffer.write('.">'); // Wrap up the title
136+
137+
buffer.write(linkedName);
138+
buffer.write('</span>');
139+
140+
return buffer.toString();
141+
}
142+
143+
String get linkedName {
144+
final unbrokenName = name.replaceAll(' ', '&nbsp;');
145+
if (isDocumented) {
146+
return '<a href="$href">$unbrokenName</a>';
147+
} else {
148+
return unbrokenName;
149+
}
150+
}
124151

125152
/// The position in the container order for this category.
126153
int get categoryIndex => package.categories.indexOf(this);
@@ -147,9 +174,6 @@ class Category extends Nameable
147174
@override
148175
Iterable<Class> get exceptions => _exceptions;
149176

150-
CategoryRenderer get _categoryRenderer =>
151-
packageGraph.rendererFactory.categoryRenderer;
152-
153177
@override
154178
Map<String, CommentReferable> get referenceChildren => const {};
155179

lib/src/model/package_graph.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -344,8 +344,8 @@ class PackageGraph with CommentReferable, Nameable, ModelBuilder {
344344
/// Dartdoc's configuration flags.
345345
final DartdocOptionContext config;
346346

347-
/// Factory for renderers
348-
final RendererFactory rendererFactory;
347+
/// Factory for HTML rendering.
348+
final HtmlRenderFactory rendererFactory;
349349

350350
/// PackageMeta Provider for building [PackageMeta]s.
351351
final PackageMetaProvider packageMetaProvider;

lib/src/render/attribute_renderer.dart

Lines changed: 0 additions & 30 deletions
This file was deleted.

lib/src/render/category_renderer.dart

Lines changed: 0 additions & 55 deletions
This file was deleted.

lib/src/render/renderer_factory.dart

Lines changed: 3 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -3,129 +3,61 @@
33
// BSD-style license that can be found in the LICENSE file.
44

55
import 'package:dartdoc/src/element_type.dart';
6-
import 'package:dartdoc/src/render/attribute_renderer.dart';
7-
import 'package:dartdoc/src/render/category_renderer.dart';
86
import 'package:dartdoc/src/render/documentation_renderer.dart';
97
import 'package:dartdoc/src/render/element_type_renderer.dart';
108
import 'package:dartdoc/src/render/enum_field_renderer.dart';
119
import 'package:dartdoc/src/render/language_feature_renderer.dart';
1210
import 'package:dartdoc/src/render/model_element_renderer.dart';
1311
import 'package:dartdoc/src/render/parameter_renderer.dart';
1412
import 'package:dartdoc/src/render/source_code_renderer.dart';
15-
import 'package:dartdoc/src/render/template_renderer.dart';
1613
import 'package:dartdoc/src/render/type_parameters_renderer.dart';
1714
import 'package:dartdoc/src/render/typedef_renderer.dart';
1815

19-
abstract class RendererFactory {
20-
const RendererFactory();
21-
22-
LayoutRenderer get templateRenderer;
23-
24-
CategoryRenderer get categoryRenderer;
25-
26-
DocumentationRenderer get documentationRenderer;
27-
28-
AttributeRenderer get attributeRenderer;
29-
30-
LanguageFeatureRenderer get languageFeatureRenderer;
31-
32-
ElementTypeRenderer<FunctionTypeElementType>
33-
get functionTypeElementTypeRenderer;
34-
35-
ElementTypeRenderer<ParameterizedElementType>
36-
get parameterizedElementTypeRenderer;
37-
38-
ElementTypeRenderer<RecordElementType> get recordElementTypeRenderer;
39-
40-
ElementTypeRenderer<AliasedElementType> get aliasedElementTypeRenderer;
41-
42-
ElementTypeRenderer<AliasedUndefinedElementType>
43-
get aliasedUndefinedElementTypeRenderer;
44-
45-
ElementTypeRenderer<CallableElementType> get callableElementTypeRenderer;
46-
47-
EnumFieldRenderer get enumFieldRenderer;
48-
49-
ModelElementRenderer get modelElementRenderer;
50-
51-
ParameterRenderer get parameterRenderer;
52-
53-
ParameterRenderer get parameterRendererDetailed;
54-
55-
SourceCodeRenderer get sourceCodeRenderer;
56-
57-
TypeParametersRenderer get typeParametersRenderer;
58-
59-
TypedefRenderer get typedefRenderer;
60-
}
61-
62-
class HtmlRenderFactory extends RendererFactory {
16+
// TODO(kallentu): Inline and remove all the renderers in this renderer factory.
17+
// Then remove the factory itself.
18+
class HtmlRenderFactory {
6319
const HtmlRenderFactory();
6420

65-
@override
66-
LayoutRenderer get templateRenderer => const HtmlLayoutRenderer();
67-
68-
@override
69-
CategoryRenderer get categoryRenderer => const CategoryRendererHtml();
70-
71-
@override
7221
DocumentationRenderer get documentationRenderer =>
7322
const DocumentationRendererHtml();
7423

75-
@override
7624
ElementTypeRenderer<CallableElementType> get callableElementTypeRenderer =>
7725
const CallableElementTypeRendererHtml();
7826

79-
@override
8027
ElementTypeRenderer<FunctionTypeElementType>
8128
get functionTypeElementTypeRenderer =>
8229
const FunctionTypeElementTypeRendererHtml();
8330

84-
@override
8531
ElementTypeRenderer<ParameterizedElementType>
8632
get parameterizedElementTypeRenderer =>
8733
const ParameterizedElementTypeRendererHtml();
8834

89-
@override
9035
ElementTypeRenderer<RecordElementType> get recordElementTypeRenderer =>
9136
const RecordElementTypeRendererHtml();
9237

93-
@override
9438
ElementTypeRenderer<AliasedElementType> get aliasedElementTypeRenderer =>
9539
const AliasedElementTypeRendererHtml();
9640

97-
@override
9841
EnumFieldRenderer get enumFieldRenderer => const EnumFieldRendererHtml();
9942

100-
@override
10143
ModelElementRenderer get modelElementRenderer =>
10244
const ModelElementRendererHtml();
10345

104-
@override
10546
ParameterRenderer get parameterRenderer => const ParameterRendererHtml();
10647

107-
@override
10848
ParameterRenderer get parameterRendererDetailed =>
10949
const ParameterRendererHtmlList();
11050

111-
@override
11251
TypeParametersRenderer get typeParametersRenderer =>
11352
const TypeParametersRendererHtml();
11453

115-
@override
11654
TypedefRenderer get typedefRenderer => const TypedefRendererHtml();
11755

118-
@override
11956
LanguageFeatureRenderer get languageFeatureRenderer =>
12057
const LanguageFeatureRendererHtml();
12158

122-
@override
12359
SourceCodeRenderer get sourceCodeRenderer => const SourceCodeRendererHtml();
12460

125-
@override
126-
AttributeRenderer get attributeRenderer => const AttributeRendererHtml();
127-
128-
@override
12961
ElementTypeRenderer<AliasedUndefinedElementType>
13062
get aliasedUndefinedElementTypeRenderer =>
13163
const AliasedUndefinedElementTypeRendererHtml();

lib/src/render/template_renderer.dart

Lines changed: 0 additions & 21 deletions
This file was deleted.

test/end2end/model_test.dart

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import 'package:dartdoc/src/model/attribute.dart';
1818
import 'package:dartdoc/src/model/model.dart';
1919
import 'package:dartdoc/src/package_config_provider.dart';
2020
import 'package:dartdoc/src/package_meta.dart';
21-
import 'package:dartdoc/src/render/category_renderer.dart';
2221
import 'package:dartdoc/src/render/parameter_renderer.dart';
2322
import 'package:dartdoc/src/render/typedef_renderer.dart';
2423
import 'package:dartdoc/src/special_elements.dart';
@@ -772,17 +771,15 @@ void main() {
772771
// TODO consider moving these to a separate suite
773772
test('CategoryRendererHtml renders category label', () {
774773
var category = packageGraph.publicPackages.first.categories.first;
775-
var renderer = CategoryRendererHtml();
776774
expect(
777-
renderer.renderCategoryLabel(category),
775+
category.categoryLabel,
778776
'<span class="category superb cp-0 linked" title="This is part of the Superb topic.">'
779777
'<a href="${htmlBasePlaceholder}topics/Superb-topic.html">Superb</a></span>');
780778
});
781779

782780
test('CategoryRendererHtml renders linkedName', () {
783781
var category = packageGraph.publicPackages.first.categories.first;
784-
var renderer = CategoryRendererHtml();
785-
expect(renderer.renderLinkedName(category),
782+
expect(category.linkedName,
786783
'<a href="${htmlBasePlaceholder}topics/Superb-topic.html">Superb</a>');
787784
});
788785
});

0 commit comments

Comments
 (0)