Skip to content

Commit da7071d

Browse files
authored
Display an extension's extended type in a few places. (#3708)
* With the extension's name on a library's page * With the extension's name in a method or property's sidebar It's pretty straightforward. One imperfection is we need to add some getters to TemplateData, to help understand whether the parent of a method or property is an extension. This could be made simpler (maybe?) if we added an "is" mustache syntax, like `{{ parent is Extension }}`.
1 parent 3d56168 commit da7071d

8 files changed

+235
-153
lines changed

Diff for: lib/src/generator/template_data.dart

+4
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,10 @@ abstract class TemplateDataBase {
6060
return navLinksWithGenerics.last;
6161
}
6262

63+
bool get isParentExtension => parent is Extension;
64+
65+
Extension get parentAsExtension => parent as Extension;
66+
6367
bool get hasHomepage => false;
6468

6569
String? get homepage => null;

Diff for: lib/src/generator/templates.aot_renderers_for_html.dart

+79-44
Original file line numberDiff line numberDiff line change
@@ -758,7 +758,7 @@ String renderExtension<T extends Extension>(ExtensionTemplateData<T> context0) {
758758
if (context2.hasPublicInstanceFields) {
759759
buffer.writeln();
760760
buffer.write('''
761-
<section class="summary offset-anchor" id="instance-properties">
761+
<section class="summary offset-anchor" id="instance-properties">
762762
<h2>Properties</h2>
763763
764764
<dl class="properties">''');
@@ -770,7 +770,7 @@ String renderExtension<T extends Extension>(ExtensionTemplateData<T> context0) {
770770
buffer.writeln();
771771
buffer.write('''
772772
</dl>
773-
</section>''');
773+
</section>''');
774774
}
775775
buffer.write('\n\n ');
776776
buffer.write(_renderExtension_partial_instance_methods_7(context2));
@@ -782,17 +782,18 @@ String renderExtension<T extends Extension>(ExtensionTemplateData<T> context0) {
782782
buffer.write(_renderExtension_partial_static_methods_10(context2));
783783
buffer.write('\n ');
784784
buffer.write(_renderExtension_partial_static_constants_11(context2));
785+
var context6 = context0.extension;
785786
buffer.writeln();
786787
buffer.write('''
787788
788789
</div> <!-- /.main-content -->
789790
790791
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
791-
''');
792+
''');
792793
buffer.write(_renderExtension_partial_search_sidebar_12(context0));
793794
buffer.writeln();
794795
buffer.write('''
795-
<h5>''');
796+
<h5>''');
796797
buffer.writeEscaped(context0.parent!.name);
797798
buffer.write(' ');
798799
buffer.writeEscaped(context0.parent!.kind.toString());
@@ -807,6 +808,7 @@ String renderExtension<T extends Extension>(ExtensionTemplateData<T> context0) {
807808
buffer.write(_renderExtension_partial_footer_13(context0));
808809
buffer.writeln();
809810
buffer.writeln();
811+
buffer.writeln();
810812

811813
return buffer.toString();
812814
}
@@ -1142,38 +1144,38 @@ String renderLibrary(LibraryTemplateData context0) {
11421144
buffer.writeln();
11431145
buffer.write('''
11441146
1145-
<div
1146-
id="dartdoc-main-content"
1147-
class="main-content"
1148-
data-above-sidebar="''');
1147+
<div
1148+
id="dartdoc-main-content"
1149+
class="main-content"
1150+
data-above-sidebar="''');
11491151
buffer.writeEscaped(context0.aboveSidebarPath);
11501152
buffer.write('''"
1151-
data-below-sidebar="''');
1153+
data-below-sidebar="''');
11521154
buffer.writeEscaped(context0.belowSidebarPath);
11531155
buffer.write('''">
1154-
''');
1156+
''');
11551157
var context1 = context0.self;
11561158
buffer.writeln();
11571159
buffer.write('''
1158-
<div>
1159-
''');
1160+
<div>
1161+
''');
11601162
buffer.write(_renderLibrary_partial_source_link_1(context1));
11611163
buffer.writeln();
11621164
buffer.write('''
1163-
<h1>
1164-
<span class="kind-library">''');
1165+
<h1>
1166+
<span class="kind-library">''');
11651167
buffer.write(context1.displayName);
11661168
buffer.write('''</span>
1167-
''');
1169+
''');
11681170
buffer.writeEscaped(context1.kind.toString());
11691171
buffer.write(' ');
11701172
buffer.write(_renderLibrary_partial_feature_set_2(context1));
11711173
buffer.write(' ');
11721174
buffer.write(_renderLibrary_partial_categorization_3(context1));
11731175
buffer.writeln();
11741176
buffer.write('''
1175-
</h1>
1176-
</div>''');
1177+
</h1>
1178+
</div>''');
11771179
buffer.writeln();
11781180
var context2 = context0.library;
11791181
buffer.write('\n ');
@@ -1190,7 +1192,7 @@ String renderLibrary(LibraryTemplateData context0) {
11901192
var context4 = context3.library;
11911193
var context5 = context4.publicClassesSorted;
11921194
for (var context6 in context5) {
1193-
buffer.write('\n ');
1195+
buffer.write('\n ');
11941196
buffer.write(_renderLibrary_partial_container_5(context6));
11951197
}
11961198
buffer.writeln();
@@ -1210,7 +1212,7 @@ String renderLibrary(LibraryTemplateData context0) {
12101212
var context8 = context7.library;
12111213
var context9 = context8.publicEnumsSorted;
12121214
for (var context10 in context9) {
1213-
buffer.write('\n ');
1215+
buffer.write('\n ');
12141216
buffer.write(_renderLibrary_partial_container_5(context10));
12151217
}
12161218
buffer.writeln();
@@ -1230,7 +1232,7 @@ String renderLibrary(LibraryTemplateData context0) {
12301232
var context12 = context11.library;
12311233
var context13 = context12.publicMixinsSorted;
12321234
for (var context14 in context13) {
1233-
buffer.write('\n ');
1235+
buffer.write('\n ');
12341236
buffer.write(_renderLibrary_partial_container_5(context14));
12351237
}
12361238
buffer.writeln();
@@ -1250,7 +1252,7 @@ String renderLibrary(LibraryTemplateData context0) {
12501252
var context16 = context15.library;
12511253
var context17 = context16.publicExtensionTypesSorted;
12521254
for (var context18 in context17) {
1253-
buffer.write('\n ');
1255+
buffer.write('\n ');
12541256
buffer.write(_renderLibrary_partial_extension_type_6(context18));
12551257
}
12561258
buffer.writeln();
@@ -1270,7 +1272,7 @@ String renderLibrary(LibraryTemplateData context0) {
12701272
var context20 = context19.library;
12711273
var context21 = context20.publicExtensionsSorted;
12721274
for (var context22 in context21) {
1273-
buffer.write('\n ');
1275+
buffer.write('\n ');
12741276
buffer.write(_renderLibrary_partial_extension_7(context22));
12751277
}
12761278
buffer.writeln();
@@ -1290,7 +1292,7 @@ String renderLibrary(LibraryTemplateData context0) {
12901292
var context24 = context23.library;
12911293
var context25 = context24.publicConstantsSorted;
12921294
for (var context26 in context25) {
1293-
buffer.write('\n ');
1295+
buffer.write('\n ');
12941296
buffer.write(_renderLibrary_partial_constant_8(context26));
12951297
}
12961298
buffer.writeln();
@@ -1310,7 +1312,7 @@ String renderLibrary(LibraryTemplateData context0) {
13101312
var context28 = context27.library;
13111313
var context29 = context28.publicPropertiesSorted;
13121314
for (var context30 in context29) {
1313-
buffer.write('\n ');
1315+
buffer.write('\n ');
13141316
buffer.write(_renderLibrary_partial_property_9(context30));
13151317
}
13161318
buffer.writeln();
@@ -1330,7 +1332,7 @@ String renderLibrary(LibraryTemplateData context0) {
13301332
var context32 = context31.library;
13311333
var context33 = context32.publicFunctionsSorted;
13321334
for (var context34 in context33) {
1333-
buffer.write('\n ');
1335+
buffer.write('\n ');
13341336
buffer.write(_renderLibrary_partial_callable_10(context34));
13351337
}
13361338
buffer.writeln();
@@ -1370,7 +1372,7 @@ String renderLibrary(LibraryTemplateData context0) {
13701372
var context40 = context39.library;
13711373
var context41 = context40.publicExceptionsSorted;
13721374
for (var context42 in context41) {
1373-
buffer.write('\n ');
1375+
buffer.write('\n ');
13741376
buffer.write(_renderLibrary_partial_container_5(context42));
13751377
}
13761378
buffer.writeln();
@@ -1420,19 +1422,19 @@ String renderMethod(MethodTemplateData context0) {
14201422
buffer.writeln();
14211423
buffer.write('''
14221424
1423-
<div
1424-
id="dartdoc-main-content"
1425-
class="main-content"
1426-
data-above-sidebar="''');
1425+
<div
1426+
id="dartdoc-main-content"
1427+
class="main-content"
1428+
data-above-sidebar="''');
14271429
buffer.writeEscaped(context0.aboveSidebarPath);
14281430
buffer.write('''"
1429-
data-below-sidebar="''');
1431+
data-below-sidebar="''');
14301432
buffer.writeEscaped(context0.belowSidebarPath);
14311433
buffer.write('''">''');
14321434
var context1 = context0.self;
14331435
buffer.writeln();
14341436
buffer.write('''
1435-
<div>''');
1437+
<div>''');
14361438
buffer.write(_renderMethod_partial_source_link_1(context1));
14371439
buffer.write('''<h1><span class="kind-method">''');
14381440
buffer.write(context1.nameWithGenerics);
@@ -1465,18 +1467,33 @@ String renderMethod(MethodTemplateData context0) {
14651467
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
14661468
''');
14671469
buffer.write(_renderMethod_partial_search_sidebar_7(context0));
1470+
if (context0.isParentExtension) {
1471+
buffer.writeln();
1472+
buffer.write('''
1473+
<h5>''');
1474+
buffer.writeEscaped(context0.parent!.name);
1475+
buffer.write(' ');
1476+
buffer.writeEscaped(context0.parent!.kind.toString());
1477+
buffer.write(''' on ''');
1478+
buffer.write(context0.parentAsExtension.extendedType.linkedName);
1479+
buffer.write('''</h5>''');
1480+
}
1481+
if (!context0.isParentExtension) {
1482+
buffer.writeln();
1483+
buffer.write('''
1484+
<h5>''');
1485+
buffer.writeEscaped(context0.parent!.name);
1486+
buffer.write(' ');
1487+
buffer.writeEscaped(context0.parent!.kind.toString());
1488+
buffer.write('''</h5>''');
1489+
}
14681490
buffer.writeln();
14691491
buffer.write('''
1470-
<h5>''');
1471-
buffer.writeEscaped(context0.parent!.name);
1472-
buffer.write(' ');
1473-
buffer.writeEscaped(context0.parent!.kind.toString());
1474-
buffer.write('''</h5>
14751492
<div id="dartdoc-sidebar-left-content"></div>
14761493
</div><!--/.sidebar-offcanvas-->
14771494
14781495
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
1479-
</div><!--/.sidebar-offcanvas-->
1496+
</div><!--/.sidebar-offcanvas-->
14801497
14811498
''');
14821499
buffer.write(_renderMethod_partial_footer_8(context0));
@@ -1699,13 +1716,28 @@ String renderProperty(PropertyTemplateData context0) {
16991716
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
17001717
''');
17011718
buffer.write(_renderProperty_partial_search_sidebar_10(context0));
1719+
if (context0.isParentExtension) {
1720+
buffer.writeln();
1721+
buffer.write('''
1722+
<h5>''');
1723+
buffer.writeEscaped(context0.parent!.name);
1724+
buffer.write(' ');
1725+
buffer.writeEscaped(context0.parent!.kind.toString());
1726+
buffer.write(''' on ''');
1727+
buffer.write(context0.parentAsExtension.extendedType.linkedName);
1728+
buffer.write('''</h5>''');
1729+
}
1730+
if (!context0.isParentExtension) {
1731+
buffer.writeln();
1732+
buffer.write('''
1733+
<h5>''');
1734+
buffer.writeEscaped(context0.parent!.name);
1735+
buffer.write(' ');
1736+
buffer.writeEscaped(context0.parent!.kind.toString());
1737+
buffer.write('''</h5>''');
1738+
}
17021739
buffer.writeln();
17031740
buffer.write('''
1704-
<h5>''');
1705-
buffer.writeEscaped(context0.parent!.name);
1706-
buffer.write(' ');
1707-
buffer.writeEscaped(context0.parent!.kind.toString());
1708-
buffer.write('''</h5>
17091741
<div id="dartdoc-sidebar-left-content"></div>
17101742
</div><!--/.sidebar-offcanvas-->
17111743
@@ -3717,7 +3749,10 @@ String _deduplicated_lib_templates__extension_html(Extension context0) {
37173749
}
37183750
buffer.write('''">''');
37193751
buffer.write(context0.linkedName);
3720-
buffer.write('''</span> ''');
3752+
buffer.write('''</span>
3753+
on ''');
3754+
buffer.write(context0.extendedType.linkedName);
3755+
buffer.write('\n ');
37213756
buffer.write(
37223757
__deduplicated_lib_templates__extension_html_partial_categorization_0(
37233758
context0));

Diff for: lib/src/generator/templates.runtime_renderers.dart

+30
Original file line numberDiff line numberDiff line change
@@ -13842,6 +13842,13 @@ class _Renderer_TemplateDataBase extends RendererBase<TemplateDataBase> {
1384213842
self.renderSimpleVariable(c, remainingNames, 'bool'),
1384313843
getBool: (CT_ c) => c.includeVersion,
1384413844
),
13845+
'isParentExtension': Property(
13846+
getValue: (CT_ c) => c.isParentExtension,
13847+
renderVariable: (CT_ c, Property<CT_> self,
13848+
List<String> remainingNames) =>
13849+
self.renderSimpleVariable(c, remainingNames, 'bool'),
13850+
getBool: (CT_ c) => c.isParentExtension,
13851+
),
1384513852
'layoutTitle': Property(
1384613853
getValue: (CT_ c) => c.layoutTitle,
1384713854
renderVariable:
@@ -13945,6 +13952,29 @@ class _Renderer_TemplateDataBase extends RendererBase<TemplateDataBase> {
1394513952
parent: r);
1394613953
},
1394713954
),
13955+
'parentAsExtension': Property(
13956+
getValue: (CT_ c) => c.parentAsExtension,
13957+
renderVariable:
13958+
(CT_ c, Property<CT_> self, List<String> remainingNames) {
13959+
if (remainingNames.isEmpty) {
13960+
return self.getValue(c).toString();
13961+
}
13962+
var name = remainingNames.first;
13963+
var nextProperty =
13964+
_Renderer_Extension.propertyMap().getValue(name);
13965+
return nextProperty.renderVariable(
13966+
self.getValue(c) as Extension,
13967+
nextProperty,
13968+
[...remainingNames.skip(1)]);
13969+
},
13970+
isNullValue: (CT_ c) => false,
13971+
renderValue: (CT_ c, RendererBase<CT_> r,
13972+
List<MustachioNode> ast, StringSink sink) {
13973+
_render_Extension(
13974+
c.parentAsExtension, ast, r.template, sink,
13975+
parent: r);
13976+
},
13977+
),
1394813978
'relCanonicalPrefix': Property(
1394913979
getValue: (CT_ c) => c.relCanonicalPrefix,
1395013980
renderVariable:

Diff for: lib/templates/_extension.html

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
<dt id="{{ htmlId }}">
2-
<span class="name {{ #isDeprecated }}deprecated{{ /isDeprecated }}">{{{ linkedName }}}</span> {{ >categorization }}
2+
<span class="name {{ #isDeprecated }}deprecated{{ /isDeprecated }}">{{{ linkedName }}}</span>
3+
on {{{ extendedType.linkedName }}}
4+
{{ >categorization }}
35
</dt>
46
<dd>
57
{{{ oneLineDoc }}}

0 commit comments

Comments
 (0)