Importy
Sekce imports rozhoduje o příkazech use na začátku souboru: jestli má každé
jméno vlastní příkaz, nebo jich víc sdílí jeden, kdy se píše skupinový import use App\{A, B}, v jakém
pořadí importy stojí a co se stane s importem, který nic nepoužívá.
Které jméno se importuje a které píše s lomítkem, rozhoduje sekce qualification; tahle sekce rozhoduje o tom, jak importy vypadají.
Klíče classes, functions a constants říkají, jestli má každé jméno svůj
use (separate), nebo všechna jména jednoho druhu jeden společný (combined). Skupinový
import zakáže nebo vyžádá groupUse, pořadí order a prázdné řádky mezi importy a za nimi sekce
blankLines.
imports:
classes: separate
functions: combined
order: byKind
unused: forbidden
ofCurrentNamespace: forbidden
namespace App\Model;
use App\Model\Order; // Useless import of `Order` from the current namespace.
use App\Util\Clock, App\Util\Money; // Expected one import per `use` statement, 2 found.
use function count;
use function strlen; // Expected all imports of functions in one `use` statement. // The import of `strlen()` is unused.
use function trim; // Expected all imports of functions in one `use` statement.
class Cart
{
public function total(Order $order, Clock $clock): Money
{
return new Money(count($order->items), trim($order->note));
}
}
namespace App\Model;
use App\Util\Clock;
use App\Util\Money;
use function count, trim;
class Cart
{
public function total(Order $order, Clock $clock): Money
{
return new Money(count($order->items), trim($order->note));
}
}
Jméno zmíněné jen v dokumentačním komentáři (@var Address[]) se počítá jako použité, protože ho
čte PHPStan i editor; vypnout to jde parametrem phpdoc.namesUseImports.
imports.classes
How the imports of classes are spread over use statements.
separate: auseof its own for every name,use Foo; use Bar;combined: all names of the kind in oneuse,use Foo, Bar;, one per namespace declarationkeep: nic se nevynucuje, kód zůstane, jak je
Požadavek · standardy: perCs keep, psr12 keep, nette separate,
symfony separate · pokrývá
single_import_per_statement, SlevomatCodingStandard.Namespaces.MultipleUsesPerLine
imports.functions
How the imports of functions are spread over use statements.
separate: auseof its own for every name,use Foo; use Bar;combined: all names of the kind in oneuse,use Foo, Bar;, one per namespace declarationkeep: nic se nevynucuje, kód zůstane, jak je
Požadavek · standardy: perCs keep, psr12 keep, nette combined,
symfony separate · pokrývá
single_import_per_statement, SlevomatCodingStandard.Namespaces.MultipleUsesPerLine
imports.constants
How the imports of constants are spread over use statements.
separate: auseof its own for every name,use Foo; use Bar;combined: all names of the kind in oneuse,use Foo, Bar;, one per namespace declarationkeep: nic se nevynucuje, kód zůstane, jak je
Požadavek · standardy: perCs keep, psr12 keep, nette combined,
symfony separate · pokrývá
single_import_per_statement, SlevomatCodingStandard.Namespaces.MultipleUsesPerLine
imports.groupUse
The group use, a kind written combined never grouped and a name of the global namespace standing apart.
forbidden: a group use of a kind decided above is expanded into the shape of that kindrequired: the imports of one namespace are written as one group use,use Acme\Shop\{Order, Cart};keep: nic se nevynucuje, kód zůstane, jak je
Požadavek · standardy: perCs keep, psr12 keep, nette keep,
symfony forbidden · pokrývá group_import, single_import_per_statement,
SlevomatCodingStandard.Namespaces.DisallowGroupUse, SlevomatCodingStandard.Namespaces.MultipleUsesPerLine
imports.groupUseFrom
How many names of one namespace make a group use, a group of fewer written as imports of their own.
- počet od 2
Parametr, výchozí 2 · standardy: perCs 2, psr12 2, nette
2, symfony 2 · pokrývá single_import_per_statement
imports.groupUseOverMaxLength
A group use too long for its line spreads over lines, its names filling them.
split: spreads a group use over lines where its line would be too long, its names filling the lineskeep: nic se nevynucuje, kód zůstane, jak je
Požadavek · standardy: perCs keep, psr12 keep, nette keep,
symfony keep
imports.order
The order of consecutive imports, the names of a statement poured back into statements of the shapes written.
byKind: classes, then functions, then constants, each alphabeticalbyKindOnly: classes, then functions, then constants, each in the order writtenkeep: nic se nevynucuje, kód zůstane, jak je
Požadavek · standardy: perCs byKindOnly, psr12 byKindOnly, nette
byKind, symfony byKind · pokrývá
ordered_imports, SlevomatCodingStandard.Namespaces.AlphabeticallySortedUses
imports.orderCaseSensitive
Whether Acme sorts before acme rather than with it.
true, nebofalse
Parametr, výchozí false · standardy: perCs false, psr12 false,
nette false, symfony false · pokrývá
ordered_imports, SlevomatCodingStandard.Namespaces.AlphabeticallySortedUses
imports.unused
An import nothing uses is removed.
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á
no_unused_imports, SlevomatCodingStandard.Namespaces.UnusedUses
Z importu s několika jmény (use A, B;) a ze skupinového importu (use App\{A, B};) se odstraní
jen nepoužitá položka.
imports:
unused: forbidden
namespace App;
use App\Model\User;
use App\Model\Order; // The import of `Order` is unused.
use App\Model\Address;
class Profile
{
/** @var Address[] */
private array $addresses = [];
public function __construct(
private User $user,
) {
}
}
namespace App;
use App\Model\User;
use App\Model\Address;
class Profile
{
/** @var Address[] */
private array $addresses = [];
public function __construct(
private User $user,
) {
}
}
Address zůstal, protože se vyskytuje v anotaci @var; kdyby import zmizel, PHPStan by přestal typu
rozumět.
imports.aliasEqualToName
use Foo as Foo;.
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.Namespaces.UselessAlias
imports.ofCurrentNamespace
use App\Foo; inside namespace App.
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.Namespaces.UseFromSameNamespace