slevomat / coding-standard

Slevomat Coding Standard for PHP_CodeSniffer provides many useful sniffs
MIT License
1.37k stars 170 forks source link

Fix detection of class usage in double-quoted strings and heredoc #1661

Closed c01l closed 4 months ago

c01l commented 5 months ago

I encountered a bug in Sniffs.Namespaces.UnusedUsesSniff that resulted in reporting too many "unused" classes, if a class instantiation occurred inside of a double quoted string or heredoc.

Quick example (HTML composition):

<?php

use SomeNamespace\MessageBox;

$_ = fn($x) => strval($x);
$html .= <<<HTML
<div>
   <div>...</div>
   {$_(new MessageBox("User did something wrong."))}
</div>
HTML
<?php

namespace SomeNamespace;

class MessageBox {
  public function __construct(private string $msg) {}
  public function __toString(): string {
    return "<div class='alert alert-danger'>$this->msg</div>";
  }
}

I added some tests for this case and added logic for detecting T_NEW T_STRING as class references.

kukulich commented 4 months ago

Thanks.