Releases: AndroidPoet/compose-guard
Release list
ComposeGuard v1.2.4
ComposeGuard v1.2.4
1.2.4
-
More False-Positive Fixes (second pass):
-
DeferStateReads: no longer treats ordinary identifiers (text, index, expanded, progress) as animated state — only values produced by animation/scroll/derived-state builders (including delegated
by) are considered frequently-changing. -
TypeSpecificState: removed the non-canonical collection-factory check that flagged plain
mutableListOf<Int>(); onlymutableStateOfprimitive variants are suggested. -
ModifierReuse & ContentSlotReused: a modifier or content slot used once per mutually-exclusive
if/whenbranch is no longer reported as reuse — only usages reachable on the same composition pass count. -
ModifierTopMost: modifiers on content nested inside scope-providing emitters (Scaffold, BoxWithConstraints) or slots that expose a scope parameter are no longer flagged.
-
AvoidComposed: only the real
Modifier.composed { }factory is flagged, not unrelatedcomposed()calls. -
MovableContent: accepts the whole remember family (rememberSaveable, custom remember wrappers) instead of only the literal
remember. -
Tests: added behavioral regression suites for every fix above.
ComposeGuard v1.2.3
ComposeGuard v1.2.3
1.2.3
-
Major False-Positive Reduction: Audited every rule against the official Compose Rules to stop flagging valid code.
-
Content emission accuracy: ModifierRequired, ContentEmission and MultipleContentEmitters no longer treat value factories like
Color(...),TextStyle(...)orPaddingValues(...)as emitted UI — only calls whose result is discarded count as emission. -
Modifier overrides: ModifierDefaultValue and ModifierNaming skip
override/abstractcomposables, whose parameters cannot legally be renamed or given defaults. -
Type matching: MutableParameter and MutableStateParameter now match the parameter's own type, so function types (
() -> MutableList), wrappers (Holder<MutableState>) and observable holders (MutableStateFlow) are no longer flagged. -
ViewModelForwarding: only flags ViewModels forwarded into another composable, not those handed to ordinary helpers or effects.
-
EffectKeys:
LaunchedEffect(Unit)run-once effects are allowed; a constant key is only flagged when the effect captures parameters that should be keys. -
EventParameterNaming: stops flagging present-tense/noun callbacks ending in -ed (
onSpeed,onProceed,onFeed). -
Material 2: the shared
material.ripplepackage andmaterial.iconsstar-imports are no longer reported. -
TrailingLambda: multi-slot composables (Scaffold-style) no longer require a specific slot to be trailing.
-
Annotation naming: ComposableAnnotationNaming targets
@ComposableTargetMarkerannotations, and MultipreviewNaming applies to multipreview annotation classes instead of ordinary stacked-@Previewfunctions. -
Tests: added behavioral regression tests covering each fixed false positive.
v1.2.2
What's Changed
- Fixed inspection registration mismatch by aligning ComposeGuard inspection shortName with plugin.xml metadata.
- Added regression tests to ensure inspection registration and shortName consistency stay correct.
Verification
- Ran Configuration on demand is an incubating feature.
Task :compose-guard:checkKotlinGradlePluginConfigurationErrors SKIPPED
Task :compose-guard:compileKotlin UP-TO-DATE
Task :compose-guard:compileJava NO-SOURCE
Task :compose-guard:initializeIntellijPlatformPlugin
Task :compose-guard:patchPluginXml UP-TO-DATE
Task :compose-guard:processResources UP-TO-DATE
Task :compose-guard:classes UP-TO-DATE
Task :compose-guard:generateManifest UP-TO-DATE
Task :compose-guard:instrumentCode UP-TO-DATE
Task :compose-guard:jar UP-TO-DATE
Task :compose-guard:compileTestKotlin UP-TO-DATE
Task :compose-guard:compileTestJava NO-SOURCE
Task :compose-guard:processTestResources UP-TO-DATE
Task :compose-guard:testClasses UP-TO-DATE
Task :compose-guard:instrumentTestCode UP-TO-DATE
Task :compose-guard:instrumentedJar UP-TO-DATE
Task :compose-guard:composedJar UP-TO-DATE
Task :compose-guard:prepareTestSandbox UP-TO-DATE
Task :compose-guard:prepareTest
Task :compose-guard:test UP-TO-DATE
BUILD SUCCESSFUL in 5s
14 actionable tasks: 1 executed, 13 up-to-date successfully.
- Ran Configuration on demand is an incubating feature.
Task :compose-guard:initializeIntellijPlatformPlugin
Task :compose-guard:patchPluginXml UP-TO-DATE
Task :compose-guard:generateManifest UP-TO-DATE
Task :compose-guard:checkKotlinGradlePluginConfigurationErrors SKIPPED
Task :compose-guard:compileKotlin UP-TO-DATE
Task :compose-guard:compileJava NO-SOURCE
Task :compose-guard:processResources UP-TO-DATE
Task :compose-guard:classes UP-TO-DATE
Task :compose-guard:instrumentCode UP-TO-DATE
Task :compose-guard:jar UP-TO-DATE
Task :compose-guard:instrumentedJar UP-TO-DATE
Task :compose-guard:composedJar UP-TO-DATE
Task :compose-guard:prepareSandbox UP-TO-DATE
Task :compose-guard:buildSearchableOptions SKIPPED
Task :compose-guard:prepareJarSearchableOptions SKIPPED
Task :compose-guard:jarSearchableOptions SKIPPED
Task :compose-guard:buildPlugin UP-TO-DATE
BUILD SUCCESSFUL in 2s
11 actionable tasks: 1 executed, 10 up-to-date successfully.
ComposeGuard v1.2.1
ComposeGuard v1.2.1
1.2.1
-
False Positive Fix: DerivedStateOfCandidate now ignores collection copies and other computed values inside event handlers such as onClick/onRemove, where the work runs only when the event fires rather than on every recomposition
ComposeGuard v1.2.0
ComposeGuard v1.2.0
1.1.0
-
5 New Performance Rules: Advanced static analysis for recomposition issues
-
UnstableLambdaCaptureRule: Detects lambdas capturing var declarations
-
ObjectCreationInCompositionRule: Detects object instantiation without remember {}
-
WideRecompositionScopeRule: Detects state reads at top of large composables
-
DeferStateReadsRule: Suggests lambda-based modifiers for animations
-
FrequentRecompositionRule: Suggests lifecycle-aware state collection
-
New Quick Fixes: Wrap in Column/Row/Box, UseGraphicsLayerFix, AddStableAnnotationFix
- Total rules increased from 36 to 39
ComposeGuard v1.1.0
ComposeGuard v1.1.0
1.1.0
-
5 New Performance Rules: Advanced static analysis for recomposition issues
-
UnstableLambdaCaptureRule: Detects lambdas capturing var declarations
-
ObjectCreationInCompositionRule: Detects object instantiation without remember {}
-
WideRecompositionScopeRule: Detects state reads at top of large composables
-
DeferStateReadsRule: Suggests lambda-based modifiers for animations
-
FrequentRecompositionRule: Suggests lifecycle-aware state collection
-
New Quick Fixes: Wrap in Column/Row/Box, UseGraphicsLayerFix, AddStableAnnotationFix
- Total rules increased from 36 to 39
ComposeGuard v1.0.9
ComposeGuard v1.0.9
1.0.9
-
State/Callback Pairing: ReorderParametersFix now keeps state/callback pairs together (e.g., value/onValueChange, checked/onCheckedChange)
-
Improved Parameter Ordering: Smart pairing for common patterns like text/onTextChange, query/onQueryChange, selected/onSelectedChange
ComposeGuard v1.0.8
ComposeGuard v1.0.8
1.0.8
-
Rule Enable/Disable Bug Fix: Fixed critical issue with rule enable/disable functionality
-
Restructured Settings Architecture: Improved enable/disable state management for individual rules
-
Settings Persistence Fix: Rule states are now correctly saved and restored across IDE restarts
ComposeGuard v1.0.7
ComposeGuard v1.0.7
1.0.7
-
All Rules Enabled by Default: All rules including experimental are now enabled out of the box
-
Simplified Settings UX: Completely redesigned settings panel
- All checkboxes are now always interactive (no more grayed-out states)
- "Enable All Rules" master switch to select/deselect all rules at once
- Category checkboxes act as "select all/none" for rules in that category
- Parent checkbox states automatically derived from child selections
- Standard IDE settings pattern (like IntelliJ inspections panel)
-
Fixed Critical Settings Bug: Disabling one rule no longer disables ALL rules
-
Hierarchical Rule Control: Proper Master → Category → Rule hierarchy
-
Fixed Rule Category Mismatch: LambdaParameterInEffect moved to correct STATE category
-
Comprehensive Test Coverage: 45+ new tests for settings and enable/disable functionality
ComposeGuard v1.0.6
ComposeGuard v1.0.6
1.0.6
-
Statistics Dashboard: New tool window with violation analytics by category, file, and rule
-
Parameter Ordering Fix: Fixed modifier position to follow official Jetpack Compose guidelines
- Modifier is now correctly enforced as the FIRST optional parameter (not last)
- Order: required → modifier (first optional) → other optionals → content lambda
- Updated ReorderParametersFix quick fix to use correct ordering
-
Suppress Built-in Compose Inspections: Automatically hides Android Studio's built-in Compose lint warnings when ComposeGuard handles them
- New setting: "Suppress built-in Compose inspections" in Settings → Tools → ComposeGuard
-
Comprehensive Test Coverage: Added tests for all 36 rules
- New test files for Modifier, Naming, State, Composable, Stricter, Effects, and Performance categories
- Added EventParameterNaming rule with past tense detection
- Improved settings UI with category toggles