name: signals-lint description: Standardized compiler diagnostics, static analysis lints, and automated IDE quick-fixes.
signals_lint Tooling & Rules
This skill covers working with static code analysis, custom compiler warning diagnostics, and automated quick-fixes in the signals.dart ecosystem.
🚀 Activation & Setup
Ensure the plugin is active in your project to enable real-time IDE diagnostics and fixes:
# pubspec.yaml
dev_dependencies:
custom_lint: ^0.8.1
signals_lint: ^7.0.0
# analysis_options.yaml
analyzer:
plugins:
- custom_lint
🛡️ Lint Rules Reference
1. signals_avoid_create_in_build_method
Flags instances where a signal or computed variable is created inside a Flutter build method.
- Problem: Creating state during build causes state to reset on every rebuild.
- Solution: Move the creation to the class fields or initialize inside a state lifecycle hook.
2. signals_avoid_deprecated_watch_extension
Flags uses of deprecated BuildContext.watch() and BuildContext.unwatch() extensions.
- Problem: Watch extensions can cause broad stateful widget lifecycle overhead.
- Solution: Use localized
SignalBuilderor inherit fromSignalWidget/SignalStatefulWidget.
3. signals_avoid_deprecated_signals_mixin
Flags usage of deprecated with SignalsMixin mixins on StatefulWidget states.
- Problem: Inherits stateful widget tracking hooks unnecessarily.
- Solution: Inherit from
SignalStatefulWidgetinstead.
4. signals_prefer_named_builder
Enforces named builder: callbacks in SignalBuilder and Watch elements instead of positional arguments.
- Reason: Guarantees standard API parameters and readability.
5. signals_prefer_unified_options
Flags direct creator configuration arguments (e.g. autoDispose: true).
- Solution: Bundle configuration properties under unified options classes (e.g.,
options: SignalOptions(autoDispose: true)).
💡 Automated IDE Code Assists (Quick-fixes)
Place your cursor on the relevant class name or widget instantiation inside your IDE to reveal these automatic assists via the quick-fix menu (Cmd+. or Alt+Enter):
WrapWithSignalBuilder: Wraps any widget expression insideSignalBuilder(builder: (context) => ...).ConvertStatelessToSignalWidget: Refactors a standardStatelessWidgetinto aSignalWidgetinstantly.ConvertStatefulToSignalStatefulWidget: Refactors a standardStatefulWidgetto aSignalStatefulWidget.MigrateSignalsMixinToSignalStatefulWidget: Strips the legacySignalsMixinand converts the class structure toSignalStatefulWidget.MigrateWatchToSignalBuilder: Converts legacyWatch(...)instances into cleanSignalBuilderwidgets.