Skip to content

Commit f8bdfc8

Browse files
authored
Extension type pages. Minimal, initial support. (#3530)
1 parent 9954382 commit f8bdfc8

25 files changed

+1434
-785
lines changed

lib/src/generator/file_structure.dart

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,12 @@ abstract class FileStructure {
5858
Library() => FileStructureImpl(format, modelElement.dirName, 'library'),
5959
Mixin() => FileStructureImpl(format, modelElement.name, 'mixin'),
6060
Class() => FileStructureImpl(format, modelElement.name, 'class'),
61+
ExtensionType() =>
62+
FileStructureImpl(format, modelElement.name, 'extension-type'),
6163
Operator() => FileStructureImpl(format,
62-
'operator_${operatorNames[modelElement.referenceName]}', null),
63-
GetterSetterCombo() => FileStructureImpl(format, modelElement.name,
64-
modelElement.isConst ? 'constant' : null),
64+
'operator_${operatorNames[modelElement.referenceName]}', null),
65+
GetterSetterCombo() => FileStructureImpl(
66+
format, modelElement.name, modelElement.isConst ? 'constant' : null),
6567
_ => FileStructureImpl(format, modelElement.name, null)
6668
};
6769
}

lib/src/generator/generator_backend.dart

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class DartdocGeneratorBackendOptions implements TemplateOptions {
5858

5959
/// An interface for classes which are responsible for outputing the generated
6060
/// documentation.
61-
abstract class GeneratorBackend {
61+
abstract interface class GeneratorBackend {
6262
FileWriter get writer;
6363

6464
/// Emits JSON describing the [categories] defined by the package.
@@ -82,6 +82,14 @@ abstract class GeneratorBackend {
8282
/// Emits documentation content for the [eNum].
8383
void generateEnum(PackageGraph packageGraph, Library library, Enum eNum);
8484

85+
/// Emits documentation content for the [extension].
86+
void generateExtension(
87+
PackageGraph packageGraph, Library library, Extension extension);
88+
89+
/// Emits documentation content for the [extensionType].
90+
void generateExtensionType(
91+
PackageGraph packageGraph, Library library, ExtensionType extensionType);
92+
8593
/// Emits documentation content for the [mixin].
8694
void generateMixin(PackageGraph packageGraph, Library library, Mixin mixin);
8795

@@ -101,10 +109,6 @@ abstract class GeneratorBackend {
101109
void generateMethod(PackageGraph packageGraph, Library library,
102110
Container clazz, Method method);
103111

104-
/// Emits documentation content for the [extension].
105-
void generateExtension(
106-
PackageGraph packageGraph, Library library, Extension extension);
107-
108112
/// Emits documentation content for the [function].
109113
void generateFunction(
110114
PackageGraph packageGraph, Library library, ModelFunction function);
@@ -235,6 +239,16 @@ abstract class GeneratorBackendBase implements GeneratorBackend {
235239
runtimeStats.incrementAccumulator('writtenExtensionFileCount');
236240
}
237241

242+
@override
243+
void generateExtensionType(
244+
PackageGraph packageGraph, Library library, ExtensionType extensionType) {
245+
var data = ExtensionTypeTemplateData(
246+
options, packageGraph, library, extensionType);
247+
var content = templates.renderExtensionType(data);
248+
write(writer, extensionType.filePath, data, content);
249+
runtimeStats.incrementAccumulator('writtenExtensionTypeFileCount');
250+
}
251+
238252
@override
239253
void generateFunction(
240254
PackageGraph packageGraph, Library library, ModelFunction function) {

lib/src/generator/generator_frontend.dart

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ class GeneratorFrontEnd implements Generator {
4545
'writtenConstructorFileCount',
4646
'writtenEnumFileCount',
4747
'writtenExtensionFileCount',
48+
'writtenExtensionTypeFileCount',
4849
'writtenFunctionFileCount',
4950
'writtenLibraryFileCount',
5051
'writtenMethodFileCount',
@@ -188,6 +189,55 @@ class GeneratorFrontEnd implements Generator {
188189
}
189190
}
190191

192+
for (var extensionType in filterNonDocumented(lib.extensionTypes)) {
193+
indexAccumulator.add(extensionType);
194+
_generatorBackend.generateExtensionType(
195+
packageGraph, lib, extensionType);
196+
197+
for (var constant
198+
in filterNonDocumented(extensionType.constantFields)) {
199+
indexAccumulator.add(constant);
200+
_generatorBackend.generateConstant(
201+
packageGraph, lib, extensionType, constant);
202+
}
203+
204+
for (var method
205+
in filterNonDocumented(extensionType.publicInstanceMethods)) {
206+
indexAccumulator.add(method);
207+
_generatorBackend.generateMethod(
208+
packageGraph, lib, extensionType, method);
209+
}
210+
211+
for (var operator
212+
in filterNonDocumented(extensionType.instanceOperators)) {
213+
indexAccumulator.add(operator);
214+
_generatorBackend.generateMethod(
215+
packageGraph, lib, extensionType, operator);
216+
}
217+
218+
for (var property
219+
in filterNonDocumented(extensionType.instanceFields)) {
220+
indexAccumulator.add(property);
221+
_generatorBackend.generateProperty(
222+
packageGraph, lib, extensionType, property);
223+
}
224+
225+
for (var staticField
226+
in filterNonDocumented(extensionType.variableStaticFields)) {
227+
indexAccumulator.add(staticField);
228+
_generatorBackend.generateProperty(
229+
packageGraph, lib, extensionType, staticField);
230+
}
231+
232+
for (var method in filterNonDocumented(extensionType.staticMethods)) {
233+
if (!method.isCanonical) continue;
234+
235+
indexAccumulator.add(method);
236+
_generatorBackend.generateMethod(
237+
packageGraph, lib, extensionType, method);
238+
}
239+
}
240+
191241
for (var mixin in filterNonDocumented(lib.mixins)) {
192242
indexAccumulator.add(mixin);
193243
_generatorBackend.generateMixin(packageGraph, lib, mixin);

lib/src/generator/html_generator.dart

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,17 @@ class HtmlGeneratorBackend extends GeneratorBackendBase {
6565
runtimeStats.incrementAccumulator('writtenSidebarFileCount');
6666
}
6767

68+
@override
69+
void generateExtensionType(
70+
PackageGraph packageGraph, Library library, ExtensionType extensionType) {
71+
super.generateExtensionType(packageGraph, library, extensionType);
72+
var data = ExtensionTypeTemplateData(
73+
options, packageGraph, library, extensionType);
74+
var sidebarContent = templates.renderSidebarForContainer(data);
75+
write(writer, extensionType.sidebarPath, data, sidebarContent);
76+
runtimeStats.incrementAccumulator('writtenSidebarFileCount');
77+
}
78+
6879
@override
6980
void generateLibrary(PackageGraph packageGraph, Library library) {
7081
super.generateLibrary(packageGraph, library);

lib/src/generator/template_data.dart

Lines changed: 41 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,9 @@ abstract class TemplateData<T extends Documentable> extends TemplateDataBase {
9999
@override
100100
T get self;
101101

102-
String? get aboveSidebarPath;
102+
String? get aboveSidebarPath => self.aboveSidebarPath;
103103

104-
String? get belowSidebarPath;
104+
String? get belowSidebarPath => self.belowSidebarPath;
105105

106106
String _layoutTitle(String name, String kind, {required bool isDeprecated}) =>
107107
_packageGraph.rendererFactory.templateRenderer
@@ -135,11 +135,6 @@ class PackageTemplateData extends TemplateData<Package> {
135135
@override
136136
Package get self => package;
137137

138-
@override
139-
String? get aboveSidebarPath => null;
140-
@override
141-
String? get belowSidebarPath => null;
142-
143138
@override
144139
String get layoutTitle =>
145140
_layoutTitle(package.name, package.kind.toString(), isDeprecated: false);
@@ -201,11 +196,6 @@ class CategoryTemplateData extends TemplateData<Category>
201196

202197
@override
203198
Category get self => category;
204-
205-
@override
206-
String? get aboveSidebarPath => null;
207-
@override
208-
String? get belowSidebarPath => null;
209199
}
210200

211201
class LibraryTemplateData extends TemplateData<Library>
@@ -230,11 +220,6 @@ class LibraryTemplateData extends TemplateData<Library>
230220

231221
@override
232222
Library get self => library;
233-
234-
@override
235-
String? get aboveSidebarPath => self.aboveSidebarPath;
236-
@override
237-
String? get belowSidebarPath => self.belowSidebarPath;
238223
}
239224

240225
/// Template data for Mixin declarations.
@@ -290,11 +275,6 @@ abstract class InheritingContainerTemplateData<T extends InheritingContainer>
290275
@override
291276
T get self => clazz;
292277

293-
@override
294-
String? get aboveSidebarPath => self.aboveSidebarPath;
295-
@override
296-
String? get belowSidebarPath => self.belowSidebarPath;
297-
298278
@override
299279
String get title =>
300280
'${clazz.name} ${clazz.kind} - ${library.name} library - Dart API';
@@ -332,11 +312,6 @@ class ExtensionTemplateData<T extends Extension> extends TemplateData<T>
332312
@override
333313
T get self => extension;
334314

335-
@override
336-
String? get aboveSidebarPath => self.aboveSidebarPath;
337-
@override
338-
String? get belowSidebarPath => self.belowSidebarPath;
339-
340315
@override
341316
String get title =>
342317
'${extension.name} ${extension.kind} - ${library.name} library - Dart API';
@@ -353,6 +328,45 @@ class ExtensionTemplateData<T extends Extension> extends TemplateData<T>
353328
List<Documentable> get navLinks => [_packageGraph.defaultPackage, library];
354329
}
355330

331+
final class ExtensionTypeTemplateData<T extends ExtensionType>
332+
extends TemplateData<T>
333+
with OneDirectoryDown
334+
implements TemplateDataWithLibrary<T>, TemplateDataWithContainer<T> {
335+
final T extensionType;
336+
@override
337+
final Library library;
338+
339+
ExtensionTypeTemplateData(
340+
super.htmlOptions,
341+
super.packageGraph,
342+
this.library,
343+
this.extensionType,
344+
);
345+
346+
@override
347+
Container get container => extensionType;
348+
349+
@override
350+
T get self => extensionType;
351+
352+
@override
353+
String get title =>
354+
'${extensionType.name} ${extensionType.kind} - ${library.name} library -'
355+
' Dart API';
356+
@override
357+
String get metaDescription =>
358+
'API docs for the ${extensionType.name} ${extensionType.kind} from the '
359+
'${library.name} library, for the Dart programming language.';
360+
361+
@override
362+
String get layoutTitle =>
363+
_layoutTitle(extensionType.name, extensionType.kind.toString(),
364+
isDeprecated: false);
365+
366+
@override
367+
List<Documentable> get navLinks => [_packageGraph.defaultPackage, library];
368+
}
369+
356370
class ConstructorTemplateData extends TemplateData<Constructor>
357371
with TwoDirectoriesDown
358372
implements
@@ -376,11 +390,6 @@ class ConstructorTemplateData extends TemplateData<Constructor>
376390
@override
377391
Constructor get self => constructor;
378392

379-
@override
380-
String? get aboveSidebarPath => self.aboveSidebarPath;
381-
@override
382-
String? get belowSidebarPath => self.belowSidebarPath;
383-
384393
@override
385394
String get layoutTitle => _layoutTitle(constructor.name, constructor.fullKind,
386395
isDeprecated: constructor.isDeprecated);
@@ -428,11 +437,6 @@ class FunctionTemplateData extends TemplateData<ModelFunction>
428437
@override
429438
ModelFunction get self => function;
430439

431-
@override
432-
String? get aboveSidebarPath => self.aboveSidebarPath;
433-
@override
434-
String? get belowSidebarPath => self.belowSidebarPath;
435-
436440
@override
437441
String get title =>
438442
'${function.name} function - ${library.name} library - Dart API';
@@ -470,11 +474,6 @@ class MethodTemplateData extends TemplateData<Method>
470474
@override
471475
Method get self => method;
472476

473-
@override
474-
String? get aboveSidebarPath => self.aboveSidebarPath;
475-
@override
476-
String? get belowSidebarPath => self.belowSidebarPath;
477-
478477
@override
479478
String get title =>
480479
'${method.name} method - ${container.name} ${container.kind} - '
@@ -515,11 +514,6 @@ class PropertyTemplateData extends TemplateData<Field>
515514
@override
516515
Field get self => property;
517516

518-
@override
519-
String? get aboveSidebarPath => self.aboveSidebarPath;
520-
@override
521-
String? get belowSidebarPath => self.belowSidebarPath;
522-
523517
@override
524518
String get title => '${property.name} ${property.kind} - '
525519
'${container.name} ${container.kind} - '
@@ -555,11 +549,6 @@ class TypedefTemplateData extends TemplateData<Typedef>
555549
@override
556550
Typedef get self => typeDef;
557551

558-
@override
559-
String? get aboveSidebarPath => self.aboveSidebarPath;
560-
@override
561-
String? get belowSidebarPath => self.belowSidebarPath;
562-
563552
@override
564553
String get title =>
565554
'${typeDef.name} typedef - ${library.name} library - Dart API';
@@ -592,11 +581,6 @@ class TopLevelPropertyTemplateData extends TemplateData<TopLevelVariable>
592581
@override
593582
TopLevelVariable get self => property;
594583

595-
@override
596-
String? get aboveSidebarPath => self.aboveSidebarPath;
597-
@override
598-
String? get belowSidebarPath => self.belowSidebarPath;
599-
600584
@override
601585
String get title =>
602586
'${property.name} $_type - ${library.name} library - Dart API';

0 commit comments

Comments
 (0)