Skip to content

Commit 34bd6ac

Browse files
committed
Create renderers for Typedef & TypeParamaters
1 parent 423863f commit 34bd6ac

File tree

5 files changed

+58
-15
lines changed

5 files changed

+58
-15
lines changed

lib/src/model/type_parameter.dart

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import 'package:analyzer/dart/element/element.dart';
66
import 'package:dartdoc/src/element_type.dart';
77
import 'package:dartdoc/src/model/model.dart';
8+
import 'package:dartdoc/src/render/type_parameters_renderer.dart';
89

910
class TypeParameter extends ModelElement {
1011
TypeParameter(
@@ -77,20 +78,13 @@ abstract class TypeParameters implements ModelElement {
7778

7879
String get genericParameters {
7980
if (typeParameters.isEmpty) return '';
80-
81-
var joined = typeParameters
82-
.map((t) => t.name)
83-
.join('</span>, <span class="type-parameter">');
84-
return '&lt;<wbr><span class="type-parameter">${joined}</span>&gt;';
81+
return TypeParametersRendererHtml().renderGenericParameters(typeParameters);
8582
}
8683

8784
String get linkedGenericParameters {
8885
if (typeParameters.isEmpty) return '';
89-
90-
var joined = typeParameters
91-
.map((t) => t.linkedName)
92-
.join('</span>, <span class="type-parameter">');
93-
return '<span class="signature">&lt;<wbr><span class="type-parameter">${joined}</span>&gt;</span>';
86+
return TypeParametersRendererHtml()
87+
.renderLinkedGenericParameters(typeParameters);
9488
}
9589

9690
@override

lib/src/model/typedef.dart

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import 'package:analyzer/dart/element/element.dart';
66
import 'package:dartdoc/src/element_type.dart';
77
import 'package:dartdoc/src/model/model.dart';
8+
import 'package:dartdoc/src/render/typedef_renderer.dart';
89

910
class Typedef extends ModelElement
1011
with SourceCodeMixin, TypeParameters, Categorization
@@ -25,10 +26,8 @@ class Typedef extends ModelElement
2526
List<TypeParameterElement> genericTypeParameters =
2627
(element as GenericTypeAliasElement).function.typeParameters;
2728
if (genericTypeParameters.isNotEmpty) {
28-
var joined = genericTypeParameters
29-
.map((t) => t.name)
30-
.join('</span>, <span class="type-parameter">');
31-
return '&lt;<wbr><span class="type-parameter">${joined}</span>&gt;';
29+
return TypedefRendererHtml().renderGenericParameters(
30+
genericTypeParameters);
3231
}
3332
} // else, all types are resolved.
3433
return '';
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
import 'package:dartdoc/src/model/type_parameter.dart';
6+
7+
abstract class TypeParametersRenderer {
8+
String renderGenericParameters(List<TypeParameter> typeParameters);
9+
String renderLinkedGenericParameters(List<TypeParameter> typeParameters);
10+
}
11+
12+
class TypeParametersRendererHtml extends TypeParametersRenderer {
13+
@override
14+
String renderGenericParameters(List<TypeParameter> typeParameters) {
15+
var joined = typeParameters
16+
.map((t) => t.name)
17+
.join('</span>, <span class="type-parameter">');
18+
return '&lt;<wbr><span class="type-parameter">${joined}</span>&gt;';
19+
}
20+
21+
@override
22+
String renderLinkedGenericParameters(List<TypeParameter> typeParameters) {
23+
var joined = typeParameters
24+
.map((t) => t.linkedName)
25+
.join('</span>, <span class="type-parameter">');
26+
return '<span class="signature">&lt;<wbr><span class="type-parameter">${joined}</span>&gt;</span>';
27+
}
28+
}

lib/src/render/typedef_renderer.dart

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
import 'package:analyzer/dart/element/element.dart';
6+
7+
abstract class TypedefRenderer {
8+
String renderGenericParameters(List<TypeParameterElement> typeParameters);
9+
}
10+
11+
class TypedefRendererHtml extends TypedefRenderer {
12+
@override
13+
String renderGenericParameters(List<TypeParameterElement> typeParameters) {
14+
var joined = typeParameters
15+
.map((t) => t.name)
16+
.join('</span>, <span class="type-parameter">');
17+
return '&lt;<wbr><span class="type-parameter">${joined}</span>&gt;';
18+
}
19+
}

test/model_test.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3411,7 +3411,10 @@ String topLevelFunction(int param1, bool param2, Cool coolBeans,
34113411
'NewGenericTypedef&lt;<wbr><span class="type-parameter">T</span>&gt;'));
34123412
});
34133413

3414-
test("generic parameters", () {
3414+
// TODO(jdkoren): Not easy to call TypedefRenderer directly because Typedef
3415+
// inspects its element member. Find a better way when we start to isolate
3416+
// renderer tests.
3417+
test("render generic parameters HTML", () {
34153418
expect(t.genericParameters, equals(''));
34163419
expect(generic.genericParameters,
34173420
equals('&lt;<wbr><span class="type-parameter">S</span>&gt;'));

0 commit comments

Comments
 (0)