2.4 KiB
2.4 KiB
Dart Analyzer Scope · SCANNER-ENG-0012 (2025-12-08)
Goals
- Define Dart analyzer for pubspec/pub cache parity with other language analyzers.
- Keep offline-first (no
pub get), deterministic inventories/graphs, and policy-ready signals.
Inputs
pubspec.yaml+pubspec.lock(dependencies, sources, sdk constraints)..dart_tool/package_config.json(resolved packages, language version, root URIs).- AOT artifacts:
*.aot,*.snapshot,build/outputs (record presence only). - Optional Flutter plugins:
ios//android/platform manifests (metadata only).
Pipeline (deterministic, offline)
- Normalize pubspec/pubspec.lock:
- Parse lock entries; map sources:
hosted,sdk:flutter,git,path. - Emit PURLs (
pkg:pub/<name>@<version>) withsourcemetadata (hosted.url,git.sha,path). - Enforce sorted components by name.
- Parse lock entries; map sources:
- Package config:
- Read
.dart_tool/package_config.json; map packagerootUri/packageUrito build module graph roots. - Capture
languageVersionandgeneratedtimestamp (drop or normalize to0001-01-01Zfor determinism).
- Read
- Graph builder:
- Build dependency edges from
pubspec.lock->package_configpackages; includesdk:flutternodes when present. - Record
sourceType(hosted/git/path/sdk) for provenance.
- Build dependency edges from
- Signals:
dart.sdkrequirement fromenvironment.sdk;flutterchannel/version when present.- AOT snapshot presence flags (
aot=true,snapshot=true); no binary parsing.
- Outputs:
- Inventory: list of PURLs + source metadata + checksum if provided in lock (hosted
sha256). - Graph: edges
(package -> dependency)sorted. - Signals:
dart.sdkConstraint,flutter.sdk,flutter.plugins(names only),buildArtifactsflags.
- Inventory: list of PURLs + source metadata + checksum if provided in lock (hosted
Tests & fixtures
- Fixtures under
src/Scanner/__Tests/StellaOps.Scanner.Analyzers.Lang.Dart.Tests/Fixtures/:- Hosted-only lockfile, git dependency, path dependency, Flutter project with plugins.
- Determinism tests: stable ordering, normalized timestamps, no network.
- Signal tests: sdk constraint extraction, AOT/snapshot flagging.
Deliverables
- Design captured here; wire into implementation plan + sprint log.
- Analyzer to live under
StellaOps.Scanner.Analyzers.Lang.Dartwith tests mirroring fixtures. - Offline posture: never invoke
dart pub; rely solely on provided lock/config; error clearly when missing lock.