Skip to content

Releases: AndroidPoet/compose-guard

ComposeGuard v1.2.4

Choose a tag to compare

@github-actions github-actions released this 10 Jun 21:27

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>(); only mutableStateOf primitive variants are suggested.

  • ModifierReuse & ContentSlotReused: a modifier or content slot used once per mutually-exclusive if/when branch 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 unrelated composed() 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

Choose a tag to compare

@github-actions github-actions released this 10 Jun 21:13

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(...) or PaddingValues(...) as emitted UI — only calls whose result is discarded count as emission.

  • Modifier overrides: ModifierDefaultValue and ModifierNaming skip override/abstract composables, 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.ripple package and material.icons star-imports are no longer reported.

  • TrailingLambda: multi-slot composables (Scaffold-style) no longer require a specific slot to be trailing.

  • Annotation naming: ComposableAnnotationNaming targets @ComposableTargetMarker annotations, and MultipreviewNaming applies to multipreview annotation classes instead of ordinary stacked-@Preview functions.

  • Tests: added behavioral regression tests covering each fixed false positive.

v1.2.2

Choose a tag to compare

@AndroidPoet AndroidPoet released this 28 May 07:47

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

Choose a tag to compare

@github-actions github-actions released this 15 May 11:15

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

Choose a tag to compare

@github-actions github-actions released this 13 Apr 16:45

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

Choose a tag to compare

@github-actions github-actions released this 25 Dec 04:25

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

Choose a tag to compare

@github-actions github-actions released this 15 Dec 16:08

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

Choose a tag to compare

@github-actions github-actions released this 15 Dec 09:42

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

Choose a tag to compare

@github-actions github-actions released this 15 Dec 09:01

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

Choose a tag to compare

@github-actions github-actions released this 14 Dec 07:16

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