Skip to content

Commit 4b616c1

Browse files
authored
Make all Renderers const (#2629)
1 parent 66f4ec1 commit 4b616c1

12 files changed

+144
-78
lines changed

lib/src/model/documentation.dart

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,17 @@ class Documentation {
4343

4444
List<ModelCommentReference> get commentRefs => _element.commentRefs;
4545

46-
void _renderDocumentation(bool processAllDocs) {
47-
var parseResult = _parseDocumentation(processAllDocs);
46+
void _renderDocumentation(bool processFullDocs) {
47+
var parseResult = _parseDocumentation(processFullDocs);
4848
if (_hasExtendedDocs != null) {
4949
assert(_hasExtendedDocs == parseResult.hasExtendedDocs);
5050
}
5151
_hasExtendedDocs = parseResult.hasExtendedDocs;
5252

53-
var renderResult = _renderer.render(parseResult.nodes, processAllDocs);
53+
var renderResult =
54+
_renderer.render(parseResult.nodes, processFullDocs: processFullDocs);
5455

55-
if (processAllDocs) {
56+
if (processFullDocs) {
5657
_asHtml = renderResult.asHtml;
5758
}
5859
_asOneLiner ??= renderResult.asOneLiner;

lib/src/render/category_renderer.dart

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ import 'package:dartdoc/src/model/category.dart';
66

77
/// A renderer for a [Category].
88
abstract class CategoryRenderer {
9-
const CategoryRenderer();
10-
119
/// Render the label of this [category].
1210
String renderCategoryLabel(Category category);
1311

@@ -17,7 +15,7 @@ abstract class CategoryRenderer {
1715
}
1816

1917
/// A HTML renderer for a [Category].
20-
class CategoryRendererHtml extends CategoryRenderer {
18+
class CategoryRendererHtml implements CategoryRenderer {
2119
const CategoryRendererHtml();
2220

2321
@override
@@ -57,7 +55,7 @@ class CategoryRendererHtml extends CategoryRenderer {
5755
}
5856

5957
/// A markdown renderer for a [Category].
60-
class CategoryRendererMd extends CategoryRenderer {
58+
class CategoryRendererMd implements CategoryRenderer {
6159
const CategoryRendererMd();
6260

6361
@override

lib/src/render/documentation_renderer.dart

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,23 @@
44

55
import 'package:html/parser.dart' show parse;
66
import 'package:markdown/markdown.dart' as md;
7+
import 'package:meta/meta.dart';
78

89
abstract class DocumentationRenderer {
9-
DocumentationRenderResult render(List<md.Node> nodes, bool processFullDocs);
10+
DocumentationRenderResult render(
11+
List<md.Node> nodes, {
12+
@required bool processFullDocs,
13+
});
1014
}
1115

12-
class DocumentationRendererHtml extends DocumentationRenderer {
16+
class DocumentationRendererHtml implements DocumentationRenderer {
17+
const DocumentationRendererHtml();
18+
1319
@override
14-
DocumentationRenderResult render(List<md.Node> nodes, bool processFullDocs) {
20+
DocumentationRenderResult render(
21+
List<md.Node> nodes, {
22+
@required bool processFullDocs,
23+
}) {
1524
if (nodes.isEmpty) {
1625
return DocumentationRenderResult.empty;
1726
}
@@ -21,9 +30,7 @@ class DocumentationRendererHtml extends DocumentationRenderer {
2130
s.remove();
2231
}
2332
for (var pre in asHtmlDocument.querySelectorAll('pre')) {
24-
if (pre.children.isNotEmpty &&
25-
pre.children.length != 1 &&
26-
pre.children.first.localName != 'code') {
33+
if (pre.children.length > 1 && pre.children.first.localName != 'code') {
2734
continue;
2835
}
2936

@@ -37,14 +44,14 @@ class DocumentationRendererHtml extends DocumentationRenderer {
3744
// Assume the user intended Dart if there are no other classes present.
3845
if (!specifiesLanguage) pre.classes.add('language-dart');
3946
}
40-
String asHtml;
41-
String asOneLiner;
47+
var asHtml = '';
4248

4349
if (processFullDocs) {
44-
// `trim` fixes issue with line ending differences between mac and windows.
50+
// `trim` fixes an issue with line ending differences between Mac and
51+
// Windows.
4552
asHtml = asHtmlDocument.body.innerHtml?.trim();
4653
}
47-
asOneLiner = asHtmlDocument.body.children.isEmpty
54+
var asOneLiner = asHtmlDocument.body.children.isEmpty
4855
? ''
4956
: asHtmlDocument.body.children.first.innerHtml;
5057

@@ -58,5 +65,6 @@ class DocumentationRenderResult {
5865
final String /*?*/ asHtml;
5966
final String asOneLiner;
6067

61-
const DocumentationRenderResult({this.asHtml, this.asOneLiner = ''});
68+
const DocumentationRenderResult(
69+
{@required this.asHtml, @required this.asOneLiner});
6270
}

lib/src/render/element_type_renderer.dart

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import 'package:dartdoc/dartdoc.dart';
66
import 'package:dartdoc/src/render/parameter_renderer.dart';
77

88
abstract class ElementTypeRenderer<T extends ElementType> {
9+
const ElementTypeRenderer();
10+
911
String renderLinkedName(T elementType);
1012

1113
String renderNameWithGenerics(T elementType) => '';
@@ -22,6 +24,8 @@ abstract class ElementTypeRenderer<T extends ElementType> {
2224

2325
class FunctionTypeElementTypeRendererHtml
2426
extends ElementTypeRenderer<FunctionTypeElementType> {
27+
const FunctionTypeElementTypeRendererHtml();
28+
2529
@override
2630
String renderLinkedName(FunctionTypeElementType elementType) {
2731
var buf = StringBuffer();
@@ -52,6 +56,8 @@ class FunctionTypeElementTypeRendererHtml
5256

5357
class ParameterizedElementTypeRendererHtml
5458
extends ElementTypeRenderer<ParameterizedElementType> {
59+
const ParameterizedElementTypeRendererHtml();
60+
5561
@override
5662
String renderLinkedName(ParameterizedElementType elementType) {
5763
var buf = StringBuffer();
@@ -85,6 +91,8 @@ class ParameterizedElementTypeRendererHtml
8591

8692
class AliasedElementTypeRendererHtml
8793
extends ElementTypeRenderer<AliasedElementType> {
94+
const AliasedElementTypeRendererHtml();
95+
8896
@override
8997
String renderLinkedName(AliasedElementType elementType) {
9098
var buf = StringBuffer();
@@ -118,6 +126,8 @@ class AliasedElementTypeRendererHtml
118126

119127
class CallableElementTypeRendererHtml
120128
extends ElementTypeRenderer<CallableElementType> {
129+
const CallableElementTypeRendererHtml();
130+
121131
@override
122132
String renderLinkedName(CallableElementType elementType) {
123133
var buf = StringBuffer();
@@ -137,6 +147,8 @@ class CallableElementTypeRendererHtml
137147

138148
class FunctionTypeElementTypeRendererMd
139149
extends ElementTypeRenderer<FunctionTypeElementType> {
150+
const FunctionTypeElementTypeRendererMd();
151+
140152
@override
141153
String renderLinkedName(FunctionTypeElementType elementType) {
142154
var buf = StringBuffer();
@@ -165,6 +177,8 @@ class FunctionTypeElementTypeRendererMd
165177

166178
class ParameterizedElementTypeRendererMd
167179
extends ElementTypeRenderer<ParameterizedElementType> {
180+
const ParameterizedElementTypeRendererMd();
181+
168182
@override
169183
String renderLinkedName(ParameterizedElementType elementType) {
170184
var buf = StringBuffer();
@@ -196,6 +210,8 @@ class ParameterizedElementTypeRendererMd
196210

197211
class AliasedElementTypeRendererMd
198212
extends ElementTypeRenderer<AliasedElementType> {
213+
const AliasedElementTypeRendererMd();
214+
199215
@override
200216
String renderLinkedName(AliasedElementType elementType) {
201217
var buf = StringBuffer();
@@ -227,6 +243,8 @@ class AliasedElementTypeRendererMd
227243

228244
class CallableElementTypeRendererMd
229245
extends ElementTypeRenderer<CallableElementType> {
246+
const CallableElementTypeRendererMd();
247+
230248
@override
231249
String renderLinkedName(CallableElementType elementType) {
232250
var buf = StringBuffer();

lib/src/render/enum_field_renderer.dart

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ abstract class EnumFieldRenderer {
88
String renderValue(EnumField field);
99
}
1010

11-
class EnumFieldRendererHtml extends EnumFieldRenderer {
11+
class EnumFieldRendererHtml implements EnumFieldRenderer {
12+
const EnumFieldRendererHtml();
13+
1214
@override
1315
String renderValue(EnumField field) {
1416
if (field.name == 'values') {
@@ -19,7 +21,9 @@ class EnumFieldRendererHtml extends EnumFieldRenderer {
1921
}
2022
}
2123

22-
class EnumFieldRendererMd extends EnumFieldRenderer {
24+
class EnumFieldRendererMd implements EnumFieldRenderer {
25+
const EnumFieldRendererMd();
26+
2327
@override
2428
String renderValue(EnumField field) {
2529
if (field.name == 'values') {

lib/src/render/model_element_renderer.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import 'package:dartdoc/src/model/feature.dart';
66
import 'package:dartdoc/src/model/model_element.dart';
77

88
abstract class ModelElementRenderer {
9+
const ModelElementRenderer();
10+
911
String renderLinkedName(ModelElement modelElement);
1012

1113
String renderExtendedDocLink(ModelElement modelElement);
@@ -22,6 +24,8 @@ abstract class ModelElementRenderer {
2224
}
2325

2426
class ModelElementRendererHtml extends ModelElementRenderer {
27+
const ModelElementRendererHtml();
28+
2529
@override
2630
String renderLinkedName(ModelElement modelElement) {
2731
var cssClass = modelElement.isDeprecated ? ' class="deprecated"' : '';
@@ -103,6 +107,8 @@ class ModelElementRendererHtml extends ModelElementRenderer {
103107
}
104108

105109
class ModelElementRendererMd extends ModelElementRendererHtml {
110+
const ModelElementRendererMd();
111+
106112
@override
107113
String renderLinkedName(ModelElement modelElement) {
108114
if (modelElement.isDeprecated) {

lib/src/render/parameter_renderer.dart

Lines changed: 37 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import 'package:meta/meta.dart' as meta;
1111

1212
/// Render HTML in an extended vertical format using <ol> tag.
1313
class ParameterRendererHtmlList extends ParameterRendererHtml {
14+
const ParameterRendererHtmlList();
15+
1416
@override
1517
String listItem(String listItem) => '<li>$listItem</li>\n';
1618
@override
@@ -21,6 +23,8 @@ class ParameterRendererHtmlList extends ParameterRendererHtml {
2123

2224
/// Render HTML suitable for a single, wrapped line.
2325
class ParameterRendererHtml extends ParameterRenderer {
26+
const ParameterRendererHtml();
27+
2428
@override
2529
String listItem(String listItem) => listItem;
2630
@override
@@ -50,6 +54,8 @@ class ParameterRendererHtml extends ParameterRenderer {
5054
}
5155

5256
class ParameterRendererMd extends ParameterRenderer {
57+
const ParameterRendererMd();
58+
5359
@override
5460
String annotation(String annotation) => annotation;
5561

@@ -79,6 +85,8 @@ class ParameterRendererMd extends ParameterRenderer {
7985
}
8086

8187
abstract class ParameterRenderer {
88+
const ParameterRenderer();
89+
8290
String listItem(String item);
8391
String orderedList(String listItems);
8492
String annotation(String annotation);
@@ -97,40 +105,40 @@ abstract class ParameterRenderer {
97105
parameters.where((Parameter p) => p.isOptionalPositional).toList();
98106
var namedParams = parameters.where((Parameter p) => p.isNamed).toList();
99107

100-
var positional = '', optional = '', named = '';
108+
var output = StringBuffer();
101109
if (positionalParams.isNotEmpty) {
102-
positional = _linkedParameterSublist(positionalParams,
110+
_renderLinkedParameterSublist(positionalParams, output,
103111
trailingComma:
104112
optionalPositionalParams.isNotEmpty || namedParams.isNotEmpty,
105113
showMetadata: showMetadata,
106114
showNames: showNames);
107115
}
108116
if (optionalPositionalParams.isNotEmpty) {
109-
optional = _linkedParameterSublist(optionalPositionalParams,
117+
_renderLinkedParameterSublist(optionalPositionalParams, output,
110118
trailingComma: namedParams.isNotEmpty,
111119
openBracket: '[',
112120
closeBracket: ']',
113121
showMetadata: showMetadata,
114122
showNames: showNames);
115123
}
116124
if (namedParams.isNotEmpty) {
117-
named = _linkedParameterSublist(namedParams,
125+
_renderLinkedParameterSublist(namedParams, output,
118126
trailingComma: false,
119127
openBracket: '{',
120128
closeBracket: '}',
121129
showMetadata: showMetadata,
122130
showNames: showNames);
123131
}
124-
return orderedList(positional + optional + named);
132+
return orderedList(output.toString());
125133
}
126134

127-
String _linkedParameterSublist(List<Parameter> parameters,
135+
void _renderLinkedParameterSublist(
136+
List<Parameter> parameters, StringBuffer output,
128137
{@meta.required bool trailingComma,
129138
String openBracket = '',
130139
String closeBracket = '',
131-
showMetadata = true,
132-
showNames = true}) {
133-
var builder = StringBuffer();
140+
bool showMetadata = true,
141+
bool showNames = true}) {
134142
for (var p in parameters) {
135143
var prefix = '';
136144
var suffix = '';
@@ -143,24 +151,31 @@ abstract class ParameterRenderer {
143151
} else {
144152
suffix += ', ';
145153
}
146-
var renderedParam =
147-
_renderParam(p, showMetadata: showMetadata, showNames: showNames);
148-
builder.write(
149-
listItem(parameter(prefix + renderedParam + suffix, p.htmlId)));
154+
var renderedParam = _renderParam(p,
155+
prefix: prefix,
156+
suffix: suffix,
157+
showMetadata: showMetadata,
158+
showNames: showNames);
159+
output.write(listItem(parameter(renderedParam, p.htmlId)));
150160
}
151-
return builder.toString();
152161
}
153162

154-
String _renderParam(Parameter param,
155-
{showMetadata = true, showNames = true}) {
163+
String _renderParam(
164+
Parameter param, {
165+
@meta.required String prefix,
166+
@meta.required String suffix,
167+
bool showMetadata = true,
168+
bool showNames = true,
169+
}) {
156170
var buf = StringBuffer();
171+
buf.write(prefix);
157172
var paramModelType = param.modelType;
158173

159174
if (showMetadata && param.hasAnnotations) {
160-
buf.write(param.annotations
161-
.map((a) => annotation(a.linkedNameWithParameters))
162-
.join(' ') +
163-
' ');
175+
for (var a in param.annotations) {
176+
buf.write(annotation(a.linkedNameWithParameters));
177+
buf.write(' ');
178+
}
164179
}
165180
if (param.isRequiredNamed) {
166181
buf.write(required('required') + ' ');
@@ -217,6 +232,8 @@ abstract class ParameterRenderer {
217232
buf.write(' = ');
218233
buf.write(defaultValue(param.defaultValue));
219234
}
235+
236+
buf.write(suffix);
220237
return buf.toString();
221238
}
222239
}

0 commit comments

Comments
 (0)