From accd5b9ca532f99288aa61ba3be6485677811420 Mon Sep 17 00:00:00 2001 From: Dmitry Zhifarsky Date: Wed, 12 Jan 2022 22:01:41 +0300 Subject: [PATCH 1/3] fix: correctly handle method invocations on getters --- .../analyzers/unused_l10n_analyzer/unused_l10n_visitor.dart | 2 ++ test/resources/unused_l10n_analyzer/test_i18n.dart | 2 ++ .../unused_l10n_analyzer/unused_l10n_analyzer_example.dart | 1 + .../unused_l10n_analyzer/unused_l10n_analyzer_test.dart | 6 +++++- 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/src/analyzers/unused_l10n_analyzer/unused_l10n_visitor.dart b/lib/src/analyzers/unused_l10n_analyzer/unused_l10n_visitor.dart index aac2d78412..080c34f899 100644 --- a/lib/src/analyzers/unused_l10n_analyzer/unused_l10n_visitor.dart +++ b/lib/src/analyzers/unused_l10n_analyzer/unused_l10n_visitor.dart @@ -37,6 +37,8 @@ class UnusedL10nVisitor extends RecursiveAstVisitor { if (_matchIdentifier(classTarget)) { _addMemberInvocation(classTarget as SimpleIdentifier, name); } + } else if (_matchStaticGetter(target)) { + _addMemberInvocation((target as PrefixedIdentifier).prefix, name); } } diff --git a/test/resources/unused_l10n_analyzer/test_i18n.dart b/test/resources/unused_l10n_analyzer/test_i18n.dart index 2fb361d483..4504d1d2df 100644 --- a/test/resources/unused_l10n_analyzer/test_i18n.dart +++ b/test/resources/unused_l10n_analyzer/test_i18n.dart @@ -31,6 +31,8 @@ class S { String regularMethod(String value) => value; + String anotherRegularMethod(String value) => value; + String get regularGetter => 'regular getter'; final String regularField = 'regular field'; // LINT diff --git a/test/resources/unused_l10n_analyzer/unused_l10n_analyzer_example.dart b/test/resources/unused_l10n_analyzer/unused_l10n_analyzer_example.dart index b35c5e3a36..6cce12c1bd 100644 --- a/test/resources/unused_l10n_analyzer/unused_l10n_analyzer_example.dart +++ b/test/resources/unused_l10n_analyzer/unused_l10n_analyzer_example.dart @@ -24,5 +24,6 @@ class SomeClass { void method() { S.of('').regularMethod(''); S.current.regularGetter; + S.current.anotherRegularMethod(''); } } diff --git a/test/src/analyzers/unused_l10n_analyzer/unused_l10n_analyzer_test.dart b/test/src/analyzers/unused_l10n_analyzer/unused_l10n_analyzer_test.dart index 4e488e179e..dad2b2a4e1 100644 --- a/test/src/analyzers/unused_l10n_analyzer/unused_l10n_analyzer_test.dart +++ b/test/src/analyzers/unused_l10n_analyzer/unused_l10n_analyzer_test.dart @@ -35,6 +35,8 @@ void main() { final report = result.single; expect(report.className, 'TestI18n'); + expect(report.issues.length, 3); + final firstIssue = report.issues.first; expect(firstIssue.memberName, 'getter'); expect(firstIssue.location.line, 4); @@ -69,6 +71,8 @@ void main() { final report = result.single; expect(report.className, 'S'); + expect(report.issues.length, 4); + final firstIssue = report.issues.first; expect(firstIssue.memberName, 'field'); expect(firstIssue.location.line, 23); @@ -76,7 +80,7 @@ void main() { final secondIssue = report.issues.elementAt(1); expect(secondIssue.memberName, 'regularField'); - expect(secondIssue.location.line, 36); + expect(secondIssue.location.line, 38); expect(secondIssue.location.column, 3); final thirdIssue = report.issues.elementAt(2); From ccf3cf5a44e0861ab34fd8a4d007ef89faf74f08 Mon Sep 17 00:00:00 2001 From: Dmitry Zhifarsky Date: Wed, 12 Jan 2022 22:06:59 +0300 Subject: [PATCH 2/3] chore: update changelog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d66a1c1f87..03c3a5eddd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,8 @@ ## Unreleased * feat: support excludes for a separate anti-pattern. -* fix: prefer-extracting-callbacks in nested widgets +* fix: prefer-extracting-callbacks in nested widgets. +* fix: correctly handle method invocations on getters for `check-unused-l10n` command. ## 4.9.0 From 288d24952594f3a09e5924ea104b85a8b749c9ca Mon Sep 17 00:00:00 2001 From: Dmitry Zhifarsky Date: Wed, 12 Jan 2022 22:23:23 +0300 Subject: [PATCH 3/3] fix: restore removed code for property access method of calls --- CHANGELOG.md | 2 +- .../unused_l10n_analyzer/unused_l10n_visitor.dart | 6 ++++++ test/resources/unused_l10n_analyzer/test_i18n.dart | 4 ++++ .../unused_l10n_analyzer_example.dart | 3 +++ .../unused_l10n_analyzer/unused_l10n_analyzer_test.dart | 8 ++++---- 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 03c3a5eddd..61f63e7221 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ * feat: support excludes for a separate anti-pattern. * fix: prefer-extracting-callbacks in nested widgets. -* fix: correctly handle method invocations on getters for `check-unused-l10n` command. +* fix: correctly handle method invocations on getters and method of for `check-unused-l10n` command. ## 4.9.0 diff --git a/lib/src/analyzers/unused_l10n_analyzer/unused_l10n_visitor.dart b/lib/src/analyzers/unused_l10n_analyzer/unused_l10n_visitor.dart index 080c34f899..bf4229baba 100644 --- a/lib/src/analyzers/unused_l10n_analyzer/unused_l10n_visitor.dart +++ b/lib/src/analyzers/unused_l10n_analyzer/unused_l10n_visitor.dart @@ -78,6 +78,12 @@ class UnusedL10nVisitor extends RecursiveAstVisitor { final classTarget = (target as PrefixedIdentifier).identifier; _addMemberInvocationOnAccessor(classTarget, name); + } else if (_matchMethodOf(target)) { + final classTarget = (target as MethodInvocation).target; + + if (_matchIdentifier(classTarget)) { + _addMemberInvocation(classTarget as SimpleIdentifier, name); + } } else if (_matchStaticGetter(target)) { _addMemberInvocation((target as PrefixedIdentifier).prefix, name); } diff --git a/test/resources/unused_l10n_analyzer/test_i18n.dart b/test/resources/unused_l10n_analyzer/test_i18n.dart index 4504d1d2df..4076e7fb44 100644 --- a/test/resources/unused_l10n_analyzer/test_i18n.dart +++ b/test/resources/unused_l10n_analyzer/test_i18n.dart @@ -12,6 +12,8 @@ class TestI18n { String get regularGetter => 'regular getter'; // LINT + String get anotherRegularGetter => 'another regular getter'; + final String regularField = 'regular field'; TestI18n.of(String value) { @@ -35,6 +37,8 @@ class S { String get regularGetter => 'regular getter'; + String get anotherRegularGetter => 'another regular getter'; + final String regularField = 'regular field'; // LINT // ignore: prefer_constructors_over_static_methods diff --git a/test/resources/unused_l10n_analyzer/unused_l10n_analyzer_example.dart b/test/resources/unused_l10n_analyzer/unused_l10n_analyzer_example.dart index 6cce12c1bd..fe2682f897 100644 --- a/test/resources/unused_l10n_analyzer/unused_l10n_analyzer_example.dart +++ b/test/resources/unused_l10n_analyzer/unused_l10n_analyzer_example.dart @@ -9,6 +9,8 @@ void main() { TestI18n.of('').regularField.trim(); + TestI18n.of('').anotherRegularGetter; + final wrapper = L10nWrapper(); wrapper.l10n.regularField.trim(); @@ -23,6 +25,7 @@ class SomeClass { void method() { S.of('').regularMethod(''); + S.of('').anotherRegularGetter; S.current.regularGetter; S.current.anotherRegularMethod(''); } diff --git a/test/src/analyzers/unused_l10n_analyzer/unused_l10n_analyzer_test.dart b/test/src/analyzers/unused_l10n_analyzer/unused_l10n_analyzer_test.dart index dad2b2a4e1..3dbf2d75eb 100644 --- a/test/src/analyzers/unused_l10n_analyzer/unused_l10n_analyzer_test.dart +++ b/test/src/analyzers/unused_l10n_analyzer/unused_l10n_analyzer_test.dart @@ -75,17 +75,17 @@ void main() { final firstIssue = report.issues.first; expect(firstIssue.memberName, 'field'); - expect(firstIssue.location.line, 23); + expect(firstIssue.location.line, 25); expect(firstIssue.location.column, 3); final secondIssue = report.issues.elementAt(1); expect(secondIssue.memberName, 'regularField'); - expect(secondIssue.location.line, 38); + expect(secondIssue.location.line, 42); expect(secondIssue.location.column, 3); final thirdIssue = report.issues.elementAt(2); expect(thirdIssue.memberName, 'method(String value)'); - expect(thirdIssue.location.line, 27); + expect(thirdIssue.location.line, 29); expect(thirdIssue.location.column, 3); final forthIssue = report.issues.elementAt(3); @@ -93,7 +93,7 @@ void main() { forthIssue.memberName, 'secondMethod(String value, num number)', ); - expect(forthIssue.location.line, 29); + expect(forthIssue.location.line, 31); expect(forthIssue.location.column, 3); });