google_forms/vendor/slevomat/coding-standard/doc/namespaces.md

187 lines
7.7 KiB
Markdown
Raw Permalink Normal View History

2024-08-21 06:34:30 +00:00
## Namespaces
#### SlevomatCodingStandard.Namespaces.AlphabeticallySortedUses 🔧
Sniff checks whether `use` declarations at the top of a file are alphabetically sorted. Follows natural sorting and takes edge cases with special symbols into consideration. The following code snippet is an example of correctly sorted uses:
```php
use LogableTrait;
use LogAware;
use LogFactory;
use LoggerInterface;
use LogLevel;
use LogStandard;
```
Sniff provides the following settings:
* `psr12Compatible` (defaults to `true`): sets the required order to `classes`, `functions` and `constants`. `false` sets the required order to `classes`, `constants` and `functions`.
* `caseSensitive`: compare namespaces case sensitively, which makes this order correct:
```php
use LogAware;
use LogFactory;
use LogLevel;
use LogStandard;
use LogableTrait;
use LoggerInterface;
```
#### SlevomatCodingStandard.Namespaces.DisallowGroupUse
[Group use declarations](https://wiki.php.net/rfc/group_use_declarations) are ugly, make diffs ugly and this sniff prohibits them.
#### SlevomatCodingStandard.Namespaces.FullyQualifiedExceptions 🔧
This sniff reduces confusion in the following code snippet:
```php
try {
$this->foo();
} catch (Exception $e) {
// Is this the general exception all exceptions must extend from? Or Exception from the current namespace?
}
```
All references to types named `Exception` or ending with `Exception` must be referenced via a fully qualified name:
```php
try {
$this->foo();
} catch (\FooCurrentNamespace\Exception $e) {
} catch (\Exception $e) {
}
```
Sniff provides the following settings:
* Exceptions with different names can be configured in `specialExceptionNames` property.
* If your codebase uses classes that look like exceptions (because they have `Exception` or `Error` suffixes) but aren't, you can add them to `ignoredNames` property and the sniff won't enforce them to be fully qualified. Classes with `Error` suffix have to be added to ignored only if they are in the root namespace (like `LibXMLError`).
#### SlevomatCodingStandard.Namespaces.FullyQualifiedGlobalConstants 🔧
All references to global constants must be referenced via a fully qualified name.
Sniff provides the following settings:
* `include`: list of global constants that must be referenced via FQN. If not set all constants are considered.
* `exclude`: list of global constants that are allowed not to be referenced via FQN.
#### SlevomatCodingStandard.Namespaces.FullyQualifiedGlobalFunctions 🔧
All references to global functions must be referenced via a fully qualified name.
Sniff provides the following settings:
* `include`: list of global functions that must be referenced via FQN. If not set all functions are considered.
* `includeSpecialFunctions`: include complete list of PHP internal functions that could be optimized when referenced via FQN.
* `exclude`: list of global functions that are allowed not to be referenced via FQN.
#### SlevomatCodingStandard.Namespaces.FullyQualifiedClassNameInAnnotation 🔧
Enforces fully qualified names of classes and interfaces in phpDocs - in annotations. This results in unambiguous phpDocs.
Sniff provides the following settings:
* `ignoredAnnotationNames`: case-sensitive list of annotation names that the sniff should ignore. Useful for custom annotation names like `@apiParam`
#### SlevomatCodingStandard.Namespaces.MultipleUsesPerLine
Prohibits multiple uses separated by commas:
```php
use Foo, Bar;
```
#### SlevomatCodingStandard.Namespaces.NamespaceDeclaration 🔧
Enforces one space after `namespace`, disallows content between namespace name and semicolon and disallows use of bracketed syntax.
#### SlevomatCodingStandard.Namespaces.NamespaceSpacing 🔧
Enforces configurable number of lines before and after `namespace`.
Sniff provides the following settings:
* `linesCountBeforeNamespace`: allows to configure the number of lines before `namespace`.
* `linesCountAfterNamespace`: allows to configure the number of lines after `namespace`.
#### SlevomatCodingStandard.Namespaces.RequireOneNamespaceInFile
Requires only one namespace in a file.
#### SlevomatCodingStandard.Namespaces.ReferenceUsedNamesOnly 🔧
Sniff provides the following settings:
* `searchAnnotations` (defaults to `false`): enables searching for mentions in annotations.
* `namespacesRequiredToUse`: if not set, all namespaces are required to be used. When set, only mentioned namespaces are required to be used. Useful in tandem with UseOnlyWhitelistedNamespaces sniff.
* `allowFullyQualifiedExceptions`, `specialExceptionNames` & `ignoredNames`: allows fully qualified exceptions. Useful in tandem with FullyQualifiedExceptions sniff.
* `allowFullyQualifiedNameForCollidingClasses`: allow fully qualified name for a class with a colliding use statement.
* `allowFullyQualifiedNameForCollidingFunctions`: allow fully qualified name for a function with a colliding use statement.
* `allowFullyQualifiedNameForCollidingConstants`: allow fully qualified name for a constant with a colliding use statement.
* `allowFullyQualifiedGlobalClasses`: allows using fully qualified classes from global space (i.e. `\DateTimeImmutable`).
* `allowFullyQualifiedGlobalFunctions`: allows using fully qualified functions from global space (i.e. `\phpversion()`).
* `allowFullyQualifiedGlobalConstants`: allows using fully qualified constants from global space (i.e. `\PHP_VERSION`).
* `allowFallbackGlobalFunctions`: allows using global functions via fallback name without `use` (i.e. `phpversion()`).
* `allowFallbackGlobalConstants`: allows using global constants via fallback name without `use` (i.e. `PHP_VERSION`).
* `allowPartialUses`: allows using and referencing whole namespaces.
#### SlevomatCodingStandard.Namespaces.UseFromSameNamespace 🔧
Sniff prohibits uses from the same namespace:
```php
namespace Foo;
use Foo\Bar;
```
#### SlevomatCodingStandard.Namespaces.UseDoesNotStartWithBackslash 🔧
Disallows leading backslash in use statement:
```php
use \Foo\Bar;
```
#### SlevomatCodingStandard.Namespaces.UseSpacing 🔧
Enforces configurable number of lines before first `use`, after last `use` and between two different types of `use` (eg. between `use function` and `use const`). Also enforces zero number of lines between same types of `use`.
Sniff provides the following settings:
* `linesCountBeforeFirstUse`: allows to configure the number of lines before first `use`.
* `linesCountBetweenUseTypes`: allows to configure the number of lines between two different types of `use`.
* `linesCountAfterLastUse`: allows to configure the number of lines after last `use`.
#### SlevomatCodingStandard.Namespaces.UseOnlyWhitelistedNamespaces
Sniff disallows uses of other than configured namespaces.
Sniff provides the following settings:
* `namespacesRequiredToUse`: namespaces in this array are the only ones allowed to be used. E.g. root project namespace.
* `allowUseFromRootNamespace`: also allow using top-level namespace:
```php
use DateTimeImmutable;
```
#### SlevomatCodingStandard.Namespaces.UselessAlias 🔧
Looks for `use` alias that is same as unqualified name.
#### SlevomatCodingStandard.Namespaces.UnusedUses 🔧
Looks for unused imports from other namespaces.
Sniff provides the following settings:
* `searchAnnotations` (defaults to `false`): enables searching for class names in annotations.
* `ignoredAnnotationNames`: case-sensitive list of annotation names that the sniff should ignore (only the name is ignored, annotation content is still searched). Useful for name collisions like `@testCase` annotation and `TestCase` class.
* `ignoredAnnotations`: case-sensitive list of annotation names that the sniff ignore completely (both name and content are ignored). Useful for name collisions like `@group Cache` annotation and `Cache` class.