From b79be79a0b01cba89da4fba1bd8583de1d700860 Mon Sep 17 00:00:00 2001 From: Parker Lougheed Date: Wed, 12 Jun 2024 23:42:45 -0500 Subject: [PATCH 1/2] Share analysis config between packages --- _analysis_config/lib/analysis_options.yaml | 105 +++++++++++++++++ _analysis_config/pubspec.yaml | 10 ++ analysis_options.yaml | 106 ------------------ dwds/analysis_options.yaml | 73 +----------- dwds/debug_extension/tool/copy_builder.dart | 10 +- .../tool/update_dev_files.dart | 4 +- dwds/debug_extension/web/debug_session.dart | 4 +- dwds/debug_extension/web/logger.dart | 6 +- dwds/lib/src/debugging/debugger.dart | 2 +- dwds/lib/src/debugging/inspector.dart | 2 +- dwds/lib/src/readers/asset_reader.dart | 21 ++-- .../batched_expression_evaluator.dart | 4 +- .../src/services/chrome_proxy_service.dart | 2 +- dwds/lib/src/utilities/sdk_configuration.dart | 4 +- dwds/pubspec.yaml | 2 + dwds/test/evaluate_common.dart | 14 +-- dwds/test/execution_context_test.dart | 2 +- dwds/test/extension_debugger_test.dart | 2 +- dwds/test/fixtures/context.dart | 4 +- dwds/test/fixtures/utilities.dart | 7 +- .../test/instances/class_inspection_test.dart | 4 +- .../instances/common/instance_common.dart | 10 +- .../common/instance_inspection_common.dart | 25 +++-- .../common/patterns_inspection_common.dart | 15 ++- .../common/record_inspection_common.dart | 15 ++- .../common/record_type_inspection_common.dart | 12 +- .../common/type_inspection_common.dart | 19 ++-- dwds/test/metadata/class_test.dart | 2 +- dwds/test/reload_test.dart | 3 +- dwds/test/utilities_test.dart | 2 +- frontend_server_client/analysis_options.yaml | 1 + frontend_server_client/example/vm_client.dart | 12 +- .../example/web_client.dart | 28 ++--- frontend_server_client/lib/src/shared.dart | 18 +-- frontend_server_client/pubspec.yaml | 2 + .../test/example/vm_client_test.dart | 2 +- .../test/example/web_client_test.dart | 2 +- .../test/frontend_server_client_test.dart | 64 +++++------ frontend_server_common/analysis_options.yaml | 1 + .../lib/src/frontend_server_client.dart | 15 ++- frontend_server_common/pubspec.yaml | 4 + test_common/analysis_options.yaml | 14 +-- test_common/pubspec.yaml | 2 + .../test/sdk_asset_generator_test.dart | 2 +- webdev/analysis_options.yaml | 1 + webdev/lib/src/command/configuration.dart | 8 +- webdev/lib/src/daemon/app_domain.dart | 2 +- webdev/pubspec.yaml | 2 + webdev/test/chrome_test.dart | 4 +- webdev/test/installation_test.dart | 50 ++++----- 50 files changed, 340 insertions(+), 385 deletions(-) create mode 100644 _analysis_config/lib/analysis_options.yaml create mode 100644 _analysis_config/pubspec.yaml delete mode 100644 analysis_options.yaml create mode 100644 frontend_server_client/analysis_options.yaml create mode 100644 frontend_server_common/analysis_options.yaml create mode 100644 webdev/analysis_options.yaml diff --git a/_analysis_config/lib/analysis_options.yaml b/_analysis_config/lib/analysis_options.yaml new file mode 100644 index 000000000..e61eac31a --- /dev/null +++ b/_analysis_config/lib/analysis_options.yaml @@ -0,0 +1,105 @@ +# Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file +# for details. All rights reserved. Use of this source code is governed by a +# BSD-style license that can be found in the LICENSE file. + +include: package:lints/recommended.yaml + +analyzer: +# language: +# strict-casts: true + errors: + dead_code: error + unused_element: error + unused_import: error + unused_local_variable: error + +linter: + rules: + - always_declare_return_types + - avoid_classes_with_only_static_members + - avoid_returning_this + - avoid_unused_constructor_parameters + - avoid_void_async + - cancel_subscriptions + - directives_ordering + - join_return_with_assignment + - library_names + - literal_only_boolean_expressions + - package_api_docs + - package_prefixed_library_names + # - prefer_final_locals + # - prefer_relative_imports + - prefer_single_quotes + - prefer_void_to_null + - test_types_in_equals + - throw_in_finally + - omit_local_variable_types + - only_throw_errors + - unawaited_futures + - unnecessary_lambdas + - unnecessary_parenthesis + - unnecessary_statements + +# TODO(https://github.com/dart-lang/webdev/issues/2053): Enable commented-out rules with fixes. +dart_code_metrics: + metrics: + # cyclomatic-complexity: 20 # Enable. + # number-of-parameters: 5 # Enable. + # maximum-nesting-level: 5 # Enable. + metrics-exclude: + - test/** + rules: + # - arguments-ordering + # - avoid-banned-imports + - avoid-cascade-after-if-null + - avoid-collection-methods-with-unrelated-types + # - avoid-double-slash-imports + - avoid-duplicate-exports + # - avoid-dynamic + # - avoid-global-state # Enable. + # - avoid-ignoring-return-values + # - avoid-late-keyword + - avoid-missing-enum-constant-in-map + - avoid-nested-conditional-expressions + - avoid-non-ascii-symbols + # - avoid-non-null-assertion # Enable. + # - avoid-passing-async-when-sync-expected # Enable. + - avoid-redundant-async + # - avoid-throw-in-catch-block # Enable. + # - avoid-top-level-members-in-tests + # - avoid-unnecessary-conditionals + - avoid-unnecessary-type-assertions + - avoid-unnecessary-type-casts + - avoid-unrelated-type-assertions + - avoid-unused-parameters + # - ban-name + - binary-expression-operand-order + - double-literal-format + # - format-comment # Enable. + # - list-all-equatable-fields + # - member-ordering # Enable. + # - missing-test-assertion + # - new-line-before-return + - no-boolean-literal-compare + # - no-empty-block # Enable. + # - no-equal-arguments + - no-equal-then-else + # - no-magic-number + # - no-object-declaration + # - prefer-async-await # Enable. + # - prefer-commenting-analyzer-ignores # Enable. + # - prefer-conditional-expressions + # - prefer-correct-identifier-length + # - prefer-correct-test-file-name # Enable. + - prefer-correct-type-name + - prefer-enums-by-name + # - prefer-first + # - prefer-immediate-return # Enable. + - prefer-iterable-of + - prefer-last + # - prefer-match-file-name + # - prefer-moving-to-variable: # Enable. + # allow-duplicated-chains: 2 + # - prefer-static-class + # - prefer-trailing-comma + # - tag-name diff --git a/_analysis_config/pubspec.yaml b/_analysis_config/pubspec.yaml new file mode 100644 index 000000000..9f85de5db --- /dev/null +++ b/_analysis_config/pubspec.yaml @@ -0,0 +1,10 @@ +name: analysis_config +description: The shared analysis configuration for the webdev packages. + +publish_to: none + +environment: + sdk: ^3.1.0 + +dependencies: + lints: ^4.0.0 diff --git a/analysis_options.yaml b/analysis_options.yaml deleted file mode 100644 index 3e557db88..000000000 --- a/analysis_options.yaml +++ /dev/null @@ -1,106 +0,0 @@ -analyzer: - language: - strict-casts: true - errors: - dead_code: error - unused_element: error - unused_import: error - unused_local_variable: error - -linter: - rules: - - always_declare_return_types - - annotate_overrides - - avoid_classes_with_only_static_members - - avoid_empty_else - - avoid_function_literals_in_foreach_calls - - avoid_init_to_null - - avoid_null_checks_in_equality_operators - - avoid_relative_lib_imports - - avoid_renaming_method_parameters - - avoid_return_types_on_setters - - avoid_returning_null_for_void - - avoid_returning_this - - avoid_shadowing_type_parameters - - avoid_single_cascade_in_expression_statements - - avoid_types_as_parameter_names - - avoid_unused_constructor_parameters - - await_only_futures - - camel_case_extensions - - camel_case_types - - cancel_subscriptions - - collection_methods_unrelated_type - - comment_references - - constant_identifier_names - - control_flow_in_finally - - curly_braces_in_flow_control_structures - - depend_on_referenced_packages - - directives_ordering - - empty_catches - - empty_constructor_bodies - - empty_statements - - exhaustive_cases - - file_names - - hash_and_equals - - implementation_imports - - join_return_with_assignment - - library_names - - library_prefixes - - literal_only_boolean_expressions - - no_duplicate_case_values - - non_constant_identifier_names - - null_closures - - omit_local_variable_types - - only_throw_errors - - overridden_fields - - package_api_docs - - package_names - - package_prefixed_library_names - - prefer_adjacent_string_concatenation - - prefer_collection_literals - - prefer_conditional_assignment - - prefer_const_constructors - - prefer_contains - - prefer_final_fields - - prefer_for_elements_to_map_fromIterable - - prefer_function_declarations_over_variables - - prefer_generic_function_type_aliases - - prefer_if_null_operators - - prefer_initializing_formals - - prefer_inlined_adds - - prefer_interpolation_to_compose_strings - - prefer_is_empty - - prefer_is_not_empty - - prefer_is_not_operator - - prefer_iterable_whereType - - prefer_null_aware_operators - - prefer_relative_imports - - prefer_single_quotes - - prefer_spread_collections - - prefer_typing_uninitialized_variables - - prefer_void_to_null - - provide_deprecation_message - - recursive_getters - - slash_for_doc_comments - - test_types_in_equals - - throw_in_finally - - type_init_formals - - unawaited_futures - - unnecessary_brace_in_string_interps - - unnecessary_const - - unnecessary_getters_setters - - unnecessary_lambdas - - unnecessary_new - - unnecessary_null_aware_assignments - - unnecessary_null_in_if_null_operators - - unnecessary_overrides - - unnecessary_parenthesis - - unnecessary_statements - - unnecessary_string_escapes - - unnecessary_string_interpolations - - unnecessary_this - - unrelated_type_equality_checks - - use_function_type_syntax_for_parameters - - use_rethrow_when_possible - - valid_regexps - - void_checks diff --git a/dwds/analysis_options.yaml b/dwds/analysis_options.yaml index e01bd3b72..e405a26d4 100644 --- a/dwds/analysis_options.yaml +++ b/dwds/analysis_options.yaml @@ -1,7 +1,4 @@ -# This file contains the analysis options used for code in the webdev -# repository. - -include: package:lints/recommended.yaml +include: package:analysis_config/analysis_options.yaml analyzer: exclude: @@ -13,73 +10,5 @@ analyzer: linter: rules: - always_use_package_imports - - avoid_void_async - - directives_ordering - prefer_final_locals - require_trailing_commas - - unawaited_futures - - unnecessary_lambdas - -# TODO(https://github.com/dart-lang/webdev/issues/2053): Enable commented-out rules with fixes. -dart_code_metrics: - metrics: - # cyclomatic-complexity: 20 # Enable. - # number-of-parameters: 5 # Enable. - # maximum-nesting-level: 5 # Enable. - metrics-exclude: - - test/** - rules: - # - arguments-ordering - # - avoid-banned-imports - - avoid-cascade-after-if-null - - avoid-collection-methods-with-unrelated-types - # - avoid-double-slash-imports - - avoid-duplicate-exports - # - avoid-dynamic - # - avoid-global-state # Enable. - # - avoid-ignoring-return-values - # - avoid-late-keyword - - avoid-missing-enum-constant-in-map - - avoid-nested-conditional-expressions - - avoid-non-ascii-symbols - # - avoid-non-null-assertion # Enable. - # - avoid-passing-async-when-sync-expected # Enable. - - avoid-redundant-async - # - avoid-throw-in-catch-block # Enable. - # - avoid-top-level-members-in-tests - # - avoid-unnecessary-conditionals - - avoid-unnecessary-type-assertions - - avoid-unnecessary-type-casts - - avoid-unrelated-type-assertions - - avoid-unused-parameters - # - ban-name - - binary-expression-operand-order - - double-literal-format - # - format-comment # Enable. - # - list-all-equatable-fields - # - member-ordering # Enable. - # - missing-test-assertion - # - new-line-before-return - - no-boolean-literal-compare - # - no-empty-block # Enable. - # - no-equal-arguments - - no-equal-then-else - # - no-magic-number - # - no-object-declaration - # - prefer-async-await # Enable. - # - prefer-commenting-analyzer-ignores # Enable. - # - prefer-conditional-expressions - # - prefer-correct-identifier-length - # - prefer-correct-test-file-name # Enable. - - prefer-correct-type-name - - prefer-enums-by-name - # - prefer-first - # - prefer-immediate-return # Enable. - - prefer-iterable-of - - prefer-last - # - prefer-match-file-name - # - prefer-moving-to-variable: # Enable. - # allow-duplicated-chains: 2 - # - prefer-static-class - # - prefer-trailing-comma - # - tag-name diff --git a/dwds/debug_extension/tool/copy_builder.dart b/dwds/debug_extension/tool/copy_builder.dart index 4a5e5d04f..112898818 100644 --- a/dwds/debug_extension/tool/copy_builder.dart +++ b/dwds/debug_extension/tool/copy_builder.dart @@ -10,11 +10,11 @@ Builder copyBuilder(_) => _CopyBuilder(); class _CopyBuilder extends Builder { @override Map> get buildExtensions => { - "web/{{}}.dart.js": ["compiled/{{}}.dart.js"], - "web/static_assets/{{}}.png": ["compiled/static_assets/{{}}.png"], - "web/static_assets/{{}}.html": ["compiled/static_assets/{{}}.html"], - "web/static_assets/{{}}.css": ["compiled/static_assets/{{}}.css"], - "web/manifest.json": ["compiled/manifest.json"], + 'web/{{}}.dart.js': ['compiled/{{}}.dart.js'], + 'web/static_assets/{{}}.png': ['compiled/static_assets/{{}}.png'], + 'web/static_assets/{{}}.html': ['compiled/static_assets/{{}}.html'], + 'web/static_assets/{{}}.css': ['compiled/static_assets/{{}}.css'], + 'web/manifest.json': ['compiled/manifest.json'], }; @override diff --git a/dwds/debug_extension/tool/update_dev_files.dart b/dwds/debug_extension/tool/update_dev_files.dart index 1659c5c15..cc1bc1756 100644 --- a/dwds/debug_extension/tool/update_dev_files.dart +++ b/dwds/debug_extension/tool/update_dev_files.dart @@ -75,8 +75,8 @@ String _newKeyValue({ extension LeftPaddingExtension on String { String leftPadding() { - String padding = ''; - int idx = 0; + var padding = ''; + var idx = 0; while (idx < length && this[idx] == ' ') { padding += ' '; idx++; diff --git a/dwds/debug_extension/web/debug_session.dart b/dwds/debug_extension/web/debug_session.dart index f0ca1c733..4da1146b3 100644 --- a/dwds/debug_extension/web/debug_session.dart +++ b/dwds/debug_extension/web/debug_session.dart @@ -246,7 +246,7 @@ void _registerDebugEventListeners() { ); } -_enableExecutionContextReporting(int tabId) { +void _enableExecutionContextReporting(int tabId) { // Runtime.enable enables reporting of execution contexts creation by means of // executionContextCreated event. When the reporting gets enabled the event // will be sent immediately for each existing execution context: @@ -299,7 +299,7 @@ Future _maybeConnectToDwds(int tabId, Object? params) async { final context = json.decode(JSON.stringify(params))['context']; final contextOrigin = context['origin'] as String?; if (contextOrigin == null) return; - if (contextOrigin.contains(('chrome-extension:'))) return; + if (contextOrigin.contains('chrome-extension:')) return; final debugInfo = await fetchStorageObject( type: StorageObject.debugInfo, tabId: tabId, diff --git a/dwds/debug_extension/web/logger.dart b/dwds/debug_extension/web/logger.dart index b546d8b79..fdb708267 100644 --- a/dwds/debug_extension/web/logger.dart +++ b/dwds/debug_extension/web/logger.dart @@ -15,7 +15,7 @@ enum _LogLevel { error, } -debugLog( +void debugLog( String msg, { String? prefix, bool verbose = false, @@ -23,7 +23,7 @@ debugLog( _log(msg, prefix: prefix, verbose: verbose); } -debugWarn( +void debugWarn( String msg, { String? prefix, bool verbose = false, @@ -31,7 +31,7 @@ debugWarn( _log(msg, prefix: prefix, level: _LogLevel.warn, verbose: verbose); } -debugError( +void debugError( String msg, { String? prefix, bool verbose = false, diff --git a/dwds/lib/src/debugging/debugger.dart b/dwds/lib/src/debugging/debugger.dart index 678448569..321357120 100644 --- a/dwds/lib/src/debugging/debugger.dart +++ b/dwds/lib/src/debugging/debugger.dart @@ -443,7 +443,7 @@ class Debugger extends Domain { // TODO(#700): Understand when this can happen and have a better fix. if (script == null) return null; - final functionName = _prettifyMember((frame.functionName).split('.').last); + final functionName = _prettifyMember(frame.functionName.split('.').last); final codeRefName = functionName.isEmpty ? '' : functionName; final dartFrame = Frame( diff --git a/dwds/lib/src/debugging/inspector.dart b/dwds/lib/src/debugging/inspector.dart index b167ee06d..4bde89f75 100644 --- a/dwds/lib/src/debugging/inspector.dart +++ b/dwds/lib/src/debugging/inspector.dart @@ -573,7 +573,7 @@ class AppInspector implements AppInspectorInterface { int? count, int? length, }) async { - String rangeId = objectId; + var rangeId = objectId; // Ignore offset/count if there is no length: if (length != null) { if (_isEmptyRange(offset: offset, count: count, length: length)) { diff --git a/dwds/lib/src/readers/asset_reader.dart b/dwds/lib/src/readers/asset_reader.dart index a6a6fa21e..0b5ace038 100644 --- a/dwds/lib/src/readers/asset_reader.dart +++ b/dwds/lib/src/readers/asset_reader.dart @@ -67,21 +67,20 @@ class PackageUriMapper { if (!useDebuggerModuleNames) { return defaultServerPath; } - final Uri? resolvedUri = packageConfig.resolve(packageUri); + final resolvedUri = packageConfig.resolve(packageUri); if (resolvedUri == null) { _logger.severe('Cannot resolve package uri $packageUri'); return defaultServerPath; } - final Package? package = packageConfig.packageOf(resolvedUri); + final package = packageConfig.packageOf(resolvedUri); if (package == null) { _logger.severe('Cannot find package for package uri $packageUri'); return defaultServerPath; } - final Uri root = package.root; - final String relativeUrl = - resolvedUri.toString().replaceFirst('$root', ''); - final String? relativeRoot = _getRelativeRoot(root); - final String ret = relativeRoot == null + final root = package.root; + final relativeUrl = resolvedUri.toString().replaceFirst('$root', ''); + final relativeRoot = _getRelativeRoot(root); + final ret = relativeRoot == null ? 'packages/$relativeUrl' : 'packages/$relativeRoot/$relativeUrl'; return ret; @@ -99,11 +98,11 @@ class PackageUriMapper { return packageConfig .resolve(Uri(scheme: 'package', pathSegments: segments.skip(1))); } - final String relativeRoot = segments.skip(1).first; - final String relativeUrl = segments.skip(2).join('/'); - final Package package = packageConfig.packages + final relativeRoot = segments.skip(1).first; + final relativeUrl = segments.skip(2).join('/'); + final package = packageConfig.packages .firstWhere((Package p) => _getRelativeRoot(p.root) == relativeRoot); - final Uri resolvedUri = package.root.resolve(relativeUrl); + final resolvedUri = package.root.resolve(relativeUrl); return resolvedUri; } diff --git a/dwds/lib/src/services/batched_expression_evaluator.dart b/dwds/lib/src/services/batched_expression_evaluator.dart index b5e56c2af..48467b031 100644 --- a/dwds/lib/src/services/batched_expression_evaluator.dart +++ b/dwds/lib/src/services/batched_expression_evaluator.dart @@ -74,7 +74,7 @@ class BatchedExpressionEvaluator extends ExpressionEvaluator { String? libraryUri; String? isolateId; Map? scope; - List currentRequests = []; + var currentRequests = []; for (var request in requests) { libraryUri ??= request.libraryUri; @@ -127,7 +127,7 @@ class BatchedExpressionEvaluator extends ExpressionEvaluator { _logger.fine('Evaluating batch of expressions $batchedExpression'); - final RemoteObject list = await super.evaluateExpression( + final list = await super.evaluateExpression( first.isolateId, first.libraryUri, batchedExpression, diff --git a/dwds/lib/src/services/chrome_proxy_service.dart b/dwds/lib/src/services/chrome_proxy_service.dart index cbf71ab6d..b32b8d19c 100644 --- a/dwds/lib/src/services/chrome_proxy_service.dart +++ b/dwds/lib/src/services/chrome_proxy_service.dart @@ -586,7 +586,7 @@ ${globalToolConfiguration.loadStrategy.loadModuleSnippet}("dart_sdk").developer. id: createId(), ); } - return (await _instanceRef(result)); + return await _instanceRef(result); } on RPCError catch (_) { rethrow; } catch (e, s) { diff --git a/dwds/lib/src/utilities/sdk_configuration.dart b/dwds/lib/src/utilities/sdk_configuration.dart index dec0d8263..dcac68659 100644 --- a/dwds/lib/src/utilities/sdk_configuration.dart +++ b/dwds/lib/src/utilities/sdk_configuration.dart @@ -157,8 +157,8 @@ class SdkConfiguration { void validateSoundSummaries({ FileSystem fileSystem = const LocalFileSystem(), }) { - if ((soundSdkSummaryPath == null || - !fileSystem.file(soundSdkSummaryPath).existsSync())) { + if (soundSdkSummaryPath == null || + !fileSystem.file(soundSdkSummaryPath).existsSync()) { throw InvalidSdkConfigurationException( 'Sdk summary $soundSdkSummaryPath does not exist', ); diff --git a/dwds/pubspec.yaml b/dwds/pubspec.yaml index d0c4473cc..d39684cae 100644 --- a/dwds/pubspec.yaml +++ b/dwds/pubspec.yaml @@ -39,6 +39,8 @@ dependencies: webkit_inspection_protocol: ^1.0.1 dev_dependencies: + analysis_config: + path: ../_analysis_config args: ^2.4.2 build: ^2.3.1 build_daemon: ^4.0.0 diff --git a/dwds/test/evaluate_common.dart b/dwds/test/evaluate_common.dart index 6fea4578e..5c34e3eae 100644 --- a/dwds/test/evaluate_common.dart +++ b/dwds/test/evaluate_common.dart @@ -143,7 +143,7 @@ void testAll({ } catch (_) {} }); - onBreakPoint(script, bpId, body) => onBp( + Future onBreakPoint(script, bpId, body) => onBp( stream, isolateId, script, @@ -151,7 +151,7 @@ void testAll({ body, ); - evaluateInFrame(frame, expr, {scope}) async => + Future evaluateInFrame(frame, expr, {scope}) async => await context.service.evaluateInFrame( isolateId, frame, @@ -159,7 +159,7 @@ void testAll({ scope: scope, ); - getInstanceRef(frame, expr, {scope}) async { + Future getInstanceRef(frame, expr, {scope}) async { final result = await evaluateInFrame( frame, expr, @@ -169,7 +169,7 @@ void testAll({ return result as InstanceRef; } - getInstance(InstanceRef ref) async => + Future getInstance(InstanceRef ref) async => await context.service.getObject(isolateId, ref.id!) as Instance; test('with scope', () async { @@ -583,7 +583,7 @@ void testAll({ reason: 'Failed to receive and async frame error in $attempt attempts', ); - await (Future.delayed(const Duration(milliseconds: 10))); + await Future.delayed(const Duration(milliseconds: 10)); attempt++; } while (error is! ErrorRef); } finally { @@ -654,7 +654,7 @@ void testAll({ tearDown(() async {}); - evaluate( + Future evaluate( targetId, expr, { scope, @@ -666,7 +666,7 @@ void testAll({ scope: scope, ); - getInstanceRef( + Future getInstanceRef( targetId, expr, { scope, diff --git a/dwds/test/execution_context_test.dart b/dwds/test/execution_context_test.dart index a0a18210d..3a3ab7b91 100644 --- a/dwds/test/execution_context_test.dart +++ b/dwds/test/execution_context_test.dart @@ -20,7 +20,7 @@ import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart'; import 'fixtures/fakes.dart'; void main() async { - final bool debug = false; + final debug = false; group('ExecutionContext', () { setUpAll(() { diff --git a/dwds/test/extension_debugger_test.dart b/dwds/test/extension_debugger_test.dart index 8d2b7c6ab..9cd5d5f27 100644 --- a/dwds/test/extension_debugger_test.dart +++ b/dwds/test/extension_debugger_test.dart @@ -169,7 +169,7 @@ void main() async { // Wait for it to be closed: await extensionDebugger.onClose.first; // Try to send an event: - callToSendCommand() => extensionDebugger.sendCommand( + Future callToSendCommand() => extensionDebugger.sendCommand( 'Debugger.setBreakpoint', params: { 'location': {'scriptId': '555', 'lineNumber': 28}, diff --git a/dwds/test/fixtures/context.dart b/dwds/test/fixtures/context.dart index 4932bba25..31ca1f043 100644 --- a/dwds/test/fixtures/context.dart +++ b/dwds/test/fixtures/context.dart @@ -213,8 +213,8 @@ class TestContext { AssetReader assetReader; Stream buildResults; LoadStrategy loadStrategy; - String basePath = ''; - String filePathToServe = project.filePathToServe; + var basePath = ''; + var filePathToServe = project.filePathToServe; _port = await findUnusedPort(); switch (testSettings.compilationMode) { diff --git a/dwds/test/fixtures/utilities.dart b/dwds/test/fixtures/utilities.dart index 07193375c..8f993cef6 100644 --- a/dwds/test/fixtures/utilities.dart +++ b/dwds/test/fixtures/utilities.dart @@ -298,10 +298,7 @@ class TestBuildSettings extends BuildSettings { class TestCompilerOptions extends CompilerOptions { TestCompilerOptions({ required super.canaryFeatures, - required List experiments, + super.experiments = const [], super.moduleFormat = ModuleFormat.amd, - }) : super( - soundNullSafety: true, - experiments: const [], - ); + }) : super(soundNullSafety: true); } diff --git a/dwds/test/instances/class_inspection_test.dart b/dwds/test/instances/class_inspection_test.dart index 3ce756629..6f6076e1e 100644 --- a/dwds/test/instances/class_inspection_test.dart +++ b/dwds/test/instances/class_inspection_test.dart @@ -33,7 +33,7 @@ void main() { late String isolateId; late ScriptRef mainScript; - onBreakPoint(breakPointId, body) => testInspector.onBreakPoint( + Future onBreakPoint(breakPointId, body) => testInspector.onBreakPoint( stream, isolateId, mainScript, @@ -41,7 +41,7 @@ void main() { body, ); - getObject(instanceId) => service.getObject(isolateId, instanceId); + Future getObject(instanceId) => service.getObject(isolateId, instanceId); group('Class |', () { tearDownAll(provider.dispose); diff --git a/dwds/test/instances/common/instance_common.dart b/dwds/test/instances/common/instance_common.dart index 7bb185f64..f4186f2fa 100644 --- a/dwds/test/instances/common/instance_common.dart +++ b/dwds/test/instances/common/instance_common.dart @@ -48,8 +48,8 @@ void runTypeSystemVerificationTests({ String libraryName(CompilationMode compilationMode) => compilationMode == CompilationMode.frontendServer - ? "example/scopes/main.dart" - : "example/scopes/main"; + ? 'example/scopes/main.dart' + : 'example/scopes/main'; String libraryVariableTypeExpression( String variable, @@ -121,8 +121,8 @@ void runTests({ String libraryName(CompilationMode compilationMode) => compilationMode == CompilationMode.frontendServer - ? "example/scopes/main.dart" - : "example/scopes/main"; + ? 'example/scopes/main.dart' + : 'example/scopes/main'; String libraryVariableExpression( String variable, @@ -135,7 +135,7 @@ void runTests({ String newInterceptorsExpression(String type) => 'new (require("dart_sdk")._interceptors.$type).new()'; - final String newDartError = 'new (require("dart_sdk").dart).DartError'; + final newDartError = 'new (require("dart_sdk").dart).DartError'; /// A reference to the the variable `libraryPublicFinal`, an instance of /// `MyTestClass`. diff --git a/dwds/test/instances/common/instance_inspection_common.dart b/dwds/test/instances/common/instance_inspection_common.dart index 6475555ce..099d326cf 100644 --- a/dwds/test/instances/common/instance_inspection_common.dart +++ b/dwds/test/instances/common/instance_inspection_common.dart @@ -28,7 +28,7 @@ void runTests({ final testInspector = TestInspector(context); - onBreakPoint(breakPointId, body) => testInspector.onBreakPoint( + Future onBreakPoint(breakPointId, body) => testInspector.onBreakPoint( stream, isolateId, mainScript, @@ -36,16 +36,21 @@ void runTests({ body, ); - getInstance(frame, expression) => + Future getInstance(frame, expression) => testInspector.getInstance(isolateId, frame, expression); - getObject(instanceId) => service.getObject(isolateId, instanceId); + Future getObject(instanceId) => service.getObject(isolateId, instanceId); - getInstanceRef(frame, expression) => + Future getInstanceRef(frame, expression) => testInspector.getInstanceRef(isolateId, frame, expression); - getFields(instanceRef, {offset, count}) => testInspector - .getFields(isolateId, instanceRef, offset: offset, count: count); + Future> getFields(instanceRef, {offset, count}) => + testInspector.getFields( + isolateId, + instanceRef, + offset: offset, + count: count, + ); group('$compilationMode |', () { setUpAll(() async { @@ -223,12 +228,12 @@ void runTests({ ); expect( - await getInstance(frame, r"list[1]"), + await getInstance(frame, r'list[1]'), matchPrimitiveInstance(kind: InstanceKind.kDouble, value: 1), ); expect( - await getInstance(frame, r"list[2]"), + await getInstance(frame, r'list[2]'), matchPrimitiveInstance(kind: InstanceKind.kDouble, value: 2), ); }); @@ -327,11 +332,11 @@ void runTests({ await onBreakPoint('printSet', (event) async { final frame = event.topFrame!.index!; expect( - await getInstance(frame, r"mySet.first"), + await getInstance(frame, r'mySet.first'), matchPrimitiveInstance(kind: InstanceKind.kDouble, value: 1), ); expect( - await getInstance(frame, r"mySet.last"), + await getInstance(frame, r'mySet.last'), matchPrimitiveInstance(kind: InstanceKind.kDouble, value: 7), ); }); diff --git a/dwds/test/instances/common/patterns_inspection_common.dart b/dwds/test/instances/common/patterns_inspection_common.dart index 888e5fff2..7d66103eb 100644 --- a/dwds/test/instances/common/patterns_inspection_common.dart +++ b/dwds/test/instances/common/patterns_inspection_common.dart @@ -26,7 +26,7 @@ void runTests({ late String isolateId; late ScriptRef mainScript; - onBreakPoint(breakPointId, body) => testInspector.onBreakPoint( + Future onBreakPoint(breakPointId, body) => testInspector.onBreakPoint( stream, isolateId, mainScript, @@ -34,13 +34,18 @@ void runTests({ body, ); - getInstanceRef(frame, expression) => + Future getInstanceRef(frame, expression) => testInspector.getInstanceRef(isolateId, frame, expression); - getFields(instanceRef, {offset, count}) => testInspector - .getFields(isolateId, instanceRef, offset: offset, count: count); + Future> getFields(instanceRef, {offset, count}) => + testInspector.getFields( + isolateId, + instanceRef, + offset: offset, + count: count, + ); - getFrameVariables(Frame frame) => + Future> getFrameVariables(Frame frame) => testInspector.getFrameVariables(isolateId, frame); group('$compilationMode |', () { diff --git a/dwds/test/instances/common/record_inspection_common.dart b/dwds/test/instances/common/record_inspection_common.dart index 5c40c77f2..a5e6e837d 100644 --- a/dwds/test/instances/common/record_inspection_common.dart +++ b/dwds/test/instances/common/record_inspection_common.dart @@ -26,7 +26,7 @@ void runTests({ late String isolateId; late ScriptRef mainScript; - onBreakPoint(breakPointId, body) => testInspector.onBreakPoint( + Future onBreakPoint(breakPointId, body) => testInspector.onBreakPoint( stream, isolateId, mainScript, @@ -34,15 +34,20 @@ void runTests({ body, ); - getInstance(frame, expression) => + Future getInstance(frame, expression) => testInspector.getInstance(isolateId, frame, expression); - getObject(instanceId) => service.getObject(isolateId, instanceId); + Future getObject(instanceId) => service.getObject(isolateId, instanceId); - getInstanceRef(frame, expression) => + Future getInstanceRef(frame, expression) => testInspector.getInstanceRef(isolateId, frame, expression); - getFields(instanceRef, {offset, count, depth = -1}) => + Future> getFields( + instanceRef, { + offset, + count, + depth = -1, + }) => testInspector.getFields( isolateId, instanceRef, diff --git a/dwds/test/instances/common/record_type_inspection_common.dart b/dwds/test/instances/common/record_type_inspection_common.dart index b55a8acb2..2d51bee26 100644 --- a/dwds/test/instances/common/record_type_inspection_common.dart +++ b/dwds/test/instances/common/record_type_inspection_common.dart @@ -27,7 +27,7 @@ void runTests({ late String isolateId; late ScriptRef mainScript; - onBreakPoint(breakPointId, body) => testInspector.onBreakPoint( + Future onBreakPoint(breakPointId, body) => testInspector.onBreakPoint( stream, isolateId, mainScript, @@ -35,18 +35,18 @@ void runTests({ body, ); - getObject(instanceId) => service.getObject(isolateId, instanceId); + Future getObject(instanceId) => service.getObject(isolateId, instanceId); - getInstanceRef(frame, expression) => + Future getInstanceRef(frame, expression) => testInspector.getInstanceRef(isolateId, frame, expression); - getDisplayedFields(InstanceRef ref) => + Future> getDisplayedFields(InstanceRef ref) => testInspector.getDisplayedFields(isolateId, ref); - getDisplayedGetters(InstanceRef ref) => + Future> getDisplayedGetters(InstanceRef ref) => testInspector.getDisplayedGetters(isolateId, ref); - getElements(String instanceId) => + Future> getElements(String instanceId) => testInspector.getElements(isolateId, instanceId); final matchDisplayedTypeObjectGetters = { diff --git a/dwds/test/instances/common/type_inspection_common.dart b/dwds/test/instances/common/type_inspection_common.dart index e1bdccbbf..f845567ae 100644 --- a/dwds/test/instances/common/type_inspection_common.dart +++ b/dwds/test/instances/common/type_inspection_common.dart @@ -28,7 +28,7 @@ void runTests({ late String isolateId; late ScriptRef mainScript; - onBreakPoint(breakPointId, body) => testInspector.onBreakPoint( + Future onBreakPoint(breakPointId, body) => testInspector.onBreakPoint( stream, isolateId, mainScript, @@ -36,18 +36,23 @@ void runTests({ body, ); - getObject(instanceId) => service.getObject(isolateId, instanceId); + Future getObject(instanceId) => service.getObject(isolateId, instanceId); - getDisplayedFields(instanceRef) => + Future> getDisplayedFields(instanceRef) => testInspector.getDisplayedFields(isolateId, instanceRef); - getDisplayedGetters(instanceRef) => + Future> getDisplayedGetters(instanceRef) => testInspector.getDisplayedGetters(isolateId, instanceRef); - getInstanceRef(frame, expression) => + Future getInstanceRef(frame, expression) => testInspector.getInstanceRef(isolateId, frame, expression); - getFields(instanceRef, {offset, count, depth = -1}) => + Future> getFields( + instanceRef, { + offset, + count, + depth = -1, + }) => testInspector.getFields( isolateId, instanceRef, @@ -56,7 +61,7 @@ void runTests({ depth: depth, ); - getElements(String instanceId) => + Future> getElements(String instanceId) => testInspector.getElements(isolateId, instanceId); final matchTypeObjectFields = {}; diff --git a/dwds/test/metadata/class_test.dart b/dwds/test/metadata/class_test.dart index 8b3a306d6..bc837274b 100644 --- a/dwds/test/metadata/class_test.dart +++ b/dwds/test/metadata/class_test.dart @@ -10,7 +10,7 @@ import 'package:test/test.dart'; void main() { test('Gracefully handles invalid length objects', () async { - createMetadata(dynamic length) => ClassMetaData( + ClassMetaData createMetadata(dynamic length) => ClassMetaData( length: length, runtimeKind: RuntimeObjectKind.object, classRef: classRefForUnknown, diff --git a/dwds/test/reload_test.dart b/dwds/test/reload_test.dart index 2f4544a41..1401da572 100644 --- a/dwds/test/reload_test.dart +++ b/dwds/test/reload_test.dart @@ -296,8 +296,7 @@ void main() { var isolate = await client.getIsolate(isolateId); var library = isolate.rootLib!.uri!; - final String callback = - '(_, __) async => ServiceExtensionResponse.result("")'; + final callback = '(_, __) async => ServiceExtensionResponse.result("")'; await client.evaluate( isolateId, diff --git a/dwds/test/utilities_test.dart b/dwds/test/utilities_test.dart index f8ff4a306..c4eb3ffa6 100644 --- a/dwds/test/utilities_test.dart +++ b/dwds/test/utilities_test.dart @@ -67,7 +67,7 @@ void main() { try { await wrapInErrorHandlerAsync('exceptionCallback', exceptionCallback); - fail("RPCError not thrown."); + fail('RPCError not thrown.'); } catch (error) { expect( error, diff --git a/frontend_server_client/analysis_options.yaml b/frontend_server_client/analysis_options.yaml new file mode 100644 index 000000000..1167fdd9f --- /dev/null +++ b/frontend_server_client/analysis_options.yaml @@ -0,0 +1 @@ +include: package:analysis_config/analysis_options.yaml diff --git a/frontend_server_client/example/vm_client.dart b/frontend_server_client/example/vm_client.dart index a6cb3815c..303337da5 100644 --- a/frontend_server_client/example/vm_client.dart +++ b/frontend_server_client/example/vm_client.dart @@ -18,7 +18,7 @@ void main(List args) async { throw ArgumentError('No command line args are supported'); } - var client = await FrontendServerClient.start( + final client = await FrontendServerClient.start( 'org-dartlang-root:///$app', outputDill, p.join(sdkDir, 'lib', '_internal', 'vm_platform_strong.dill'), @@ -46,7 +46,7 @@ void main(List args) async { } if (line.startsWith( 'The Dart DevTools debugger and profiler is available at:')) { - var observatoryUri = + final observatoryUri = '${line.split(' ').last.replaceFirst('http', 'ws')}ws'; vmServiceCompleter.complete(vmServiceConnectUri(observatoryUri)); } @@ -62,9 +62,9 @@ void main(List args) async { await sawHelloWorld.future; _print('editing $app'); - var appFile = File(app); - var originalContent = await appFile.readAsString(); - var newContent = originalContent.replaceFirst('hello', 'goodbye'); + final appFile = File(app); + final originalContent = await appFile.readAsString(); + final newContent = originalContent.replaceFirst('hello', 'goodbye'); await appFile.writeAsString(newContent); _print('recompiling $app with edits'); @@ -72,7 +72,7 @@ void main(List args) async { client.accept(); _print('done recompiling $app'); _print('reloading $app'); - var vm = await vmService.getVM(); + final vm = await vmService.getVM(); await vmService.reloadSources(vm.isolates!.first.id!, rootLibUri: result.dillOutput!); diff --git a/frontend_server_client/example/web_client.dart b/frontend_server_client/example/web_client.dart index f6f9c9145..cbbe257d2 100644 --- a/frontend_server_client/example/web_client.dart +++ b/frontend_server_client/example/web_client.dart @@ -21,7 +21,7 @@ void main(List args) async { } _print('compiling the dart sdk'); - var sdkCompileResult = await Process.run(Platform.resolvedExecutable, [ + final sdkCompileResult = await Process.run(Platform.resolvedExecutable, [ p.join(sdkDir, 'bin', 'snapshots', 'dartdevc.dart.snapshot'), '--multi-root-scheme=org-dartlang-sdk', '--modules=amd', @@ -39,7 +39,7 @@ void main(List args) async { } _print('starting frontend server'); - var client = await DartDevcFrontendServerClient.start( + final client = await DartDevcFrontendServerClient.start( 'org-dartlang-root:///$app', outputDill, fileSystemRoots: [p.current], fileSystemScheme: 'org-dartlang-root', @@ -52,7 +52,7 @@ void main(List args) async { _print('done compiling $app'); _print('starting shelf server'); - var cascade = Cascade() + final cascade = Cascade() .add(_clientHandler(client)) .add(createStaticHandler(p.current)) .add(createFileHandler(dartSdkJs, url: 'example/app/dart_sdk.js')) @@ -68,18 +68,18 @@ void main(List args) async { _print('server ready'); // The file we will be editing in the repl - var appFile = File(app); - var originalContent = await appFile.readAsString(); - var appLines = const LineSplitter().convert(originalContent); - var getterText = 'String get message =>'; - var messageLine = + final appFile = File(app); + final originalContent = await appFile.readAsString(); + final appLines = const LineSplitter().convert(originalContent); + final getterText = 'String get message =>'; + final messageLine = appLines.indexWhere((line) => line.startsWith(getterText)); - var stdinQueue = StreamQueue( + final stdinQueue = StreamQueue( stdin.transform(utf8.decoder).transform(const LineSplitter())); _prompt(); while (await stdinQueue.hasNext) { - var newMessage = await stdinQueue.next; + final newMessage = await stdinQueue.next; if (newMessage == 'quit') { await server.close(); await stdinQueue.cancel(); @@ -92,11 +92,11 @@ void main(List args) async { } else { _print('editing $app'); appLines[messageLine] = '$getterText "$newMessage";'; - var newContent = appLines.join('\n'); + final newContent = appLines.join('\n'); await appFile.writeAsString(newContent); _print('recompiling $app with edits'); - var result = + final result = await client.compile([Uri.parse('org-dartlang-root:///$app')]); if (result.errorCount > 0) { print('Compile errors: \n${result.compilerOutputLines.join('\n')}'); @@ -124,7 +124,7 @@ void main(List args) async { Handler _clientHandler(DartDevcFrontendServerClient client) { return (Request request) { var path = request.url.path; - var packagesIndex = path.indexOf('/packages/'); + final packagesIndex = path.indexOf('/packages/'); if (packagesIndex > 0) { path = request.url.path.substring(packagesIndex); } else { @@ -134,7 +134,7 @@ Handler _clientHandler(DartDevcFrontendServerClient client) { if (path.endsWith('.dart.js') && path != '/example/app/main.dart.js') { path = path.replaceFirst('.dart.js', '.dart.lib.js', path.length - 8); } - var assetBytes = client.assetBytes(path); + final assetBytes = client.assetBytes(path); if (assetBytes == null) return Response.notFound('path not found'); return Response.ok(assetBytes, headers: {HttpHeaders.contentTypeHeader: 'application/javascript'}); diff --git a/frontend_server_client/lib/src/shared.dart b/frontend_server_client/lib/src/shared.dart index e0efa159b..37841cff4 100644 --- a/frontend_server_client/lib/src/shared.dart +++ b/frontend_server_client/lib/src/shared.dart @@ -20,19 +20,19 @@ final sdkUri = p.toUri(sdkDir).toString(); String generateUuidV4() { final random = Random(); - int _generateBits(int bitCount) => random.nextInt(1 << bitCount); + int generateBits(int bitCount) => random.nextInt(1 << bitCount); - String _printDigits(int value, int count) => + String printDigits(int value, int count) => value.toRadixString(16).padLeft(count, '0'); - String _bitsDigits(int bitCount, int digitCount) => - _printDigits(_generateBits(bitCount), digitCount); + String bitsDigits(int bitCount, int digitCount) => + printDigits(generateBits(bitCount), digitCount); // Generate xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx / 8-4-4-4-12. var special = 8 + random.nextInt(4); - return '${_bitsDigits(16, 4)}${_bitsDigits(16, 4)}-' - '${_bitsDigits(16, 4)}-' - '4${_bitsDigits(12, 3)}-' - '${_printDigits(special, 1)}${_bitsDigits(12, 3)}-' - '${_bitsDigits(16, 4)}${_bitsDigits(16, 4)}${_bitsDigits(16, 4)}'; + return '${bitsDigits(16, 4)}${bitsDigits(16, 4)}-' + '${bitsDigits(16, 4)}-' + '4${bitsDigits(12, 3)}-' + '${printDigits(special, 1)}${bitsDigits(12, 3)}-' + '${bitsDigits(16, 4)}${bitsDigits(16, 4)}${bitsDigits(16, 4)}'; } diff --git a/frontend_server_client/pubspec.yaml b/frontend_server_client/pubspec.yaml index c2432f65a..6eb666759 100644 --- a/frontend_server_client/pubspec.yaml +++ b/frontend_server_client/pubspec.yaml @@ -13,6 +13,8 @@ dependencies: path: ^1.8.0 dev_dependencies: + analysis_config: + path: ../_analysis_config package_config: ^2.0.0 shelf: ^1.0.0 shelf_packages_handler: ^3.0.0 diff --git a/frontend_server_client/test/example/vm_client_test.dart b/frontend_server_client/test/example/vm_client_test.dart index 1c4bd8278..324011c47 100644 --- a/frontend_server_client/test/example/vm_client_test.dart +++ b/frontend_server_client/test/example/vm_client_test.dart @@ -13,7 +13,7 @@ import 'package:test_process/test_process.dart'; void main() { test('vm client example can build and rebuild an app', () async { - var process = await TestProcess.start( + final process = await TestProcess.start( Platform.resolvedExecutable, ['run', 'example/vm_client.dart']); await expectLater(process.stdout, emitsThrough(contains('done compiling example/app/main.dart'))); diff --git a/frontend_server_client/test/example/web_client_test.dart b/frontend_server_client/test/example/web_client_test.dart index 6c8fd81d5..d285fb089 100644 --- a/frontend_server_client/test/example/web_client_test.dart +++ b/frontend_server_client/test/example/web_client_test.dart @@ -13,7 +13,7 @@ import 'package:test_process/test_process.dart'; void main() { test('web client example can build and rebuild an app', () async { - var process = await TestProcess.start( + final process = await TestProcess.start( Platform.resolvedExecutable, ['run', 'example/web_client.dart']); await expectLater(process.stdout, emitsThrough(contains('done compiling example/app/main.dart'))); diff --git a/frontend_server_client/test/frontend_server_client_test.dart b/frontend_server_client/test/frontend_server_client_test.dart index 91cdd3e99..39b5f7065 100644 --- a/frontend_server_client/test/frontend_server_client_test.dart +++ b/frontend_server_client/test/frontend_server_client_test.dart @@ -63,7 +63,7 @@ String get message => p.join('hello', 'world'); test( 'can compile, recompile, and hot reload a vm app', () async { - var entrypoint = p.join(packageRoot, 'bin', 'main.dart'); + final entrypoint = p.join(packageRoot, 'bin', 'main.dart'); client = await FrontendServerClient.start( entrypoint, p.join(packageRoot, 'out.dill'), vmPlatformDill); var result = await client.compile(); @@ -79,28 +79,28 @@ String get message => p.join('hello', 'world'); expect(result.removedSources, isEmpty); expect(result.dillOutput, isNotNull); expect(File(result.dillOutput!).existsSync(), true); - var process = await Process.start(Platform.resolvedExecutable, [ + final process = await Process.start(Platform.resolvedExecutable, [ '--observe', '--no-pause-isolates-on-exit', '--pause-isolates-on-start', result.dillOutput! ]); addTearDown(process.kill); - var stdoutLines = StreamQueue(process.stdout + final stdoutLines = StreamQueue(process.stdout .transform(utf8.decoder) .transform(const LineSplitter())); - var observatoryLine = await stdoutLines.next; - var observatoryUri = + final observatoryLine = await stdoutLines.next; + final observatoryUri = '${observatoryLine.split(' ').last.replaceFirst('http', 'ws')}ws'; - var vmService = await vmServiceConnectUri(observatoryUri); - var isolate = await waitForIsolatesAndResume(vmService); + final vmService = await vmServiceConnectUri(observatoryUri); + final isolate = await waitForIsolatesAndResume(vmService); await expectLater(stdoutLines, emitsThrough(p.join('hello', 'world'))); - var appFile = File(entrypoint); - var originalContent = await appFile.readAsString(); - var newContent = originalContent.replaceFirst('hello', 'goodbye'); + final appFile = File(entrypoint); + final originalContent = await appFile.readAsString(); + final newContent = originalContent.replaceFirst('hello', 'goodbye'); await appFile.writeAsString(newContent); result = await client.compile([File(entrypoint).uri]); @@ -124,9 +124,9 @@ String get message => p.join('hello', 'world'); test( 'can handle compile errors and reload fixes', () async { - var entrypoint = p.join(packageRoot, 'bin', 'main.dart'); - var entrypointFile = File(entrypoint); - var originalContent = await entrypointFile.readAsString(); + final entrypoint = p.join(packageRoot, 'bin', 'main.dart'); + final entrypointFile = File(entrypoint); + final originalContent = await entrypointFile.readAsString(); // append two compile errors to the bottom await entrypointFile .writeAsString('$originalContent\nint foo = 1.0;\nString bar = 4;'); @@ -149,22 +149,22 @@ String get message => p.join('hello', 'world'); expect(result.dillOutput, isNotNull); expect(File(result.dillOutput!).existsSync(), true); - var process = await Process.start(Platform.resolvedExecutable, [ + final process = await Process.start(Platform.resolvedExecutable, [ '--observe', '--no-pause-isolates-on-exit', '--pause-isolates-on-start', result.dillOutput! ]); addTearDown(process.kill); - var stdoutLines = StreamQueue(process.stdout + final stdoutLines = StreamQueue(process.stdout .transform(utf8.decoder) .transform(const LineSplitter())); - var observatoryLine = await stdoutLines.next; - var observatoryUri = + final observatoryLine = await stdoutLines.next; + final observatoryUri = '${observatoryLine.split(' ').last.replaceFirst('http', 'ws')}ws'; - var vmService = await vmServiceConnectUri(observatoryUri); - var isolate = await waitForIsolatesAndResume(vmService); + final vmService = await vmServiceConnectUri(observatoryUri); + final isolate = await waitForIsolatesAndResume(vmService); // The program actually runs regardless of the errors, as they don't affect // the runtime behavior. @@ -191,9 +191,9 @@ String get message => p.join('hello', 'world'); ); test('can compile and recompile a dartdevc app', () async { - var entrypoint = + final entrypoint = p.toUri(p.join(packageRoot, 'bin', 'main.dart')).toString(); - var dartDevcClient = client = await DartDevcFrontendServerClient.start( + final dartDevcClient = client = await DartDevcFrontendServerClient.start( entrypoint, p.join(packageRoot, 'out.dill'), platformKernel: p .toUri(p.join(sdkDir, 'lib', '_internal', 'ddc_platform.dill')) @@ -216,14 +216,14 @@ String get message => p.join('hello', 'world'); expect(File(result.jsSourcesOutput!).existsSync(), true); expect(File(result.jsSourceMapsOutput!).existsSync(), true); - var entrypointUri = Uri.parse(entrypoint); + final entrypointUri = Uri.parse(entrypoint); expect( utf8.decode(dartDevcClient.assetBytes('${entrypointUri.path}.lib.js')!), contains('hello')); - var appFile = File(entrypointUri.toFilePath()); - var originalContent = await appFile.readAsString(); - var newContent = originalContent.replaceFirst('hello', 'goodbye'); + final appFile = File(entrypointUri.toFilePath()); + final originalContent = await appFile.readAsString(); + final newContent = originalContent.replaceFirst('hello', 'goodbye'); await appFile.writeAsString(newContent); result = await client.compile([entrypointUri]); @@ -253,11 +253,11 @@ void main() { ''') ]) ]).create(); - var entrypoint = p.join(packageRoot, 'bin', 'nnbd.dart'); + final entrypoint = p.join(packageRoot, 'bin', 'nnbd.dart'); client = await FrontendServerClient.start( entrypoint, p.join(packageRoot, 'out.dill'), vmPlatformDill, enabledExperiments: ['non-nullable']); - var result = await client.compile(); + final result = await client.compile(); client.accept(); expect(result.errorCount, 1); expect(result.compilerOutputLines, contains(contains('int x;'))); @@ -274,7 +274,7 @@ void main() { ]), ]).create(); - var entrypoint = p.join(packageRoot, 'bin', 'main with spaces.dart'); + final entrypoint = p.join(packageRoot, 'bin', 'main with spaces.dart'); client = await FrontendServerClient.start(entrypoint, p.join(packageRoot, 'out with spaces.dill'), vmPlatformDill); var result = await client.compile(); @@ -295,9 +295,9 @@ void main() { expect(processResult.stdout, startsWith('hello world')); expect(processResult.exitCode, 0); - var appFile = File(entrypoint); - var originalContent = await appFile.readAsString(); - var newContent = originalContent.replaceFirst('hello', 'goodbye'); + final appFile = File(entrypoint); + final originalContent = await appFile.readAsString(); + final newContent = originalContent.replaceFirst('hello', 'goodbye'); await appFile.writeAsString(newContent); result = await client.compile([appFile.uri]); expect(result.compilerOutputLines, isEmpty); @@ -320,7 +320,7 @@ Future waitForIsolatesAndResume(VmService vmService) async { vm = await vmService.getVM(); isolates = vm.isolates; } - var isolateRef = isolates.first; + final isolateRef = isolates.first; var isolate = await vmService.getIsolate(isolateRef.id!); while (isolate.pauseEvent?.kind != EventKind.kPauseStart) { await Future.delayed(const Duration(milliseconds: 100)); diff --git a/frontend_server_common/analysis_options.yaml b/frontend_server_common/analysis_options.yaml new file mode 100644 index 000000000..1167fdd9f --- /dev/null +++ b/frontend_server_common/analysis_options.yaml @@ -0,0 +1 @@ +include: package:analysis_config/analysis_options.yaml diff --git a/frontend_server_common/lib/src/frontend_server_client.dart b/frontend_server_common/lib/src/frontend_server_client.dart index fd992a40c..37f506f17 100644 --- a/frontend_server_common/lib/src/frontend_server_client.dart +++ b/frontend_server_common/lib/src/frontend_server_client.dart @@ -169,12 +169,12 @@ abstract class _CompilationRequest { class _RecompileRequest extends _CompilationRequest { _RecompileRequest( - Completer completer, + super.completer, this.mainUri, this.invalidatedFiles, this.outputPath, this.packageConfig, - ) : super(completer); + ); Uri mainUri; List invalidatedFiles; @@ -188,14 +188,14 @@ class _RecompileRequest extends _CompilationRequest { class _CompileExpressionRequest extends _CompilationRequest { _CompileExpressionRequest( - Completer completer, + super.completer, this.expression, this.definitions, this.typeDefinitions, this.libraryUri, this.klass, this.isStatic, - ) : super(completer); + ); String expression; List definitions; @@ -211,15 +211,14 @@ class _CompileExpressionRequest extends _CompilationRequest { class _CompileExpressionToJsRequest extends _CompilationRequest { _CompileExpressionToJsRequest( - Completer completer, + super.completer, this.libraryUri, this.line, this.column, this.jsModules, this.jsFrameValues, this.moduleName, - this.expression) - : super(completer); + this.expression); String libraryUri; int line; @@ -235,7 +234,7 @@ class _CompileExpressionToJsRequest extends _CompilationRequest { } class _RejectRequest extends _CompilationRequest { - _RejectRequest(Completer completer) : super(completer); + _RejectRequest(super.completer); @override Future _run(ResidentCompiler compiler) async => diff --git a/frontend_server_common/pubspec.yaml b/frontend_server_common/pubspec.yaml index 11629092f..cba711520 100644 --- a/frontend_server_common/pubspec.yaml +++ b/frontend_server_common/pubspec.yaml @@ -17,3 +17,7 @@ dependencies: pub_semver: ^2.1.1 test_common: path: ../test_common + +dev_dependencies: + analysis_config: + path: ../_analysis_config diff --git a/test_common/analysis_options.yaml b/test_common/analysis_options.yaml index 64d22c080..1167fdd9f 100644 --- a/test_common/analysis_options.yaml +++ b/test_common/analysis_options.yaml @@ -1,13 +1 @@ -# This file contains the analysis options used for code in the webdev -# repository. - -include: package:lints/recommended.yaml - -analyzer: - -linter: - rules: - - always_use_package_imports - - directives_ordering - - prefer_final_locals - - unawaited_futures +include: package:analysis_config/analysis_options.yaml diff --git a/test_common/pubspec.yaml b/test_common/pubspec.yaml index ea413e4c6..0f50d9d83 100644 --- a/test_common/pubspec.yaml +++ b/test_common/pubspec.yaml @@ -14,5 +14,7 @@ dependencies: test: ^1.21.1 dev_dependencies: + analysis_config: + path: ../_analysis_config lints: ^4.0.0 pubspec_parse: ^1.2.2 diff --git a/test_common/test/sdk_asset_generator_test.dart b/test_common/test/sdk_asset_generator_test.dart index 8ae8b8840..7f02ec6d0 100644 --- a/test_common/test/sdk_asset_generator_test.dart +++ b/test_common/test/sdk_asset_generator_test.dart @@ -16,7 +16,7 @@ import 'package:test_common/test_sdk_layout.dart'; void main() { group('SDK asset generator', () { - final bool debug = false; + final debug = false; late Directory tempDir; late String sdkDirectory; diff --git a/webdev/analysis_options.yaml b/webdev/analysis_options.yaml new file mode 100644 index 000000000..1167fdd9f --- /dev/null +++ b/webdev/analysis_options.yaml @@ -0,0 +1 @@ +include: package:analysis_config/analysis_options.yaml diff --git a/webdev/lib/src/command/configuration.dart b/webdev/lib/src/command/configuration.dart index 193da166e..6fb52c2b9 100644 --- a/webdev/lib/src/command/configuration.dart +++ b/webdev/lib/src/command/configuration.dart @@ -43,7 +43,7 @@ ReloadConfiguration _parseReloadConfiguration(ArgResults argResults) { ? argResults[autoOption] as String? : null; - void _handleDeprecatedFlag(String flag, String autoFallback) { + void handleDeprecatedFlag(String flag, String autoFallback) { if (argResults.options.contains(flag) && argResults.wasParsed(flag) && (argResults[flag] as bool? ?? false)) { @@ -62,9 +62,9 @@ ReloadConfiguration _parseReloadConfiguration(ArgResults argResults) { } } - _handleDeprecatedFlag(hotReloadFlag, 'reload'); - _handleDeprecatedFlag(hotRestartFlag, 'restart'); - _handleDeprecatedFlag(liveReloadFlag, 'refresh'); + handleDeprecatedFlag(hotReloadFlag, 'reload'); + handleDeprecatedFlag(hotRestartFlag, 'restart'); + handleDeprecatedFlag(liveReloadFlag, 'refresh'); switch (auto) { case 'reload': diff --git a/webdev/lib/src/daemon/app_domain.dart b/webdev/lib/src/daemon/app_domain.dart index cb8bd9c32..bb863609d 100644 --- a/webdev/lib/src/daemon/app_domain.dart +++ b/webdev/lib/src/daemon/app_domain.dart @@ -61,7 +61,7 @@ class AppDomain extends Domain { serverManager.servers.forEach(_handleAppConnections); } - void _handleAppConnections(WebDevServer server) async { + Future _handleAppConnections(WebDevServer server) async { var dwds = server.dwds!; // The connection is established right before `main()` is called. await for (var appConnection in dwds.connectedApps) { diff --git a/webdev/pubspec.yaml b/webdev/pubspec.yaml index 009a7bde5..cf9042dfd 100644 --- a/webdev/pubspec.yaml +++ b/webdev/pubspec.yaml @@ -40,6 +40,8 @@ dependencies: yaml: ^3.1.1 dev_dependencies: + analysis_config: + path: ../_analysis_config build: ^2.3.0 build_runner: ^2.4.0 build_verify: ^3.0.0 diff --git a/webdev/test/chrome_test.dart b/webdev/test/chrome_test.dart index cd3db874c..3e44b9895 100644 --- a/webdev/test/chrome_test.dart +++ b/webdev/test/chrome_test.dart @@ -93,14 +93,14 @@ void main() { logController = StreamController(); logStream = logController.stream; - void _logWriter(Level level, String message, + void logWriter(Level level, String message, {String? error, String? loggerName, String? stackTrace}) { if (level >= Level.INFO) { logController.add('[$level] $loggerName: $message'); } } - configureLogWriter(true, customLogWriter: _logWriter); + configureLogWriter(true, customLogWriter: logWriter); dataDir = Directory.systemTemp.createTempSync(_userDataDirName); }); diff --git a/webdev/test/installation_test.dart b/webdev/test/installation_test.dart index 16a792057..d79674521 100644 --- a/webdev/test/installation_test.dart +++ b/webdev/test/installation_test.dart @@ -25,12 +25,12 @@ enum StreamType { const processTimeout = Duration(minutes: 1); void main() { - Process? _createProcess; - Process? _activateProcess; - Process? _serveProcess; - Directory? _tempDir; + Process? createProcess; + Process? activateProcess; + Process? serveProcess; + Directory? tempDir0; - Future _expectStdoutAndCleanExit(Process process, + Future expectStdoutAndCleanExit(Process process, {required String expectedStdout}) async { final stdoutCompleter = _captureOutput( process, @@ -62,7 +62,7 @@ void main() { ); } - Future _expectStdoutThenExit(Process process, + Future expectStdoutThenExit(Process process, {required String expectedStdout}) async { final expectedStdoutCompleter = _waitForStdoutOrTimeout( process, @@ -83,7 +83,7 @@ void main() { } setUp(() async { - _tempDir = Directory.systemTemp.createTempSync('installation_test'); + tempDir0 = Directory.systemTemp.createTempSync('installation_test'); await Process.run( 'dart', @@ -93,52 +93,52 @@ void main() { tearDown(() async { // Kill any stale processes: - if (_createProcess != null) { - Process.killPid(_createProcess!.pid, ProcessSignal.sigint); - _createProcess = null; + if (createProcess != null) { + Process.killPid(createProcess!.pid, ProcessSignal.sigint); + createProcess = null; } - if (_activateProcess != null) { - Process.killPid(_activateProcess!.pid, ProcessSignal.sigint); - _activateProcess = null; + if (activateProcess != null) { + Process.killPid(activateProcess!.pid, ProcessSignal.sigint); + activateProcess = null; } - if (_serveProcess != null) { - Process.killPid(_serveProcess!.pid, ProcessSignal.sigint); - _serveProcess = null; + if (serveProcess != null) { + Process.killPid(serveProcess!.pid, ProcessSignal.sigint); + serveProcess = null; } }); test('can activate and serve webdev', () async { - final tempDir = _tempDir!; + final tempDir = tempDir0!; final tempPath = tempDir.path; // Verify that we can create a new Dart app: - _createProcess = await Process.start( + createProcess = await Process.start( 'dart', ['create', '--template', 'web', 'temp_app'], workingDirectory: tempPath, ); - await _expectStdoutAndCleanExit( - _createProcess!, + await expectStdoutAndCleanExit( + createProcess!, expectedStdout: 'Created project temp_app in temp_app!', ); final appPath = p.join(tempPath, 'temp_app'); expect(await Directory(appPath).exists(), isTrue); // Verify that `dart pub global activate` works: - _activateProcess = await Process.start( + activateProcess = await Process.start( 'dart', ['pub', 'global', 'activate', 'webdev'], ); - await _expectStdoutAndCleanExit( - _activateProcess!, + await expectStdoutAndCleanExit( + activateProcess!, expectedStdout: 'Activated webdev', ); // Verify that `webdev serve` works for our new app: - _serveProcess = await Process.start( + serveProcess = await Process.start( 'dart', ['pub', 'global', 'run', 'webdev', 'serve'], workingDirectory: appPath); - await _expectStdoutThenExit(_serveProcess!, + await expectStdoutThenExit(serveProcess!, expectedStdout: 'Serving `web` on'); }); } From 6e0cdc9a199aae3fcf6e9f43424655d019c4c715 Mon Sep 17 00:00:00 2001 From: Parker Lougheed Date: Thu, 11 Jul 2024 00:54:31 -0500 Subject: [PATCH 2/2] Update missing SDK constraint --- frontend_server_client/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend_server_client/pubspec.yaml b/frontend_server_client/pubspec.yaml index 6eb666759..fe48b26df 100644 --- a/frontend_server_client/pubspec.yaml +++ b/frontend_server_client/pubspec.yaml @@ -6,7 +6,7 @@ description: >- repository: https://github.com/dart-lang/webdev/tree/master/frontend_server_client environment: - sdk: ^3.0.0 + sdk: ^3.1.0 dependencies: async: ^2.5.0