Skip to content

Redundancy rules

This document details the rules available in the Redundancy category.

RuleCode
Constant Conditionconstant-condition
No Closing Tagno-closing-tag
No Empty Commentno-empty-comment
No Empty Loopno-empty-loop
No Noopno-noop
No Protected in Finalno-protected-in-final
No Redundant Blockno-redundant-block
No Redundant Continueno-redundant-continue
No Redundant Fileno-redundant-file
No Redundant Finalno-redundant-final
No Redundant Labelno-redundant-label
No Redundant Mathno-redundant-math
No Redundant Method Overrideno-redundant-method-override
No Redundant Nullsafeno-redundant-nullsafe
No Redundant Parenthesesno-redundant-parentheses
No Redundant Readonlyno-redundant-readonly
No Redundant String Concatno-redundant-string-concat
No Redundant Useno-redundant-use
No Redundant Write Visibilityno-redundant-write-visibility

constant-condition

Detects if statements where the condition is a constant that always evaluates to true or false.

Such statements are redundant. If the condition is always true, the if wrapper is unnecessary. If it's always false, the enclosed code is dead and can be removed or refactored.

Configuration

OptionTypeDefault
enabledbooleantrue
levelstring"help"

Examples

Correct code

php
<?php
if ($variable > 10) {
    echo "Greater than 10";
}

Incorrect code

php
<?php
if (true) {
    echo "This will always run";
}

if (false) {
    echo "This is dead code";
}

no-closing-tag

Detects redundant closing tags ( ?> ) at the end of a file.

Configuration

OptionTypeDefault
enabledbooleantrue
levelstring"help"

Examples

Correct code

php
<?php

echo "Hello, world!";

Incorrect code

php
<?php

echo "Hello, world!";

?>

no-empty-comment

Detects empty comments in the codebase. Empty comments are not useful and should be removed to keep the codebase clean and maintainable.

Configuration

OptionTypeDefault
enabledbooleantrue
levelstring"note"
preserve-single-line-commentsbooleanfalse

Examples

Correct code

php
<?php

// This is a useful comment.
# This is also a useful comment.
/**
 * This is a docblock.
 */

Incorrect code

php
<?php

//
#
/**/

no-empty-loop

Detects loops (for, foreach, while, do-while) that have an empty body. An empty loop body does not perform any actions and is likely a mistake or redundant code.

Configuration

OptionTypeDefault
enabledbooleantrue
levelstring"note"

Examples

Correct code

php
<?php

foreach ($items as $item) {
    process($item);
}

Incorrect code

php
<?php

while (should_wait()) {
    // Empty loop body
}

no-noop

Detects redundant noop statements.

Configuration

OptionTypeDefault
enabledbooleantrue
levelstring"help"

Examples

Correct code

php
<?php

echo "Hello, world!";

Incorrect code

php
<?php

;

no-protected-in-final

Detects protected items in final classes or enums.

Configuration

OptionTypeDefault
enabledbooleanfalse
levelstring"help"

Examples

Correct code

php
<?php

final class Foo {
    private string $foo;
    private(set) string $bar;
    private string $baz;

    private function fun(): void {
        // ...
    }
}

Incorrect code

php
<?php

final class Foo {
    protected string $foo;
    protected(set) string $bar;
    protected private(set) string $baz;

    protected function fun(): void {
        // ...
    }
}

no-redundant-block

Detects redundant blocks around statements.

Configuration

OptionTypeDefault
enabledbooleantrue
levelstring"help"

Examples

Correct code

php
<?php

echo "Hello, world!";

Incorrect code

php
<?php

{
    echo "Hello, world!";
}

no-redundant-continue

Detects redundant continue statements in loops.

Configuration

OptionTypeDefault
enabledbooleantrue
levelstring"help"

Examples

Correct code

php
<?php

while (true) {
    echo "Hello, world!";
}

Incorrect code

php
<?php

while (true) {
    echo "Hello, world!";
    continue; // Redundant `continue` statement
}

no-redundant-file

Detects redundant files that contain no executable code or declarations.

Configuration

OptionTypeDefault
enabledbooleantrue
levelstring"help"

Examples

Correct code

php
<?php

declare(strict_types=1);

function foo(): void {
    return 42;
}

Incorrect code

php
<?php

declare(strict_types=1);
// This file is redundant.

no-redundant-final

Detects redundant final modifiers on methods in final classes or enum methods.

Configuration

OptionTypeDefault
enabledbooleantrue
levelstring"help"

Examples

Correct code

php
<?php

final class Foo {
    public function bar(): void {
        // ...
    }
}

Incorrect code

php
<?php

final class Foo {
    final public function bar(): void {
        // ...
    }
}

no-redundant-label

Detects redundant goto labels that are declared but not used.

Configuration

OptionTypeDefault
enabledbooleantrue
levelstring"help"

Examples

Correct code

php
<?php

goto end;
echo "Hello, world!";
end:

Incorrect code

php
<?php

label:
echo "Hello, world!";

no-redundant-math

Detects redundant mathematical operations that can be simplified or removed. Includes operations like multiplying by 1/-1, adding 0, modulo 1/-1, etc.

Configuration

OptionTypeDefault
enabledbooleantrue
levelstring"help"

Examples

Correct code

php
<?php

$result = $value * 2;
$sum = 1 + $total;
$difference = $value - 1;
$remainder = $x % 2;

Incorrect code

php
<?php

$result = $value * 1;
$sum = 0 + $total;
$difference = $value - 0;
$remainder = $x % 1;
$negative = $value * -1;

no-redundant-method-override

Detects methods that override a parent method but only call the parent method with the same arguments.

Configuration

OptionTypeDefault
enabledbooleantrue
levelstring"help"

Examples

Correct code

php
<?php

class Parent
{
    public function foo(): void
    {
        // ...
    }
}

class Child extends Parent
{
    public function foo(): void
    {
        parent::foo();

        echo 'Additional logic here';
    }
}

Incorrect code

php
<?php

class Parent
{
    public function foo(): void
    {
        // ...
    }
}

class Child extends Parent
{
    public function foo(): void
    {
        parent::foo();
    }
}

no-redundant-nullsafe

Flags the use of the nullsafe operator (?->) in contexts where its null-checking behavior is redundant.

This occurs in two common situations:

  1. When an expression using ?-> is immediately followed by the null coalescing operator (??).
  2. When an expression using ?-> is checked with isset().

In both scenarios, the surrounding language construct (?? or isset()) already handles null values safely, making the ?-> operator superfluous and the code unnecessarily verbose.

Configuration

OptionTypeDefault
enabledbooleantrue
levelstring"help"

Examples

Correct code

php
<?php

$name = $user->name ?? 'Guest';

if (isset($user->profile)) {
    // Do something with $user->profile
}

Incorrect code

php
<?php

$name = $user?->name ?? 'Guest';

if (isset($user?->profile)) {
    // Do something with $user->profile
}

no-redundant-parentheses

Detects redundant parentheses around expressions.

Configuration

OptionTypeDefault
enabledbooleantrue
levelstring"help"

Examples

Correct code

php
<?php

$foo = 42;

Incorrect code

php
<?php

$foo = (42);

no-redundant-readonly

Detects redundant readonly modifiers on properties.

Configuration

OptionTypeDefault
enabledbooleanfalse
levelstring"help"

Examples

Correct code

php
<?php

readonly class User
{
    public $name;
}

Incorrect code

php
<?php

readonly class User
{
    public readonly $name;
}

no-redundant-string-concat

Detects redundant string concatenation expressions.

Configuration

OptionTypeDefault
enabledbooleantrue
levelstring"help"

Examples

Correct code

php
<?php

$foo = "Hello World";

Incorrect code

php
<?php

$foo = "Hello" . " World";

no-redundant-use

Detects use statements that import items that are never used.

Configuration

OptionTypeDefault
enabledbooleanfalse
levelstring"warning"

Examples

Correct code

php
<?php
namespace App;

use App\Helpers\ArrayHelper;

$result = ArrayHelper::combine([]);

Incorrect code

php
<?php
namespace App;

use App\Helpers\ArrayHelper;
use App\Helpers\StringHelper; // StringHelper is not used.

$result = ArrayHelper::combine([]);

no-redundant-write-visibility

Detects redundant write visibility modifiers on properties.

Configuration

OptionTypeDefault
enabledbooleantrue
levelstring"help"

Examples

Correct code

php
<?php

final class User
{
    public $name;
}

Incorrect code

php
<?php

final class User
{
    public public(set) $name;
}