PackageTrack
Sign in Get early access

anal

A pluggable static analysis framework for Dart and Flutter projects with an extensible runner, rule registry, and CLI.

0.3.8 lezli01/anal

What this package is like to depend on

Last release 2 months ago

29 May 2026

Too new to tell

only 1 release windows

Nearly every release is documented

notes for 9 of 9 stable releases

Nothing withdrawn

no release was ever pulled

2 months old

9 releases · first in 2026

9 releases in the last 12 months

see the full history below

Release timeline

9 releases · May 2026 to May 2026
Release Pre-release

Releases

latest 9
  1. 0.3.8 29 May 2026
    Release notes

    0.3.8 (2026-05-29)

    Features

    • cli: add --list-rules option to print registered rules (fdcd0e4)
    • cli: add --list-rules option to print registered rules (#31) (2761611)
    • hardening unused functions (#35) (251e696)
    • unused_function: exempt constructors of freezed-annotated classes (ff79b39)
    • unused_function: exempt constructors of freezed-annotated classes (#34) (1ef7ca2)
    • unused: suppress nested findings inside unused source files (c972e32)
    • unused: suppress nested findings inside unused source files (#36) (4a84f2c)

    Bug Fixes

    • runner: exclude .dart_tool/ and build/ from analysis by default (b3973b3)
    • runner: exclude .dart_tool/ and build/ from analysis by default (#33) (6456e5c)
    • unused_function: exempt conditional-export and public-API members (fdd67eb)
    • unused_function: exempt conditional-export/import branch targets (b7ad632)
    • unused_function: exempt public members of public types outside lib/src/ (e9de657)
    • unused_function: exempt supertype overrides without @override (dd40f83)
    Open source →
    Release notes

    Features

    • cli: add --list-rules option to print registered rules (fdcd0e4)
    • cli: add --list-rules option to print registered rules (#31) (2761611)
    • hardening unused functions (#35) (251e696)
    • unused_function: exempt constructors of freezed-annotated classes (ff79b39)
    • unused_function: exempt constructors of freezed-annotated classes (#34) (1ef7ca2)
    • unused: suppress nested findings inside unused source files (c972e32)
    • unused: suppress nested findings inside unused source files (#36) (4a84f2c)

    Bug Fixes

    • runner: exclude .dart_tool/ and build/ from analysis by default (b3973b3)
    • runner: exclude .dart_tool/ and build/ from analysis by default (#33) (6456e5c)
    • unused_function: exempt conditional-export and public-API members (fdd67eb)
    • unused_function: exempt conditional-export/import branch targets (b7ad632)
    • unused_function: exempt public members of public types outside lib/src/ (e9de657)
    • unused_function: exempt supertype overrides without @override (dd40f83)
    Open source →
    Release notes

    v0.3.8

    Compare

    Choose a tag to compare

    Open source →
  2. 0.3.7 28 May 2026
    Release notes

    0.3.7 (2026-05-28)

    Features

    • better utilization coverage (#30) (1b86e8f)
    • multi_file_analysis_context: add reportableFilePaths field (6189773)
    • reporter: group ConsoleReporter output by file (8c4bba5)
    • reporter: group ConsoleReporter output by file (#28) (1880d63)
    • samples: exercise excluded-file references in samples (9f3301c)
    • unused_function: only emit diagnostics for reportable files (2c6ee3e)
    • unused_source_file: only flag reportable files (13ad2ee)
    Open source →
    Release notes

    Features

    • better utilization coverage (#30) (1b86e8f)
    • multi_file_analysis_context: add reportableFilePaths field (6189773)
    • reporter: group ConsoleReporter output by file (8c4bba5)
    • reporter: group ConsoleReporter output by file (#28) (1880d63)
    • samples: exercise excluded-file references in samples (9f3301c)
    • unused_function: only emit diagnostics for reportable files (2c6ee3e)
    • unused_source_file: only flag reportable files (13ad2ee)
    Open source →
    Release notes

    v0.3.7

    Compare

    Choose a tag to compare

    Open source →
  3. 0.3.6 28 May 2026
    Release notes

    0.3.6 (2026-05-28)

    Features

    • function analysis enhanced (#26) (b0538b9)
    • unused_function: normalise generic member identity in reference tracking (c19c502)
    • unused_function: record enum-value declarations as uses of the enum constructor (b592b78)
    • unused_function: record implicit super-constructor invocation as a use (ee2a5c1)
    • unused_function: treat overrides of reachable supertype members as uses (c9f3c0e)
    • unused_function: walk supertype chain for noSuchMethod exemption (a85e7e2)

    Bug Fixes

    • unused_function: exempt flutter gen-l10n generated localization output (0c06c1f)
    Open source →
    Release notes

    Features

    • function analysis enhanced (#26) (b0538b9)
    • unused_function: normalise generic member identity in reference tracking (c19c502)
    • unused_function: record enum-value declarations as uses of the enum constructor (b592b78)
    • unused_function: record implicit super-constructor invocation as a use (ee2a5c1)
    • unused_function: treat overrides of reachable supertype members as uses (c9f3c0e)
    • unused_function: walk supertype chain for noSuchMethod exemption (a85e7e2)

    Bug Fixes

    • unused_function: exempt flutter gen-l10n generated localization output (0c06c1f)
    Open source →
    Release notes

    v0.3.6

    Compare

    Choose a tag to compare

    Open source →
  4. 0.3.5 28 May 2026
    Release notes

    0.3.5 (2026-05-28)

    Features

    • dart awareness (#24) (a966836)
    • unused_class: make rule Dart 3 feature-aware (bc6c086)
    • unused_function: make rule feature-aware (0ac7537)
    • unused_source_file: follow conditional and deferred import edges (7e1bc72)
    • updated sample (#21) (9d3e5b2)

    Bug Fixes

    • unused_source_file: follow conditional-URI branches when computing reachability (f7c1bb1)
    • unused_source_file: follow conditional-URI branches when computing reachability (#23) (ff720f2)
    Open source →
    Release notes

    Features

    • dart awareness (#24) (a966836)
    • unused_class: make rule Dart 3 feature-aware (bc6c086)
    • unused_function: make rule feature-aware (0ac7537)
    • unused_source_file: follow conditional and deferred import edges (7e1bc72)
    • updated sample (#21) (9d3e5b2)

    Bug Fixes

    • unused_source_file: follow conditional-URI branches when computing reachability (f7c1bb1)
    • unused_source_file: follow conditional-URI branches when computing reachability (#23) (ff720f2)
    Open source →
    Release notes

    v0.3.5

    Compare

    Choose a tag to compare

    Open source →
  5. 0.3.4 27 May 2026
    Release notes

    0.3.4 (2026-05-27)

    Features

    • sample projects (#17) (f120a92)
    • samples: add unused_source_file sample project (af01ba7)
    • unused functions (#20) (9f79e99)
    • unused_function: add collector for class, mixin, enum, and extension-type members (c5574f2)
    • unused_function: add collector for extension declaration members (ffa728a)
    • unused_function: add collector for top-level getters and setters (3d4d3e7)
    • unused_function: flag unreferenced public top-level functions in lib/src/ (07703ce)

    Bug Fixes

    Open source →
    Release notes

    Features

    • sample projects (#17) (f120a92)
    • samples: add unused_source_file sample project (af01ba7)
    • unused functions (#20) (9f79e99)
    • unused_function: add collector for class, mixin, enum, and extension-type members (c5574f2)
    • unused_function: add collector for extension declaration members (ffa728a)
    • unused_function: add collector for top-level getters and setters (3d4d3e7)
    • unused_function: flag unreferenced public top-level functions in lib/src/ (07703ce)

    Bug Fixes

    Open source →
    Release notes

    v0.3.4

    Compare

    Choose a tag to compare

    Open source →
  6. 0.3.3 27 May 2026
    Release notes

    0.3.3 (2026-05-27)

    Bug Fixes

    • added nuances (35937b3)
    • rules: avoid UnsupportedError on namePart in unused_class (7c8acc8)
    Open source →
    Release notes

    Bug Fixes

    • added nuances (35937b3)
    • rules: avoid UnsupportedError on namePart in unused_class (7c8acc8)
    Open source →
    Release notes

    v0.3.3

    Compare

    Choose a tag to compare

    Open source →
  7. 0.3.2 27 May 2026
    Release notes

    Bug Fixes

    • removed invalid version (67cdcac)
    Open source →
  8. 0.3.0 27 May 2026
    Release notes

    Added

    • New default-on unused_source_file rule. It flags Dart source files in the analyzed set that are never reached from any entry point via an import, export, or part directive. Entry points are files under bin/ or test/, files that declare a top-level main, and lib/<package>.dart plus any other file sitting directly under lib/ (i.e. not nested inside lib/src/). Generated-file basenames such as *.g.dart and *.freezed.dart are skipped defensively even when the runner's default excludes are turned off. Diagnostics are emitted at Severity.warning. The rule is registered by the built-in CLI and enabled automatically. Running dart run lintforge against a project that previously produced no diagnostics may now surface new warnings from this rule.
    • New MultiFileAnalyzerRule extension point for custom rules that need to reason across multiple files in a single invocation (for example to build an import graph or a cross-file symbol index). Multi-file rules are registered with the same RuleRegistry as AnalyzerRule implementations and are dispatched once per run with the full set of resolved compilation units. Existing AnalyzerRule implementations continue to be dispatched once per file and do not need any changes.
    • New --no-default-excludes CLI flag that opts out of the built-in default exclude patterns. Pair it with explicit --exclude flags when you want full control over which paths are skipped.
    • New LintforgeOptions.defaultExcludePaths constant exposing the list of glob patterns excluded by LintforgeOptions.defaults(). Useful when composing custom LintforgeOptions instances programmatically.
    • New default-on unused_function rule. It flags file-local function declarations that are never referenced, specifically private top-level functions in libraries that have no part files and local function declarations inside another function or method body. Diagnostics are emitted at Severity.warning. The rule is registered by the built-in CLI and enabled automatically. Running dart run lintforge against a project that previously produced no diagnostics may now surface new warnings from this rule.
    • New default-on unused_class rule. It flags file-local declarations that are never referenced within the same compilation unit, covering class, mixin, enum, and extension type declarations whose names begin with _. The rule only runs against libraries that have no part files and skips declarations annotated with @pragma('vm:entry-point'). Diagnostics are emitted at Severity.warning. The rule is registered by the built-in CLI and enabled automatically. Running dart run lintforge against a project that previously produced no diagnostics may now surface new warnings from this rule.
    • Open-source project guidance, issue templates, pull request checklist, security policy, code of conduct, and Dependabot configuration.
    • Coverage artifact upload to CI.
    • .pubignore to keep automation and assistant-only files out of the published package archive.
    • .gitattributes for predictable text file line endings.

    Changed

    • Updated CI and release automation to target the repository default branch.
    • Tightened package metadata for pub.dev discovery.
    • Widened the analyzer dependency to >=9.0.0 <13.0.0 so projects using freezed >=3.2.5 can add lintforge without a version-solver conflict.
    • Default exclude patterns now include *.g.dart and *.freezed.dart. Pass an empty excludePaths (or --no-default-excludes on the CLI) to opt out.
    • --exclude now layers on top of the default excludes instead of replacing them. Patterns you pass are added to the built-in defaults; use --no-default-excludes if you need to suppress the defaults.

    Fixed

    • Fixed directory include discovery on Windows.
    • lintforge is now installable alongside freezed ^3.2.5.
    • dart run lintforge --version now prints the correct package version instead of the stale hardcoded 0.1.0.
    • Restored analyzer 9.0.0 compatibility for the unused_class rule. The rule previously reached into ExtensionTypeDeclaration.primaryConstructor, which only exists in analyzer 10+, causing a build break for consumers pinned to analyzer 9.0.0 ('primaryConstructor' isn't defined for the type 'ExtensionTypeDeclaration'). The rule now uses the cross-version ExtensionTypeDeclaration.name accessor.
    • unused_class no longer crashes on analyzer 9.x/10.x. The rule previously read ClassDeclaration.namePart and EnumDeclaration.namePart, which require the default-off experimental flag useDeclaringConstructorsAst = true and otherwise throw UnsupportedError, surfacing as Rule unused_class threw during analysis: .... The rule now uses the always-available name token on both nodes.

    Commits

    Open source →
  9. 0.1.0 27 May 2026
    Release notes
    • Added a pluggable static-analysis framework for Dart and Flutter projects:
      • AnalyzerRule: abstract plugin contract for custom rules.
      • Diagnostic, Severity, SourceLocation: value types describing analysis findings.
      • AnalysisContext: carrier passed into each rule invocation, exposing the resolved compilation unit.
      • RuleRegistry: in-memory registration and lookup of rules, with duplicate-id rejection.
      • AnalysisRunner: orchestrator that resolves target files, dispatches rules, and collects diagnostics.
      • LintforgeOptions: value class describing include/exclude paths and enabled rule ids.
      • Reporter / ConsoleReporter: pluggable diagnostic output, with a stdout implementation.
      • CLI executable lintforge (dart run lintforge) with --help, --version, --rules, and --exclude flags.

    BREAKING CHANGE

    • Removed the Calculator stub that shipped in 0.0.1. Consumers that depended on it must remove the import; it was a generator placeholder and not part of any intended public API.
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive