Skip to content

Commit

Permalink
chore(CHANGELOG.md): prepare to release v1.0.3
Browse files Browse the repository at this point in the history
  • Loading branch information
nikaera committed Feb 26, 2024
1 parent bb9509d commit 4e5a3f5
Show file tree
Hide file tree
Showing 10 changed files with 87 additions and 12 deletions.
10 changes: 10 additions & 0 deletions packages/flutter_hooks_lint/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,13 @@
## 1.0.3

- Fixed a bug in `hooks_method_visitor.dart`
- Fixed a bug in `hooks_memoized_consideration`
- Fixed a test for `hooks_unused_test`

## 1.0.2

- Fixed a bug where `Unsupported operation: Cannot extract a file path from a package URI` occurred when running `dart run custom_lint`.

## 1.0.1

- Change the version range of the analyzer to `>=6.0.0 <7.0.0`
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/error/error.dart';
import 'package:analyzer/error/listener.dart';
import 'package:analyzer/source/source_range.dart';
Expand Down Expand Up @@ -32,10 +33,25 @@ class HooksMemoizedConsiderationRule extends DartLintRule {
});

context.registry.addVariableDeclaration((node) {
final type = node.declaredElement?.type;
final classDeclaration = node.thisOrAncestorOfType<ClassDeclaration>();
final extendsClause = classDeclaration?.extendsClause;
if (extendsClause == null) {
return;
}
final extendsElement = extendsClause.superclass.element;
if (extendsElement == null) {
return;
}
if (!HooksHelper.isHooksElement(extendsElement)) {
return;
}

final declaredElement = node.declaredElement;
final type = declaredElement?.type;
if (type == null) {
return;
}

if (HooksHelper.isConsiderUseMemoized(type)) {
reporter.reportErrorForNode(code, node);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,12 @@ import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/file_system/physical_file_system.dart';
import 'package:flutter_hooks_lint/src/helpers/hooks_helper.dart';

final _regexp = RegExp('^use[A-Z]{1}');

class HooksMethodVisitor extends RecursiveAstVisitor<void> {
const HooksMethodVisitor({
required this.onVisitMethodInvocation,
Expand All @@ -17,15 +20,18 @@ class HooksMethodVisitor extends RecursiveAstVisitor<void> {
if (element == null) {
return;
}
if (element.enclosingElement is ClassElement) {
return;
}

final methodName = node.methodName.name;

if (HooksHelper.isHooksElement(element)) {
onVisitMethodInvocation(node);
// NOTE: DO always prefix your hooks with use, https://pub.dev/packages/flutter_hooks#rules.
} else if (methodName.startsWith('use')) {
} else if (_regexp.hasMatch(methodName)) {
try {
final filePath = element.librarySource?.uri.toFilePath();
final filePath = element.librarySource?.fullName;
if (filePath != null) {
final collection = AnalysisContextCollection(
includedPaths: [filePath],
Expand All @@ -49,7 +55,7 @@ class HooksMethodVisitor extends RecursiveAstVisitor<void> {
onVisitMethodInvocation(node);
}
} catch (e) {
print(e);
print('$methodName: $e');
}
}

Expand Down
2 changes: 1 addition & 1 deletion packages/flutter_hooks_lint/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: flutter_hooks_lint
description: A lint package providing guidelines for using flutter_hooks in your Flutter widget!
version: 1.0.2
version: 1.0.3
homepage: https://github.com/nikaera/flutter_hooks_lint
repository: https://github.com/nikaera/flutter_hooks_lint
documentation: https://github.com/nikaera/flutter_hooks_lint
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';

class ConsiderationMemoizedWidget extends StatelessWidget {
class ConsiderationMemoizedWidget extends HookWidget {
@override
Widget build(BuildContext context) {
final key = GlobalKey<TooltipState>();
Expand Down Expand Up @@ -31,3 +32,13 @@ class HookConsiderationMemoizedWidget extends HookWidget {
return Text(state.value.toString());
}
}

final _globalKeyProvider = Provider((ref) => GlobalKey());

class ConsumerConsiderationMemoizedWidget extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final globalKey = ref.watch(_globalKeyProvider);
return Text(globalKey.toString());
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Message: `Wrap with useMemoized`
Priority: 30
Diff for file `test/hooks_memoized_consideration/hooks_memoized_consideration.dart:7`:
Diff for file `test/hooks_memoized_consideration/hooks_memoized_consideration.dart:8`:
```
@override
Widget build(BuildContext context) {
Expand All @@ -12,7 +12,7 @@ Diff for file `test/hooks_memoized_consideration/hooks_memoized_consideration.da
---
Message: `Wrap with useMemoized`
Priority: 30
Diff for file `test/hooks_memoized_consideration/hooks_memoized_consideration.dart:8`:
Diff for file `test/hooks_memoized_consideration/hooks_memoized_consideration.dart:9`:
```
Widget build(BuildContext context) {
final key = GlobalKey<TooltipState>();
Expand All @@ -24,7 +24,7 @@ Diff for file `test/hooks_memoized_consideration/hooks_memoized_consideration.da
---
Message: `Wrap with useMemoized`
Priority: 30
Diff for file `test/hooks_memoized_consideration/hooks_memoized_consideration.dart:24`:
Diff for file `test/hooks_memoized_consideration/hooks_memoized_consideration.dart:25`:
```
final state = useState(0);
final snapshot =
Expand All @@ -36,7 +36,7 @@ Diff for file `test/hooks_memoized_consideration/hooks_memoized_consideration.da
---
Message: `Wrap with useMemoized`
Priority: 30
Diff for file `test/hooks_memoized_consideration/hooks_memoized_consideration.dart:24`:
Diff for file `test/hooks_memoized_consideration/hooks_memoized_consideration.dart:25`:
```
final state = useState(0);
final snapshot =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,11 @@ import 'package:flutter_hooks/flutter_hooks.dart';
void useEffectOnce(Dispose? Function() effect) {
useEffect(effect, const []);
}

class TestHelper {
const TestHelper._();

static void useEffectOnce(Dispose? Function() effect) {
useEffect(effect, const []);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,18 @@ class UseCustomHookWidget extends HookWidget {
}
}

class ClassCustomHookWidget extends HookWidget {
@override
Widget build(BuildContext context) {
// TODO(nikaera): Custom hooks should not be defined within a class in the first place,
// so define them with lint rules.
TestHelper.useEffectOnce(() {
return;
});
return Text('');
}
}

class UnuseHookConsumerWidget extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,24 @@ import 'custom_hooks.dart';
Widget build(BuildContext context) {
```
---
Message: `Convert to ConsumerWidget`
Message: `Convert to StatelessWidget`
Priority: 30
Diff for file `test/hooks_unuse_widget/hooks_unuse_widget.dart:31`:
```
}

- class ClassCustomHookWidget extends HookWidget {
+ class ClassCustomHookWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
```
---
Message: `Convert to ConsumerWidget`
Priority: 30
Diff for file `test/hooks_unuse_widget/hooks_unuse_widget.dart:43`:
```
}

- class UnuseHookConsumerWidget extends HookConsumerWidget {
+ class UnuseHookConsumerWidget extends ConsumerWidget {
@override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ void main() {
(result) async {
final lint = HooksUnuseWidgetRule();
final errors = await lint.testRun(result);
expect(errors, hasLength(2));
expect(errors, hasLength(3));

final fixes = lint.getFixes().map((e) => e as DartFix);
final results = await Future.wait(errors
Expand Down

0 comments on commit 4e5a3f5

Please sign in to comment.