Skip to content

Update to analyzer 2.7.0, use createMockSdk() and FolderBasedDartSdk. #2845

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Oct 25, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 0 additions & 12 deletions lib/src/io_utils.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,22 +12,10 @@ import 'dart:io' as io;

import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/file_system/physical_file_system.dart';
// ignore: implementation_imports
import 'package:analyzer/src/generated/sdk.dart' show SdkLibrary;
// ignore: implementation_imports
import 'package:analyzer/src/test_utilities/mock_sdk.dart' show MockSdkLibrary;
import 'package:path/path.dart' as path show Context;

Encoding utf8AllowMalformed = Utf8Codec(allowMalformed: true);

bool isSdkLibraryDocumented(SdkLibrary library) {
if (library is MockSdkLibrary) {
// Not implemented in [MockSdkLibrary].
return true;
}
return library.isDocumented;
}

extension PathExtensions on path.Context {
/// Returns a canonicalized path including the home directory in place of
/// tilde references.
Expand Down
4 changes: 1 addition & 3 deletions lib/src/model/library.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import 'package:analyzer/src/dart/element/inheritance_manager3.dart'
show InheritanceManager3;
// ignore: implementation_imports
import 'package:analyzer/src/generated/sdk.dart' show SdkLibrary;
import 'package:dartdoc/src/io_utils.dart';
import 'package:dartdoc/src/model/comment_referable.dart';
import 'package:dartdoc/src/model/model.dart';
import 'package:dartdoc/src/package_meta.dart' show PackageMeta;
Expand Down Expand Up @@ -199,8 +198,7 @@ class Library extends ModelElement with Categorization, TopLevelContainer {
@override
bool get isPublic {
if (!super.isPublic) return false;
if (sdkLib != null &&
(sdkLib.isInternal || !isSdkLibraryDocumented(sdkLib))) {
if (sdkLib != null && (sdkLib.isInternal || !sdkLib.isDocumented)) {
return false;
}
if (config.isLibraryExcluded(name) ||
Expand Down
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ environment:
sdk: '>=2.11.99 <3.0.0'

dependencies:
analyzer: ^2.4.0
analyzer: ^2.7.0
args: ^2.3.0
charcode: ^1.3.1
collection: ^1.15.0
Expand Down
19 changes: 12 additions & 7 deletions test/documentation_comment_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/file_system/memory_file_system.dart';
import 'package:analyzer/src/dart/sdk/sdk.dart';
import 'package:analyzer/src/test_utilities/mock_sdk.dart';
import 'package:dartdoc/src/dartdoc_options.dart';
import 'package:dartdoc/src/model/model.dart';
Expand All @@ -18,8 +19,6 @@ void main() {
MemoryResourceProvider resourceProvider;
PackageMetaProvider packageMetaProvider;
FakePackageConfigProvider packageConfigProvider;
MockSdk mockSdk;
Folder sdkFolder;
Folder projectRoot;
String projectPath;
var packageName = 'my_package';
Expand All @@ -40,16 +39,22 @@ void main() {
group('documentation_comment tests', () {
setUp(() async {
resourceProvider = MemoryResourceProvider();
mockSdk = MockSdk(resourceProvider: resourceProvider);
sdkFolder = utils.writeMockSdkFiles(mockSdk);
final sdkRoot = resourceProvider.getFolder(
resourceProvider.convertPath('/sdk'),
);
createMockSdk(
resourceProvider: resourceProvider,
root: sdkRoot,
);
utils.writeMockSdkFiles(sdkRoot);

packageMetaProvider = PackageMetaProvider(
PubPackageMeta.fromElement,
PubPackageMeta.fromFilename,
PubPackageMeta.fromDir,
resourceProvider,
sdkFolder,
defaultSdk: mockSdk,
sdkRoot,
defaultSdk: FolderBasedDartSdk(resourceProvider, sdkRoot),
messageForMissingPackageMeta:
PubPackageMeta.messageForMissingPackageMeta);
var optionSet = await DartdocOptionSet.fromOptionGenerators(
Expand All @@ -59,7 +64,7 @@ void main() {
// To build the package graph, we always ask package_config for a
// [PackageConfig] for the SDK directory. Put a dummy entry in.
packageConfigProvider.addPackageToConfigFor(
sdkFolder.path, 'analyzer', Uri.file('/sdk/pkg/analyzer/'));
sdkRoot.path, 'analyzer', Uri.file('/sdk/pkg/analyzer/'));

projectRoot = utils.writePackage(
packageName, resourceProvider, packageConfigProvider);
Expand Down
40 changes: 13 additions & 27 deletions test/src/utils.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import 'dart:io';

import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/file_system/memory_file_system.dart';
import 'package:analyzer/src/dart/sdk/sdk.dart';
import 'package:analyzer/src/test_utilities/mock_sdk.dart';
import 'package:dartdoc/src/dartdoc_options.dart';
import 'package:dartdoc/src/markdown_processor.dart';
Expand Down Expand Up @@ -82,50 +83,35 @@ PackageConfigProvider getTestPackageConfigProvider(String sdkPath) {
/// Returns a [PackageMetaProvider] using a [MemoryResourceProvider].
PackageMetaProvider get testPackageMetaProvider {
var resourceProvider = MemoryResourceProvider();
var mockSdk = MockSdk(resourceProvider: resourceProvider);
var sdkFolder = writeMockSdkFiles(mockSdk);
final sdkRoot = resourceProvider.getFolder(
resourceProvider.convertPath('/sdk'),
);
createMockSdk(
resourceProvider: resourceProvider,
root: sdkRoot,
);
writeMockSdkFiles(sdkRoot);

return PackageMetaProvider(
PubPackageMeta.fromElement,
PubPackageMeta.fromFilename,
PubPackageMeta.fromDir,
resourceProvider,
sdkFolder,
defaultSdk: mockSdk,
sdkRoot,
defaultSdk: FolderBasedDartSdk(resourceProvider, sdkRoot),
messageForMissingPackageMeta: PubPackageMeta.messageForMissingPackageMeta,
);
}

/// Writes [mockSdk] to disk at both its original path, and its canonicalized
/// path (they may be different on Windows).
/// Writes additional files for a mock SDK.
///
/// Included is a "version" file and an "api_readme.md" file.
Folder writeMockSdkFiles(MockSdk mockSdk) {
var resourceProvider = mockSdk.resourceProvider;
var pathContext = resourceProvider.pathContext;

// The [MockSdk] only works in non-canonicalized paths, which include
// "C:\sdk", on Windows. However, dartdoc works almost exclusively with
// canonical paths ("c:\sdk"). Copy all MockSdk files to the canonicalized
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice, this is no longer needed?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably. Now createMockSdk writes into the given sdkRoot, and it is where we get this folder is where we should do any normalization.

// path.
for (var l in mockSdk.sdkLibraries) {
var p = l.path;
resourceProvider
.getFile(pathContext.canonicalize(p))
.writeAsStringSync(resourceProvider.getFile(p).readAsStringSync());
}
var sdkFolder = resourceProvider.getFolder(
pathContext.canonicalize(resourceProvider.convertPath(sdkRoot)))
..create();
void writeMockSdkFiles(Folder sdkFolder) {
sdkFolder.getChildAssumingFile('version').writeAsStringSync('2.9.0');
sdkFolder.getChildAssumingFile('api_readme.md').writeAsStringSync(
'Welcome to the [Dart](https://dart.dev/) API reference documentation');

_writeMockSdkBinFiles(sdkFolder);
_writeMockSdkBinFiles(
resourceProvider.getFolder(resourceProvider.convertPath(sdkRoot)));

return sdkFolder;
}

/// Dartdoc has a few indicator files it uses to verify that a directory
Expand Down