Skip to content

Commit debccd1

Browse files
authored
Move renderer access behind a renderer factory (#2086)
Renderers are now accessed from a RendererFactory held by the package graph. This allows for changing renderers based on the configuration of DartDoc without models having to know anything about that.
1 parent d72989a commit debccd1

13 files changed

+200
-85
lines changed

lib/src/element_type.dart

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,7 @@ class FunctionTypeElementType extends UndefinedElementType {
132132
@override
133133
String get linkedName {
134134
if (_linkedName == null) {
135-
_linkedName =
136-
FunctionTypeElementTypeRendererHtml().renderLinkedName(this);
135+
_linkedName = _renderer.renderLinkedName(this);
137136
}
138137
return _linkedName;
139138
}
@@ -146,8 +145,7 @@ class FunctionTypeElementType extends UndefinedElementType {
146145
@override
147146
String get nameWithGenerics {
148147
if (_nameWithGenerics == null) {
149-
_nameWithGenerics =
150-
FunctionTypeElementTypeRendererHtml().renderNameWithGenerics(this);
148+
_nameWithGenerics = _renderer.renderNameWithGenerics(this);
151149
}
152150
return _nameWithGenerics;
153151
}
@@ -162,6 +160,9 @@ class FunctionTypeElementType extends UndefinedElementType {
162160

163161
@override
164162
String get name => 'Function';
163+
164+
ElementTypeRenderer<FunctionTypeElementType> get _renderer =>
165+
packageGraph.rendererFactory.functionTypeElementTypeRenderer;
165166
}
166167

167168
class ParameterizedElementType extends DefinedElementType {
@@ -173,8 +174,7 @@ class ParameterizedElementType extends DefinedElementType {
173174
@override
174175
String get linkedName {
175176
if (_linkedName == null) {
176-
_linkedName =
177-
ParameterizedElementTypeRendererHtml().renderLinkedName(this);
177+
_linkedName = _renderer.renderLinkedName(this);
178178
}
179179
return _linkedName;
180180
}
@@ -183,11 +183,13 @@ class ParameterizedElementType extends DefinedElementType {
183183
@override
184184
String get nameWithGenerics {
185185
if (_nameWithGenerics == null) {
186-
_nameWithGenerics =
187-
ParameterizedElementTypeRendererHtml().renderNameWithGenerics(this);
186+
_nameWithGenerics = _renderer.renderNameWithGenerics(this);
188187
}
189188
return _nameWithGenerics;
190189
}
190+
191+
ElementTypeRenderer<ParameterizedElementType> get _renderer =>
192+
packageGraph.rendererFactory.parameterizedElementTypeRenderer;
191193
}
192194

193195
class TypeParameterElementType extends DefinedElementType {
@@ -362,12 +364,16 @@ class CallableElementType extends ParameterizedElementType
362364
@override
363365
String get linkedName {
364366
if (_linkedName == null) {
365-
_linkedName = CallableElementTypeRendererHtml().renderLinkedName(this);
367+
_linkedName = _renderer.renderLinkedName(this);
366368
}
367369
return _linkedName;
368370
}
369371

370372
String get superLinkedName => super.linkedName;
373+
374+
@override
375+
ElementTypeRenderer<CallableElementType> get _renderer =>
376+
packageGraph.rendererFactory.callableElementTypeRenderer;
371377
}
372378

373379
/// Types backed by a [GenericTypeAliasElement] that may or may not be callable.

lib/src/model/category.dart

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -124,13 +124,9 @@ class Category extends Nameable
124124
String get href =>
125125
isCanonical ? '${package.baseHref}topics/${name}-topic.html' : null;
126126

127-
String get categorization {
128-
return CategoryRendererHtml().renderCategoryLabel(this);
129-
}
127+
String get categorization => _renderer.renderCategoryLabel(this);
130128

131-
String get linkedName {
132-
return CategoryRendererHtml().renderLinkedName(this);
133-
}
129+
String get linkedName => _renderer.renderLinkedName(this);
134130

135131
int _categoryIndex;
136132

@@ -201,4 +197,7 @@ class Category extends Nameable
201197

202198
@override
203199
Iterable<Typedef> get typedefs => _typedefs;
200+
201+
CategoryRenderer get _renderer =>
202+
packageGraph.rendererFactory.categoryRenderer;
204203
}

lib/src/model/documentation.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class Documentation {
5353
_hasExtendedDocs = parseResult.item2;
5454

5555
Tuple2<String, String> renderResult =
56-
DocumentationRendererHtml().render(parseResult.item1, processAllDocs);
56+
_renderer.render(parseResult.item1, processAllDocs);
5757

5858
if (processAllDocs) {
5959
_asHtml = renderResult.item1;
@@ -71,4 +71,7 @@ class Documentation {
7171
MarkdownDocument.withElementLinkResolver(_element, commentRefs);
7272
return document.parseMarkdownText(text, processFullDocs);
7373
}
74+
75+
DocumentationRenderer get _renderer =>
76+
_element.packageGraph.rendererFactory.documentationRenderer;
7477
}

lib/src/model/enum.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class EnumField extends Field {
4444
: super(element, library, packageGraph, getter, null);
4545

4646
@override
47-
String get constantValueBase => EnumFieldRendererHtml().renderValue(this);
47+
String get constantValueBase => _fieldRenderer.renderValue(this);
4848

4949
@override
5050
List<ModelElement> get documentationFrom {
@@ -104,4 +104,7 @@ class EnumField extends Field {
104104

105105
@override
106106
Inheritable get overriddenElement => null;
107+
108+
EnumFieldRenderer get _fieldRenderer =>
109+
packageGraph.rendererFactory.enumFieldRenderer;
107110
}

lib/src/model/model_element.dart

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ import 'package:dartdoc/src/element_type.dart';
2525
import 'package:dartdoc/src/logging.dart';
2626
import 'package:dartdoc/src/model/model.dart';
2727
import 'package:dartdoc/src/model_utils.dart' as utils;
28-
import 'package:dartdoc/src/render/parameter_renderer.dart';
2928
import 'package:dartdoc/src/render/model_element_renderer.dart';
29+
import 'package:dartdoc/src/render/parameter_renderer.dart';
3030
import 'package:dartdoc/src/source_linker.dart';
3131
import 'package:dartdoc/src/tuple.dart';
3232
import 'package:dartdoc/src/utils.dart';
@@ -784,7 +784,7 @@ abstract class ModelElement extends Canonicalization
784784
/// does not exist.
785785
String get extendedDocLink {
786786
if (hasExtendedDocumentation) {
787-
return ModelElementRendererHtml().renderExtendedDocLink(this);
787+
return _modelElementRenderer.renderExtendedDocLink(this);
788788
}
789789
return '';
790790
}
@@ -916,18 +916,25 @@ abstract class ModelElement extends Canonicalization
916916
return _linkedName;
917917
}
918918

919-
String get linkedParams =>
920-
ParameterRendererHtml().renderLinkedParams(parameters);
919+
ModelElementRenderer get _modelElementRenderer =>
920+
packageGraph.rendererFactory.modelElementRenderer;
921+
922+
ParameterRenderer get _parameterRenderer =>
923+
packageGraph.rendererFactory.parameterRenderer;
924+
925+
ParameterRenderer get _parameterRendererDetailed =>
926+
packageGraph.rendererFactory.parameterRendererDetailed;
927+
928+
String get linkedParams => _parameterRenderer.renderLinkedParams(parameters);
921929

922930
String get linkedParamsLines =>
923-
ParameterRendererHtmlList().renderLinkedParams(parameters).trim();
931+
_parameterRendererDetailed.renderLinkedParams(parameters).trim();
924932

925933
String get linkedParamsNoMetadata =>
926-
ParameterRendererHtml(showMetadata: false).renderLinkedParams(parameters);
934+
_parameterRenderer.renderLinkedParams(parameters, showMetadata: false);
927935

928-
String get linkedParamsNoMetadataOrNames =>
929-
ParameterRendererHtml(showMetadata: false, showNames: false)
930-
.renderLinkedParams(parameters);
936+
String get linkedParamsNoMetadataOrNames => _parameterRenderer
937+
.renderLinkedParams(parameters, showMetadata: false, showNames: false);
931938

932939
ElementType get modelType {
933940
if (_modelType == null) {
@@ -1120,7 +1127,7 @@ abstract class ModelElement extends Canonicalization
11201127
return htmlEscape.convert(name);
11211128
}
11221129

1123-
return ModelElementRendererHtml().renderLinkedName(this);
1130+
return _modelElementRenderer.renderLinkedName(this);
11241131
}
11251132

11261133
/// Replace &#123;@example ...&#125; in API comments with the content of named file.
@@ -1351,8 +1358,7 @@ abstract class ModelElement extends Canonicalization
13511358
final String youTubeId = url.group(url.groupCount);
13521359
final String aspectRatio = (height / width * 100).toStringAsFixed(2);
13531360

1354-
return ModelElementRendererHtml()
1355-
.renderYoutubeUrl(youTubeId, aspectRatio);
1361+
return _modelElementRenderer.renderYoutubeUrl(youTubeId, aspectRatio);
13561362
});
13571363
}
13581364

@@ -1483,8 +1489,8 @@ abstract class ModelElement extends Canonicalization
14831489
'parameter)');
14841490
}
14851491

1486-
return ModelElementRendererHtml()
1487-
.renderAnimation(uniqueId, width, height, movieUrl, overlayId);
1492+
return _modelElementRenderer.renderAnimation(
1493+
uniqueId, width, height, movieUrl, overlayId);
14881494
});
14891495
}
14901496

lib/src/model/package_builder.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import 'package:dartdoc/src/io_utils.dart';
2727
import 'package:dartdoc/src/logging.dart';
2828
import 'package:dartdoc/src/model/model.dart';
2929
import 'package:dartdoc/src/package_meta.dart' show PackageMeta;
30+
import 'package:dartdoc/src/render/renderer_factory.dart';
3031
import 'package:dartdoc/src/special_elements.dart';
3132
import 'package:package_config/discovery.dart' as package_config;
3233
import 'package:path/path.dart' as path;
@@ -42,13 +43,16 @@ class PackageBuilder {
4243
if (config.topLevelPackageMeta.needsPubGet) {
4344
config.topLevelPackageMeta.runPubGet();
4445
}
46+
// TODO(jdkoren): change factory for other formats based on config options
47+
RendererFactory rendererFactory = HtmlRenderFactory();
4548

4649
PackageGraph newGraph = PackageGraph.UninitializedPackageGraph(
4750
config,
4851
driver,
4952
await driver.currentSession.typeSystem,
5053
sdk,
51-
hasEmbedderSdkFiles);
54+
hasEmbedderSdkFiles,
55+
rendererFactory);
5256
await getLibraries(newGraph);
5357
await newGraph.initializePackageGraph();
5458
return newGraph;

lib/src/model/package_graph.dart

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,14 @@ import 'package:dartdoc/src/dartdoc_options.dart';
1919
import 'package:dartdoc/src/model/model.dart';
2020
import 'package:dartdoc/src/model_utils.dart' as utils;
2121
import 'package:dartdoc/src/package_meta.dart' show PackageMeta;
22+
import 'package:dartdoc/src/render/renderer_factory.dart';
2223
import 'package:dartdoc/src/special_elements.dart';
2324
import 'package:dartdoc/src/tuple.dart';
2425
import 'package:dartdoc/src/warnings.dart';
2526

2627
class PackageGraph {
27-
PackageGraph.UninitializedPackageGraph(
28-
this.config, this.driver, this.typeSystem, this.sdk, this.hasEmbedderSdk)
28+
PackageGraph.UninitializedPackageGraph(this.config, this.driver,
29+
this.typeSystem, this.sdk, this.hasEmbedderSdk, this.rendererFactory)
2930
: packageMeta = config.topLevelPackageMeta,
3031
session = driver.currentSession {
3132
_packageWarningCounter = PackageWarningCounter(this);
@@ -207,6 +208,9 @@ class PackageGraph {
207208
/// Dartdoc's configuration flags.
208209
final DartdocOptionContext config;
209210

211+
/// Factory for renderers
212+
final RendererFactory rendererFactory;
213+
210214
Package _defaultPackage;
211215

212216
Package get defaultPackage {

lib/src/model/type_parameter.dart

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,16 +76,17 @@ abstract class TypeParameters implements ModelElement {
7676

7777
bool get hasGenericParameters => typeParameters.isNotEmpty;
7878

79-
String get genericParameters {
80-
return TypeParametersRendererHtml().renderGenericParameters(this);
81-
}
79+
String get genericParameters =>
80+
_typeParametersRenderer.renderGenericParameters(this);
8281

83-
String get linkedGenericParameters {
84-
return TypeParametersRendererHtml().renderLinkedGenericParameters(this);
85-
}
82+
String get linkedGenericParameters =>
83+
_typeParametersRenderer.renderLinkedGenericParameters(this);
8684

8785
@override
8886
DefinedElementType get modelType;
8987

9088
List<TypeParameter> get typeParameters;
89+
90+
TypeParametersRenderer get _typeParametersRenderer =>
91+
packageGraph.rendererFactory.typeParametersRenderer;
9192
}

lib/src/model/typedef.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@ class Typedef extends ModelElement
2121
String get nameWithGenerics => '$name${super.genericParameters}';
2222

2323
@override
24-
String get genericParameters =>
25-
TypedefRendererHtml().renderGenericParameters(this);
24+
String get genericParameters => _renderer.renderGenericParameters(this);
2625

2726
List<TypeParameterElement> get genericTypeParameters {
2827
if (element is GenericTypeAliasElement) {
@@ -59,4 +58,6 @@ class Typedef extends ModelElement
5958
List<TypeParameter> get typeParameters => _typedef.typeParameters.map((f) {
6059
return ModelElement.from(f, library, packageGraph) as TypeParameter;
6160
}).toList();
61+
62+
TypedefRenderer get _renderer => packageGraph.rendererFactory.typedefRenderer;
6263
}

lib/src/render/element_type_renderer.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,8 @@ class CallableElementTypeRendererHtml
8585
StringBuffer buf = StringBuffer();
8686
buf.write(elementType.nameWithGenerics);
8787
buf.write('(');
88-
buf.write(ParameterRendererHtml(showNames: false)
89-
.renderLinkedParams(elementType.element.parameters)
88+
buf.write(ParameterRendererHtml()
89+
.renderLinkedParams(elementType.element.parameters, showNames: false)
9090
.trim());
9191
buf.write(') → ');
9292
buf.write(elementType.returnType.linkedName);

0 commit comments

Comments
 (0)