Add the dart: api doc code sample validation to the CI. Change-Id: Ib2a97728d35d15e6cda247444a00ca813d88b9d3 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/218325 Reviewed-by: Michael Thomsen <mit@google.com> Commit-Queue: Devon Carew <devoncarew@google.com>
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json index ab04c56..448629c 100644 --- a/tools/bots/test_matrix.json +++ b/tools/bots/test_matrix.json
@@ -3470,6 +3470,20 @@ ] }, { + "name": "validate SDK API doc code samples", + "script": "out/ReleaseX64/dart-sdk/bin/dart", + "arguments": [ + "tools/verify_docs/bin/verify_docs.dart", + "sdk/lib/_internal", + "sdk/lib/cli", + "sdk/lib/convert", + "sdk/lib/ffi", + "sdk/lib/js", + "sdk/lib/math", + "sdk/lib/mirrors" + ] + }, + { "name": "validate SDK API data-driven fixes", "script": "out/ReleaseX64/dart-sdk/bin/dart", "arguments": [
diff --git a/tools/verify_docs/bin/verify_docs.dart b/tools/verify_docs/bin/verify_docs.dart index aee1176..c23b102 100644 --- a/tools/verify_docs/bin/verify_docs.dart +++ b/tools/verify_docs/bin/verify_docs.dart
@@ -55,7 +55,7 @@ var hadErrors = false; for (final dir in coreLibraries) { - hadErrors |= await validateLibrary(dir); + hadErrors |= !(await validateLibrary(dir)); } exitCode = hadErrors ? 1 : 0; @@ -69,16 +69,16 @@ print('## dart:$libName'); print(''); - var hadErrors = false; + var validDocs = true; for (final file in dir .listSync(recursive: true) .whereType<File>() .where((file) => file.path.endsWith('.dart'))) { - hadErrors |= await verifyFile(analysisHelper, libName, file, dir); + validDocs &= await verifyFile(analysisHelper, libName, file, dir); } - return hadErrors; + return validDocs; } Future<bool> verifyFile( @@ -113,12 +113,7 @@ sampleAssumptions, ); await visitor.process(parseResult); - if (visitor.errors.isNotEmpty) { - print('${path.relative(file.path, from: parent.parent.path)}'); - print('${visitor.errors.toString()}'); - } - - return visitor.errors.isEmpty; + return !visitor.hadErrors; } /// Visit a compilation unit and validate the code samples found in dartdoc @@ -131,7 +126,7 @@ final String? sampleAssumptions; final List<CodeSample> samples = []; - final StringBuffer errors = StringBuffer(); + bool hadErrors = false; ValidateCommentCodeSamplesVisitor( this.analysisHelper, @@ -283,6 +278,8 @@ if (errors.isNotEmpty) { print('$filePath:${sample.lineStartOffset}: ${errors.length} errors'); + hadErrors = true; + errors = errors.toList() ..sort( (a, b) => a.offset - b.offset, @@ -381,18 +378,23 @@ final String libraryName; final resourceProvider = OverlayResourceProvider(PhysicalResourceProvider.INSTANCE); + final pathRoot = Platform.isWindows ? r'c:\' : '/'; late AnalysisContextCollection collection; int index = 0; AnalysisHelper(this.libraryName) { + resourceProvider.pathContext; + collection = AnalysisContextCollection( - includedPaths: ['/$libraryName'], + includedPaths: ['$pathRoot$libraryName'], resourceProvider: resourceProvider, ); } Future<SomeResolvedUnitResult> resolveFile(String contents) async { - final samplePath = '/$libraryName/sample_${index++}.dart'; + final samplePath = + '$pathRoot$libraryName${resourceProvider.pathContext.separator}' + 'sample_${index++}.dart'; resourceProvider.setOverlay( samplePath, content: contents,