Skip to content

Commit 24f05fc

Browse files
committed
Вынес вычисление в отдельный процессор и исправил замечания
Создал интерфейс для процессора вычисления сложности Создал процессор вычисления когнтивной сложности Вынес вычисление из проверки в процессор Сделал локализацию Поправил текст сообщения Поправил получение statements метода Добавил перывание при отмене во все циклы Добавил копирайт Добавил описание проверки
1 parent aad14a0 commit 24f05fc

9 files changed

+662
-174
lines changed

CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
#### Код модулей
1818

19+
- Проверка когнитивной сложности методов
20+
1921

2022
#### Запросы
2123

Original file line numberDiff line numberDiff line change
@@ -1 +1,158 @@
1-
# TODO: description
1+
# The cognitive complexity of the method is exceeded
2+
3+
The high score of the cognitive complexity to complicate perception and maintainability of the written code.
4+
5+
The most effective way to reduce the complexity score is to decompose the code and simplify logical expressions.
6+
7+
## Compute rules:
8+
9+
### Increments:
10+
11+
- Conditional statements:
12+
```bsl
13+
If Conditional1 Then // +1 point
14+
// Code
15+
ElseIf Conditional2 Then // +1 point
16+
// Code
17+
Else // +1 point
18+
// Code
19+
EndIf;
20+
```
21+
- Trenary operator:
22+
```bsl
23+
?(conditional, positive_code, negative_code); // +1 point
24+
```
25+
- Loops:
26+
```bsl
27+
For Each Element In Collection Do // +1 point
28+
// code
29+
EndDo;
30+
```
31+
```bsl
32+
For index = 1 To N Do // +1 point
33+
// code
34+
EndDo;
35+
```
36+
```bsl
37+
While True Do // +1 point
38+
// code
39+
EndDo;
40+
```
41+
- Exception block:
42+
```bsl
43+
...
44+
Exception // +1 point
45+
// code
46+
EndTry;
47+
```
48+
- GoTo:
49+
```bsl
50+
Goto ~Label; // +1 point
51+
```
52+
- boolean operands AND, OR
53+
```bsl
54+
conditional1 = predicate1 OR predicate2; // +1 point
55+
conditional2 = predicate1 AND predicate2; // +1 point
56+
```
57+
- recursive call:
58+
```bsl
59+
Procedure RecursiveCall(Collection)
60+
If conditional Then
61+
RecursiveCall(...); // +1 point
62+
EndIf;
63+
EndProcedure
64+
```
65+
66+
### Nesting increments:
67+
68+
- IF-part of conditional statement:
69+
```bsl
70+
If conditional1 then // +nesting level
71+
// code
72+
ElseIf conditional2 then
73+
// code
74+
Else
75+
// code
76+
EndIf;
77+
```
78+
- Trenary operator:
79+
```bsl
80+
?(conditional, value1, value2); // +nesting level
81+
```
82+
- Loops:
83+
```bsl
84+
For Each Element In Collection Do // +nesting level
85+
// code
86+
EndDo;
87+
```
88+
```bsl
89+
For index = 1 To N Do // +nesting level
90+
// code
91+
EndDo;
92+
```
93+
```bsl
94+
While True Do // +nesting level
95+
// code
96+
EndDo;
97+
```
98+
- exception block:
99+
```bsl
100+
...
101+
Exception // +nesting level
102+
// code
103+
EndTry;
104+
```
105+
106+
### Nesting level:
107+
108+
- Conditional statements:
109+
```bsl
110+
If Conditional1 Then // increment depth
111+
// Code
112+
ElseIf Conditional2 Then // increment depth
113+
// Code
114+
Else // increment depth
115+
// Code
116+
EndIf;
117+
```
118+
119+
- Trenary operator:
120+
```bsl
121+
?(
122+
conditional,
123+
// increment depth,
124+
// increment depth
125+
)
126+
```
127+
- Loops:
128+
```bsl
129+
For Each Element In Collection Do
130+
// increment depth
131+
EndDo;
132+
```
133+
```bsl
134+
For index = 1 To N Do
135+
// increment depth
136+
EndDo;
137+
```
138+
```bsl
139+
While True Do
140+
// increment depth
141+
EndDo;
142+
```
143+
- Exception block:
144+
```bsl
145+
...
146+
Exception
147+
// increment depth
148+
EndTry;
149+
```
150+
- Nesting method:
151+
```bsl
152+
Method(
153+
// increment depth
154+
NestingMethod(
155+
// increment depth
156+
)
157+
);
158+
```
Original file line numberDiff line numberDiff line change
@@ -1 +1,158 @@
1-
# TODO: описание
1+
# Превышение когнитивной сложности метода
2+
3+
Высокое значение показателя говорит о сложности восприятия и сопровождаемости написанного кода.
4+
5+
Наиболее эффективным способом уменьшения показателя сложности является декомпозиция кода и упрощение логических выражений.
6+
7+
## Правила вычисления:
8+
9+
### Конструкции увеличивающие сложность:
10+
11+
- Ветви условного оператора:
12+
```bsl
13+
Если Условие1 Тогда // +1 к сложности
14+
// код
15+
ИначеЕсли Условие2 Тогда // +1 к сложности
16+
// код
17+
Иначе // +1 к сложности
18+
// код
19+
КонецЕсли;
20+
```
21+
- тренарный оператор:
22+
```bsl
23+
?(условие, позитивный исход, негативный исход); // +1 к сложности
24+
```
25+
- циклы:
26+
```bsl
27+
Для Каждого Элемент Из Коллекция Цикл // +1 к сложности
28+
// код
29+
КонецЦикла;
30+
```
31+
```bsl
32+
Для Индекс = 1 По Граница Цикл // +1 к сложности
33+
// код
34+
КонецЦикла;
35+
```
36+
```bsl
37+
Пока Условия Цикл // +1 к сложности
38+
// код
39+
КонецЦикла;
40+
```
41+
- ветвь исключения в блоке попытки:
42+
```bsl
43+
...
44+
Исключение // +1 к сложности
45+
// код
46+
КонецПопытки;
47+
```
48+
- переход к метке
49+
```bsl
50+
Перейти ~Метка; // +1 к сложности
51+
```
52+
- логические операнды И, ИЛИ
53+
```bsl
54+
Условие1 = Предикат1 ИЛИ Предикат2; // +1 к сложности
55+
Условие2 = Предикат1 И Предикат2; // +1 к сложности
56+
```
57+
- рекурсивный вызов
58+
```bsl
59+
Процедура РекурсивныйОбход(Коллекция)
60+
Если Условие Тогда
61+
РекурсивныйОбход(...); // +1 к сложности
62+
КонецЕсли;
63+
КонецПроцедуры
64+
```
65+
66+
### Конструкции получающие дополнительный штраф на уровень вложенности:
67+
68+
- Условный оператор (не зависимо от количества ветвей):
69+
```bsl
70+
Если Условие1 Тогда // штраф +уровень_вложенности
71+
// код
72+
ИначеЕсли Условие2 Тогда
73+
// код
74+
Иначе
75+
// код
76+
КонецЕсли;
77+
```
78+
- тренарный оператор:
79+
```bsl
80+
?(Условие, Значение1, Значение2); // штраф +уровень_вложенности
81+
```
82+
- циклы:
83+
```bsl
84+
Для Каждого Элемент Из Коллекция Цикл // штраф +уровень_вложенности
85+
// код
86+
КонецЦикла;
87+
```
88+
```bsl
89+
Для Индекс = 1 По Граница Цикл // штраф +уровень_вложенности
90+
// код
91+
КонецЦикла;
92+
```
93+
```bsl
94+
Пока Условия Цикл // штраф +уровень_вложенности
95+
// код
96+
КонецЦикла;
97+
```
98+
- ветвь исключения в попытке:
99+
```bsl
100+
...
101+
Исключение // штраф +уровень_вложенности
102+
// код
103+
КонецПопытки;
104+
```
105+
106+
### Конструкции увеличивающие уровень вложенности:
107+
108+
- ветви условного оператора:
109+
```bsl
110+
Если Условие1 Тогда
111+
// увеличение вложенности
112+
ИначеЕсли Условие2 Тогда
113+
// увеличение вложенности
114+
Иначе
115+
// увеличение вложенности
116+
КонецЕсли;
117+
```
118+
119+
- тренарный оператор:
120+
```bsl
121+
?(
122+
условие,
123+
// увеличение вложенности,
124+
// увеличение вложенности
125+
)
126+
```
127+
- циклы:
128+
```bsl
129+
Для Каждого Элемент Из Коллекция Цикл
130+
// увеличение вложенности
131+
КонецЦикла;
132+
```
133+
```bsl
134+
Для Индекс = 1 По Граница Цикл
135+
// увеличение вложенности
136+
КонецЦикла;
137+
```
138+
```bsl
139+
Пока Условия Цикл
140+
// увеличение вложенности
141+
КонецЦикла;
142+
```
143+
- ветвь исключения в блоке попытки:
144+
```bsl
145+
...
146+
Исключение
147+
// увеличение вложенности
148+
КонецПопытки;
149+
```
150+
- вложенный вызов:
151+
```bsl
152+
ВызовМетода(
153+
// увеличение вложенности
154+
ВложенныйВызов(
155+
// увеличение вложенности
156+
)
157+
);
158+
```

0 commit comments

Comments
 (0)