Skip to content

Commit 863adea

Browse files
authored
Relocate ParameterRenderer alongside CategoryRenderer (#2077)
* Move parameter renderer into the new render library directory * copyright date * optimize import
1 parent 4b216d6 commit 863adea

File tree

5 files changed

+212
-207
lines changed

5 files changed

+212
-207
lines changed

lib/src/element_type.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import 'package:analyzer/dart/element/element.dart';
1111
import 'package:analyzer/dart/element/nullability_suffix.dart';
1212
import 'package:analyzer/dart/element/type.dart';
1313
import 'package:dartdoc/src/model/model.dart';
14-
import 'package:dartdoc/src/model_utils.dart';
14+
import 'package:dartdoc/src/render/parameter_renderer.dart';
1515

1616
/// Base class representing a type in Dartdoc. It wraps a [DartType], and
1717
/// may link to a [ModelElement].
@@ -147,7 +147,7 @@ class FunctionTypeElementType extends UndefinedElementType {
147147
buf.write('${returnType.linkedName} ');
148148
buf.write('${nameWithGenerics}');
149149
buf.write('<span class="signature">');
150-
buf.write('(${linkedParams(parameters)})');
150+
buf.write('(${ParameterRendererHtml().renderLinkedParams(parameters)})');
151151
buf.write('</span>');
152152
_linkedName = buf.toString();
153153
}
@@ -418,7 +418,7 @@ class CallableElementType extends ParameterizedElementType
418418
@override
419419
String get linkedName {
420420
if (name != null && name.isNotEmpty) return super.linkedName;
421-
return '${nameWithGenerics}(${linkedParams(element.parameters, showNames: false).trim()}) → ${returnType.linkedName}';
421+
return '${nameWithGenerics}(${ParameterRendererHtml(showNames: false).renderLinkedParams(element.parameters).trim()}) → ${returnType.linkedName}';
422422
}
423423
}
424424

@@ -435,7 +435,7 @@ class CallableAnonymousElementType extends CallableElementType {
435435
String get linkedName {
436436
if (_linkedName == null) {
437437
_linkedName =
438-
'${returnType.linkedName} ${super.linkedName}<span class="signature">(${linkedParams(element.parameters)})</span>';
438+
'${returnType.linkedName} ${super.linkedName}<span class="signature">(${ParameterRendererHtml().renderLinkedParams(element.parameters)})</span>';
439439
}
440440
return _linkedName;
441441
}

lib/src/model/model_element.dart

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import 'package:dartdoc/src/logging.dart';
2626
import 'package:dartdoc/src/markdown_processor.dart' show Documentation;
2727
import 'package:dartdoc/src/model/model.dart';
2828
import 'package:dartdoc/src/model_utils.dart' as utils;
29+
import 'package:dartdoc/src/render/parameter_renderer.dart';
2930
import 'package:dartdoc/src/source_linker.dart';
3031
import 'package:dartdoc/src/tuple.dart';
3132
import 'package:dartdoc/src/utils.dart';
@@ -928,18 +929,18 @@ abstract class ModelElement extends Canonicalization
928929
return _linkedName;
929930
}
930931

931-
String get linkedParams => utils.linkedParams(parameters);
932+
String get linkedParams =>
933+
ParameterRendererHtml().renderLinkedParams(parameters);
932934

933935
String get linkedParamsLines =>
934-
utils.linkedParams(parameters, asList: true).trim();
936+
ParameterRendererHtmlList().renderLinkedParams(parameters).trim();
935937

936938
String get linkedParamsNoMetadata =>
937-
utils.linkedParams(parameters, showMetadata: false);
939+
ParameterRendererHtml(showMetadata: false).renderLinkedParams(parameters);
938940

939-
String get linkedParamsNoMetadataOrNames {
940-
return utils.linkedParams(parameters,
941-
showMetadata: false, showNames: false);
942-
}
941+
String get linkedParamsNoMetadataOrNames =>
942+
ParameterRendererHtml(showMetadata: false, showNames: false)
943+
.renderLinkedParams(parameters);
943944

944945
ElementType get modelType {
945946
if (_modelType == null) {

lib/src/model_utils.dart

Lines changed: 0 additions & 182 deletions
Original file line numberDiff line numberDiff line change
@@ -9,193 +9,11 @@ import 'dart:io';
99

1010
import 'package:analyzer/dart/ast/ast.dart';
1111
import 'package:analyzer/dart/element/element.dart';
12-
import 'package:analyzer/dart/element/type.dart';
1312
import 'package:analyzer/src/dart/ast/utilities.dart';
1413
import 'package:dartdoc/src/model/model.dart';
15-
import 'package:dartdoc/src/element_type.dart';
1614

1715
final Map<String, String> _fileContents = <String, String>{};
1816

19-
/// Render HTML in an extended vertical format using <ol> tag.
20-
class ParameterRendererHtmlList extends ParameterRendererHtml {
21-
ParameterRendererHtmlList({bool showMetadata = true, bool showNames = true})
22-
: super(showMetadata: showMetadata, showNames: showNames);
23-
@override
24-
String listItem(String listItem) => '<li>$listItem</li>\n';
25-
@override
26-
// TODO(jcollins-g): consider comma separated lists and more advanced css.
27-
String orderedList(String listItems) =>
28-
'<ol class="parameter-list">$listItems</ol>\n';
29-
}
30-
31-
/// Render HTML suitable for a single, wrapped line.
32-
class ParameterRendererHtml extends ParameterRenderer {
33-
@override
34-
final bool showMetadata;
35-
@override
36-
final bool showNames;
37-
ParameterRendererHtml({this.showMetadata = true, this.showNames = true});
38-
39-
@override
40-
String listItem(String listItem) => '${listItem}<wbr>';
41-
@override
42-
String orderedList(String listItems) => listItems;
43-
@override
44-
String annotation(String annotation) => '<span>$annotation</span>';
45-
@override
46-
String covariant(String covariant) => '<span>$covariant</span>';
47-
@override
48-
String defaultValue(String defaultValue) =>
49-
'<span class="default-value">$defaultValue</span>';
50-
@override
51-
String parameter(String parameter, String htmlId) =>
52-
'<span class="parameter" id="${htmlId}">$parameter</span>';
53-
@override
54-
String parameterName(String parameterName) =>
55-
'<span class="parameter-name">$parameterName</span>';
56-
@override
57-
String typeName(String typeName) =>
58-
'<span class="type-annotation">$typeName</span>';
59-
@override
60-
String required(String required) => '<span>$required</span>';
61-
}
62-
63-
abstract class ParameterRenderer {
64-
bool get showMetadata;
65-
bool get showNames;
66-
67-
String listItem(String item);
68-
String orderedList(String listItems);
69-
String annotation(String annotation);
70-
String covariant(String covariant);
71-
String defaultValue(String defaultValue);
72-
String parameter(String parameter, String id);
73-
String parameterName(String parameterName);
74-
String typeName(String typeName);
75-
String required(String required);
76-
77-
String _linkedParameterSublist(List<Parameter> parameters, bool trailingComma,
78-
{String thisOpenBracket = '', String thisCloseBracket = ''}) {
79-
StringBuffer builder = StringBuffer();
80-
parameters.forEach((p) {
81-
String prefix = '';
82-
String suffix = '';
83-
if (identical(p, parameters.first)) {
84-
prefix = thisOpenBracket;
85-
}
86-
if (identical(p, parameters.last)) {
87-
suffix += thisCloseBracket;
88-
if (trailingComma) suffix += ', ';
89-
} else {
90-
suffix += ', ';
91-
}
92-
builder.write(
93-
listItem(parameter(prefix + renderParam(p) + suffix, p.htmlId)));
94-
});
95-
return builder.toString();
96-
}
97-
98-
String linkedParams(List<Parameter> parameters) {
99-
List<Parameter> positionalParams =
100-
parameters.where((Parameter p) => p.isRequiredPositional).toList();
101-
List<Parameter> optionalPositionalParams =
102-
parameters.where((Parameter p) => p.isOptionalPositional).toList();
103-
List<Parameter> namedParams =
104-
parameters.where((Parameter p) => p.isNamed).toList();
105-
106-
String positional = '', optional = '', named = '';
107-
if (positionalParams.isNotEmpty) {
108-
positional = _linkedParameterSublist(positionalParams,
109-
optionalPositionalParams.isNotEmpty || namedParams.isNotEmpty);
110-
}
111-
if (optionalPositionalParams.isNotEmpty) {
112-
optional = _linkedParameterSublist(
113-
optionalPositionalParams, namedParams.isNotEmpty,
114-
thisOpenBracket: '[', thisCloseBracket: ']');
115-
}
116-
if (namedParams.isNotEmpty) {
117-
named = _linkedParameterSublist(namedParams, false,
118-
thisOpenBracket: '{', thisCloseBracket: '}');
119-
}
120-
return (orderedList(positional + optional + named));
121-
}
122-
123-
String renderParam(Parameter param) {
124-
StringBuffer buf = StringBuffer();
125-
ElementType paramModelType = param.modelType;
126-
127-
if (showMetadata && param.hasAnnotations) {
128-
buf.write(param.annotations.map(annotation).join(' ') + ' ');
129-
}
130-
if (param.isRequiredNamed) {
131-
buf.write(required('required') + ' ');
132-
}
133-
if (param.isCovariant) {
134-
buf.write(covariant('covariant') + ' ');
135-
}
136-
if (paramModelType is CallableElementTypeMixin ||
137-
paramModelType.type is FunctionType) {
138-
String returnTypeName;
139-
if (paramModelType.isTypedef) {
140-
returnTypeName = paramModelType.linkedName;
141-
} else {
142-
returnTypeName = paramModelType.createLinkedReturnTypeName();
143-
}
144-
buf.write(typeName(returnTypeName));
145-
if (showNames) {
146-
buf.write(' ${parameterName(param.name)}');
147-
} else if (paramModelType.isTypedef ||
148-
paramModelType is CallableAnonymousElementType ||
149-
paramModelType.type is FunctionType) {
150-
buf.write(' ${parameterName(paramModelType.name)}');
151-
}
152-
if (!paramModelType.isTypedef && paramModelType is DefinedElementType) {
153-
buf.write('(');
154-
buf.write(linkedParams(paramModelType.element.parameters));
155-
buf.write(')');
156-
}
157-
if (!paramModelType.isTypedef && paramModelType.type is FunctionType) {
158-
buf.write('(');
159-
buf.write(
160-
linkedParams((paramModelType as UndefinedElementType).parameters));
161-
buf.write(')');
162-
}
163-
} else if (param.modelType != null) {
164-
String linkedTypeName = paramModelType.linkedName;
165-
if (linkedTypeName.isNotEmpty) {
166-
buf.write(typeName(linkedTypeName));
167-
if (showNames && param.name.isNotEmpty) {
168-
buf.write(' ');
169-
}
170-
}
171-
if (showNames && param.name.isNotEmpty) {
172-
buf.write(parameterName(param.name));
173-
}
174-
}
175-
176-
if (param.hasDefaultValue) {
177-
if (param.isNamed) {
178-
buf.write(': ');
179-
} else {
180-
buf.write(' = ');
181-
}
182-
buf.write(defaultValue(param.defaultValue));
183-
}
184-
return buf.toString();
185-
}
186-
}
187-
188-
String linkedParams(List<Parameter> parameters,
189-
{showMetadata = true, showNames = true, asList = false}) {
190-
if (asList) {
191-
return ParameterRendererHtmlList(
192-
showMetadata: showMetadata, showNames: showNames)
193-
.linkedParams(parameters);
194-
}
195-
return ParameterRendererHtml(showMetadata: showMetadata, showNames: showNames)
196-
.linkedParams(parameters);
197-
}
198-
19917
/// Returns the [AstNode] for a given [Element].
20018
///
20119
/// Uses a precomputed map of [element.source.fullName] to [CompilationUnit]

0 commit comments

Comments
 (0)