unused-imports
Import, který kód nikde nepoužije, se odstraní.
Opravuje · v presetech dresscode/nette · pokrývá
no_unused_imports, SlevomatCodingStandard.Namespaces.UnusedUses
Co pravidlo hlídá
Každý use na začátku souboru je slib, že se jméno v kódu objeví. Když slib neplatí, import jen mate:
čtenář hledá, kde se třída používá, a IDE ho vede na cestu, která nikam nevede. Pravidlo projde všechny importy tříd,
funkcí i konstant a ty, které nic nepoužívá, smaže.
Použití je jakýkoli výskyt importovaného jména nebo jeho aliasu v kódu: v typu parametru či vlastnosti, za
new, extends, implements, instanceof, v catch, v atributu, v
::class, i jako první část částečně kvalifikovaného jména (Prefix\Deep použije import
Prefix). Jméno zapsané v řetězci se nepočítá, protože pro PHP to je jen text. Jména tříd a funkcí se
srovnávají bez ohledu na velikost písmen, jména konstant přesně, tak jak to dělá PHP.
Import zmíněný jen v dokumentačním komentáři (@var Order, @param User[]) se počítá jako
použitý, protože ho čte PHPStan i IDE; volba searchAnnotations to umí vypnout. Z importu s několika jmény
(use A, B;) a ze skupinového importu (use App\{A, B};) pravidlo odstraní jen nepoužitou položku.
Příklad
namespace App;
use App\Model\User;
use App\Model\Order; // The import of 'Order' is unused
use App\Model\Address;
use function App\format;
use function App\slugify; // The import of 'slugify' is unused
class Profile
{
/** @var Address[] */
private array $addresses = [];
public function __construct(
private User $user,
) {
}
public function render(): string
{
return format($this->user);
}
}
namespace App;
use App\Model\User;
use App\Model\Address;
use function App\format;
class Profile
{
/** @var Address[] */
private array $addresses = [];
public function __construct(
private User $user,
) {
}
public function render(): string
{
return format($this->user);
}
}
Address zůstal, protože se vyskytuje v anotaci @var; kdyby pravidlo import smazalo, PHPStan by
přestal typu rozumět.
Volby
searchAnnotations
bool, výchozí true. Jméno třídy zmíněné v dokumentačním komentáři se počítá jako
použití importu.
Vypnout to dává smysl jen v kódu, kde dokumentační komentáře nečte žádný nástroj. Jinak import, který drží jen anotace, po smazání chybí PHPStanu i našeptávání v editoru.
rules:
dresscode/unused-imports:
searchAnnotations: false
namespace App;
use App\Model\Address; // The import of 'Address' is unused
use App\Model\User;
/**
* @param Address[] $addresses
*/
function first(array $addresses, User $owner): mixed
{
return $addresses[0] ?? null;
}
namespace App;
use App\Model\User;
/**
* @param Address[] $addresses
*/
function first(array $addresses, User $owner): mixed
{
return $addresses[0] ?? null;
}
Související pravidla
ordered-importsřadí importy abecedněuseless-aliasodstraní alias, který jméno neměníuse-from-same-namespaceodstraní import z vlastního jmenného prostorureference-used-names-onlynahradí plně kvalifikované jméno v kódu importem
Zdroj
Třída UnusedImportsRule, fixtury unused-imports.