Skip to content

Commit 950898f

Browse files
authored
Reintroduce remote linking file type assumption (#3425)
* Reintroduce remote linking file type assumption * comment nit
1 parent ef55299 commit 950898f

9 files changed

+2841
-2818
lines changed

lib/resources/docs.dart.js

Lines changed: 2773 additions & 2773 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/resources/docs.dart.js.map

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/src/generator/file_structure.dart

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,26 +19,31 @@ const _validFormats = {'html', 'md'};
1919
/// together.
2020
abstract class FileStructure {
2121
factory FileStructure.fromDocumentable(Documentable documentable) {
22-
if (!_validFormats.contains(documentable.config.format)) {
23-
throw DartdocFailure(
24-
'Internal error: unrecognized config.format: ${documentable.config.format}');
22+
/// This assumes all remote packages are HTML.
23+
/// Add configurability for remote formats in dartdoc_options if changing
24+
/// that becomes desireable.
25+
var format = documentable.config.format;
26+
if (documentable.package.documentedWhere == DocumentLocation.remote) {
27+
format = 'html';
28+
}
29+
if (!_validFormats.contains(format)) {
30+
throw DartdocFailure('Internal error: unrecognized format: $format');
2531
}
2632
switch (documentable) {
2733
case LibraryContainer():
2834
// [LibraryContainer]s are not ModelElements, but have documentation.
29-
return FileStructure._fromLibraryContainer(documentable);
35+
return FileStructure._fromLibraryContainer(documentable, format);
3036
case ModelElement():
3137
// This should be the common case.
32-
return FileStructure._fromModelElement(documentable);
38+
return FileStructure._fromModelElement(documentable, format);
3339
default:
3440
throw UnimplementedError(
3541
'Tried to build a FileStructure for an unknown subtype of Documentable: ${documentable.runtimeType}');
3642
}
3743
}
3844

3945
factory FileStructure._fromLibraryContainer(
40-
LibraryContainer libraryContainer) {
41-
final format = libraryContainer.config.format;
46+
LibraryContainer libraryContainer, String format) {
4247
switch (libraryContainer) {
4348
case Category():
4449
return FileStructureImpl(format, libraryContainer.name, 'topic');
@@ -50,8 +55,8 @@ abstract class FileStructure {
5055
}
5156
}
5257

53-
factory FileStructure._fromModelElement(ModelElement modelElement) {
54-
final format = modelElement.config.format;
58+
factory FileStructure._fromModelElement(
59+
ModelElement modelElement, String format) {
5560
switch (modelElement) {
5661
case Library():
5762
return FileStructureImpl(format, modelElement.dirName, 'library');
@@ -66,8 +71,7 @@ abstract class FileStructure {
6671
return FileStructureImpl(format, modelElement.name,
6772
modelElement.isConst ? 'constant' : null);
6873
default:
69-
return FileStructureImpl(
70-
modelElement.config.format, modelElement.name, null);
74+
return FileStructureImpl(format, modelElement.name, null);
7175
}
7276
}
7377

lib/src/generator/templates.runtime_renderers.dart

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4112,6 +4112,28 @@ class _Renderer_Documentable extends RendererBase<Documentable> {
41124112
parent: r);
41134113
},
41144114
),
4115+
'package': Property(
4116+
getValue: (CT_ c) => c.package,
4117+
renderVariable:
4118+
(CT_ c, Property<CT_> self, List<String> remainingNames) {
4119+
if (remainingNames.isEmpty) {
4120+
return self.getValue(c).toString();
4121+
}
4122+
var name = remainingNames.first;
4123+
var nextProperty =
4124+
_Renderer_Package.propertyMap().getValue(name);
4125+
return nextProperty.renderVariable(
4126+
self.getValue(c) as Package,
4127+
nextProperty,
4128+
[...remainingNames.skip(1)]);
4129+
},
4130+
isNullValue: (CT_ c) => false,
4131+
renderValue: (CT_ c, RendererBase<CT_> r,
4132+
List<MustachioNode> ast, StringSink sink) {
4133+
_render_Package(c.package, ast, r.template, sink,
4134+
parent: r);
4135+
},
4136+
),
41154137
'packageGraph': Property(
41164138
getValue: (CT_ c) => c.packageGraph,
41174139
renderVariable: (CT_ c, Property<CT_> self,
@@ -16601,28 +16623,6 @@ class _Renderer_Warnable extends RendererBase<Warnable> {
1660116623
parent: r, getters: _invisibleGetters['Element']!);
1660216624
},
1660316625
),
16604-
'package': Property(
16605-
getValue: (CT_ c) => c.package,
16606-
renderVariable:
16607-
(CT_ c, Property<CT_> self, List<String> remainingNames) {
16608-
if (remainingNames.isEmpty) {
16609-
return self.getValue(c).toString();
16610-
}
16611-
var name = remainingNames.first;
16612-
var nextProperty =
16613-
_Renderer_Package.propertyMap().getValue(name);
16614-
return nextProperty.renderVariable(
16615-
self.getValue(c) as Package,
16616-
nextProperty,
16617-
[...remainingNames.skip(1)]);
16618-
},
16619-
isNullValue: (CT_ c) => false,
16620-
renderValue: (CT_ c, RendererBase<CT_> r,
16621-
List<MustachioNode> ast, StringSink sink) {
16622-
_render_Package(c.package, ast, r.template, sink,
16623-
parent: r);
16624-
},
16625-
),
1662616626
}) as Map<String, Property<CT_>>;
1662716627

1662816628
_Renderer_Warnable(Warnable context, RendererBase<Object>? parent,

lib/src/model/documentable.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ abstract class Documentable extends Nameable {
2222

2323
PackageGraph get packageGraph;
2424

25+
Package get package;
26+
2527
bool get isDocumented;
2628

2729
DartdocOptionContext get config;

lib/src/warnings.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -296,8 +296,6 @@ const Map<PackageWarning, PackageWarningDefinition> packageWarningDefinitions =
296296
mixin Warnable implements Canonicalization, CommentReferable {
297297
Element? get element;
298298

299-
Package get package;
300-
301299
void warn(
302300
PackageWarning kind, {
303301
String? message,

test/dartdoc_test_base.dart

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ analyzer:
7070
packagePath, name, Uri.file('$packagePath/'));
7171
}
7272

73-
Future<PackageGraph> _bootPackageFromFiles(
74-
Iterable<d.Descriptor> files) async {
73+
Future<PackageGraph> _bootPackageFromFiles(Iterable<d.Descriptor> files,
74+
{List<String> additionalArguments = const []}) async {
7575
var packagePathBasename =
7676
resourceProvider.pathContext.basename(packagePath);
7777
var packagePathDirname = resourceProvider.pathContext.dirname(packagePath);
@@ -82,6 +82,7 @@ analyzer:
8282
packagePath,
8383
packageMetaProvider,
8484
packageConfigProvider,
85+
additionalArguments: additionalArguments,
8586
);
8687
}
8788

@@ -90,7 +91,8 @@ analyzer:
9091
/// extra files in the package such as `dartdoc_options.yaml`.
9192
Future<Library> bootPackageWithLibrary(String libraryContent,
9293
{String libraryPreamble = '',
93-
Iterable<d.Descriptor> extraFiles = const []}) async {
94+
Iterable<d.Descriptor> extraFiles = const [],
95+
List<String> additionalArguments = const []}) async {
9496
return (await _bootPackageFromFiles([
9597
d.dir('lib', [
9698
d.file('lib.dart', '''
@@ -101,7 +103,7 @@ $libraryContent
101103
'''),
102104
]),
103105
...extraFiles
104-
]))
106+
], additionalArguments: additionalArguments))
105107
.libraries
106108
.named(libraryName);
107109
}

test/end2end/model_test.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ class TestLibraryContainer extends LibraryContainer with Nameable {
4949
@override
5050
PackageGraph get packageGraph => throw UnimplementedError();
5151

52+
@override
53+
Package get package => throw UnimplementedError();
54+
5255
TestLibraryContainer(
5356
this.name, this.containerOrder, LibraryContainer? enclosingContainer)
5457
: enclosingName = enclosingContainer?.name ?? '';

test/generator/file_structure_test.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,4 +71,18 @@ Hello there, I am an *amazing* markdown file.
7171
expect(aMethod.fileStructure.fileName, equals('aMethod.html'));
7272
expect(operatorPlus.fileStructure.fileName, equals('operator_plus.html'));
7373
}
74+
75+
void test_fileNamesForMarkdownElements() async {
76+
var library = await bootPackageWithLibrary('''
77+
class AClass {
78+
}
79+
''', additionalArguments: ['--format=md']);
80+
var AClass = library.classes.named('AClass');
81+
// The inherited toString implementation is not canonical, so be sure
82+
// to get the canonical reference.
83+
var AClassToString =
84+
AClass.inheritedMethods.named('toString').canonicalModelElement!;
85+
expect(AClass.fileStructure.fileName, equals('AClass-class.md'));
86+
expect(AClassToString.fileStructure.fileName, equals('toString.html'));
87+
}
7488
}

0 commit comments

Comments
 (0)