-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1 from leroy-merlin-br/ruleset
Ruleset
- Loading branch information
Showing
3 changed files
with
367 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
vendor | ||
composer.lock | ||
phpcs.xml | ||
.phpcs-cache |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
{ | ||
"name": "leroy-merlin-br/coding-standard", | ||
"description": "The coding standard for PHP projects on LMBR", | ||
"type": "phpcodesniffer-standard", | ||
"license": "MIT", | ||
"keywords": [ | ||
"leroy-merlin", | ||
"php", | ||
"coding", | ||
"standard", | ||
"cs", | ||
"code", | ||
"style", | ||
"sniffer", | ||
"rules", | ||
"sniffs", | ||
"checks" | ||
], | ||
"authors": [ | ||
{ | ||
"name": "Boitatá", | ||
"email": "boitata@leroymerlin.com.br" | ||
} | ||
], | ||
"require": { | ||
"php": "^7.1", | ||
"dealerdirect/phpcodesniffer-composer-installer": "^0.4.4", | ||
"slevomat/coding-standard": "^4.8.0", | ||
"squizlabs/php_codesniffer": "^3.3.2" | ||
}, | ||
"config": { | ||
"sort-packages": true | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,329 @@ | ||
<?xml version="1.0"?> | ||
<ruleset | ||
name="LeroyMerlin" | ||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
xsi:noNamespaceSchemaLocation="../../vendor/squizlabs/php_codesniffer/phpcs.xsd" | ||
> | ||
<description>The coding standard for PHP projects on LMBR</description> | ||
|
||
<!-- Import PSR-2 coding standard --> | ||
<rule ref="PSR2"> | ||
<!-- Checked by SlevomatCodingStandard.Namespaces.UseSpacing --> | ||
<exclude name="PSR2.Namespaces.UseDeclaration.SpaceAfterLastUse"/> | ||
<!-- Checked by SlevomatCodingStandard.Namespaces.NamespaceSpacing --> | ||
<exclude name="PSR2.Namespaces.NamespaceDeclaration.BlankLineAfter"/> | ||
</rule> | ||
<!-- Force array element indentation with 4 spaces --> | ||
<rule ref="Generic.Arrays.ArrayIndent"/> | ||
<!-- Forbid `array(...)` syntax --> | ||
<rule ref="Generic.Arrays.DisallowLongArraySyntax"/> | ||
<!-- Forbid duplicate classes --> | ||
<rule ref="Generic.Classes.DuplicateClassName"/> | ||
<!-- Forbid empty statements --> | ||
<rule ref="Generic.CodeAnalysis.EmptyStatement"> | ||
<!-- But allow empty catch --> | ||
<exclude name="Generic.CodeAnalysis.EmptyStatement.DetectedCatch"/> | ||
</rule> | ||
<!-- Forbid final methods in final classes --> | ||
<rule ref="Generic.CodeAnalysis.UnnecessaryFinalModifier"/> | ||
<!-- Forbid useless empty method overrides --> | ||
<rule ref="Generic.CodeAnalysis.UselessOverridingMethod"/> | ||
<!-- Forbid inline HTML in PHP code --> | ||
<rule ref="Generic.Files.InlineHTML"/> | ||
<!-- Force whitespace after a type cast --> | ||
<rule ref="Generic.Formatting.SpaceAfterCast"/> | ||
<!-- Forbid any content before opening tag --> | ||
<rule ref="Generic.PHP.CharacterBeforePHPOpeningTag"/> | ||
<!-- Forbid deprecated functions --> | ||
<rule ref="Generic.PHP.DeprecatedFunctions"/> | ||
<!-- Forbid alias functions, i.e. `delete()`, `sizeof()` --> | ||
<rule ref="Generic.PHP.ForbiddenFunctions"> | ||
<properties> | ||
<property name="forbiddenFunctions" type="array"> | ||
<element key="chop" value="rtrim"/> | ||
<element key="close" value="closedir"/> | ||
<element key="delete" value="unset"/> | ||
<element key="doubleval" value="floatval"/> | ||
<element key="fputs" value="fwrite"/> | ||
<element key="ini_alter" value="ini_set"/> | ||
<element key="is_double" value="is_float"/> | ||
<element key="is_integer" value="is_int"/> | ||
<element key="is_long" value="is_int"/> | ||
<element key="is_real" value="is_float"/> | ||
<element key="is_writeable" value="is_writable"/> | ||
<element key="join" value="implode"/> | ||
<element key="key_exists" value="array_key_exists"/> | ||
<element key="pos" value="current"/> | ||
<element key="show_source" value="highlight_file"/> | ||
<element key="sizeof" value="count"/> | ||
<element key="strchr" value="strstr"/> | ||
</property> | ||
</properties> | ||
</rule> | ||
<!-- Forbid useless inline string concatenation --> | ||
<rule ref="Generic.Strings.UnnecessaryStringConcat"> | ||
<!-- But multiline is useful for readability --> | ||
<properties> | ||
<property name="allowMultiline" value="true"/> | ||
</properties> | ||
</rule> | ||
<!-- Force PHP 7 types to be lowercase --> | ||
<rule ref="Generic.PHP.LowerCaseType"/> | ||
<!-- Forbid comments starting with # --> | ||
<rule ref="PEAR.Commenting.InlineComment"/> | ||
<!-- Disallow else if in favor of elseif --> | ||
<rule ref="PSR2.ControlStructures.ElseIfDeclaration.NotAllowed"> | ||
<type>error</type> | ||
</rule> | ||
<!-- Require a comma after the last element in multi-line array --> | ||
<rule ref="SlevomatCodingStandard.Arrays.TrailingArrayComma"/> | ||
<!-- Force phpDocs separation between diferrent annotations and remove extra `*` --> | ||
<rule ref="SlevomatCodingStandard.Commenting.DocCommentSpacing"> | ||
<properties> | ||
<property name="linesCountBetweenDifferentAnnotationsTypes" value="1"/> | ||
</properties> | ||
</rule> | ||
<!-- Forbid useless annotations - Git and LICENCE file provide more accurate information --> | ||
<rule ref="SlevomatCodingStandard.Commenting.ForbiddenAnnotations"> | ||
<properties> | ||
<property name="forbiddenAnnotations" type="array"> | ||
<element value="@api"/> | ||
<element value="@author"/> | ||
<element value="@category"/> | ||
<element value="@copyright"/> | ||
<element value="@created"/> | ||
<element value="@license"/> | ||
<element value="@package"/> | ||
<element value="@since"/> | ||
<element value="@subpackage"/> | ||
<element value="@version"/> | ||
</property> | ||
</properties> | ||
</rule> | ||
<!-- Forbid useless comments --> | ||
<rule ref="SlevomatCodingStandard.Commenting.ForbiddenComments"> | ||
<properties> | ||
<property name="forbiddenCommentPatterns" type="array"> | ||
<element value="~^(?:(?!private|protected|static)\S+ )?(?:con|de)structor\.\z~i"/> | ||
</property> | ||
</properties> | ||
</rule> | ||
<!-- Report invalid format of inline phpDocs with @var --> | ||
<rule ref="SlevomatCodingStandard.Commenting.InlineDocCommentDeclaration"/> | ||
<!-- Forbid comments with single line written as one-liners --> | ||
<rule ref="SlevomatCodingStandard.Commenting.DisallowOneLinePropertyDocComment"/> | ||
<!-- Require language constructs without parentheses --> | ||
<rule ref="SlevomatCodingStandard.ControlStructures.LanguageConstructWithParentheses"/> | ||
<!-- Require new instances with parentheses --> | ||
<rule ref="SlevomatCodingStandard.ControlStructures.NewWithParentheses"/> | ||
<!-- Require short ternary operator `?:` when possible --> | ||
<rule ref="SlevomatCodingStandard.ControlStructures.RequireShortTernaryOperator"/> | ||
<!-- Require usage of null coalesce operator when possible --> | ||
<rule ref="SlevomatCodingStandard.ControlStructures.RequireNullCoalesceOperator"/> | ||
<!-- Force yoda conditions --> | ||
<rule ref="SlevomatCodingStandard.ControlStructures.RequireYodaComparison"/> | ||
<!-- Forbid useless unreachable catch blocks --> | ||
<rule ref="SlevomatCodingStandard.Exceptions.DeadCatch"/> | ||
<!-- Require use statements to be alphabetically sorted --> | ||
<rule ref="SlevomatCodingStandard.Namespaces.AlphabeticallySortedUses"/> | ||
<!-- Forbid fancy group uses --> | ||
<rule ref="SlevomatCodingStandard.Namespaces.DisallowGroupUse"/> | ||
<!-- Forbid multiple use statements on same line --> | ||
<rule ref="SlevomatCodingStandard.Namespaces.MultipleUsesPerLine"/> | ||
<!-- Require newline after namespace declaration --> | ||
<rule ref="SlevomatCodingStandard.Namespaces.NamespaceSpacing"> | ||
<properties> | ||
<property name="linesCountBeforeNamespace" value="0"/> | ||
</properties> | ||
</rule> | ||
<!-- Forbid using absolute class name references (except global ones) --> | ||
<rule ref="SlevomatCodingStandard.Namespaces.ReferenceUsedNamesOnly"/> | ||
<!-- Forbid unused use statements --> | ||
<rule ref="SlevomatCodingStandard.Namespaces.UnusedUses"> | ||
<properties> | ||
<property name="searchAnnotations" type="boolean" value="true"/> | ||
</properties> | ||
</rule> | ||
<!-- Forbid useless alias --> | ||
<rule ref="SlevomatCodingStandard.Namespaces.UselessAlias"/> | ||
<!-- Forbid superfluous leading backslash in use statements --> | ||
<rule ref="SlevomatCodingStandard.Namespaces.UseDoesNotStartWithBackslash"/> | ||
<!-- Forbid useless uses of the same namespace --> | ||
<rule ref="SlevomatCodingStandard.Namespaces.UseFromSameNamespace"/> | ||
<!-- Require empty newlines before and after uses --> | ||
<rule ref="SlevomatCodingStandard.Namespaces.UseSpacing"> | ||
<properties> | ||
<property name="linesCountAfterLastUse" value="1"/> | ||
<property name="linesCountBeforeFirstUse" value="1"/> | ||
<property name="linesCountBetweenUseTypes" value="0"/> | ||
</properties> | ||
</rule> | ||
<!-- Require combined assignment operators when possible --> | ||
<rule ref="SlevomatCodingStandard.Operators.RequireCombinedAssignmentOperator"/> | ||
<!-- Forbid `list(...)` syntax --> | ||
<rule ref="SlevomatCodingStandard.PHP.ShortList"/> | ||
<!-- Forbid use of longhand cast operators --> | ||
<rule ref="SlevomatCodingStandard.PHP.TypeCast"/> | ||
<!-- Forbid useless semicolon --> | ||
<rule ref="SlevomatCodingStandard.PHP.UselessSemicolon"/> | ||
<!-- Require use of short versions of scalar types (i.e. int instead of integer) --> | ||
<rule ref="SlevomatCodingStandard.TypeHints.LongTypeHints"/> | ||
<!-- Require that the `null` phpDocs must be in the last position --> | ||
<rule ref="SlevomatCodingStandard.TypeHints.NullTypeHintOnLastPosition"/> | ||
<!-- Require one space between typehint and variable, require no space between nullability sign and typehint --> | ||
<rule ref="SlevomatCodingStandard.TypeHints.ParameterTypeHintSpacing"/> | ||
<!-- Forbid space around colon in return types --> | ||
<rule ref="SlevomatCodingStandard.TypeHints.ReturnTypeHintSpacing"/> | ||
<!-- Require types to be written as natively if possible; | ||
require iterable types to specify phpDoc with their content; | ||
forbid useless/duplicated information in phpDoc --> | ||
<rule ref="SlevomatCodingStandard.TypeHints.TypeHintDeclaration"> | ||
<properties> | ||
<property name="enableEachParameterAndReturnInspection" value="true"/> | ||
<property name="usefulAnnotations" type="array"> | ||
<element value="@dataProvider"/> | ||
<element value="@depends"/> | ||
<element value="@group"/> | ||
<element value="@link"/> | ||
<element value="@see"/> | ||
<element value="@SWG\"/> | ||
</property> | ||
</properties> | ||
<!-- Review params before enable it, may be some false-positives --> | ||
<exclude name="SlevomatCodingStandard.TypeHints.TypeHintDeclaration.MissingParameterTypeHint"/> | ||
<!-- Review returns before enable it, may be some false-positives --> | ||
<exclude name="SlevomatCodingStandard.TypeHints.TypeHintDeclaration.MissingReturnTypeHint"/> | ||
<!-- Talk about collections before enable it --> | ||
<exclude name="SlevomatCodingStandard.TypeHints.TypeHintDeclaration.MissingTraversableParameterTypeHintSpecification"/> | ||
<exclude name="SlevomatCodingStandard.TypeHints.TypeHintDeclaration.MissingTraversablePropertyTypeHintSpecification"/> | ||
<exclude name="SlevomatCodingStandard.TypeHints.TypeHintDeclaration.MissingTraversableReturnTypeHintSpecification"/> | ||
</rule> | ||
<!-- Forbid empty lines around type declarations --> | ||
<rule ref="SlevomatCodingStandard.Types.EmptyLinesAroundTypeBraces"> | ||
<properties> | ||
<property name="linesCountAfterOpeningBrace" value="0"/> | ||
<property name="linesCountBeforeClosingBrace" value="0"/> | ||
</properties> | ||
</rule> | ||
<!-- Forbid spaces around square brackets --> | ||
<rule ref="Squiz.Arrays.ArrayBracketSpacing"/> | ||
<!-- Force array declaration structure --> | ||
<rule ref="Squiz.Arrays.ArrayDeclaration"> | ||
<!-- Disable alignment of braces --> | ||
<exclude name="Squiz.Arrays.ArrayDeclaration.CloseBraceNotAligned"/> | ||
<!-- Disable arrow alignment --> | ||
<exclude name="Squiz.Arrays.ArrayDeclaration.DoubleArrowNotAligned"/> | ||
<!-- Uses indentation of only single space --> | ||
<exclude name="Squiz.Arrays.ArrayDeclaration.KeyNotAligned"/> | ||
<!-- Disable force ever value to have a key --> | ||
<exclude name="Squiz.Arrays.ArrayDeclaration.KeySpecified"/> | ||
<!-- Disable force single element to be inline --> | ||
<exclude name="Squiz.Arrays.ArrayDeclaration.MultiLineNotAllowed"/> | ||
<!-- Checked by SlevomatCodingStandard.Arrays.TrailingArrayComma.MissingTrailingComma --> | ||
<exclude name="Squiz.Arrays.ArrayDeclaration.NoCommaAfterLast"/> | ||
<!-- Allow multiple values on a single line --> | ||
<exclude name="Squiz.Arrays.ArrayDeclaration.SingleLineNotAllowed"/> | ||
<!-- Disable alignment of values --> | ||
<exclude name="Squiz.Arrays.ArrayDeclaration.ValueNoNewline"/> | ||
<!-- Disable alignment of values with opening brace --> | ||
<exclude name="Squiz.Arrays.ArrayDeclaration.ValueNotAligned"/> | ||
</rule> | ||
<!-- Forbid class being in a file with different name --> | ||
<rule ref="Squiz.Classes.ClassFileName"/> | ||
<!-- Force `self::` for self-reference, force lower-case self, forbid spaces around `::` --> | ||
<rule ref="Squiz.Classes.SelfMemberReference"> | ||
<!-- Disable force self:: calls --> | ||
<exclude name="Squiz.Classes.SelfMemberReference.NotUsed"/> | ||
</rule> | ||
<!-- Force phpDoc alignment --> | ||
<rule ref="Squiz.Commenting.DocCommentAlignment"/> | ||
<!-- Force rules for phpDocs --> | ||
<rule ref="Squiz.Commenting.FunctionComment"> | ||
<!-- Allow `@throws` without description --> | ||
<exclude name="Squiz.Commenting.FunctionComment.EmptyThrows"/> | ||
<!-- Does not work properly with PHP 7 / short-named types --> | ||
<exclude name="Squiz.Commenting.FunctionComment.IncorrectParamVarName"/> | ||
<!-- Does not support collections, i.e. `string[]` --> | ||
<exclude name="Squiz.Commenting.FunctionComment.IncorrectTypeHint"/> | ||
<!-- Forces incorrect types --> | ||
<exclude name="Squiz.Commenting.FunctionComment.InvalidReturn"/> | ||
<!-- Breaks when all params are not documented --> | ||
<exclude name="Squiz.Commenting.FunctionComment.InvalidTypeHint"/> | ||
<!-- Doc comment is not required for every method, e.g. tests --> | ||
<exclude name="Squiz.Commenting.FunctionComment.Missing"/> | ||
<!-- Do not require comments for `@param` --> | ||
<exclude name="Squiz.Commenting.FunctionComment.MissingParamComment"/> | ||
<!-- Do not require `@param` when PHP 7 type is present --> | ||
<exclude name="Squiz.Commenting.FunctionComment.MissingParamTag"/> | ||
<!-- Do not require `@return` for void methods --> | ||
<exclude name="Squiz.Commenting.FunctionComment.MissingReturn"/> | ||
<!-- Comments don't have to be sentences --> | ||
<exclude name="Squiz.Commenting.FunctionComment.ParamCommentFullStop"/> | ||
<!-- Doens't work with numbers --> | ||
<exclude name="Squiz.Commenting.FunctionComment.ParamCommentNotCapital"/> | ||
<!-- Breaks when all params are not documented --> | ||
<exclude name="Squiz.Commenting.FunctionComment.ParamNameNoMatch"/> | ||
<!-- Doesn't respect inheritance --> | ||
<exclude name="Squiz.Commenting.FunctionComment.ScalarTypeHintMissing"/> | ||
<!-- `@throws` description doesn't have to be sentences --> | ||
<exclude name="Squiz.Commenting.FunctionComment.ThrowsNoFullStop"/> | ||
<!-- Doesn't work with self as typehint --> | ||
<exclude name="Squiz.Commenting.FunctionComment.TypeHintMissing"/> | ||
</rule> | ||
<!-- Forbid global functions --> | ||
<rule ref="Squiz.Functions.GlobalFunction"/> | ||
<!-- Forbid `AND` and `OR`, require `&&` and `||` --> | ||
<rule ref="Squiz.Operators.ValidLogicalOperators"/> | ||
<!-- Forbid `global` --> | ||
<rule ref="Squiz.PHP.GlobalKeyword"/> | ||
<!-- Forbid functions inside functions --> | ||
<rule ref="Squiz.PHP.InnerFunctions"/> | ||
<!-- Require PHP function calls in lowercase --> | ||
<rule ref="Squiz.PHP.LowercasePHPFunctions"/> | ||
<!-- Forbid whitespace before and after concatenation --> | ||
<rule ref="Squiz.Strings.ConcatenationSpacing"> | ||
<properties> | ||
<property name="ignoreNewlines" value="true"/> | ||
</properties> | ||
</rule> | ||
<!-- Forbid strings in `"` unless necessary --> | ||
<rule ref="Squiz.Strings.DoubleQuoteUsage"> | ||
<!-- Allow variables inside double quoted strings --> | ||
<exclude name="Squiz.Strings.DoubleQuoteUsage.ContainsVar"/> | ||
</rule> | ||
<!-- Forbid braces around string in `echo` --> | ||
<rule ref="Squiz.Strings.EchoedStrings"/> | ||
<!-- Forbid spaces in type casts --> | ||
<rule ref="Squiz.WhiteSpace.CastSpacing"/> | ||
<!-- Forbid blank line after function opening brace --> | ||
<rule ref="Squiz.WhiteSpace.FunctionOpeningBraceSpace"/> | ||
<!-- Require space after language constructs --> | ||
<rule ref="Squiz.WhiteSpace.LanguageConstructSpacing"/> | ||
<!-- Require space around logical operators --> | ||
<rule ref="Squiz.WhiteSpace.LogicalOperatorSpacing"/> | ||
<!-- Forbid spaces around `->` operator --> | ||
<rule ref="Squiz.WhiteSpace.ObjectOperatorSpacing"> | ||
<properties> | ||
<property name="ignoreNewlines" value="true"/> | ||
</properties> | ||
</rule> | ||
<!-- Force one space before and after assignment --> | ||
<rule ref="Squiz.WhiteSpace.OperatorSpacing"> | ||
<properties> | ||
<property name="ignoreNewlines" value="true"/> | ||
</properties> | ||
</rule> | ||
<!-- Forbid spaces before semicolon `;` --> | ||
<rule ref="Squiz.WhiteSpace.SemicolonSpacing"/> | ||
<!-- Forbid superfluous whitespaces --> | ||
<rule ref="Squiz.WhiteSpace.SuperfluousWhitespace"> | ||
<properties> | ||
<!-- Turned on by PSR2 -> turning back off --> | ||
<property name="ignoreBlankLines" value="false"/> | ||
</properties> | ||
</rule> | ||
<rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EmptyLines"> | ||
<!-- Forbid duplicated empty lines --> | ||
<severity>5</severity> | ||
</rule> | ||
</ruleset> |