Správnost
Sekce correctness rozhoduje o tom, co je nejspíš chyba, ať je styl jakýkoli: $this
ve statické metodě, catch, ke kterému se nikdy nedojde, volné hledání v in_array(), operátor
@, neviditelný znak v kódu, dva dokumentační komentáře nad sebou, z nichž reflexe vidí jen jeden.
Většinu těchhle nálezů opravit nejde, protože co měl autor na mysli, z kódu vidět není: DressCode je ohlásí a
nechá na vás. Kde oprava jde, bývá riziková (risky fix). Doplnit do in_array() argument true je
bezpečné, jen když se hledají hodnoty jednoho typu; s typy z PHPStanu to
DressCode pozná a opraví sám, jinde čeká na váš souhlas.
correctness:
thisOutsideObject: forbidden
unreachableCatch: forbidden
strictCalls: required
errorSuppression: forbidden
class Mailer
{
public static function create(): static
{
$this->connect(); // `$this` is not available in a static context.
return new static;
}
public function send(array $to): void
{
try {
$this->transport->send($to);
} catch (\Throwable $e) {
throw $e;
} catch (\RuntimeException $e) { // Unreachable catch block, because a previous one catches `Throwable`.
$this->log($e);
}
$found = in_array('admin', $to); // The `in_array()` call must pass `$strict = true`.
$data = @file_get_contents($this->path); // The `@` operator must not be used.
}
}
Projekt, který operátor @ u některých volání používá záměrně, to může říct komentářem a
klíčem suppressionComments; standard
nette takový vzor nese.
correctness.finalParent
A class extending a final one.
forbidden: never therekeep: nic se nevynucuje, kód zůstane, jak je
Požadavek · jen s typy · standardy: perCs keep, psr12 keep, nette
keep, symfony keep
correctness.__debugInfo
Returns [] where it returned null.
array: returns an empty array from__debugInfo()where it returnsnullkeep: nic se nevynucuje, kód zůstane, jak je
Požadavek · standardy: perCs keep, psr12 keep, nette array,
symfony keep
correctness.thisOutsideObject
$this in a static method or a static closure.
forbidden: never therekeep: nic se nevynucuje, kód zůstane, jak je
Požadavek · standardy: perCs keep, psr12 keep, nette forbidden,
symfony keep · pokrývá Squiz.Scope.StaticThisUsage
correctness.unimplementedAbstractMethods
A non-abstract class implements what it inherits.
forbidden: never therekeep: nic se nevynucuje, kód zůstane, jak je
Požadavek · jen s typy · standardy: perCs keep, psr12 keep, nette
keep, symfony keep
correctness.__serialize
And __unserialize(), beside Serializable.
required: always therekeep: nic se nevynucuje, kód zůstane, jak je
Požadavek · standardy: perCs keep, psr12 keep, nette keep,
symfony keep
correctness.__set_state
As PHP calls it.
static: declares__set_state()static, which is how PHP calls itkeep: nic se nevynucuje, kód zůstane, jak je
Požadavek · standardy: perCs keep, psr12 keep, nette static,
symfony keep
correctness.continueInSwitch
A continue that only leaves a switch is break.
forbidden: never therekeep: nic se nevynucuje, kód zůstane, jak je
Požadavek · standardy: perCs keep, psr12 keep, nette forbidden,
symfony forbidden · pokrývá
switch_continue_to_break, SlevomatCodingStandard.ControlStructures.DisallowContinueWithoutIntegerOperandInSwitch
correctness.unreachableCatch
A catch after one catching Throwable.
forbidden: never therekeep: nic se nevynucuje, kód zůstane, jak je
Požadavek · standardy: perCs keep, psr12 keep, nette forbidden,
symfony keep · pokrývá SlevomatCodingStandard.Exceptions.DeadCatch
correctness.exceptionWhereThrowableBelongs
catch (Exception) and @throws Exception where Throwable is meant.
forbidden: never therekeep: nic se nevynucuje, kód zůstane, jak je
Požadavek · standardy: perCs keep, psr12 keep, nette forbidden,
symfony keep · pokrývá SlevomatCodingStandard.Exceptions.ReferenceThrowableOnly
correctness.errorSuppression
@.
forbidden: never therekeep: nic se nevynucuje, kód zůstane, jak je
Požadavek · standardy: perCs keep, psr12 keep, nette forbidden,
symfony keep
correctness.invisibleCharacters
Non-breaking, zero-width and bidi characters, escaped in comments and strings, which changes their text, and reported in names.
forbidden: never therekeep: nic se nevynucuje, kód zůstane, jak je
Požadavek · standardy: perCs keep, psr12 keep, nette forbidden,
symfony keep · pokrývá non_printable_character
correctness.strictCalls
in_array(), array_search(), array_keys(), base64_decode(),
mb_detect_encoding() pass strict: true; an explicit false is reported.
required: always therekeep: nic se nevynucuje, kód zůstane, jak je
Požadavek · standardy: perCs keep, psr12 keep, nette required,
symfony keep · pokrývá strict_param, SlevomatCodingStandard.Functions.StrictCall
correctness.trailingWhitespaceInStrings
At the end of the lines of a multi-line string or inline HTML, which changes their value.
forbidden: never therekeep: nic se nevynucuje, kód zůstane, jak je
Požadavek · standardy: perCs keep, psr12 keep, nette forbidden,
symfony keep · pokrývá no_trailing_whitespace_in_string
correctness.consecutivePhpdocs
A doc comment followed by another one, the first lost to reflection.
forbidden: never therekeep: nic se nevynucuje, kód zůstane, jak je
Požadavek · standardy: perCs keep, psr12 keep, nette forbidden,
symfony keep
correctness.repeatedAssignment
$a = $a = 1 in one expression.
forbidden: never therekeep: nic se nevynucuje, kód zůstane, jak je
Požadavek · standardy: perCs keep, psr12 keep, nette forbidden,
symfony keep · pokrývá SlevomatCodingStandard.Variables.DuplicateAssignmentToVariable