Skip to content

Commit 435198f

Browse files
authored
Refactor handling of generateDocs:false (#4095)
Not sure if anyone is using this option really. But I think the handling can be simplified. But it seems that having multiple Generator classes just for deciding whether to write files or not is excessive, and likely to get out of sync (does the EmptyGenerator really still do whatever GeneratorFrontend does, just without writing files?)
1 parent 8b4d03e commit 435198f

File tree

8 files changed

+271
-333
lines changed

8 files changed

+271
-333
lines changed

bin/dartdoc.dart

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,5 @@ void main(List<String> arguments) {
2020
final packageConfigProvider = PhysicalPackageConfigProvider();
2121
final packageBuilder =
2222
PubPackageBuilder(config, pubPackageMetaProvider, packageConfigProvider);
23-
final dartdoc = config.generateDocs
24-
? Dartdoc.fromContext(config, packageBuilder)
25-
: Dartdoc.withEmptyGenerator(config, packageBuilder);
26-
dartdoc.executeGuarded();
23+
Dartdoc.fromContext(config, packageBuilder).executeGuarded();
2724
}

lib/src/dartdoc.dart

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import 'dart:io' show Platform, exitCode, stderr;
99
import 'package:analyzer/file_system/file_system.dart';
1010
import 'package:dartdoc/src/dartdoc_options.dart';
1111
import 'package:dartdoc/src/failure.dart';
12-
import 'package:dartdoc/src/generator/empty_generator.dart';
1312
import 'package:dartdoc/src/generator/generator.dart';
1413
import 'package:dartdoc/src/generator/html_generator.dart';
1514
import 'package:dartdoc/src/logging.dart';
@@ -27,10 +26,28 @@ const String programName = 'dartdoc';
2726
// Update when pubspec version changes by running `pub run build_runner build`
2827
const String dartdocVersion = packageVersion;
2928

29+
/// Used for the generateDocs:false option.
30+
///
31+
/// Writes nothing.
32+
class NoFileWriter implements FileWriter {
33+
@override
34+
void write(String filePath, String content, {Warnable? element}) {
35+
// Do nothing
36+
}
37+
38+
@override
39+
void writeBytes(String filePath, List<int> content,
40+
{bool allowOverwrite = false}) {
41+
// Do nothing
42+
}
43+
44+
@override
45+
Set<String> get writtenFiles => {};
46+
}
47+
3048
class DartdocFileWriter implements FileWriter {
3149
final String _outputDir;
32-
@override
33-
final ResourceProvider resourceProvider;
50+
final ResourceProvider _resourceProvider;
3451
final Map<String, Warnable?> _fileElementMap = {};
3552
@override
3653
final Set<String> writtenFiles = {};
@@ -43,7 +60,7 @@ class DartdocFileWriter implements FileWriter {
4360

4461
DartdocFileWriter(
4562
this._outputDir,
46-
this.resourceProvider, {
63+
this._resourceProvider, {
4764
int maxFileCount = 0,
4865
int maxTotalSize = 0,
4966
}) : _maxFileCount = maxFileCount,
@@ -115,8 +132,8 @@ class DartdocFileWriter implements FileWriter {
115132
/// Returns the file at [outFile] relative to [_outputDir], creating the
116133
/// parent directory if necessary.
117134
File _getFile(String outFile) {
118-
var file = resourceProvider
119-
.getFile(resourceProvider.pathContext.join(_outputDir, outFile));
135+
var file = _resourceProvider
136+
.getFile(_resourceProvider.pathContext.join(_outputDir, outFile));
120137
var parent = file.parent;
121138
if (!parent.exists) {
122139
parent.create();
@@ -144,19 +161,6 @@ class Dartdoc {
144161
@visibleForTesting
145162
set generator(Generator newGenerator) => _generator = newGenerator;
146163

147-
/// Factory method that builds Dartdoc with an empty generator.
148-
factory Dartdoc.withEmptyGenerator(
149-
DartdocOptionContext config,
150-
PackageBuilder packageBuilder,
151-
) {
152-
return Dartdoc._(
153-
config,
154-
config.resourceProvider.getFolder('UNUSED'),
155-
initEmptyGenerator(),
156-
packageBuilder,
157-
);
158-
}
159-
160164
/// Builds Dartdoc with a generator determined by [context].
161165
factory Dartdoc.fromContext(
162166
DartdocGeneratorOptionContext context,
@@ -165,12 +169,14 @@ class Dartdoc {
165169
var resourceProvider = context.resourceProvider;
166170
var outputPath = resourceProvider.pathContext.absolute(context.output);
167171
var outputDir = resourceProvider.getFolder(outputPath)..create();
168-
var writer = DartdocFileWriter(
169-
outputPath,
170-
resourceProvider,
171-
maxFileCount: context.maxFileCount,
172-
maxTotalSize: context.maxTotalSize,
173-
);
172+
var writer = context.generateDocs
173+
? DartdocFileWriter(
174+
outputPath,
175+
resourceProvider,
176+
maxFileCount: context.maxFileCount,
177+
maxTotalSize: context.maxTotalSize,
178+
)
179+
: NoFileWriter();
174180
return Dartdoc._(
175181
context,
176182
outputDir,

lib/src/dartdoc_options.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1278,6 +1278,9 @@ class DartdocGeneratorOptionContext extends DartdocOptionContext {
12781278
bool get useBaseHref => optionSet['useBaseHref'].valueAt(context);
12791279

12801280
String? get resourcesDir => optionSet['resourcesDir'].valueAt(context);
1281+
1282+
/// Whether to generate docs or perform a dry run.
1283+
bool get generateDocs => optionSet['generateDocs'].valueAt(context);
12811284
}
12821285

12831286
class DartdocProgramOptionContext extends DartdocGeneratorOptionContext
@@ -1288,9 +1291,6 @@ class DartdocProgramOptionContext extends DartdocGeneratorOptionContext
12881291
DartdocProgramOptionContext.fromDefaultContextLocation(
12891292
super.optionSet, super.resourceProvider)
12901293
: super.fromDefaultContextLocation();
1291-
1292-
/// Whether to generate docs or perform a dry run.
1293-
bool get generateDocs => optionSet['generateDocs'].valueAt(context);
12941294
}
12951295

12961296
List<DartdocOption<bool>> createDartdocProgramOptions(

lib/src/generator/empty_generator.dart

Lines changed: 0 additions & 40 deletions
This file was deleted.

0 commit comments

Comments
 (0)