Estándar de codificación Slevomat
Slevomat Coding Standard para PHP_CodeSniffer proporciona sniffs que se dividen en tres categorías:
- Funcional: mejorar la seguridad y el comportamiento del código
- Limpieza - detección de código muerto
- Formato: reglas para una apariencia de código consistente
Tabla de contenido
- Lista alfabética de olfateos
- Instalación
- Cómo ejecutar los olfateos
- Elija qué olfateos ejecutar
- Excluir sniffs que no quieras ejecutar
- Corrección de errores automáticamente
- Suprimir los olfateos localmente
- Contribuyendo
Lista alfabética de olfateos
= Corrección automática de errores
= La verificación de olfateo se puede suprimir localmente
- 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.ModernClassNameReferencia
- SlevomatCodingStandard.Classes.ParentCallSpacing
- SlevomatCodingStandard.Classes.PropertyDeclaración
- 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.TraitUseDeclaración
- SlevomatCodingStandard.Classes.TraitUseSpacing
- SlevomatCodingStandard.Classes.UselessLateStaticBinding
- SlevomatCodingStandard.Commenting.AnnotationName
- SlevomatCodingStandard.Commenting.DeprecatedAnnotationDeclaration
- SlevomatCodingStandard.Commenting.DisallowCommentAfterCode
- SlevomatCodingStandard.Commenting.DisallowOneLinePropertyDocComment
- SlevomatCodingStandard.Commenting.DocCommentSpacing
- SlevomatCodingStandard.Commenting.EmptyComment
- SlevomatCodingStandard.Commenting.ForbiddenAnnotations
- SlevomatCodingStandard.Commenting.ForbiddenComments
- SlevomatCodingStandard.Commenting.InlineDocCommentDeclaración
- SlevomatCodingStandard.Commenting.RequireOneLineDocComment
- SlevomatCodingStandard.Commenting.RequireOneLinePropertyDocComment
- SlevomatCodingStandard.Commenting.UselessFunctionDocComment
- SlevomatCodingStandard.Commenting.UselessInheritDocComment
- SlevomatCodingStandard.Complejidad.Cognitiva
- 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.ArrowFunctionDeclaración
- 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.Namespaces.NamespaceDeclaración
- 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.Funciones optimizadas sin desempaquetar
- SlevomatCodingStandard.PHP.ReferenceSpacing
- SlevomatCodingStandard.PHP.RequireExplicitAssertion
- SlevomatCodingStandard.PHP.RequireNowdoc
- SlevomatCodingStandard.PHP.ShortList
- SlevomatCodingStandard.PHP.TypeCast
- SlevomatCodingStandard.PHP.UselessParentheses
- SlevomatCodingStandard.PHP.UselessPunto y coma
- 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.DuplicateAssignmentToVariable
- SlevomatCodingStandard.Variables.UnusedVariable
- SlevomatCodingStandard.Variables.UselessVariable
- SlevomatCodingStandard.Whitespaces.DuplicateSpaces
Instalación
La forma recomendada de instalar Slevomat Coding Standard es a través de Composer.
{
"require-dev" : {
"slevomat/coding-standard" : " ~8.0 "
}
}
También se recomienda instalar php-parallel-lint/php-parallel-lint que verifica el código fuente en busca de errores de sintaxis. Los sniffs cuentan con que el código procesado sea sintácticamente válido (sin errores de análisis); de lo contrario, pueden comportarse de forma inesperada. Se recomienda ejecutar PHP-Parallel-Lint
en su herramienta de compilación antes de ejecutar PHP_CodeSniffer
y salir temprano del proceso de compilación si PHP-Parallel-Lint
falla.
Cómo ejecutar los olfateos
Puede elegir una de dos formas de ejecutar solo sniffs seleccionados del estándar en su código base:
Elija qué olfateos ejecutar
La forma recomendada es escribir su propio conjunto de reglas.xml haciendo referencia solo a los sniffs seleccionados. Este es un conjunto de reglas de muestra.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 >
Luego ejecute el ejecutable phpcs
de la forma habitual:
vendor/bin/phpcs --standard=ruleset.xml --extensions=php --tab-width=4 -sp src tests
Excluir sniffs que no quieras ejecutar
También puede mencionar Slevomat Coding Standard en el conjunto de ruleset.xml
de su proyecto y excluir solo algunos sniffs:
<? 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 >
Sin embargo, no es una forma recomendada de usar Slevomat Coding Standard, porque su compilación puede fallar al pasar entre versiones menores del estándar (lo que puede suceder si usa la restricción de versión ^
o ~
en composer.json
). Regularmente agregamos nuevos sniffs incluso en versiones menores, lo que significa que lo más probable es que su código no cumpla con las nuevas versiones menores del paquete.
Corrección de errores automáticamente
Los sniffs en este estándar marcados con el símbolo admiten la corrección automática de violaciones del estándar de codificación. Para corregir su código automáticamente, ejecute phpcbf en lugar de phpcs:
vendor/bin/phpcbf --standard=ruleset.xml --extensions=php --tab-width=4 -sp src tests
Recuerde siempre hacer una copia de seguridad de su código antes de realizar correcciones automáticas y verificar los resultados con sus propios ojos, ya que el reparador automático a veces puede producir resultados no deseados.
Suprimir los olfateos localmente
Los sniffs seleccionados en este estándar marcados por el símbolo se pueden suprimir para un fragmento de código específico mediante una anotación. Considere el siguiente ejemplo:
/**
* @param int $max
*/
public function createProgressBar ( $ max = 0 ): ProgressBar
{
}
El parámetro $max
podría tener una sugerencia de tipo escalar int
nativa. Pero debido a que el método en la clase principal no tiene esta sugerencia, éste tampoco puede tenerla. PHP_CodeSniffer muestra el siguiente error:
----------------------------------------------------------------------
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)
Si queremos suprimir este error en lugar de solucionarlo, podemos tomar el código de error ( SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
) y usarlo con una anotación @phpcsSuppress
como esta:
/**
* @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
* @param int $max
*/
public function createProgressBar ( $ max = 0 ): ProgressBar
{
}
Contribuyendo
Para que este repositorio funcione en su máquina, clónelo y ejecute estos dos comandos en el directorio raíz del repositorio:
composer install
bin/phing
Después de escribir algo de código y editar o agregar pruebas unitarias, ejecute phing nuevamente para verificar que todo esté bien:
Siempre estamos esperando sus informes de errores, solicitudes de funciones y solicitudes de extracción. Gracias.
Código de conducta
Este proyecto se adhiere a un Código de conducta para colaboradores. Al participar en este proyecto y su comunidad, se espera que respete este código.