Skip to content

Commit 11af0bd

Browse files
authored
Decouple href and from a model's filename (#2096)
* Consolidate filename correction in html_generator_instance * Decouple file path from a model's href * Don't check canonical elements for filepaths * Use filePath when constructing href for consistency
1 parent 19c5583 commit 11af0bd

17 files changed

+83
-42
lines changed

lib/src/html/html_generator_instance.dart

Lines changed: 20 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ class HtmlGeneratorInstance {
279279
PackageTemplateData(_options, packageGraph, _templateHelper, package);
280280
logInfo('documenting ${package.name}');
281281

282-
_build('index.html', _templates.indexTemplate, data);
282+
_build(package.filePath, _templates.indexTemplate, data);
283283
_build('__404error.html', _templates.errorTemplate, data);
284284
}
285285

@@ -289,8 +289,7 @@ class HtmlGeneratorInstance {
289289
TemplateData data =
290290
CategoryTemplateData(_options, packageGraph, _templateHelper, category);
291291

292-
_build(path.joinAll(category.href.split('/')), _templates.categoryTemplate,
293-
data);
292+
_build(category.filePath, _templates.categoryTemplate, data);
294293
}
295294

296295
void generateLibrary(PackageGraph packageGraph, Library lib) {
@@ -302,107 +301,97 @@ class HtmlGeneratorInstance {
302301
TemplateData data =
303302
LibraryTemplateData(_options, packageGraph, _templateHelper, lib);
304303

305-
_build(path.join(lib.dirName, '${lib.fileName}'),
306-
_templates.libraryTemplate, data);
304+
_build(lib.filePath, _templates.libraryTemplate, data);
307305
}
308306

309307
void generateClass(PackageGraph packageGraph, Library lib, Class clazz) {
310308
TemplateData data =
311309
ClassTemplateData(_options, packageGraph, _templateHelper, lib, clazz);
312-
_build(path.joinAll(clazz.href.split('/')), _templates.classTemplate, data);
310+
_build(clazz.filePath, _templates.classTemplate, data);
313311
}
314312

315313
void generateExtension(
316-
PackageGraph packageGraph, Library lib, Extension ext) {
314+
PackageGraph packageGraph, Library lib, Extension extension) {
317315
TemplateData data = ExtensionTemplateData(
318-
_options, packageGraph, _templateHelper, lib, ext);
319-
_build(
320-
path.joinAll(ext.href.split('/')), _templates.extensionTemplate, data);
316+
_options, packageGraph, _templateHelper, lib, extension);
317+
_build(extension.filePath, _templates.extensionTemplate, data);
321318
}
322319

323320
void generateMixins(PackageGraph packageGraph, Library lib, Mixin mixin) {
324321
TemplateData data =
325322
MixinTemplateData(_options, packageGraph, _templateHelper, lib, mixin);
326-
_build(path.joinAll(mixin.href.split('/')), _templates.mixinTemplate, data);
323+
_build(mixin.filePath, _templates.mixinTemplate, data);
327324
}
328325

329326
void generateConstructor(PackageGraph packageGraph, Library lib, Class clazz,
330327
Constructor constructor) {
331328
TemplateData data = ConstructorTemplateData(
332329
_options, packageGraph, _templateHelper, lib, clazz, constructor);
333330

334-
_build(path.joinAll(constructor.href.split('/')),
335-
_templates.constructorTemplate, data);
331+
_build(constructor.filePath, _templates.constructorTemplate, data);
336332
}
337333

338334
void generateEnum(PackageGraph packageGraph, Library lib, Enum eNum) {
339335
TemplateData data =
340336
EnumTemplateData(_options, packageGraph, _templateHelper, lib, eNum);
341337

342-
_build(path.joinAll(eNum.href.split('/')), _templates.enumTemplate, data);
338+
_build(eNum.filePath, _templates.enumTemplate, data);
343339
}
344340

345341
void generateFunction(
346342
PackageGraph packageGraph, Library lib, ModelFunction function) {
347343
TemplateData data = FunctionTemplateData(
348344
_options, packageGraph, _templateHelper, lib, function);
349345

350-
_build(path.joinAll(function.href.split('/')), _templates.functionTemplate,
351-
data);
346+
_build(function.filePath, _templates.functionTemplate, data);
352347
}
353348

354349
void generateMethod(
355350
PackageGraph packageGraph, Library lib, Container clazz, Method method) {
356351
TemplateData data = MethodTemplateData(
357352
_options, packageGraph, _templateHelper, lib, clazz, method);
358353

359-
_build(
360-
path.joinAll(method.href.split('/')), _templates.methodTemplate, data);
354+
_build(method.filePath, _templates.methodTemplate, data);
361355
}
362356

363357
void generateConstant(
364358
PackageGraph packageGraph, Library lib, Container clazz, Field property) {
365359
TemplateData data = ConstantTemplateData(
366360
_options, packageGraph, _templateHelper, lib, clazz, property);
367361

368-
_build(path.joinAll(property.href.split('/')), _templates.constantTemplate,
369-
data);
362+
_build(property.filePath, _templates.constantTemplate, data);
370363
}
371364

372365
void generateProperty(
373366
PackageGraph packageGraph, Library lib, Container clazz, Field property) {
374367
TemplateData data = PropertyTemplateData(
375368
_options, packageGraph, _templateHelper, lib, clazz, property);
376369

377-
_build(path.joinAll(property.href.split('/')), _templates.propertyTemplate,
378-
data);
370+
_build(property.filePath, _templates.propertyTemplate, data);
379371
}
380372

381373
void generateTopLevelProperty(
382374
PackageGraph packageGraph, Library lib, TopLevelVariable property) {
383375
TemplateData data = TopLevelPropertyTemplateData(
384376
_options, packageGraph, _templateHelper, lib, property);
385377

386-
_build(path.joinAll(property.href.split('/')),
387-
_templates.topLevelPropertyTemplate, data);
378+
_build(property.filePath, _templates.topLevelPropertyTemplate, data);
388379
}
389380

390381
void generateTopLevelConstant(
391382
PackageGraph packageGraph, Library lib, TopLevelVariable property) {
392383
TemplateData data = TopLevelConstTemplateData(
393384
_options, packageGraph, _templateHelper, lib, property);
394385

395-
_build(path.joinAll(property.href.split('/')),
396-
_templates.topLevelConstantTemplate, data);
386+
_build(property.filePath, _templates.topLevelConstantTemplate, data);
397387
}
398388

399389
void generateTypeDef(
400390
PackageGraph packageGraph, Library lib, Typedef typeDef) {
401391
TemplateData data = TypedefTemplateData(
402392
_options, packageGraph, _templateHelper, lib, typeDef);
403393

404-
_build(path.joinAll(typeDef.href.split('/')), _templates.typeDefTemplate,
405-
data);
394+
_build(typeDef.filePath, _templates.typeDefTemplate, data);
406395
}
407396

408397
// TODO: change this to use resource_loader
@@ -420,9 +409,11 @@ class HtmlGeneratorInstance {
420409
}
421410

422411
void _build(String filename, Template template, TemplateData data) {
412+
// Replaces '/' separators with proper separators for the platform.
413+
String outFile = path.joinAll(filename.split('/'));
423414
String content = template.renderString(data);
424415

425-
_writer(filename, content);
416+
_writer(outFile, content);
426417
if (data.self is Indexable) _indexedElements.add(data.self as Indexable);
427418
}
428419
}

lib/src/model/accessor.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,9 @@ class Accessor extends ModelElement implements EnclosedElement {
8989
return ModelElement.from(_accessor.enclosingElement, library, packageGraph);
9090
}
9191

92+
@override
93+
String get filePath => enclosingCombo.filePath;
94+
9295
@override
9396
bool get isCanonical => enclosingCombo.isCanonical;
9497

lib/src/model/category.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,9 +120,10 @@ class Category extends Nameable
120120
@override
121121
String get fullyQualifiedName => name;
122122

123+
String get filePath => 'topics/${name}-topic.html';
124+
123125
@override
124-
String get href =>
125-
isCanonical ? '${package.baseHref}topics/${name}-topic.html' : null;
126+
String get href => isCanonical ? '${package.baseHref}$filePath' : null;
126127

127128
String get categorization => _renderer.renderCategoryLabel(this);
128129

lib/src/model/class.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,9 @@ class Class extends Container
201201
@override
202202
String get fileName => "${name}-class.html";
203203

204+
@override
205+
String get filePath => '${library.dirName}/$fileName';
206+
204207
String get fullkind {
205208
if (isAbstract) return 'abstract $kind';
206209
return kind;
@@ -249,7 +252,7 @@ class Class extends Container
249252
}
250253
assert(canonicalLibrary != null);
251254
assert(canonicalLibrary == library);
252-
return '${package.baseHref}${library.dirName}/$fileName';
255+
return '${package.baseHref}$filePath';
253256
}
254257

255258
/// Returns all the implementors of this class.

lib/src/model/constructor.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ class Constructor extends ModelElement
3434
ModelElement get enclosingElement =>
3535
ModelElement.from(_constructor.enclosingElement, library, packageGraph);
3636

37+
@override
38+
String get filePath =>
39+
'${enclosingElement.library.dirName}/${enclosingElement.name}/$fileName';
40+
3741
String get fullKind {
3842
if (isConst) return 'const $kind';
3943
if (isFactory) return 'factory $kind';
@@ -53,7 +57,7 @@ class Constructor extends ModelElement
5357
}
5458
assert(canonicalLibrary != null);
5559
assert(canonicalLibrary == library);
56-
return '${package.baseHref}${enclosingElement.library.dirName}/${enclosingElement.name}/$name.html';
60+
return '${package.baseHref}$filePath';
5761
}
5862

5963
@override

lib/src/model/dynamic.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,7 @@ class Dynamic extends ModelElement {
2727

2828
@override
2929
String get linkedName => 'dynamic';
30+
31+
@override
32+
String get filePath => null;
3033
}

lib/src/model/extension.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,13 +143,16 @@ class Extension extends Container
143143
return _allModelElements;
144144
}
145145

146+
@override
147+
String get filePath => '${library.dirName}/$fileName';
148+
146149
@override
147150
String get href {
148151
if (!identical(canonicalModelElement, this)) {
149152
return canonicalModelElement?.href;
150153
}
151154
assert(canonicalLibrary != null);
152155
assert(canonicalLibrary == library);
153-
return '${package.baseHref}${library.dirName}/$fileName';
156+
return '${package.baseHref}$filePath';
154157
}
155158
}

lib/src/model/field.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ class Field extends ModelElement
6464
return _enclosingClass;
6565
}
6666

67+
@override
68+
String get filePath =>
69+
'${enclosingElement.library.dirName}/${enclosingElement.name}/$fileName';
70+
6771
@override
6872
String get href {
6973
if (!identical(canonicalModelElement, this)) {
@@ -72,7 +76,7 @@ class Field extends ModelElement
7276
assert(canonicalLibrary != null);
7377
assert(canonicalEnclosingContainer == enclosingElement);
7478
assert(canonicalLibrary == library);
75-
return '${package.baseHref}${enclosingElement.library.dirName}/${enclosingElement.name}/$fileName';
79+
return '${package.baseHref}$filePath';
7680
}
7781

7882
@override

lib/src/model/library.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,9 @@ class Library extends ModelElement with Categorization, TopLevelContainer {
377377
@override
378378
String get fileName => '$dirName-library.html';
379379

380+
@override
381+
String get filePath => '${library.dirName}/$fileName';
382+
380383
List<ModelFunction> _functions;
381384

382385
@override
@@ -396,7 +399,7 @@ class Library extends ModelElement with Categorization, TopLevelContainer {
396399
if (!identical(canonicalModelElement, this)) {
397400
return canonicalModelElement?.href;
398401
}
399-
return '${package.baseHref}${library.dirName}/$fileName';
402+
return '${package.baseHref}$filePath';
400403
}
401404

402405
InheritanceManager3 _inheritanceManager;

lib/src/model/method.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ class Method extends ModelElement
5858
return _enclosingContainer;
5959
}
6060

61+
@override
62+
String get filePath =>
63+
'${enclosingElement.library.dirName}/${enclosingElement.name}/$fileName';
64+
6165
String get fullkind {
6266
if (_method.isAbstract) return 'abstract $kind';
6367
return kind;
@@ -71,7 +75,7 @@ class Method extends ModelElement
7175
assert(!(canonicalLibrary == null || canonicalEnclosingContainer == null));
7276
assert(canonicalLibrary == library);
7377
assert(canonicalEnclosingContainer == enclosingElement);
74-
return '${package.baseHref}${enclosingElement.library.dirName}/${enclosingElement.name}/${fileName}';
78+
return '${package.baseHref}$filePath';
7579
}
7680

7781
@override

lib/src/model/model_element.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -790,6 +790,8 @@ abstract class ModelElement extends Canonicalization
790790

791791
String get fileName => "${name}.html";
792792

793+
String get filePath;
794+
793795
/// Returns the fully qualified name.
794796
///
795797
/// For example: libraryName.className.methodName

lib/src/model/model_function.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,17 @@ class ModelFunctionTyped extends ModelElement
5656
@override
5757
ModelElement get enclosingElement => library;
5858

59+
@override
60+
String get filePath => '${library.dirName}/$fileName';
61+
5962
@override
6063
String get href {
6164
if (!identical(canonicalModelElement, this)) {
6265
return canonicalModelElement?.href;
6366
}
6467
assert(canonicalLibrary != null);
6568
assert(canonicalLibrary == library);
66-
return '${package.baseHref}${library.dirName}/$fileName';
69+
return '${package.baseHref}$filePath';
6770
}
6871

6972
@override

lib/src/model/package.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,8 @@ class Package extends LibraryContainer
170170
@override
171171
String get enclosingName => packageGraph.defaultPackageName;
172172

173+
String get filePath => 'index.html';
174+
173175
@override
174176
String get fullyQualifiedName => 'package:$name';
175177

@@ -211,7 +213,7 @@ class Package extends LibraryContainer
211213
}
212214

213215
@override
214-
String get href => '${baseHref}index.html';
216+
String get href => '$baseHref$filePath';
215217

216218
@override
217219
String get location => path.toUri(packageMeta.resolvedDir).toString();

lib/src/model/parameter.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ class Parameter extends ModelElement implements EnclosedElement {
2727
_parameter.defaultValueCode.isNotEmpty;
2828
}
2929

30+
@override
31+
String get filePath {
32+
throw StateError('filePath not implemented for parameters');
33+
}
34+
3035
@override
3136
String get href {
3237
throw StateError('href not implemented for parameters');

lib/src/model/top_level_variable.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,17 @@ class TopLevelVariable extends ModelElement
4444
@override
4545
ModelElement get enclosingElement => library;
4646

47+
@override
48+
String get filePath => '${library.dirName}/$fileName';
49+
4750
@override
4851
String get href {
4952
if (!identical(canonicalModelElement, this)) {
5053
return canonicalModelElement?.href;
5154
}
5255
assert(canonicalLibrary != null);
5356
assert(canonicalLibrary == library);
54-
return '${package.baseHref}${library.dirName}/$fileName';
57+
return '${package.baseHref}$filePath';
5558
}
5659

5760
@override

lib/src/model/type_parameter.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,18 @@ class TypeParameter extends ModelElement {
1717
? ModelElement.from(element.enclosingElement, library, packageGraph)
1818
: null;
1919

20+
@override
21+
String get filePath =>
22+
'${enclosingElement.library.dirName}/${enclosingElement.name}/$name';
23+
2024
@override
2125
String get href {
2226
if (!identical(canonicalModelElement, this)) {
2327
return canonicalModelElement?.href;
2428
}
2529
assert(canonicalLibrary != null);
2630
assert(canonicalLibrary == library);
27-
return '${package.baseHref}${enclosingElement.library.dirName}/${enclosingElement.name}/$name';
31+
return '${package.baseHref}$filePath';
2832
}
2933

3034
@override

0 commit comments

Comments
 (0)