Стандарт кодирования Slevomat
Стандарт кодирования Slevomat для PHP_CodeSniffer предоставляет сниффы, которые делятся на три категории:
- Функционал — улучшение безопасности и поведения кода.
- Очистка – обнаружение мертвого кода
- Форматирование — правила единообразного внешнего вида кода
Оглавление
- Алфавитный список сниффов
- Установка
- Как запустить сниффы
- Выберите, какие проверки запускать
- Исключите сниффы, которые вы не хотите запускать
- Автоматическое исправление ошибок
- Локальное подавление обнюхивания
- Содействие
Алфавитный список сниффов
= Автоматическое исправление ошибок
= Проверку сниффа можно отключить локально
- SlevomatCodingStandard.Arrays.AlphabeticallySortedByKeys
- SlevomatCodingStandard.Arrays.DisallowImplicitArrayCreation
- SlevomatCodingStandard.Arrays.DisallowPartiallyKeyed
- SlevomatCodingStandard.Arrays.MultiLineArrayEndBracketPlacement
- SlevomatCodingStandard.Arrays.ArrayAccessSniff.php
- SlevomatCodingStandard.Arrays.SingleLineArrayWhitespace
- SlevomatCodingStandard.Arrays.TrailingArrayComma
- SlevomatCodingStandard.Attributes.AttributeAndTargetSpacing
- SlevomatCodingStandard.Attributes.AttributesOrder
- SlevomatCodingStandard.Attributes.DisallowAttributesJoining
- SlevomatCodingStandard.Attributes.DisallowMultipleAttributesPerLine
- SlevomatCodingStandard.Attributes.RequireAttributeAfterDocComment
- SlevomatCodingStandard.Classes.BackedEnumTypeSpacing
- SlevomatCodingStandard.Classes.ClassConstantVisibility
- SlevomatCodingStandard.Classes.ClassLength
- SlevomatCodingStandard.Classes.ClassMemberSpacing
- SlevomatCodingStandard.Classes.ClassStructure
- SlevomatCodingStandard.Classes.ConstantSpacing
- SlevomatCodingStandard.Classes.DisallowConstructorPropertyPromotion
- SlevomatCodingStandard.Classes.DisallowLateStaticBindingForConstants
- SlevomatCodingStandard.Classes.DisallowMultiConstantDefinition
- SlevomatCodingStandard.Classes.DisallowMultiPropertyDefinition
- SlevomatCodingStandard.Classes.DisallowStringExpressionPropertyFetch
- SlevomatCodingStandard.Classes.EmptyLinesAroundClassBraces
- SlevomatCodingStandard.Classes.EnumCaseSpacing
- SlevomatCodingStandard.Classes.ForbiddenPublicProperty
- SlevomatCodingStandard.Classes.MethodSpacing
- SlevomatCodingStandard.Classes.ModernClassNameReference
- SlevomatCodingStandard.Classes.ParentCallSpacing
- SlevomatCodingStandard.Classes.PropertyDeclaration
- SlevomatCodingStandard.Classes.PropertySpacing
- SlevomatCodingStandard.Classes.RequireAbstractOrFinal
- SlevomatCodingStandard.Classes.RequireConstructorPropertyPromotion
- SlevomatCodingStandard.Classes.RequireMultiLineMethodSignature
- SlevomatCodingStandard.Classes.RequireSelfReference
- SlevomatCodingStandard.Classes.RequireSingleLineMethodSignature
- SlevomatCodingStandard.Classes.SuperfluousAbstractClassNaming
- SlevomatCodingStandard.Classes.SuperfluousErrorNaming
- SlevomatCodingStandard.Classes.SuperfluousExceptionNaming
- SlevomatCodingStandard.Classes.SuperfluousInterfaceNaming
- SlevomatCodingStandard.Classes.SuperfluousTraitNaming
- SlevomatCodingStandard.Classes.TraitUseDeclaration
- SlevomatCodingStandard.Classes.TraitUseSpacing
- SlevomatCodingStandard.Classes.UselessLateStaticBinding
- SlevomatCodingStandard.Комментирование.ИмяАннотации
- SlevomatCodingStandard.Commenting.DeprecatedAnnotationDeclaration
- SlevomatCodingStandard.Commenting.DisallowCommentAfterCode
- SlevomatCodingStandard.Commenting.DisallowOneLinePropertyDocComment
- SlevomatCodingStandard.Commenting.DocCommentSpacing
- SlevomatCodingStandard.Commenting.EmptyComment
- SlevomatCodingStandard.Commenting.ForbiddenAnnotations
- SlevomatCodingStandard.Commenting.ForbiddenComments
- SlevomatCodingStandard.Commenting.InlineDocCommentDeclaration
- SlevomatCodingStandard.Commenting.RequireOneLineDocComment
- SlevomatCodingStandard.Commenting.RequireOneLinePropertyDocComment
- SlevomatCodingStandard.Комментирование.UselessFunctionDocComment
- SlevomatCodingStandard.Commenting.UselessInheritDocComment
- SlevomatCodingStandard.Complexity.Cognitive
- SlevomatCodingStandard.ControlStructures.AssignmentInCondition
- SlevomatCodingStandard.ControlStructures.BlockControlStructureSpacing
- SlevomatCodingStandard.ControlStructures.DisallowContinueWithoutIntegerOperandInSwitch
- SlevomatCodingStandard.ControlStructures.DisallowEmpty
- SlevomatCodingStandard.ControlStructures.DisallowNullSafeObjectOperator
- SlevomatCodingStandard.ControlStructures.DisallowShortTernaryOperator
- SlevomatCodingStandard.ControlStructures.DisallowTrailingMultiLineTernaryOperatorSniff
- SlevomatCodingStandard.ControlStructures.DisallowYodaComparison
- SlevomatCodingStandard.ControlStructures.EarlyExit
- SlevomatCodingStandard.ControlStructures.JumpStatementsSpacing
- SlevomatCodingStandard.ControlStructures.LanguageConstructWithParentheses
- SlevomatCodingStandard.ControlStructures.NewWithParentheses
- SlevomatCodingStandard.ControlStructures.NewWithoutParentheses
- SlevomatCodingStandard.ControlStructures.RequireMultiLineCondition
- SlevomatCodingStandard.ControlStructures.RequireMultiLineTernaryOperator
- SlevomatCodingStandard.ControlStructures.RequireNullCoalesceEqualOperator
- SlevomatCodingStandard.ControlStructures.RequireNullCoalesceOperator
- SlevomatCodingStandard.ControlStructures.RequireNullSafeObjectOperator
- SlevomatCodingStandard.ControlStructures.RequireShortTernaryOperator
- SlevomatCodingStandard.ControlStructures.RequireSingleLineCondition
- SlevomatCodingStandard.ControlStructures.RequireTernaryOperator
- SlevomatCodingStandard.ControlStructures.RequireYodaComparison
- SlevomatCodingStandard.ControlStructures.UselessIfConditionWithReturn
- SlevomatCodingStandard.ControlStructures.UselessTernaryOperator
- SlevomatCodingStandard.Exceptions.DeadCatch
- SlevomatCodingStandard.Exceptions.DisallowNonCapturingCatch
- SlevomatCodingStandard.Exceptions.ReferenceThrowableOnly
- SlevomatCodingStandard.Exceptions.RequireNonCapturingCatch
- SlevomatCodingStandard.Files.FileLength
- SlevomatCodingStandard.Files.LineLength
- SlevomatCodingStandard.Files.TypeNameMatchesFileName
- SlevomatCodingStandard.Functions.ArrowFunctionDeclaration
- SlevomatCodingStandard.Functions.DisallowArrowFunction
- SlevomatCodingStandard.Functions.DisallowEmptyFunction
- SlevomatCodingStandard.Functions.DisallowNamedArguments
- SlevomatCodingStandard.Functions.DisallowTrailingCommaInCall
- SlevomatCodingStandard.Functions.DisallowTrailingCommaInClosureUse
- SlevomatCodingStandard.Functions.DisallowTrailingCommaInDeclaration
- SlevomatCodingStandard.Functions.FunctionLength
- SlevomatCodingStandard.Functions.NamedArgumentSpacing
- SlevomatCodingStandard.Functions.RequireArrowFunction
- SlevomatCodingStandard.Functions.RequireMultiLineCall
- SlevomatCodingStandard.Functions.RequireSingleLineCall
- SlevomatCodingStandard.Functions.RequireTrailingCommaInCall
- SlevomatCodingStandard.Functions.RequireTrailingCommaInClosureUse
- SlevomatCodingStandard.Functions.RequireTrailingCommaInDeclaration
- SlevomatCodingStandard.Functions.StaticClosure
- SlevomatCodingStandard.Functions.StrictCall
- SlevomatCodingStandard.Functions.UnusedInheritedVariablePassedToClosure
- SlevomatCodingStandard.Functions.UnusedParameter
- SlevomatCodingStandard.Functions.UselessParameterDefaultValue
- SlevomatCodingStandard.Namespaces.AlphabeticallySortedUses
- SlevomatCodingStandard.Namespaces.DisallowGroupUse
- SlevomatCodingStandard.Namespaces.FullyQualifiedClassNameInAnnotation
- SlevomatCodingStandard.Namespaces.FullyQualifiedExceptions
- SlevomatCodingStandard.Namespaces.FullyQualifiedGlobalConstants
- SlevomatCodingStandard.Namespaces.FullyQualifiedGlobalFunctions
- SlevomatCodingStandard.Namespaces.MultipleUsesPerLine
- SlevomatCodingStandard.Пространства имен.Объявление пространства имен
- SlevomatCodingStandard.Namespaces.NamespaceSpacing
- SlevomatCodingStandard.Namespaces.ReferenceUsedNamesOnly
- SlevomatCodingStandard.Namespaces.RequireOneNamespaceInFile
- SlevomatCodingStandard.Namespaces.UnusedUses
- SlevomatCodingStandard.Namespaces.UseDoesNotStartWithBackslash
- SlevomatCodingStandard.Namespaces.UseFromSameNamespace
- SlevomatCodingStandard.Namespaces.UseOnlyWhitelistedNamespaces
- SlevomatCodingStandard.Namespaces.UseSpacing
- SlevomatCodingStandard.Namespaces.UselessAlias
- SlevomatCodingStandard.Numbers.DisallowNumericLiteralSeparator
- SlevomatCodingStandard.Numbers.RequireNumericLiteralSeparator
- SlevomatCodingStandard.Operators.DisallowEqualOperators
- SlevomatCodingStandard.Operators.DisallowIncrementAndDecrementOperators
- SlevomatCodingStandard.Operators.NegationOperatorSpacing
- SlevomatCodingStandard.Operators.RequireCombinedAssignmentOperator
- SlevomatCodingStandard.Operators.RequireOnlyStandaloneIncrementAndDecrementOperators
- SlevomatCodingStandard.Operators.SpreadOperatorSpacing
- SlevomatCodingStandard.PHP.DisallowDirectMagicInvokeCall
- SlevomatCodingStandard.PHP.DisallowReference
- SlevomatCodingStandard.PHP.ForbiddenClasses
- SlevomatCodingStandard.PHP.ОптимизированныеФункцииБезРаспаковки
- SlevomatCodingStandard.PHP.ReferenceSpacing
- SlevomatCodingStandard.PHP.RequireExplicitAssertion
- SlevomatCodingStandard.PHP.RequireNowdoc
- SlevomatCodingStandard.PHP.ShortList
- SlevomatCodingStandard.PHP.TypeCast
- SlevomatCodingStandard.PHP.UselessParentheses
- SlevomatCodingStandard.PHP.Uselessточка с запятой
- SlevomatCodingStandard.Strings.DisallowVariableParsing
- SlevomatCodingStandard.TypeHints.DeclareStrictTypes
- SlevomatCodingStandard.TypeHints.DisallowArrayTypeHintSyntax
- SlevomatCodingStandard.TypeHints.DisallowMixedTypeHint
- SlevomatCodingStandard.TypeHints.LongTypeHints
- SlevomatCodingStandard.TypeHints.NullTypeHintOnLastPosition
- SlevomatCodingStandard.TypeHints.NullableTypeForNullDefaultValue
- SlevomatCodingStandard.TypeHints.ParameterTypeHint
- SlevomatCodingStandard.TypeHints.ParameterTypeHintSpacing
- SlevomatCodingStandard.TypeHints.PropertyTypeHint
- SlevomatCodingStandard.TypeHints.ReturnTypeHint
- SlevomatCodingStandard.TypeHints.ReturnTypeHintSpacing
- SlevomatCodingStandard.TypeHints.UnionTypeHintFormat
- SlevomatCodingStandard.TypeHints.UselessConstantTypeHint
- SlevomatCodingStandard.Variables.DisallowVariableVariable
- SlevomatCodingStandard.Variables.DisallowSuperGlobalVariable
- SlevomatCodingStandard.Variables.DuulateAssignmentToVariable
- SlevomatCodingStandard.Variables.UnusedVariable
- SlevomatCodingStandard.Variables.UselessVariable
- SlevomatCodingStandard.Whitespaces.DuulateSpaces
Установка
Рекомендуемый способ установки Slevomat Coding Standard — через Composer.
{
"require-dev" : {
"slevomat/coding-standard" : " ~8.0 "
}
}
Также рекомендуется установить php-parallel-lint/php-parallel-lint, который проверяет исходный код на наличие синтаксических ошибок. Сниффы рассчитывают на то, что обработанный код является синтаксически допустимым (без ошибок анализа), в противном случае они могут вести себя неожиданно. Рекомендуется запустить PHP-Parallel-Lint
в вашем инструменте сборки перед запуском PHP_CodeSniffer
и досрочно завершить процесс сборки, если PHP-Parallel-Lint
завершится сбоем.
Как запустить сниффы
Вы можете выбрать один из двух способов запуска только выбранных сниффов из стандарта в вашей кодовой базе:
Выберите, какие проверки запускать
Рекомендуемый способ — написать собственный файл Ruleset.xml, ссылаясь только на выбранные фрагменты. Это пример файла ruleset.xml:
<? xml version = " 1.0 " ?>
< ruleset name = " AcmeProject " >
< config name = " installed_paths " value = " ../../slevomat/coding-standard " /> <!-- relative path from PHPCS source location -->
< rule ref = " SlevomatCodingStandard.Arrays.TrailingArrayComma " />
<!-- other sniffs to include -->
</ ruleset >
Затем запустите исполняемый файл phpcs
обычным способом:
vendor/bin/phpcs --standard=ruleset.xml --extensions=php --tab-width=4 -sp src tests
Исключите сниффы, которые вы не хотите запускать
Вы также можете упомянуть Slevomat Coding Standard в ruleset.xml
вашего проекта и исключить только некоторые фрагменты:
<? xml version = " 1.0 " ?>
< ruleset name = " AcmeProject " >
< rule ref = " vendor/slevomat/coding-standard/SlevomatCodingStandard/ruleset.xml " > <!-- relative path to your ruleset.xml -->
<!-- sniffs to exclude -->
</ rule >
</ ruleset >
Однако это не рекомендуемый способ использования стандарта кодирования Slevomat, поскольку ваша сборка может сломаться при переходе между второстепенными версиями стандарта (что может произойти, если вы используете ограничение версии ^
или ~
в composer.json
). Мы регулярно добавляем новые фрагменты даже в минорных версиях, а это означает, что ваш код, скорее всего, не будет соответствовать новым минорным версиям пакета.
Автоматическое исправление ошибок
Сниффы в этом стандарте, отмеченные символом, поддерживают автоматическое исправление нарушений стандарта кодирования. Чтобы автоматически исправить код, запустите phpcbf вместо phpcs:
vendor/bin/phpcbf --standard=ruleset.xml --extensions=php --tab-width=4 -sp src tests
Всегда не забывайте создавать резервную копию кода перед выполнением автоматического исправления и проверяйте результаты собственными глазами, поскольку автоматическое исправление иногда может давать нежелательные результаты.
Локальное подавление обнюхивания
Выбранные фрагменты кода в этом стандарте, отмеченные символом, могут быть подавлены для определенного фрагмента кода с помощью аннотации. Рассмотрим следующий пример:
/**
* @param int $max
*/
public function createProgressBar ( $ max = 0 ): ProgressBar
{
}
Параметр $max
может иметь встроенную скалярную подсказку типа int
. Но поскольку у метода родительского класса нет этого подсказки, то и у этого метода ее быть не может. PHP_CodeSniffer показывает следующую ошибку:
----------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
----------------------------------------------------------------------
67 | ERROR | [x] Method ErrorsConsoleStyle::createProgressBar()
| | does not have native type hint for its parameter $max
| | but it should be possible to add it based on @param
| | annotation "int".
| | (SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint)
Если мы хотим подавить эту ошибку, а не исправлять ее, мы можем взять код ошибки ( SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
) и использовать его с аннотацией @phpcsSuppress
следующим образом:
/**
* @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
* @param int $max
*/
public function createProgressBar ( $ max = 0 ): ProgressBar
{
}
Содействие
Чтобы этот репозиторий работал на вашем компьютере, клонируйте его и запустите эти две команды в корневом каталоге репозитория:
composer install
bin/phing
После написания кода и редактирования или добавления модульных тестов снова запустите phing, чтобы убедиться, что все в порядке:
Мы всегда с нетерпением ждем ваших отчетов об ошибках, запросов на добавление новых функций и запросов на включение изменений. Спасибо.
Нормы поведения
Этот проект соответствует Кодексу поведения участников. Участвуя в этом проекте и его сообществе, вы должны соблюдать этот кодекс.