Back to Detekt

Configuration for Compose

website/versioned_docs/version-2.0.0-alpha.0/introduction/compose.md

1.23.83.4 KB
Original Source

Relevant rule sets and their configuration options for Compose styles & usage. The following are being used as reference for Compose usage:

FunctionNaming for Compose

See FunctionNaming.

@Composable functions that return Unit are named using PascalCase. detekt may see this as a violation:

kotlin
@Composable
fun FooButton(text: String, onClick: () -> Unit) { // Violation for FooButton()

Recommended configuration

Choose either of the following options:

  • Augment default functionPattern to '[a-zA-Z][a-zA-Z0-9]*' (default is: '[a-z][a-zA-Z0-9]*')
  • Set ignoreAnnotated to ['Composable']

TopLevelPropertyNaming for Compose

See TopLevelPropertyNaming.

Compose guidelines prescribe PascalCase for top-level constants.

Default Style:
kotlin
private val FOO_PADDING = 16.dp
Compose Style:
kotlin
private val FooPadding = 16.dp

Recommended configuration

  • Set constantPattern to '[A-Z][A-Za-z0-9]*' (default is: '[A-Z][_A-Z0-9]*')

LongParameterList for Compose

See LongParameterList.

Composables may boast more than the typical number of function arguments (albeit mostly with default values). For example, see OutlinedTextField.

Recommended configuration

  • Set functionThreshold to a higher value
  • Additionally, can set ignoreDefaultParameters = true

MagicNumber for Compose

See MagicNumber.

Class/companion object/top-level properties that declare objects such as Color(0xFFEA6D7E) may be considered violations if they don't specify the named parameter (i.e. Color(color = 0xFFEA6D7E)).

kotlin
val color1 = Color(0xFFEA6D7E) // Violation

class Foo {
  val color2 = Color(0xFFEA6D7E) // Violation

  companion object {
    val color3 = Color(0xFFEA6D7E) // No violation if ignoreCompanionObjectPropertyDeclaration = true by default
  }
}

Recommended configuration

  • Set ignorePropertyDeclaration = true, ignoreCompanionObjectPropertyDeclaration = true (default)

UnusedPrivateFunction for Compose

See UnusedPrivateFunction.

detekt may see composable preview functions, i.e. those marked with @Preview, as unused.

kotlin
@Preview
@Composable
private fun FooLazyColumnPreview() { // Violation for FooLazyColumnPreview()
    FooLazyColumn()
}

Recommended configuration

  • Set ignoreAnnotated to ['Preview']

TooManyFunctions for Compose

See TooManyFunctions.

detekt may flag files with many composable preview functions, i.e. those marked with @Preview, as having too many functions. Since preview functions do not contribute to complexity, this might not be desired.

Recommended configuration

  • Set ignoreAnnotatedFunctions to ['Preview']