-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathphpcs.xml
296 lines (232 loc) · 15.4 KB
/
phpcs.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
<?xml version="1.0"?>
<ruleset name="Laravel">
<description>Сoding standard.</description>
<arg name="colors"/>
<arg name="extensions" value="php" />
<arg name="basepath" value="." />
<arg name="parallel" value="75" />
<arg name="tab-width" value="4"/>
<file>src/</file>
<config name="installed_paths" value="vendor/phpcompatibility/php-compatibility,vendor/slevomat/coding-standard" />
<rule ref="PHPCompatibility"/>
<config name="testVersion" value="7.2-"/>
<rule ref="PSR12" />
<!-- Запрещаем использовать ряд функций !-->
<rule ref="Generic.PHP.ForbiddenFunctions">
<properties>
<property phpcs-only="true" name="forbiddenFunctions" type="array"
value="print=>echo,create_function=>null,eval=>null,exec=>null,system=>null"/>
</properties>
</rule>
<rule ref="Generic.Files.LineEndings">
<properties>
<property name="eolChar" value="\n"/>
</properties>
</rule>
<rule ref="Generic.Files.LineLength">
<properties>
<property name="ignoreComments" value="true"/>
<property name="lineLimit" value="120"/>
<property name="absoluteLineLimit" value="0"/>
</properties>
</rule>
<rule ref="Generic.WhiteSpace.DisallowTabIndent"/>
<!-- Ограничиваем максимальную вложенность при использовании {} в идеале, эта цифра должна быть в пределах 5-8 !-->
<rule ref="Generic.Metrics.NestingLevel">
<properties>
<property phpcs-only="true" name="nestingLevel" value="8"/>
<property phpcs-only="true" name="absoluteNestingLevel" value="9"/>
</properties>
</rule>
<rule ref="Generic.NamingConventions.CamelCapsFunctionName">
<properties>
<property phpcs-only="true" name="strict" value="true"/>
</properties>
</rule>
<!-- Если конкатенация избыточна (за исключением переноса на другую строку), то считаем это ошибкой !-->
<rule ref="Generic.Strings.UnnecessaryStringConcat">
<properties>
<property name="allowMultiline" value="true" />
<property name="error" value="false" />
</properties>
</rule>
<rule ref="Squiz.Strings.ConcatenationSpacing">
<properties>
<property name="spacing" value="1" />
<property name="ignoreNewlines" value="true" />
</properties>
</rule>
<!--<rule ref="Generic.Formatting.SpaceAfterNot" />-->
<rule ref="Generic.PHP.DisallowShortOpenTag" />
<!-- Отключаем GOTO !-->
<rule ref="Generic.PHP.DiscourageGoto" />
<!-- Запрещаем подавление ошибок через @ !-->
<!--<rule ref="Generic.PHP.NoSilencedErrors" />-->
<!-- Проверяем на наличие пустых условий !-->
<rule ref="Generic.CodeAnalysis.EmptyStatement" />
<!-- Короткий синтаксис при объявлении массивов !-->
<rule ref="Generic.Arrays.DisallowLongArraySyntax" />
<!-- Проверяем всегда ли условие возвращает true/false !-->
<rule ref="Generic.CodeAnalysis.UnconditionalIfStatement" />
<!-- Если класс объявлен как final, то метод объявлять финальным уже не нужно !-->
<rule ref="Generic.CodeAnalysis.UnnecessaryFinalModifier" />
<!-- Если метод переопределяется, и внутри него вызывается только родительский метод, то такое нам не нужно !-->
<rule ref="Generic.CodeAnalysis.UselessOverridingMethod" />
<!-- А вдруг у нас кто-то в файле создаст несколько одноименных классов?) !-->
<rule ref="Generic.Classes.DuplicateClassName" />
<!-- Запрещаем испльзовать циклы for без условия (это должен быть while) !-->
<rule ref="Generic.CodeAnalysis.ForLoopShouldBeWhileLoop" />
<!-- Во вложенных циклах счетчики должны быть с разными именами !-->
<rule ref="Generic.CodeAnalysis.JumbledIncrementer" />
<!-- Запрещаем использовать оператор присовения в условиях !-->
<!--<rule ref="Generic.CodeAnalysis.AssignmentInCondition" />-->
<!-- Запречаем использовать echo как функцию !-->
<rule ref="Squiz.Strings.EchoedStrings" />
<!-- После вызова echo, print, return, include, include_once, require, require_once необходим пробел !-->
<rule ref="Squiz.WhiteSpace.LanguageConstructSpacing" />
<!-- Между объявленными функциями (методами) необходимо наличие пустой строки !-->
<rule ref="Squiz.WhiteSpace.FunctionSpacing" >
<properties>
<property name="spacing" value="1" />
<property name="spacingAfterLast" value="0" />
<property name="spacingBeforeFirst" value="0" />
</properties>
</rule>
<!-- Перед точкой с запятой в конце строки не должно быть пробела !-->
<rule ref="Squiz.WhiteSpace.SemicolonSpacing" />
<!-- При обращении к методу объекта не должно быть пробелов между оператором объекта "->", методом и самим объектом !-->
<rule ref="Squiz.WhiteSpace.ObjectOperatorSpacing">
<properties>
<property name="ignoreNewlines" value="true" />
</properties>
</rule>
<!-- Приводя тип нельзя использовать пробелы между скобками и самим типом. Необходимо писать (int) вместо ( int ) !-->
<rule ref="Squiz.WhiteSpace.CastSpacing" />
<!-- Запрещаем использовать двойные кавычки если не используется подстановка переменных внутри при помощи {} !-->
<rule ref="Squiz.Strings.DoubleQuoteUsage.NotRequired" />
<rule ref="Squiz.Functions.FunctionDeclarationArgumentSpacing">
<properties>
<property name="requiredSpacesAfterOpen" value="0" />
<property name="requiredSpacesBeforeClose" value="0" />
<property name="equalsSpacing" value="1" />
</properties>
</rule>
<rule ref="Squiz.ControlStructures.ForLoopDeclaration" />
<rule ref="Squiz.ControlStructures.ForEachLoopDeclaration" />
<!-- Запрещаем использовать закрывающий PHP тег ?> в файлах !-->
<rule ref="Zend.Files.ClosingTag"/>
<!--
Если вызов метода переносится на другую строчку, то делать это нужно вместе с "->". Например
Правильно: (new \stdClass())->help()
->c();
Неправильно: (new \stdClass())->help()->
c();
!-->
<rule ref="PEAR.WhiteSpace.ObjectOperatorIndent" />
<!--
Запрещаем использовать дефолтные комментарии PhpStorm в стиле:
- Created by PhpStorm.
- Constructor.
!-->
<rule ref="SlevomatCodingStandard.Commenting.ForbiddenComments" />
<!-- Пустых комментариев в коде не должно быть !-->
<rule ref="SlevomatCodingStandard.Commenting.EmptyComment" />
<!-- Проверяем соответствие имени файла и namespace по стандарту psr-4 !-->
<rule ref="SlevomatCodingStandard.Files.TypeNameMatchesFileName">
<properties>
<property name="rootNamespaces" type="array">
<element key="src" value="App"/>
</property>
</properties>
</rule>
<!-- До и после use требуем поставить пустую строчку !-->
<rule ref="SlevomatCodingStandard.Namespaces.UseSpacing">
<properties>
<property name="linesCountBeforeFirstUse" value="1" />
<property name="linesCountBetweenUseTypes" value="0" />
<property name="linesCountAfterLastUse" value="1" />
</properties>
</rule>
<!-- Требует наличия пустой строки до и после объявления namespace !-->
<rule ref="SlevomatCodingStandard.Namespaces.NamespaceSpacing">
<properties>
<property name="linesCountBeforeNamespace" value="1" />
<property name="linesCountAfterNamespace" value="1" />
</properties>
</rule>
<!-- Проверяет отступы при объявлении namespace и запрещает использовать скобки {} !-->
<rule ref="SlevomatCodingStandard.Namespaces.NamespaceDeclaration" />
<!-- При импорте класса не должно быть начального слеша \ !-->
<rule ref="SlevomatCodingStandard.Namespaces.UseDoesNotStartWithBackslash" />
<!-- Не более 1 namespace в файле !-->
<rule ref="SlevomatCodingStandard.Namespaces.RequireOneNamespaceInFile" />
<!-- Проверяем отступы между типом параметра и самим именем параметра в методах и функциях !-->
<rule ref="SlevomatCodingStandard.TypeHints.ParameterTypeHintSpacing" />
<!-- Проверяем оступы между типом свойства и самим именем свойства в классах !-->
<rule ref="SlevomatCodingStandard.TypeHints.PropertyTypeHintSpacing" />
<!-- Настраиваем пустые строки между свойствами объектов !-->
<rule ref="SlevomatCodingStandard.Classes.PropertySpacing">
<properties>
<property name="minLinesCountBeforeWithComment" value="1" />
<property name="maxLinesCountBeforeWithComment" value="1" />
<property name="minLinesCountBeforeWithoutComment" value="0" />
<property name="maxLinesCountBeforeWithoutComment" value="1" />
</properties>
</rule>
<!-- Убираем из phpDoc лишние аннотации !-->
<rule ref="SlevomatCodingStandard.Commenting.ForbiddenAnnotations">
<properties>
<property name="forbiddenAnnotations" type="array" value="@author,@created,@version,@package,@copyright,@license"/>
</properties>
</rule>
<!-- Запрещает напрямую работать с супрглобальными массивами (появится только после версии slevomat/[email protected]) !-->
<rule ref="SlevomatCodingStandard.Variables.DisallowSuperGlobalVariable" />
<!-- Находит пустые try-catch блоки которые по сути тоже самое, что и подавление ошибок через @ !-->
<rule ref="SlevomatCodingStandard.Exceptions.DeadCatch" />
<!-- Требует запятую в многострочных массивах после последнего элемента !-->
<rule ref="SlevomatCodingStandard.Arrays.TrailingArrayComma" />
<!-- Заставляет использовать короткую запись тернарного оператора при сравнении с null !-->
<!--<rule ref="SlevomatCodingStandard.ControlStructures.RequireNullCoalesceOperator" />
<rule ref="SlevomatCodingStandard.ControlStructures.RequireShortTernaryOperator" />-->
<!-- Просит использовать тернарный оператор если это возможно !-->
<!--<rule ref="SlevomatCodingStandard.ControlStructures.RequireTernaryOperator" />-->
<!-- Проверяет возможно ли использование раннего выхода !-->
<!--<rule ref="SlevomatCodingStandard.ControlStructures.EarlyExit" />-->
<!-- Требует использовать жесткое сравнение с учетом типа === или !== вместо мягкого == или != !-->
<!--<rule ref="SlevomatCodingStandard.Operators.DisallowEqualOperators" />-->
<!-- Разрешает использование инкремента и декремента только в простых констуркциях, чтобы не превращять код в BrainFuck !-->
<rule ref="SlevomatCodingStandard.Operators.RequireOnlyStandaloneIncrementAndDecrementOperators" />
<!-- Для перфоманса просит вызывать некоторые методы без распаковки !-->
<rule ref="SlevomatCodingStandard.PHP.OptimizedFunctionsWithoutUnpacking" />
<!-- При импорте классов из одного неймспейса просит выполнить рефакторинг !-->
<rule ref="SlevomatCodingStandard.Namespaces.UseFromSameNamespace" />
<!-- Запрещает импортировать классы в namespace и при подмене присваивать им такое же имя как в оригинале !-->
<rule ref="SlevomatCodingStandard.Namespaces.UselessAlias" />
<!-- Поиск неиспользуемых импортированных классов через use !-->
<!--<rule ref="SlevomatCodingStandard.Namespaces.UnusedUses">
<properties>
<!– Включаем поиск по аннотациям !–>
<property name="searchAnnotations" value="true" />
</properties>
</rule>-->
<!-- Запрещает неявное создание массивов !-->
<rule ref="SlevomatCodingStandard.Arrays.DisallowImplicitArrayCreation" />
<!-- Поиск неиспользуемых переменных закинутых в замыканиче через use !-->
<rule ref="SlevomatCodingStandard.Functions.UnusedInheritedVariablePassedToClosure" />
<!-- Константы классов должны объявляться с указанием области видимости !-->
<rule ref="SlevomatCodingStandard.Classes.ClassConstantVisibility" />
<!-- Если указан типо возвращаеммых данных из метода, то проверяем где стоит двоеточие!-->
<rule ref="SlevomatCodingStandard.TypeHints.ReturnTypeHintSpacing" />
<!-- Типы должны быть указаны в нижнем регистре !-->
<rule ref="Generic.PHP.LowerCaseType" />
<!-- Вызов функции в условиях цикла необходимо вынести за пределы цикла !-->
<rule ref="Generic.CodeAnalysis.ForLoopWithTestFunctionCall" />
<!-- Убрать пустую строку после открывающей и до закрывающей скобок в классе !-->
<rule ref="SlevomatCodingStandard.Classes.EmptyLinesAroundClassBraces">
<properties>
<property name="linesCountAfterOpeningBrace" value="0" />
<property name="linesCountBeforeClosingBrace" value="0" />
</properties>
</rule>
<rule ref="SlevomatCodingStandard.Functions.StaticClosure" />
</ruleset>