dart-run-static-analysis
About dart-run-static-analysis
A static-analysis workflow guide for Dart and Flutter developers, covering analyzer configuration, diagnostic suppression, and automated fixes. It explains how to run dart analyze, review diagnostics, and format changed code.
Key features
- 01Configure inherited lint rules
- 02Enable strict type checking
- 03Exclude files or suppress diagnostics
- 04Run Dart static analysis
- 05Preview and apply automated fixes
- 06Format code and recheck
Use cases
- 01Set analysis rules for a Dart or Flutter package
- 02Handle diagnostics in generated files
- 03Fail CI on informational diagnostics
- 04Apply fixes in bulk and verify results
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ dhruvanbhalara/ skills --skill dart-run-static-analysisAfter installing, type/dart-run-static-analysisin Claude Code to confirm it loaded.
Details
From the project READMEContents
- Analysis Configuration
- Diagnostic Suppression Rules
- Workflow: Running Static Analysis
- Workflow: Applying Automated Code Fixes
- Examples
Analysis Configuration
Enforce strict formatting, stylistic cleanliness, and code sanity by configuring analysis_options.yaml in the root of your Dart package:
- Inheriting Lints: Inherit a baseline recommended rule set using the
includedirective. Preferpackage:lints/recommended.yamlfor pure Dart packages orpackage:flutter_lints/flutter.yamlfor Flutter applications. - Strict Type Checking: Explicitly declare strict static types under the
analyzer: language:configuration to eliminate unsafe dynamic types:analyzer: language: strict-casts: true strict-inference: true strict-raw-types: true - Linter Rules Customization: Customize specific rules under
linter: rules:. Use a map key structure (rule_name: true/false) to explicitly activate or deactivate rules when overriding an inherited configuration. - Auto-Formatting Options: Declare formatter parameters under the
formatter:node (e.g. configuringpage_width: 80).
Diagnostic Suppression Rules
When an analyzer warning or style lint yields a false positive or hits generated files, suppress the warning explicitly using one of these strategies:
- Exclusion Filters: Exclude entire files or directory trees (such as JSON generated models or internationalization files) from analysis under the
analyzer: exclude:list using standard glob patterns:analyzer: exclude: - "lib/generated/**" - "**/*.g.dart" - File-Level Suppressions: Add
// ignore_for_file: diagnostic_nameon a dedicated line at the absolute top of the Dart file to disable specific rules across the entire file context. - Line-Level Suppressions: Add
// ignore: diagnostic_nameon the line directly preceding the target statement, or appended at the end of the matching line. - Pubspec Suppressions: Suppress package dependency warnings within the
pubspec.yamlby injecting comments (e.g.# ignore: sort_pub_dependencies).
Workflow: Running Static Analysis
Follow this checklist to perform static code auditing:
- Establish analysis config: Ensure
analysis_options.yamlexists at the project root. - Run analysis: Run the analyzer from the terminal:
dart analyze . - Escalate infos to fatal: In CI/CD pipelines, ensure informational lints fail the build by appending the fatal flag:
dart analyze . --fatal-infos - Triage diagnostics: Review warnings, correcting type hierarchies or unused variables, or applying suppressions where appropriate.
Workflow: Applying Automated Code Fixes
Follow this checklist to apply mechanical quick-fixes automatically:
- Verify lints: Confirm that the target linter rules are enabled in
analysis_options.yaml. - Dry run check: Run a dry run to inspect proposed mechanical modifications:
dart fix --dry-run - Apply fixes: Apply the quick-fixes directly across the workspace:
dart fix --apply - Format code: Format the modified code files:
dart format . - Re-run analysis: Confirm that
dart analyzereports clean results.
Examples
Comprehensive analysis_options.yaml Template
include: package:lints/recommended.yaml
analyzer:
exclude:
- "lib/generated/**"
- "**/*.g.dart"
- "**/*.freezed.dart"
language:
strict-casts: true
strict-inference: true
strict-raw-types: true
errors:
todo: ignore
missing_required_param: error
missing_return: error
linter:
rules:
always_declare_return_types: true
avoid_empty_else: true
prefer_const_constructors: true
sort_pub_dependencies: false
formatter:
page_width: 100
trailing_commas: preserve
Inline Suppression Techniques
// 1. Suppress all instances of unused variables inside this specific file
// ignore_for_file: unused_local_variable
void calculateMetrics() {
// 2. Suppress a single line using a preceding comment ignore
// ignore: invalid_assignment
int x = 'not_an_int';
final unusedString = 'value'; // File-level ignore handles this
// 3. Suppress at the end of the line
final double pi = 3.14; // ignore: constant_identifier_names
}