Rules / Correctness / avoid-relative-lib-imports
avoid-relative-lib-imports
Disallow relative imports that reach into a lib/ directory.
Flags a relative import whose path contains a lib segment, such as
import '../lib/foo.dart' or import 'lib/foo.dart'; package: and dart:
imports are exempt. Dart treats a file reached by a relative path and the
same file reached by its package: URI as two separate libraries, so
importing into lib/ relatively can create duplicate type identities,
baffling "X is not a Y" errors, and is checks that fail against seemingly
identical types. Import files under lib/ through their package: URI
instead.
Invalid
example.dartdart
import '../lib/src/helper.dart';
import '../../lib/util.dart';
import 'lib/config.dart';
import '../../../lib/models/user.dart';
import '../shared/lib/api.dart';
void main() {}
Avoid relative imports for files in 'lib'.
1import '../lib/src/helper.dart';
∙
Avoid relative imports for files in 'lib'.
1import '../lib/src/helper.dart';
2import '../../lib/util.dart';
∙
Avoid relative imports for files in 'lib'.
2import '../../lib/util.dart';
3import 'lib/config.dart';
∙
Avoid relative imports for files in 'lib'.
3import 'lib/config.dart';
4import '../../../lib/models/user.dart';
∙
Avoid relative imports for files in 'lib'.
4import '../../../lib/models/user.dart';
5import '../shared/lib/api.dart';
∙
Valid
example.dartdart
import 'package:foo/src/bar.dart';
import 'dart:async';
import '../models/user.dart';
import 'helpers/format.dart';
import 'package:bar/bar.dart';
void main() {}
How to configure
Set the severity of avoid-relative-lib-imports in your falcon.json:
falcon.jsonjson
{
"linter": {
"rules": {
"correctness": {
"avoid-relative-lib-imports": "error"
}
}
}
}