src_lint 2.0.0
src_lint: ^2.0.0 copied to clipboard
A custom lint that prevents implementation detail imports from unrelated src directories.
src_lint #
This lint prevents imports from src directories of unrelated file hierarchies.
Basically, the same as the built-in implementation_imports lint, but for src imports within the same package.
So, given this project structure:
📁 lib
├── 📄 app.dart
├── 📁 auth
│ ├── 📄 auth_page.dart
│ └── 📁 src
│ └── 📄 sign_in_section.dart
└── 📁 home
├── 📄 home_page.dart
└── 📁 src
├── 📁 social_tab
│ ├── 📄 social_tab.dart
│ └── 📁 src
│ └── 📄 posts_list.dart
└── 📁 settings_tab
├── 📄 settings_tab.dart
└── 📁 src
└── 📄 privacy_section.dart
BAD:
// 📄 app.dart
import 'auth/src/sign_in_section.dart';
import 'package:app/auth/src/sign_in_section.dart';
import 'home/src/social_tab/social_tab.dart';
import 'package:app/home/src/social_tab/social_tab.dart';
import 'home/src/social_tab/src/posts_list.dart';
import 'package:app/home/src/social_tab/src/posts_list.dart';
import 'home/src/settings_tab/settings_tab.dart';
import 'package:app/home/src/settings_tab/settings_tab.dart';
import 'home/src/settings_tab/src/privacy_section.dart';
import 'package:app/home/src/settings_tab/src/privacy_section.dart';
BAD:
// 📄 social_tab.dart
import '../settings_tab/src/privacy_section.dart';
import 'package:app/home/src/settings_tab/src/privacy_section.dart';
import '../../../../auth/src/sign_in_section.dart';
import 'package:app/auth/src/sign_in_section.dart';
GOOD:
// 📄 app.dart
import 'auth/auth_page.dart';
import 'package:app/auth/auth_page.dart';
import 'home/home_page.dart';
import 'package:app/home/home_page.dart';
GOOD:
// 📄 home_page.dart
import 'src/social_tab/social_tab.dart';
import 'package:app/home/src/social_tab/social_tab.dart';
import 'src/settings_tab/settings_tab.dart';
import 'package:app/home/src/settings_tab/settings_tab.dart';
GOOD:
// 📄 social_tab.dart
import 'src/posts_list.dart';
import 'package:app/home/src/social_tab/src/posts_list.dart';
Installation #
Requires Dart 3.10+ (analyzer plugins). Add src_lint to your pubspec.yaml:
dart pub add --dev src_lint
Enable the plugin in the top-level plugins section of analysis_options.yaml (not under analyzer:):
plugins:
src_lint: ^1.0.0
For a path dependency while developing:
plugins:
src_lint:
path: ../src_lint
Suppressions use the package_name / rule_name form, for example:
// ignore: src_lint/no_unrelated_src_imports
Credits #
This package is inspired by subpackage_lint and solves the same problem, but with less ceremony required.