conditional-uri-does-not-exist

Same as conditional_uri_does_not_exist in Dart lints

Group
Style
Path
lint/style/conditional-uri-does-not-exist
Default
On (recommended)
Origin
Dart lints
Rule
208 of 512
recommended

Require the targets of conditional import and export URIs to exist.

Every configurable URI (if (dart.library.io) 'io_impl.dart') on an import or export is resolved as the analyzer resolves it, and reported when it names no existing source:

  • A relative URI resolves against the URI of the containing file: its package: URI inside a package's lib/ directory, so climbing out of lib/ names another package, else its file: URI.
  • A package: URI resolves through the package configuration. Without one, every package: URI is reported. A query is ignored; a fragment, an unknown package, or a missing path segment is reported.
  • A file: URI needs an absolute path; its authority is ignored. A query or fragment (including on a relative URI resolved to file:) names no file.
  • A dart: URI must name a library of the SDK (with its embedder); without a located SDK only invalid paths, queries and fragments are reported.
  • Any other scheme is reported.

Invalid schemes and invalid percent escapes still name missing sources; invalid percent escapes are interpreted as literal percent signs. The default (unconditional) URI is not checked by this rule. Package and SDK metadata come from the run's shared analysis environment; callers must attach it to resolve configured package sources.

Invalid

example.dartdart
import 'targets/stub.dart'
    if (dart.library.io) 'targets/missing_io.dart'
    if (dart.library.js_interop) 'targets/web.dart';
import 'targets/stub.dart'
    if (dart.library.io) 'targets/io.dart'
    if (dart.library.js_interop) 'targets/missing_web.dart'
    if (dart.library.html) 'missing_html.dart'
    as second;
import 'targets/stub.dart'
    if (app.flavor == 'prod') 'targets/prod.dart'
    as third;
export 'targets/stub.dart'
    if (dart.library.io) 'targets/missing_export.dart';
import 'targets/stub.dart'
    if (dart.library.io) "targets/io"
    if (dart.library.ffi) r'targets/raw_missing.dart'
    as fourth;

void main() {}
The target of the conditional URI `targets/missing_io.dart` doesn't exist.
1import 'targets/stub.dart'
2 if (dart.library.io) 'targets/missing_io.dart'
The target of the conditional URI `targets/missing_web.dart` doesn't exist.
5 if (dart.library.io) 'targets/io.dart'
6 if (dart.library.js_interop) 'targets/missing_web.dart'
The target of the conditional URI `missing_html.dart` doesn't exist.
6 if (dart.library.js_interop) 'targets/missing_web.dart'
7 if (dart.library.html) 'missing_html.dart'
The target of the conditional URI `targets/prod.dart` doesn't exist.
9import 'targets/stub.dart'
10 if (app.flavor == 'prod') 'targets/prod.dart'
The target of the conditional URI `targets/missing_export.dart` doesn't exist.
12export 'targets/stub.dart'
13 if (dart.library.io) 'targets/missing_export.dart';
The target of the conditional URI `targets/io` doesn't exist.
14import 'targets/stub.dart'
15 if (dart.library.io) "targets/io"
The target of the conditional URI `targets/raw_missing.dart` doesn't exist.
15 if (dart.library.io) "targets/io"
16 if (dart.library.ffi) r'targets/raw_missing.dart'

Valid

example.dartdart
import 'targets/stub.dart'
    if (dart.library.io) 'targets/io.dart'
    if (dart.library.js_interop) 'targets/web.dart';
import 'targets/stub.dart'
    if (dart.library.io) './targets/io.dart'
    as second;
export 'targets/stub.dart'
    if (dart.library.js_interop) 'targets/web.dart';
// SDK libraries remain unknown without an SDK. The local package configuration
// maps package:web to the declaration targets in this fixture.
import 'targets/stub.dart'
    if (dart.library.io) 'dart:io'
    if (dart.library.js_interop) 'package:web/web.dart'
    as third;
// A missing default URI is the analyzer's uri_does_not_exist, not this rule.
import 'targets/missing_default.dart' as fourth;

void main() {}

Configure conditional-uri-does-not-exist

Set its severity in falcon.json. See the configuration guide.

falcon.jsonjson
{
  "linter": {
    "rules": {
      "style": {
        "conditional-uri-does-not-exist": "error"
      }
    }
  }
}

Or silence one occurrence with a suppression comment; the reason is required.

example.dartdart
// falcon-ignore lint/style/conditional-uri-does-not-exist: <reason>