Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion packages/leancode_lint/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
# Unreleased

- Add new custom lints:
- [`avoid_direct_collection_equality_checks`](https://github.com/leancodepl/flutter_corelibrary/tree/master/packages/leancode_lint#avoid_direct_collection_equality_checks)

# 24.0.0

- Add new custom lints:
Expand Down Expand Up @@ -93,7 +98,7 @@
- Remove the following lints which have been removed from Dart:
- [`package_api_docs`](https://dart.dev/tools/linter-rules/package_api_docs)
- [`unsafe_html`](https://dart.dev/tools/linter-rules/unsafe_html)
- Disable the [`require_trailing_commas`](https://dart.dev/tools/linter-rules/require_trailing_commas) lint as it conflicts with Dart 3.7 formatter (https://github.com/dart-lang/sdk/issues/60119).
- Disable the [`require_trailing_commas`](https://dart.dev/tools/linter-rules/require_trailing_commas) lint as it conflicts with Dart 3.7 formatter (<https://github.com/dart-lang/sdk/issues/60119>).

# 15.1.0

Expand Down
54 changes: 54 additions & 0 deletions packages/leancode_lint/README.md

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add identical() as "good"

Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,60 @@ None.

</details>

<details>
<summary><code>avoid_direct_collection_equality_checks</code></summary>

### `avoid_direct_collection_equality_checks`

**AVOID** comparing collections directly with `==` or `!=`.

For `List`, `Set`, and `Map`, `==` compares identity (reference equality), not
contents, so `[1, 2] == [1, 2]` is `false`. Use a content-equality helper
instead.

The rule offers three quick fixes: one rewriting the comparison to Flutter's
`listEquals`/`setEquals`/`mapEquals` (from `package:flutter/foundation.dart`),
one to `package:collection`'s `ListEquality`/`SetEquality`/`MapEquality`, and one
to `identical` for the cases where an identity comparison is actually intended.
The `package:collection` fix is only offered when the equality class is reachable
through a direct dependency — either `package:collection` itself or a package
that re-exports it — and imports it via that dependency. The content-equality
fixes add the required import, and all fixes negate the result for `!=`.

**BAD:**

```dart
bool sameItems(List<int> a, List<int> b) {
return a == b;
}
```

**GOOD:**

```dart
import 'package:flutter/foundation.dart';

bool sameItems(List<int> a, List<int> b) {
return listEquals(a, b);
}
```

**GOOD:**

```dart
import 'package:collection/collection.dart';

bool sameItems(List<int> a, List<int> b) {
return const ListEquality<int>().equals(a, b);
}
```

#### Configuration

None.

</details>

<details>
<summary><code>bloc_related_class_naming</code></summary>

Expand Down
14 changes: 14 additions & 0 deletions packages/leancode_lint/lib/plugin.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import 'package:leancode_lint/src/assists/convert_record_into_nominal_type.dart'
import 'package:leancode_lint/src/lints/add_cubit_suffix_for_cubits.dart';
import 'package:leancode_lint/src/lints/avoid_catch_error.dart';
import 'package:leancode_lint/src/lints/avoid_conditional_hooks.dart';
import 'package:leancode_lint/src/lints/avoid_direct_collection_equality_checks.dart';
import 'package:leancode_lint/src/lints/avoid_single_child_in_multi_child_widget.dart';
import 'package:leancode_lint/src/lints/bloc_related_class_naming.dart';
import 'package:leancode_lint/src/lints/bloc_subclasses_naming.dart';
Expand Down Expand Up @@ -64,6 +65,19 @@ final class LeanCodeLintPlugin extends Plugin {
)
..registerWarningRule(AvoidCatchError())
..registerWarningRule(AvoidConditionalHooks())
..registerWarningRule(AvoidDirectCollectionEqualityChecks())
..registerFixForRule(
AvoidDirectCollectionEqualityChecks.code,
ReplaceWithFlutterFoundationEqualsFix.new,
)
..registerFixForRule(
AvoidDirectCollectionEqualityChecks.code,
ReplaceWithCollectionPackageEqualityFix.new,
)
..registerFixForRule(
AvoidDirectCollectionEqualityChecks.code,
ReplaceWithIdenticalFix.new,
)
..registerWarningRule(HookWidgetDoesNotUseHooks())
..registerFixForRule(
HookWidgetDoesNotUseHooks.code,
Expand Down
Loading
Loading