From 8cf2e69e7a2e70db5960623cdc06dc29d4549b3f Mon Sep 17 00:00:00 2001 From: Brian Wilkerson Date: Tue, 31 Mar 2026 08:14:39 -0700 Subject: [PATCH] Update the strict-top-level-inference lint for primary constructors Closes https://github.com/dart-lang/sdk/issues/61993 Change-Id: Ic0154898d5df87573d1b45a9de4c69795008fe52 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/491704 Reviewed-by: Samuel Rawlins Commit-Queue: Brian Wilkerson --- .../src/rules/strict_top_level_inference.dart | 6 +++ .../strict_top_level_inference_test.dart | 42 +++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/pkg/linter/lib/src/rules/strict_top_level_inference.dart b/pkg/linter/lib/src/rules/strict_top_level_inference.dart index 5b707f22ff7..7dbfa06da17 100644 --- a/pkg/linter/lib/src/rules/strict_top_level_inference.dart +++ b/pkg/linter/lib/src/rules/strict_top_level_inference.dart @@ -41,6 +41,7 @@ class StrictTopLevelInference extends MultiAnalysisRule { registry.addConstructorDeclaration(this, visitor); registry.addFunctionDeclaration(this, visitor); registry.addMethodDeclaration(this, visitor); + registry.addPrimaryConstructorDeclaration(this, visitor); registry.addVariableDeclarationList(this, visitor); } } @@ -92,6 +93,11 @@ class _Visitor extends SimpleAstVisitor { } } + @override + void visitPrimaryConstructorDeclaration(PrimaryConstructorDeclaration node) { + _checkFormalParameters(node.formalParameters.parameters); + } + @override void visitVariableDeclarationList(VariableDeclarationList node) { if (node.type != null) return; diff --git a/pkg/linter/test/rules/strict_top_level_inference_test.dart b/pkg/linter/test/rules/strict_top_level_inference_test.dart index f9951f910c8..4bb50b22a60 100644 --- a/pkg/linter/test/rules/strict_top_level_inference_test.dart +++ b/pkg/linter/test/rules/strict_top_level_inference_test.dart @@ -690,6 +690,48 @@ void f() { '''); } + test_primaryConstructorParameter_named_declaring_final() async { + await assertDiagnosticsFromMarkdown(r''' +class C({final [!p1!]}); +'''); + } + + test_primaryConstructorParameter_named_declaring_typed() async { + await assertNoDiagnostics(r''' +class C({required int p1}); +'''); + } + + test_primaryConstructorParameter_named_declaring_var() async { + await assertDiagnosticsFromMarkdown(r''' +class C({var [!p1!]}); +'''); + } + + test_primaryConstructorParameter_positional() async { + await assertDiagnosticsFromMarkdown(r''' +class C([!p1!]); +'''); + } + + test_primaryConstructorParameter_positional_declaring_final() async { + await assertDiagnosticsFromMarkdown(r''' +class C(final [!p1!]); +'''); + } + + test_primaryConstructorParameter_positional_declaring_var() async { + await assertDiagnosticsFromMarkdown(r''' +class C(var [!p1!]); +'''); + } + + test_primaryConstructorParameter_positional_typed() async { + await assertNoDiagnostics(r''' +class C(int p1); +'''); + } + test_reflectiveTest_nonTest() async { await assertDiagnostics( r'''