Rules / Correctness / avoid-relative-lib-imports

avoid-relative-lib-imports

lint/correctness/avoid-relative-lib-imports
recommended
Same as avoid_relative_lib_imports · Dart lints

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"
      }
    }
  }
}