Version 3.5.0-218.0.dev Merge 87239aa8ecbc479d08de8a34ed09f183c27136f6 into dev
diff --git a/DEPS b/DEPS index 042ca37..1a30a22 100644 --- a/DEPS +++ b/DEPS
@@ -120,19 +120,19 @@ # EOL comment after a dependency to disable this and pin it at its current # revision. - "args_rev": "b3608bd95168428621689dce62f873b76a1617d4", - "async_rev": "f933ddff63021bfbdb70938d6a137eb9e7419b05", - "bazel_worker_rev": "2ec90c023d7c62a38cfbd2f34f55093ab38ccf85", - "benchmark_harness_rev": "6fa42b072694875823bd81cb0913a9409e018e5f", - "boolean_selector_rev": "84467e580fa1c7c53ea588308f1acbcf4e8eb6a6", - "browser_launcher_rev": "0dcf2246c11eaf6c4f2591332f1057734a847793", + "args_rev": "6a5a2e6b1f0020b873c7ffbdd36a784c4f9ee300", + "async_rev": "4073129914f14d0c3bdc295bacd7dca5229872af", + "bazel_worker_rev": "c76d7c86381a6ed594641ba03b55c65b84ee11a6", + "benchmark_harness_rev": "f6ef33dc88d7cbc9e4a8a087f1e652eb0d6cc254", + "boolean_selector_rev": "62f82f6a333b419b457e62cadc17b7a9c0545873", + "browser_launcher_rev": "7348ceae6508e5350771979c2951a54313303416", "characters_rev": "7633a16a22c626e19ca750223237396315268a06", - "cli_util_rev": "9fe3eeb8a2fad6da9a156055207337474436da12", - "clock_rev": "80e70acf72cc3a876d3158911b097b581cd8fd1a", - "collection_rev": "fe2e80039b6d44d80f7465535988f935ccf554a5", - "convert_rev": "056626e0cddd56c4cc1184aac787ba06ecdaae3a", - "crypto_rev": "3f815aca8ad5020bb39be09ec9bfd75c36910809", - "csslib_rev": "141dd6567651500bb8c17ccb65e3c9e117c64035", + "cli_util_rev": "c37d5e14f50e72a268c1ad86149cecfa4b58c494", + "clock_rev": "7cbf08e36a92f14f22132d255846610c1b065324", + "collection_rev": "586a5e841fad5572beae421ef9902ba7ceab1292", + "convert_rev": "302af1b7d7dffe5bc1f85a6f1b0958b9de920cd7", + "crypto_rev": "0a10171a7983cd84b318edf3086f751542500a13", + "csslib_rev": "23c314bb6b247a71348cfb0987ba0eb29574abb6", # Note: Updates to dart_style have to be coordinated with the infrastructure # team so that the internal formatter `tools/sdks/dart-sdk/bin/dart format` # matches the version here. Please follow this process to make updates: @@ -144,58 +144,58 @@ # # For more details, see https://github.com/dart-lang/sdk/issues/30164. "dart_style_rev": "a6ad7693555a9add6f98ad6fd94de80d35c89415", # disable tools/rev_sdk_deps.dart - "dartdoc_rev": "ed975850ec97bbccba1c5c2a997e2c085ef842da", - "ecosystem_rev": "ad9da1557bbf522ff5bd25aa83117aeb818160c9", - "file_rev": "8ce0d13ffe9dac267bdbd6c65c145ba4f611af72", - "fixnum_rev": "ac892adead8317e22fafaec65a4e76bda1640f26", + "dartdoc_rev": "45627f92f7e4d377930925ea1ea6a3ed808b34cd", + "ecosystem_rev": "bc25c0cb80415fb711b9413d809c23fad9635616", + "file_rev": "07cacaed6679a173e29176747e6ce0325742749f", + "fixnum_rev": "a8157d87f17d5184e210403f2ed63d354b854132", "flute_rev": "a531c96a8b43d015c6bfbbfe3ab54867b0763b8b", - "glob_rev": "ee48ea82a1ccb64c8cc62e9f4f44c44ca67add71", - "html_rev": "00d34611eee5eff976bd12a631357a4d591ef5fb", - "http_rev": "6337ee3f6d1f641192ba40e133f27085c69aa815", - "http_multi_server_rev": "4a791af861da1cf53b57d9928fbc605f57139e4f", - "http_parser_rev": "702698a3fc726f7cbb8cd7824a8639c7fe84b169", + "glob_rev": "eaec6a448576048b748475d80bfac2795ad5a267", + "html_rev": "3bc803d7e655491b243418f19300ef0c6112bcea", + "http_rev": "7bfbeea6324e3dd34b93d3b4756df0c03bf243f4", + "http_multi_server_rev": "25941e260658efb324de857e6022f418faf9bdd1", + "http_parser_rev": "551e0e470bc7406f5400c55b6f95ee205ad18825", "intl_rev": "5d65e3808ce40e6282e40881492607df4e35669f", - "json_rpc_2_rev": "3187f7b59ed253d14b2560c5306b037bca6817b0", + "json_rpc_2_rev": "5b1cbd679756700d5f319bf10a217da53e98ea52", "leak_tracker_rev": "f5620600a5ce1c44f65ddaa02001e200b096e14c", # manually rolled - "lints_rev": "b254c7e374b0328d4ebfe4f32638fd5e58a81b59", - "logging_rev": "7f722dcbe541de330b5ebc1e9ae075e92033aa06", - "markdown_rev": "c1013dc6fc2653baeb9fac70d0a036615867e629", - "matcher_rev": "4ac4096facce24a781ab6609ca99995aeb443b25", + "lints_rev": "baaaa5616370243c3c8c6a9f67fb83d26bdac552", + "logging_rev": "73f043a45b23bb6d397b5ac784cf562e9ccb295b", + "markdown_rev": "3d8d7a8f14b74bb646bb6e4ae35e0bf2beb74154", + "matcher_rev": "0abd4054c47a923486a6c0c04b5c974ba13ad2da", "material_color_utilities_rev": "799b6ba2f3f1c28c67cc7e0b4f18e0c7d7f3c03e", - "mime_rev": "b01c9a24e0991da479bd405138be3b3e403ff456", + "mime_rev": "8d2d559240ad76c8c2d231bcee0d89cf0ea3edc6", "mockito_rev": "2302814df66e651b6710311366501523dbee2e11", "native_rev": "fef40aebc3cf34654919e8a5785b6c50b3ea445c", # mosum@ and dacoharkes@ are rolling breaking changes manually while the assets features are in experimental. - "package_config_rev": "39096768806ccae4b7025dd4114f15f2df424b0c", - "path_rev": "aea50fa0e997e0401ea271783dddd364ce72f924", - "pool_rev": "1a6f2df19d7a24baaf674e032a0310a4f76725de", + "package_config_rev": "903a0e528f91aef90821c8f5eaafbc1ae27198ab", + "path_rev": "8fc4c72415f254b953b17929b56283cceb3dc5c4", + "pool_rev": "88e463600c636a0d8cdb5dc306524ebf04b06baf", "protobuf_rev": "ccf104dbc36929c0f8708285d5f3a8fae206343e", "pub_rev": "75ab224376e80e918d3c53494a36d4bf8a2f2af6", # disable tools/rev_sdk_deps.dart - "pub_semver_rev": "f57c9c31dfd4e45ce6b11f18ee388e526ba1792a", - "shelf_rev": "338962c5a80761ca60921fc9c9b3e6ff57ffc82c", - "source_map_stack_trace_rev": "6834af5e9e4ba880741b1357a5967fee8d90827c", - "source_maps_rev": "181a41c10668801486c53b48d6fce42fea5c9eca", - "source_span_rev": "e80cb44fc0f8d284e86372c9c98bbdd958810beb", - "sse_rev": "1bb0a98da769793efe7495e08c947515dc48e42e", - "stack_trace_rev": "4d346f70990f3e2fe1fbfbbaa537b9ae8760f25e", - "stream_channel_rev": "61ad87242146c54cbe90f1cb436e830ae873925b", - "string_scanner_rev": "32468bdd9a2baefe2fbcae31ac21daca9e2a8bde", - "sync_http_rev": "82553db87ae0292d4cb35aa9db6ea2a5451fcb92", + "pub_semver_rev": "a9025f3cc23ebb0f86c0af8759d95306b9133ce0", + "shelf_rev": "ea3c983a1e721acf5e7e42a4d3ade65b9ccf51a9", + "source_map_stack_trace_rev": "96a8213dacf7cd42aefb1311491a4169826f98d2", + "source_maps_rev": "caa79c2011015759c6cf3299f299f5cccdf8bb61", + "source_span_rev": "59a3903521dbf4c38c77df73669e73174a170327", + "sse_rev": "7dcde164d5bfe707441f206379ef33e7509e2aac", + "stack_trace_rev": "ab09060b82c936c38c04eb49c1154b83f6648349", + "stream_channel_rev": "b41ff7a25395ace8b23e454e3d1a3459a71306ca", + "string_scanner_rev": "7b37c1b3d1ca6b581792e6ba385f651573af4a45", + "sync_http_rev": "7622bdd07501f3f279212e355325b7c84a2b0a08", "tar_rev": "b62573f39a4de28f69d9ed82b02fbd96b12b9633", - "term_glyph_rev": "a46b48bd28c724e3cd6c18464e1d5ce823601488", + "term_glyph_rev": "c86e8171ee7e9f6fc8e775e0be755a603dd0b72d", "test_rev": "2464ad5c5945c98edd33fb69b3616a14771f1c8d", - "test_descriptor_rev": "d61bf6cbccf8020d4dd2f1d8c91fb21c4be16290", - "test_process_rev": "4ab3f1cedd4b5d971fd78bbccbce97de43be52b7", - "test_reflective_loader_rev": "f8807e0e5816e30ab592424e3916fee90b90623e", + "test_descriptor_rev": "b23d7ccb0f9882e161fb4dea75b2237bf428432b", + "test_process_rev": "862eaf3b825f5e97b278d84a2afbe81b3e8a1683", + "test_reflective_loader_rev": "816942eaeeac30cc59d8699f1e94ad779cc53c06", "tools_rev": "86b3661fc4ccbcda5b662ff3075177448eeeba11", - "typed_data_rev": "fb1958ca880d650972e124222d3d9e41bd35c76c", - "vector_math_rev": "43f2a77bb0be812b027a68a11792d563713b42a1", - "watcher_rev": "c182cd3db6f0bc285bf5da52df422f5c64f21a37", + "typed_data_rev": "d14f9654f7a5d6baa7dcc27691bd0fa56769fb67", + "vector_math_rev": "3c03ac3b370f6d11d943d3f5a933ba6cf2526d85", + "watcher_rev": "c00fc2a6cd869cdebbc52e00af3d912d25745729", "web_rev": "d7766451f43001276b5493b2261d2973702b8334", # b/343654390 "web_socket_channel_rev": "45b8ce9ce9fb5194a24d3dff8913c573fbe7896a", "webdev_rev": "a97c2a1f074209584e7a6a4923d2ca029411f718", "webdriver_rev": "f85779edd7c9f66198d4391ed3631db1d97a5b11", "webkit_inspection_protocol_rev": "5740cc91eaeb13a02007b77b128fccf4b056db6e", - "yaml_rev": "8fb8147e40236bdefd02abbca7b92ddfd7ca0749", + "yaml_rev": "7873b3fb9f16ec83bc7778fed58615fa91f1f042", "yaml_edit_rev": "963e7a31efc7e2f24e409f239106f1ed1c6fee35", # Windows deps
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart index 268a8e1..5654df8 100644 --- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart +++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -17642,17 +17642,6 @@ ); // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. -const Code<Null> codeWasmImportOrExportInUserCode = - messageWasmImportOrExportInUserCode; - -// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. -const MessageCode messageWasmImportOrExportInUserCode = const MessageCode( - "WasmImportOrExportInUserCode", - problemMessage: - r"""Pragmas `wasm:import` and `wasm:export` are for internal use only and cannot be used by user code.""", -); - -// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. const Code<Null> codeWeakReferenceMismatchReturnAndArgumentTypes = messageWeakReferenceMismatchReturnAndArgumentTypes;
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_semantic_tokens.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_semantic_tokens.dart index 1a0e4da..1c92ceb 100644 --- a/pkg/analysis_server/lib/src/lsp/handlers/handler_semantic_tokens.dart +++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_semantic_tokens.dart
@@ -32,13 +32,14 @@ Future<List<SemanticTokenInfo>> getServerResult( String path, SourceRange? range) async { - var result = await server.getResolvedUnit(path); - var unit = result?.unit; - if (unit != null) { - var computer = DartUnitHighlightsComputer(unit, range: range); - return computer.computeSemanticTokens(); - } - return []; + var result = await requireResolvedUnit(path); + return result.map( + (_) => [], // Error, return nothing. + (unit) { + var computer = DartUnitHighlightsComputer(unit.unit, range: range); + return computer.computeSemanticTokens(); + }, + ); } Iterable<SemanticTokenInfo> _filter(
diff --git a/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml b/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml index e26ec10..66ec27c 100644 --- a/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml +++ b/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
@@ -45,8 +45,8 @@ # # Stats: # - 42 "needsEvaluation" -# - 352 "needsFix" -# - 399 "hasFix" +# - 351 "needsFix" +# - 400 "hasFix" # - 516 "noFix" AnalysisOptionsErrorCode.INCLUDED_FILE_PARSE_ERROR: @@ -2863,9 +2863,7 @@ ParserErrorCode.FINAL_CONSTRUCTOR: status: hasFix ParserErrorCode.FINAL_ENUM: - status: needsFix - notes: |- - Remove the `final` keyword. + status: hasFix ParserErrorCode.FINAL_METHOD: status: needsFix notes: |-
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart index b378185..31c7776 100644 --- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart +++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -1378,6 +1378,9 @@ ParserErrorCode.EXTRANEOUS_MODIFIER: [ RemoveExtraModifier.new, ], + ParserErrorCode.FINAL_ENUM: [ + RemoveExtraModifier.new, + ], ParserErrorCode.FINAL_CONSTRUCTOR: [ RemoveExtraModifier.new, ],
diff --git a/pkg/analysis_server/test/lsp/semantic_tokens_test.dart b/pkg/analysis_server/test/lsp/semantic_tokens_test.dart index 438604f..ba21ef8 100644 --- a/pkg/analysis_server/test/lsp/semantic_tokens_test.dart +++ b/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
@@ -2,6 +2,8 @@ // 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. +import 'dart:async'; + import 'package:analysis_server/lsp_protocol/protocol.dart'; import 'package:analysis_server/src/legacy_analysis_server.dart'; import 'package:analysis_server/src/lsp/constants.dart'; @@ -721,6 +723,20 @@ await _initializeAndVerifyTokens(content, expected); } + Future<void> test_emptyAnalysisRoots_handlesFileRequestsImmediately() async { + var content = ''' +// test +'''; + + var code = TestCode.parse(content); + newFile(mainFilePath, code.code); + await initialize(allowEmptyRootUri: true); + + unawaited(openFile(mainFileUri, code.code)); + var tokens = await getSemanticTokens(mainFileUri); + expect(tokens.data, isNotEmpty); + } + Future<void> test_extension() async { var content = ''' extension A on String {}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_extra_modifier_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_extra_modifier_test.dart index 45f5682..d2f6351 100644 --- a/pkg/analysis_server/test/src/services/correction/fix/remove_extra_modifier_test.dart +++ b/pkg/analysis_server/test/src/services/correction/fix/remove_extra_modifier_test.dart
@@ -186,6 +186,15 @@ '''); } + Future<void> test_finalEnum() async { + await resolveTestCode(r''' +final enum E {e} +'''); + await assertHasFix(''' +enum E {e} +'''); + } + Future<void> test_invalidAsyncConstructorModifier() async { await resolveTestCode(r''' class A {
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart index 3a2d1db..2bb2bfc 100644 --- a/pkg/analyzer/lib/src/fasta/ast_builder.dart +++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -4196,6 +4196,7 @@ debugEvent("ExpressionFunctionBody"); var expression = pop() as ExpressionImpl; + reportErrorIfSuper(expression); var star = pop() as Token?; var asyncKeyword = pop() as Token?; if (parseFunctionBodies) {
diff --git a/pkg/analyzer/test/generated/error_parser_test.dart b/pkg/analyzer/test/generated/error_parser_test.dart index 1e14366..f95e5cb 100644 --- a/pkg/analyzer/test/generated/error_parser_test.dart +++ b/pkg/analyzer/test/generated/error_parser_test.dart
@@ -1865,6 +1865,18 @@ parseExpression("x(y)(z).a++"); } + void test_missingAssignableSelector_superAsExpressionFunctionBody() { + CompilationUnit unit = parseCompilationUnit('main() => super;', errors: [ + error(ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR, 10, 5), + ]); + var declaration = unit.declarations.first as FunctionDeclaration; + var body = declaration.functionExpression.body as ExpressionFunctionBody; + var expression = body.expression; + expect(expression, isSuperExpression); + var superExpression = expression as SuperExpression; + expect(superExpression.superKeyword, isNotNull); + } + void test_missingAssignableSelector_superPrimaryExpression() { CompilationUnit unit = parseCompilationUnit('main() {super;}', errors: [ expectedError(ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR, 8, 5)
diff --git a/pkg/dart2wasm/lib/target.dart b/pkg/dart2wasm/lib/target.dart index 9ddd59b..5e45646 100644 --- a/pkg/dart2wasm/lib/target.dart +++ b/pkg/dart2wasm/lib/target.dart
@@ -3,7 +3,7 @@ // BSD-style license that can be found in the LICENSE file. import 'package:_fe_analyzer_shared/src/messages/codes.dart' - show Message, LocatedMessage, messageWasmImportOrExportInUserCode; + show Message, LocatedMessage; import 'package:_js_interop_checks/js_interop_checks.dart'; import 'package:_js_interop_checks/src/js_interop.dart' as jsInteropHelper; import 'package:_js_interop_checks/src/transformations/shared_interop_transformer.dart'; @@ -243,11 +243,6 @@ ReferenceFromIndex? referenceFromIndex, {void Function(String msg)? logger, ChangedStructureNotifier? changedStructureNotifier}) { - // Check `wasm:import` and `wasm:export` pragmas before FFI transforms as - // FFI transforms convert JS interop annotations to these pragmas. - _checkWasmImportExportPragmas(libraries, coreTypes, - diagnosticReporter as DiagnosticReporter<Message, LocatedMessage>); - Set<Library> transitiveImportingJSInterop = { ...jsInteropHelper.calculateTransitiveImportsOfJsInteropIfUsed( component, Uri.parse("package:js/js.dart")), @@ -523,49 +518,3 @@ return false; } } - -final _dartCoreUri = Uri.parse('dart:core'); - -/// Check that `wasm:import` and `wasm:export` pragmas are only used in `dart:` -/// libraries and in tests, with the exception of -/// `reject_import_export_pragmas` test. -void _checkWasmImportExportPragmas(List<Library> libraries, CoreTypes coreTypes, - DiagnosticReporter<Message, LocatedMessage> diagnosticReporter) { - for (Library library in libraries) { - final importUri = library.importUri; - if (importUri.isScheme('dart') || - (importUri.path.contains('tests/web/wasm') && - !importUri.path.contains('reject_import_export_pragmas'))) { - continue; - } - - for (Member member in library.members) { - for (Expression annotation in member.annotations) { - if (annotation is! ConstantExpression) { - continue; - } - final annotationConstant = annotation.constant; - if (annotationConstant is! InstanceConstant) { - continue; - } - final cls = annotationConstant.classNode; - if (cls.name == 'pragma' && - cls.enclosingLibrary.importUri == _dartCoreUri) { - final pragmaName = annotationConstant - .fieldValues[coreTypes.pragmaName.fieldReference]; - if (pragmaName is StringConstant) { - if (pragmaName.value == 'wasm:import' || - pragmaName.value == 'wasm:export') { - diagnosticReporter.report( - messageWasmImportOrExportInUserCode, - annotation.fileOffset, - 0, - library.fileUri, - ); - } - } - } - } - } - } -}
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status index 32ac127..0fc61fd 100644 --- a/pkg/front_end/messages.status +++ b/pkg/front_end/messages.status
@@ -1115,8 +1115,6 @@ VarAsTypeName/script1: Fail # Too many problems VariableCouldBeNullDueToWrite/analyzerCode: Fail VariableCouldBeNullDueToWrite/example: Fail -WasmImportOrExportInUserCode/analyzerCode: Fail -WasmImportOrExportInUserCode/example: Fail WeakReferenceMismatchReturnAndArgumentTypes/analyzerCode: Fail WeakReferenceMismatchReturnAndArgumentTypes/example: Fail WeakReferenceNotOneArgument/analyzerCode: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml index e96affc..d5d7dfe 100644 --- a/pkg/front_end/messages.yaml +++ b/pkg/front_end/messages.yaml
@@ -7011,9 +7011,6 @@ ResourceIdentifiersMultiple: problemMessage: "Only one resource identifier pragma can be used at a time." -WasmImportOrExportInUserCode: - problemMessage: "Pragmas `wasm:import` and `wasm:export` are for internal use only and cannot be used by user code." - WeakReferenceNotStatic: problemMessage: "Weak reference pragma can be used on a static method only."
diff --git a/pkg/front_end/test/spell_checking_list_messages.txt b/pkg/front_end/test/spell_checking_list_messages.txt index a6f6b3f..92d5410 100644 --- a/pkg/front_end/test/spell_checking_list_messages.txt +++ b/pkg/front_end/test/spell_checking_list_messages.txt
@@ -114,7 +114,6 @@ pointer`s pragma pragma('vm:deeply -pragmas preexisting pubspec.yaml r @@ -150,6 +149,4 @@ unavailable unsound v -wasm:export -wasm:import x
diff --git a/pkg/linter/test/rules/all.dart b/pkg/linter/test/rules/all.dart index fdf2415..9590e3d 100644 --- a/pkg/linter/test/rules/all.dart +++ b/pkg/linter/test/rules/all.dart
@@ -28,6 +28,8 @@ import 'avoid_final_parameters_test.dart' as avoid_final_parameters; import 'avoid_function_literals_in_foreach_calls_test.dart' as avoid_function_literals_in_foreach_calls; +import 'avoid_implementing_value_types_test.dart' + as avoid_implementing_value_types; import 'avoid_init_to_null_test.dart' as avoid_init_to_null; import 'avoid_multiple_declarations_per_line_test.dart' as avoid_multiple_declarations_per_line; @@ -295,6 +297,7 @@ avoid_field_initializers_in_non_const_classes.main(); avoid_final_parameters.main(); avoid_function_literals_in_foreach_calls.main(); + avoid_implementing_value_types.main(); avoid_init_to_null.main(); avoid_multiple_declarations_per_line.main(); avoid_positional_boolean_parameters.main();
diff --git a/pkg/linter/test/rules/avoid_classes_with_only_static_members_test.dart b/pkg/linter/test/rules/avoid_classes_with_only_static_members_test.dart index 8c804f5..31816cb 100644 --- a/pkg/linter/test/rules/avoid_classes_with_only_static_members_test.dart +++ b/pkg/linter/test/rules/avoid_classes_with_only_static_members_test.dart
@@ -100,6 +100,12 @@ ]); } + test_class_empty() async { + await assertNoDiagnostics(r''' +class C {} +'''); + } + test_class_empty_augmentation_empty() async { var a = newFile('$testPackageLibPath/a.dart', r''' import augment 'b.dart'; @@ -120,6 +126,62 @@ await assertNoDiagnosticsIn(errors); } + test_class_extendingValidClass() async { + await assertNoDiagnostics(r''' +class A { + int f = 1; +} + +class C extends A { + static int i = 0; + static m() {} +} +'''); + } + + test_class_noPublicConstructor() async { + await assertNoDiagnostics(r''' +class C { + C._(); + static int f = 0; +} +'''); + } + + test_class_withConstructor() async { + await assertNoDiagnostics(r''' +class C { + C(); +} +'''); + } + + test_class_withInstanceField() async { + await assertNoDiagnostics(r''' +class C { + int a = 0; +} +'''); + } + + test_class_withInstanceMethod() async { + await assertNoDiagnostics(r''' +class C { + void m() {} +} +'''); + } + + test_class_withStaticConstFields() async { + await assertNoDiagnostics(r''' +class C { + static const red = '#f00'; + static const green = '#0f0'; + static const blue = '#00f'; +} +'''); + } + test_finalClass() async { await assertDiagnostics(r''' final class C {
diff --git a/pkg/linter/test/rules/avoid_implementing_value_types_test.dart b/pkg/linter/test/rules/avoid_implementing_value_types_test.dart new file mode 100644 index 0000000..e958789 --- /dev/null +++ b/pkg/linter/test/rules/avoid_implementing_value_types_test.dart
@@ -0,0 +1,86 @@ +// 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. + +import 'package:test_reflective_loader/test_reflective_loader.dart'; + +import '../rule_test_support.dart'; + +main() { + defineReflectiveSuite(() { + defineReflectiveTests(AvoidImplementingValueTypesTest); + }); +} + +@reflectiveTest +class AvoidImplementingValueTypesTest extends LintRuleTest { + @override + String get lintRule => 'avoid_implementing_value_types'; + + test_classMixinInMixinWithEqualEqual() async { + await assertNoDiagnostics(r''' +mixin M { + @override + bool operator ==(Object o) => false; +} + +class C with M {} +'''); + } + + test_declaresEqualEqual() async { + await assertNoDiagnostics(r''' +class C { + @override + bool operator ==(Object o) => false; +} +'''); + } + + test_extendsClassWithEqualEqual() async { + await assertNoDiagnostics(r''' +class A { + @override + bool operator ==(Object o) => false; +} + +class C extends A {} +'''); + } + + test_implementsClass_indirectlyWithEqualEqual() async { + await assertDiagnostics(r''' +class A { + @override + bool operator ==(Object o) => false; +} + +class B extends A {} + +class C implements B {} +''', [ + lint(105, 1), + ]); + } + + test_implementsClassWithEqualEqual() async { + await assertDiagnostics(r''' +class A { + @override + bool operator ==(Object o) => false; +} +class C implements A {} +''', [ + lint(82, 1), + ]); + } + + test_mixin() async { + await assertNoDiagnostics(r''' +mixin M { + @override + bool operator ==(Object o) => false; +} +'''); + } +}
diff --git a/pkg/linter/test_data/rules/avoid_classes_with_only_static_members.dart b/pkg/linter/test_data/rules/avoid_classes_with_only_static_members.dart deleted file mode 100644 index f97d64e..0000000 --- a/pkg/linter/test_data/rules/avoid_classes_with_only_static_members.dart +++ /dev/null
@@ -1,55 +0,0 @@ -// Copyright (c) 2017, 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. - -class Bad // LINT -{ - static int a = 0; - - static foo() {} -} - -class Ok extends Good1 // OK -{ - static int staticInt = 0; - - static foo() {} -} - -class Bad3 // OK -{} - -class Good1 // OK -{ - int a = 0; -} - -class Good2 // OK -{ - void foo() {} -} - -class Good3 // OK -{ - Good3(); -} - -class Color // OK -{ - static const red = '#f00'; - static const green = '#0f0'; - static const blue = '#00f'; - static const black = '#000'; - static const white = '#fff'; -} - -class DateUtils // LINT -{ - static DateTime mostRecent(List<DateTime> dates) => dates.first; -} - -class F // OK -{ - F._(); - static int f = 0; -}
diff --git a/pkg/linter/test_data/rules/avoid_implementing_value_types.dart b/pkg/linter/test_data/rules/avoid_implementing_value_types.dart deleted file mode 100644 index fe4e1b8..0000000 --- a/pkg/linter/test_data/rules/avoid_implementing_value_types.dart +++ /dev/null
@@ -1,45 +0,0 @@ -// Copyright (c) 2018, 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. - -class Size { // OK - final int inBytes; - const Size(this.inBytes); - - @override - bool operator ==(Object o) => o is Size && o.inBytes == inBytes; - - @override - int get hashCode => inBytes.hashCode; -} - -class SizeWithKilobytes extends Size { // OK - SizeWithKilobytes(int inBytes) : super(inBytes); - - double get inKilobytes => inBytes / 1000; -} - -class EmptyFileSize1 implements Size { // LINT - @override - int get inBytes => 0; -} - -class EmptyFileSize2 implements SizeWithKilobytes { // LINT - @override - int get inBytes => 0; - - @override - double get inKilobytes => 0.0; -} - -mixin SizeClassMixin { // OK - int get inBytes => 0; - - @override - bool operator ==(Object o) => o is Size && o.inBytes == o.inBytes; - - @override - int get hashCode => inBytes.hashCode; -} - -class UsesSizeClassMixin extends Object with SizeClassMixin {} // OK
diff --git a/tests/web/wasm/reject_import_export_pragmas_test.dart b/tests/web/wasm/reject_import_export_pragmas_test.dart deleted file mode 100644 index edf4cf1..0000000 --- a/tests/web/wasm/reject_import_export_pragmas_test.dart +++ /dev/null
@@ -1,16 +0,0 @@ -// 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. - -// Test that importing `dart:ffi` and using `wasm:import` and export pragmas -// are not allowed. - -import 'dart:ffi'; //# 01: compile-time error - -@pragma('wasm:export', 'f') //# 02: compile-time error -void f() {} - -@pragma('wasm:import', 'g') //# 03: compile-time error -external double g(double x); - -void main() {}
diff --git a/tools/VERSION b/tools/VERSION index 432be5d..38347d9 100644 --- a/tools/VERSION +++ b/tools/VERSION
@@ -27,5 +27,5 @@ MAJOR 3 MINOR 5 PATCH 0 -PRERELEASE 217 +PRERELEASE 218 PRERELEASE_PATCH 0