method.complexity
Ensures that the cyclomatic complexity of functions/methods is withing limit.
For more info on this rule, please visit:
Options
max
Maximum allowed cyclomatic complexity.
Type: number
Default: 6
Examples
- Examples of correct code for this rule using default options
A function with one level of complexity
<?php
function complexityZero(){
echo "Not complex at all!";
}
function complexityOne() {
if ( $condition ) {
}
}
A function with five levels of complexity
<?php
function complexityFive() {
if ( $condition ) {
}
switch ( $condition ) {
case '1':
break;
case '2':
break;
case '3':
break;
}
}
A function with 6 levels of complexity with null safe operator
<?php
function complexitySixWithNullSafeOperator() {
$foo = $object1->getX()?->getY()?->getZ();
$bar = $object2->getX()?->getY()?->getZ();
$baz = $object3->getX()?->getY()?->getZ();
}
- Examples of incorrect code for this rule using default options
A function with 10 levels of complexity
<?php
function complexityTen() {
while ( $condition === true ) {
if ( $condition ) {
}
}
switch ( $condition ) {
case '1':
if ( $condition ) {
} elseif ( $cond ) {
}
break;
case '2':
while ( $cond ) {
echo 'hi';
}
break;
case '3':
break;
default:
break;
}
}
A function with 11 levels of complexity
<?php
function complexityEleven() {
while ( $condition === true ) {
if ( $condition ) {
} elseif ( $cond ) {
}
}
switch ( $condition ) {
case '1':
if ( $condition ) {
} elseif ( $cond ) {
}
break;
case '2':
while ( $cond ) {
echo 'hi';
}
break;
case '3':
break;
default:
break;
}
}
A function with 20 levels of complexity
<?php
function complexityTwentyOne() {
while ( $condition === true ) {
if ( $condition ) {
} elseif ( $cond ) {
}
}
switch ( $condition ) {
case '1':
do {
if ( $condition ) {
} elseif ( $cond ) {
}
} while ( $cond );
break;
case '2':
while ( $cond ) {
echo 'hi';
}
break;
case '3':
switch ( $cond ) {
case '1':
break;
case '2':
break;
}
break;
case '4':
do {
if ( $condition ) {
if ( $cond ) {
} elseif ( $con ) {
}
}
} while ( $cond );
break;
default:
if ( $condition ) {
}
break;
}
}
A function with 21 levels of complexity
<?php
function complexityTwentyTwo() {
while ( $condition === true ) {
do {
if ( $condition ) {
} elseif ( $cond ) {
}
} while ( $cond );
}
switch ( $condition ) {
case '1':
if ( $condition ) {
} elseif ( $cond ) {
}
break;
case '2':
while ( $cond ) {
echo 'hi';
}
break;
case '3':
switch ( $cond ) {
case '1':
break;
case '2':
break;
}
break;
case '4':
do {
if ( $condition ) {
if ( $cond ) {
} elseif ( $con ) {
}
}
} while ( $cond );
break;
default:
if ( $condition ) {
} elseif ( $cond ) {
}
break;
}
}
A function with 10 levels of complexity with ternaries
<?php
function complexityTenWithTernaries() {
$value1 = ( empty( $condition1 ) ) ? $value1A : $value1B;
$value2 = ( empty( $condition2 ) ) ? $value2A : $value2B;
switch ( $condition ) {
case '1':
if ( $condition ) {
} elseif ( $cond ) {
}
break;
case '2':
while ( $cond ) {
echo 'hi';
}
break;
case '3':
break;
default:
break;
}
}
A function with 11 levels of complexity with ternaries
<?php
function complexityElevenWithTernaries() {
$value1 = ( empty( $condition1 ) ) ? $value1A : $value1B;
$value2 = ( empty( $condition2 ) ) ? $value2A : $value2B;
$value3 = ( empty( $condition3 ) ) ? $value3A : $value3B;
switch ( $condition ) {
case '1':
if ( $condition ) {
} elseif ( $cond ) {
}
break;
case '2':
while ( $cond ) {
echo 'hi';
}
break;
case '3':
break;
default:
break;
}
}
A function with 10 levels of complexity with nestedternaries
<?php
function complexityTenWithNestedTernaries() {
$value1 = true ? $value1A : false ? $value1B : $value1C;
switch ( $condition ) {
case '1':
if ( $condition ) {
} elseif ( $cond ) {
}
break;
case '2':
while ( $cond ) {
echo 'hi';
}
break;
case '3':
break;
default:
break;
}
}
A function with 11 levels of complexity with nested ternaries
<?php
function complexityElevenWithNestedTernaries() {
$value1 = ( empty( $condition1 ) ) ? $value1A : $value1B;
$value2 = true ? $value2A : false ? $value2B : $value2C;
switch ( $condition ) {
case '1':
if ( $condition ) {
} elseif ( $cond ) {
}
break;
case '2':
while ( $cond ) {
echo 'hi';
}
break;
case '3':
break;
default:
break;
}
}
A function with 10 levels of complexity with null coalescence
<?php
function complexityTenWithNullCoalescence() {
$value1 = $value1A ?? $value1B;
$value2 = $value2A ?? $value2B;
switch ( $condition ) {
case '1':
if ( $condition ) {
} elseif ( $cond ) {
}
break;
case '2':
while ( $cond ) {
echo 'hi';
}
break;
case '3':
break;
default:
break;
}
}
A function with 11 levels of complexity with null coalescence
<?php
function complexityElevenWithNullCoalescence() {
$value1 = $value1A ?? $value1B;
$value2 = $value2A ?? $value2B;
$value3 = $value3A ?? $value3B;
switch ( $condition ) {
case '1':
if ( $condition ) {
} elseif ( $cond ) {
}
break;
case '2':
while ( $cond ) {
echo 'hi';
}
break;
case '3':
break;
default:
break;
}
}
A function with 10 levels of complexity with nested null coalescence
<?php
function complexityTenWithNestedNullCoalescence() {
$value1 = $value1A ?? $value1B ?? $value1C;
switch ( $condition ) {
case '1':
if ( $condition ) {
} elseif ( $cond ) {
}
break;
case '2':
while ( $cond ) {
echo 'hi';
}
break;
case '3':
break;
default:
break;
}
}
A function with 11 levels of complexity with nested null coalescence
<?php
function complexityElevenWithNestedNullCoalescence() {
$value1 = $value1A ?? $value1B;
$value2 = $value2A ?? $value2B ?? $value2C;
switch ( $condition ) {
case '1':
if ( $condition ) {
} elseif ( $cond ) {
}
break;
case '2':
while ( $cond ) {
echo 'hi';
}
break;
case '3':
break;
default:
break;
}
}
A function with 10 levels of complexity with null coalescence assignment
<?php
function complexityTenWithNullCoalescenceAssignment() {
$value1 ??= $default1;
$value2 ??= $default2;
switch ( $condition ) {
case '1':
if ( $condition ) {
} elseif ( $cond ) {
}
break;
case '2':
while ( $cond ) {
echo 'hi';
}
break;
case '3':
break;
default:
break;
}
}
A function with 11 levels of complexity with null coalescence assignment
<?php
function complexityElevenWithNullCoalescenceAssignment() {
$value1 ??= $default1;
$value2 ??= $default2;
$value3 ??= $default3;
switch ( $condition ) {
case '1':
if ( $condition ) {
} elseif ( $cond ) {
}
break;
case '2':
while ( $cond ) {
echo 'hi';
}
break;
case '3':
break;
default:
break;
}
}
A function with 15 levels of complexity with match
<?php
function complexityFifteenWithMatch()
{
return match(strtolower(substr($monthName, 0, 3))) {
'jan' => 31,
'feb' => is_leap_year($year) ? 29 : 28,
'mar' => 31,
'apr' => 30,
'may' => 31,
'jun' => 30,
'jul' => 31,
'aug' => 31,
'sep' => 30,
'oct' => 31,
'nov' => 30,
'dec' => 31,
default => throw new InvalidArgumentException("Invalid month"),
};
}
A function with 10 levels of complexity with null safe operator
<?php
function complexityTenWithNullSafeOperator() {
$foo = $object1->getX()?->getY()?->getZ();
$bar = $object2->getX()?->getY()?->getZ();
$baz = $object3->getX()?->getY()?->getZ();
$bacon = $object4->getX()?->getY()?->getZ();
$bits = $object5->getX()?->getY()?->getZ();
}
max
- Examples of correct code for this rule using max option
A function with 20 levels of complexity
<?php
/* taqwim "taqwim/method.complexity" : {max: 20} */
function complexityTen() {
while ( $condition === true ) {
if ( $condition ) {
}
}
switch ( $condition ) {
case '1':
if ( $condition ) {
} elseif ( $cond ) {
}
break;
case '2':
while ( $cond ) {
echo 'hi';
}
break;
case '3':
break;
default:
break;
}
}