What is LeanCode Lint?
LeanCode Lint is a collection of:- Static analysis rules - Enforce code quality and consistency
- Custom lint rules - Project-specific best practices (e.g., design system enforcement, hook usage)
- Code assists - IDE refactorings for common patterns
- Analyzer plugin - Configurable rules beyond YAML settings
Installation
You now have LeanCode Lint enabled with default configuration!
Configuration Options
Default Configuration (As-Is)
Use the built-in rules with default settings:Library/Package Configuration
If you’re building a library (not an app), use the package-optimized rules:Disabling Specific Rules
Disable individual rules inanalysis_options.yaml:
Custom Plugin Package
For advanced configuration, create your own analyzer plugin package that extends LeanCode Lint.Why Create a Custom Plugin?
Custom plugins allow you to:- Configure rules programmatically (not just enable/disable)
- Enforce design system conventions
- Customize error messages and parameter names
- Share configuration across multiple projects
Creating a Custom Plugin
Configuration Parameters
Application Prefix
Set a prefix for your app-specific widgets:LncdSliverList to satisfy the prefix_widgets_returning_slivers rule.
Catch Parameter Names
Enforce consistent naming for exception handling:- Default Config
- Custom Config
Design System Item Replacements
Enforce custom design system widgets:Bloc Related Class Naming
Configure naming conventions for BLoC classes:Complete Configuration Example
Custom Lint Rules Reference
Here are the key custom lint rules provided by LeanCode Lint:add_cubit_suffix_for_your_cubits
add_cubit_suffix_for_your_cubits
DO add a ‘Cubit’ suffix to your cubit names.Configuration: None
avoid_conditional_hooks
avoid_conditional_hooks
AVOID using hooks conditionally or after early returns.Configuration: None
catch_parameter_names
catch_parameter_names
DO name catch clause parameters consistently.Configuration:
CatchParameterNamesConfiguse_design_system_item
use_design_system_item
AVOID using items disallowed by the design system.Configuration:
designSystemItemReplacementsprefix_widgets_returning_slivers
prefix_widgets_returning_slivers
DO prefix widget names with ‘Sliver’ if the widget returns slivers.Configuration:
applicationPrefix (allows AppSliverMyList format)use_dedicated_media_query_methods
use_dedicated_media_query_methods
AVOID using Configuration: None
MediaQuery.of for single properties.prefer_equatable_mixin
prefer_equatable_mixin
DO mix in Configuration: None
EquatableMixin instead of extending Equatable.Code Assists
LeanCode Lint provides IDE refactorings (code actions):Available Assists
- Convert positional to named formal - Convert positional parameters to named
- Convert record into nominal type - Extract record into a class
- Convert iterable map to collection-for - Refactor
.map()to for loops
Using Assists
In your IDE:- VSCode: Place cursor on code, press
Ctrl+.or⌘+. - Android Studio/IntelliJ: Place cursor on code, press
Alt+Enter
Real-World Examples
Example 1: Enforcing Design System
Example 2: Team-Wide Conventions
Sharing Configuration Across Projects
Option 1: Local Path
For monorepos, use a path dependency:Option 2: Git Dependency
Host your lint package in a Git repository:Option 3: Publish to pub.dev
Publish your custom lint package:Debugging Lint Issues
Check Plugin Status
Verify the analyzer plugin is running:View Analysis Server Logs
In VSCode:- Open Command Palette (
Cmd+Shift+P) - Run “Dart: Open DevTools”
- Check “Logging” tab
Common Issues
Plugin not running
Plugin not running
Solution: Ensure you’ve run
flutter pub get and restarted your IDE.Rules not applying
Rules not applying
Solution: Check that you’re enabling the correct plugin name:
Conflicts with existing rules
Conflicts with existing rules
Solution: LeanCode Lint rules take precedence. Disable conflicting rules:
Best Practices
Start with defaults, customize gradually
Start with defaults, customize gradually
Begin with default configuration and add custom rules as your team identifies patterns:
Document your configuration
Document your configuration
Add comments explaining custom rules:
Run lints in CI/CD
Run lints in CI/CD
Add to your CI pipeline:
Next Steps
- Explore all available lint rules
- Set up CQRS with quality code
- Add authentication following best practices
- Track code quality with analytics
