Repository navigation
Release v15.2.5
This patch moves log_level, lane, and memory_mode configuration from the plugins > saropa_lints: block in analysis_options.yaml to top-level keys in analysis_options_custom.yaml, eliminating false unsupported_option warnings from the Dart SDK's plugin-block validator. Projects using the old location get a deprecation warning and automatic fallback — the keys still work from the plugin block, but moving them to the custom file silences the warnings.
Added
- Full Audit CLI —
dart run saropa_lints audit <dir>runs every rule (pedantic + stylistic) against a codebase regardless of the project's configured tier. Produces enriched JSON with per-diagnostictierandcategoryfields. Supports--since <ref>to audit only changed files,--min-severity/--min-impactpost-filters,--profiletiming, and--exclude-globs/--include-globs. - Full Audit sidebar button — new "Full Audit" entry in the extension sidebar launches the audit with a scope quick-pick (full project, changed vs main, or pick a branch) and opens a filterable report webview with search, tier/severity/impact filter chips, sortable columns, and JSON export. The progress notification shows real-time percentage, file count, issue count, and current filename.
- Audit report keyboard navigation — use ↑/↓ arrow keys to move between rows and Enter to open the file at that diagnostic. A "no matches" state now appears when filters exclude all results.
- Audit baseline diffing —
--save-baselinesaves the current audit as a project baseline at.saropa/audit_baseline.json;--baselinecompares against the saved baseline and tags each diagnostic as new or unchanged. The sidebar quick-pick shows a "Compare to baseline" option when a baseline exists, and the report webview has a "Save as baseline" button and new/unchanged filter chips. - Migrate Config —
dart run saropa_lints migrate-configand a sidebar button ("Migrate config keys") automatically movelog_level,lane, andmemory_modefrom the old plugin block toanalysis_options_custom.yaml. Safe to run multiple times; already-migrated keys are skipped. - Configurable
max_declarations_per_file— setmax_declarations_per_file: Ninanalysis_options_custom.yamlto allow up to N top-level declarations beforeprefer_single_declaration_per_filefires (default 1). No action required — existing behavior is unchanged. - Sealed hierarchy size nudge — set
max_sealed_hierarchy_lines: Ninanalysis_options_custom.yamlto get a lint when a sealed class file exceeds N lines, suggestingpart/part ofto split subtypes while keeping them in the same library (default 0 = disabled).
Fixed
log_level,lane, andmemory_modeplugin configuration keys no longer triggerunsupported_optionwarnings from the Dart SDK analyzer. These keys now live as top-level entries inanalysis_options_custom.yamlinstead of underplugins > saropa_lints:. Projects still using the old location get a deprecation warning with the key's value honored as a fallback;dart run saropa_lints initgenerates the updated layout automatically.prefer_sorted_parametersno longer conflicts withdart format. The rule now respectsalways_put_required_named_parameters_first: required named parameters come first, then optional named parameters, each group sorted alphabetically. Includes a quick fix that reorders parameters automatically. (#321)require_text_overflow_handlingandrequire_text_overflow_in_rowcorrection messages no longer default toTextOverflow.ellipsis. The guidance now recommends wrapping inExpanded/Flexiblefirst — ellipsis is a last resort when truncation is intentional. Both rules offer context-aware quick fixes: "Wrap in Expanded" inside Row/Column/Flex, or "Add maxLines" elsewhere. (#320)prefer_single_declaration_per_fileno longer fires on sealed class hierarchies. Dart requires sealed subtypes in the same library, so co-locating them is mandatory, not a style violation. (#322)avoid_unused_parametersno longer fires on abstract, external, or native method declarations. These methods have no implementation body, so their parameters define the interface contract and cannot be "used." (#319)
Changed (Extension)
- The lane picker now reads and writes
lane:fromanalysis_options_custom.yamlinstead ofanalysis_options.yaml. No action required — the extension handles the new location transparently.