Skip to content

Complicated Conditions ​

Checks if the conditions in the script and template are too complicated. The conditions are evaluated based on the number of logical operations and comparisons. If a condition has more than 4 operations/comparisons, it will report a warning. If it has more than 8, it will report an error.

❓ Why it's good to follow this rule? ​

  • Readability: Complicated conditions with multiple logical operators and comparisons can be difficult to understand at a glance. This can lead to confusion and potential misinterpretation of the code's intent.
  • Maintainability: As conditions become more complex, they become harder to modify or extend. Adding new logic or changing existing conditions can be error-prone and time-consuming.
  • Testability: Complex conditions often require numerous test cases to cover all possible scenarios, making thorough testing more challenging and time-consuming.
  • Debugging: When issues arise, complicated conditions make it harder to isolate the problem and understand which part of the condition is causing unexpected behavior.
  • Cognitive Load: Developers need to keep track of multiple variables and their relationships when working with complex conditions, increasing the mental effort required to understand and work with the code.
  • Code Reusability: Overly complex conditions are often specific to a particular use case, making it difficult to reuse or adapt the logic for other situations.

😱 Examples of code for which this rule will throw a warning ​

WARNING

The following code contains complicated conditions.

vue
<script setup>
if (isGauranga && !isDisabled && hasPermission && (isAdmin || isModerator) && checkCondition(x, y)) {
  doSomething()
}
</script>

<template>
  <div v-if="(isGauranga && !isDisabled && hasPermission && isModerator) || checkCondition(x, y)">
    {{ message }}
  </div>
</template>

🤩 How to fix it? ​

TIP

Refactor the complicated conditions by breaking them down into smaller, more manageable parts. Use descriptive variable names or functions to encapsulate complex logic and improve readability.

vue
<script setup>
const hasAccess = hasPermission && (isAdmin || isModerator)
const isEditable = isGauranga && !isDisabled
if (isEditable && hasAccess && checkCondition(x, y)) {
  doSomething()
}
</script>

<template>
  <div v-if="isGauranga && hasAccess || checkCondition(x, y)">
    {{ message }}
  </div>
</template>

🛠 How to override? ​

The default warning threshold for this rule is 4.

You can override through the new override option in .config/vue-mess-detector.json ⬇️

json
{
  "override": {
    "warningThreshold": 8
  }
}