1<?xml version="1.0"?>
2<ruleset name="device-detector">
3    <description>Device Detector Coding Standard</description>
4
5    <file>.</file>
6
7    <exclude-pattern>vendor/</exclude-pattern>
8
9    <!-- use MO4 coding standard as base -->
10    <rule ref="MO4">
11        <exclude name="SlevomatCodingStandard.Classes.ForbiddenPublicProperty.ForbiddenPublicProperty"/>
12        <exclude name="SlevomatCodingStandard.Commenting.UselessInheritDocComment"/>
13        <exclude name="SlevomatCodingStandard.Functions.UnusedParameter.UnusedParameter"/>
14        <exclude name="Squiz.PHP.DisallowMultipleAssignments.Found"/>
15        <exclude name="SlevomatCodingStandard.ControlStructures.RequireTernaryOperator"/>
16    </rule>
17
18    <rule ref="SlevomatCodingStandard.ControlStructures.RequireTernaryOperator">
19        <properties>
20            <property name="ignoreMultiLine" value="true"/>
21        </properties>
22    </rule>
23
24    <rule ref="Symfony.Commenting">
25        <exclude-pattern>misc/</exclude-pattern>
26        <exclude-pattern>Tests/</exclude-pattern>
27    </rule>
28
29    <rule ref="Squiz.Functions.GlobalFunction.Found">
30        <exclude-pattern>misc/</exclude-pattern>
31        <exclude-pattern>autoload.php</exclude-pattern>
32    </rule>
33
34    <rule ref="PSR1.Files.SideEffects.FoundWithSymbols">
35        <exclude-pattern>misc/</exclude-pattern>
36        <exclude-pattern>autoload.php</exclude-pattern>
37    </rule>
38
39    <!-- Disallow more than 120 chars per line -->
40    <rule ref="Generic.Files.LineLength">
41        <properties>
42            <property name="lineLimit" value="120" />
43            <property name="absoluteLineLimit" value="120" />
44        </properties>
45        <exclude-pattern>misc/</exclude-pattern>
46        <exclude-pattern>Tests/</exclude-pattern>
47    </rule>
48
49    <!-- Require spaces around string concatenating -->
50    <rule ref="Squiz.Strings.ConcatenationSpacing">
51        <properties>
52            <property name="spacing" value="1" />
53        </properties>
54    </rule>
55
56    <!-- Disallow is_null function -->
57    <rule ref="Generic.PHP.ForbiddenFunctions">
58        <properties>
59            <property name="forbiddenFunctions" type="array" value="is_null=>null"/>
60        </properties>
61    </rule>
62
63    <!-- Require empty lines around control structures -->
64    <rule ref="SlevomatCodingStandard.ControlStructures.BlockControlStructureSpacing"/>
65
66    <!-- Require strict types -->
67    <rule ref="SlevomatCodingStandard.TypeHints.DeclareStrictTypes">
68        <properties>
69            <property name="linesCountBeforeDeclare" value="1" />
70            <property name="spacesCountAroundEqualsSign" value="0" />
71            <property name="linesCountAfterDeclare" value="1" />
72        </properties>
73    </rule>
74
75    <!-- Require Yoda-Conditions -->
76    <rule ref="SlevomatCodingStandard.ControlStructures.RequireYodaComparison"/>
77
78    <!-- Disallow useless semicolons -->
79    <rule ref="SlevomatCodingStandard.PHP.UselessSemicolon" />
80
81    <!-- Disallow old type hints in comments (e.g. "int[]" should be "array<int>") -->
82    <rule ref="SlevomatCodingStandard.TypeHints.DisallowArrayTypeHintSyntax"/>
83
84    <!-- Disallow spaces after splat operator -->
85    <rule ref="SlevomatCodingStandard.Operators.SpreadOperatorSpacing"/>
86
87    <!-- Disallow empty lines around class braces -->
88    <rule ref="SlevomatCodingStandard.Classes.EmptyLinesAroundClassBraces">
89        <properties>
90            <property name="linesCountAfterOpeningBrace" value="0" />
91            <property name="linesCountBeforeClosingBrace" value="0" />
92        </properties>
93    </rule>
94
95    <!-- Require empty lines around namespace definition -->
96    <rule ref="SlevomatCodingStandard.Namespaces.NamespaceSpacing">
97        <properties>
98            <property name="linesCountBeforeNamespace" value="1" />
99            <property name="linesCountAfterNamespace" value="1" />
100        </properties>
101    </rule>
102
103    <!-- Require empty lines around use statements -->
104    <rule ref="SlevomatCodingStandard.Namespaces.UseSpacing">
105        <properties>
106            <property name="linesCountBeforeFirstUse" value="1" />
107            <property name="linesCountBetweenUseTypes" value="0" />
108            <property name="linesCountAfterLastUse" value="1" />
109        </properties>
110    </rule>
111</ruleset>
112