@@ -9,193 +9,11 @@ import 'dart:io';
99
1010import 'package:analyzer/dart/ast/ast.dart' ;
1111import 'package:analyzer/dart/element/element.dart' ;
12- import 'package:analyzer/dart/element/type.dart' ;
1312import 'package:analyzer/src/dart/ast/utilities.dart' ;
1413import 'package:dartdoc/src/model/model.dart' ;
15- import 'package:dartdoc/src/element_type.dart' ;
1614
1715final 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