Release v15.1.0
Breaking: 35 rule names that collided with core Dart/Flutter lint names are renamed with semantic suffixes (e.g. prefer_single_quotes → prefer_single_quotes_strict); 3 duplicates with no behavioral difference are removed. Old names are deprecated aliases for one release cycle. Use --fix-ignores to migrate downstream projects. log
require_ignore_comment_plugin_prefix now validates prefixed ignore comments against the rule registry. Four false-positive fixes across gradient-in-build, dartdoc cross-refs, cyclomatic-complexity flat switches, and large-objects-in-state recomputed caches.
Fixed
avoid_gradient_in_buildno longer flags gradients insideAnimatedBuilder.builder,TweenAnimationBuilder.builder,ListenableBuilder.builder, orValueListenableBuilder.builderclosures, where the gradient intentionally varies every animation frame. Also exempts gradients in anybuilder:closure when the gradient's arguments reference a closure-unique parameter (e.g. a tween value), making the gate work for custom animation builders too. No action required.verify_documented_parameters_existno longer flags valid dartdoc cross-references to methods, functions, or getters as stale parameter names. No action required.require_ignore_comment_plugin_prefixnow validates the suffix of already-prefixed ignore comments against the rule registry. A prefixed name that doesn't match any registered rule (typo, renamed rule, or fabricated name) now produces a diagnostic with a "did you mean?" suggestion and a quick fix to auto-replace the typo. No action required.avoid_high_cyclomatic_complexityno longer flags flat switch dispatch tables where every case is a single return, break, or expression with no nested branching — these are enum-to-value lookups with mechanical complexity, not logical branching. No action required.avoid_large_objects_in_stateno longer flags collection fields that are reassigned wholesale in method bodies without accumulating mutations. Accumulation detection now uses element-resolved field matching (immune to shadowed locals), per-variable tracking for multi-variable declarations, constructor initializer list walking, and treats??=as a conditional reassignment instead of growth. No action required.
Maintenance
- Consolidated animation-builder widget name sets into
kAnimatedRebuildersincompound_performance_patterns.dart, used by both compound-performance rules andavoid_gradient_in_build. - Publish audit now blocks on core Dart lint name collisions (Check 8 in tier integrity), auto-updated from dart-lang/linter via
python scripts/update_core_lint_names.py. - Publish pipeline steps now prompt Retry / Ignore / Abort on failure instead of hard-exiting, so the developer can fix issues in another terminal without losing the publish session. Irreversible steps (git push, tag, pub.dev publish, GitHub release) only offer Retry / Abort.
- Removed unused
tiers.dartimport from formatting rules.
Added (Extension)
- Diagnostics sidebar section — four severity toggles (
saropaLints.severity.error,.warning,.info,.hint) plus the Lint integration, Analyzer plugin, and Tier controls (moved from Settings). Each severity has a colored icon (red/yellow/blue/green) and requires double-click to toggle, preventing accidental flips. No action required.
Changed
- Breaking: 35 rules renamed with semantic suffixes to resolve name collisions with core Dart/Flutter lints. Update
analysis_options.yamland// ignore:comments to use the new names (e.g.prefer_single_quotes→prefer_single_quotes_strict). Old names remain as deprecated aliases for one release cycle.
Removed
- Breaking:
avoid_private_typedef_functions,missing_code_block_language_in_doc_comment, andprefer_initializing_formalsremoved — identical to core Dart lints with no behavioral difference. Use the core Dart lint instead; no action required if already enabled.