Skip to content

Commit ca997a6

Browse files
authored
Merge pull request #1567 from artbear/str-template-1235
2 parents eefcde8 + 859c162 commit ca997a6

File tree

11 files changed

+479
-4
lines changed

11 files changed

+479
-4
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# Неверное использование "СтрШаблон" (IncorrectUseOfStrTemplate)
2+
3+
Тип | Поддерживаются<br>языки | Важность | Включена<br>по умолчанию | Время на<br>исправление (мин) | Тэги
4+
:-: | :-: | :-: | :-: | :-: | :-:
5+
`Ошибка` | `BSL`<br>`OS` | `Блокирующий` | `Да` | `1` | `brainoverload`<br>`suspicious`<br>`unpredictable`
6+
7+
<!-- Блоки выше заполняются автоматически, не трогать -->
8+
## Описание диагностики
9+
<!-- Описание диагностики заполняется вручную. Необходимо понятным языком описать смысл и схему работу -->
10+
При использовании метода `СтрШаблон` нужно внимательно составлять шаблонную строку и передавать правильное количество параметров.
11+
И можно довольно легко ошибиться при передаче значений для `СтрШаблон`.
12+
13+
Важно помнить, что
14+
- `СтрШаблон` принимает только параметры от `%1` до `%10`
15+
- если требуется передать сразу после шаблона число, нужно добавить скобки - `"%(1)45"`
16+
17+
## Примеры
18+
<!-- В данном разделе приводятся примеры, на которые диагностика срабатывает, а также можно привести пример, как можно исправить ситуацию -->
19+
20+
1. Количество переданных после шаблонной строки значений не равно (меньше или больше) максимальному номеру из строки вида %N внутри шаблонной строки
21+
- `СтрШаблон("Наименование (версия %1)");`
22+
- `СтрШаблон("%1 (версия %2)", Наименование);`
23+
24+
2. не передается вообще никаких значений, кроме форматированной строки
25+
из-за большого число скобок внутри несложного выражения с `НСтр` и `СтрШаблон`
26+
Пример:
27+
- `СтрШаблон(НСтр("ru='Наименование (версия %1)'", Версия()));`
28+
- здесь ошибочно не закрыта скобка для `НСтр`
29+
- в итоге выражение после вычисления `НСтр` становится пустым.
30+
31+
Выявить подобную ошибку чтением кода довольно сложно из-за наличия скобок.
32+
И можно поймать только в рантайме, получив исключение.
33+
34+
Правильный вариант:
35+
- `СтрШаблон(НСтр("ru='Наименование (версия %1)'"), Версия());`
36+
37+
3. Пример передачи цифр сразу после шаблонного значения
38+
- `СтрШаблон("Наименование %(1)2"), Наименование);`
39+
40+
## Источники
41+
<!-- Необходимо указывать ссылки на все источники, из которых почерпнута информация для создания диагностики -->
42+
<!-- Примеры источников
43+
44+
* Источник: [Стандарт: Тексты модулей](https://its.1c.ru/db/v8std#content:456:hdoc)
45+
* Полезная информация: [Отказ от использования модальных окон](https://its.1c.ru/db/metod8dev#content:5272:hdoc)
46+
* Источник: [Cognitive complexity, ver. 1.4](https://www.sonarsource.com/docs/CognitiveComplexity.pdf) -->
47+
48+
- [Требования по локализации - Стандарт](https://its.1c.ru/db/v8std/content/763/hdoc)
49+
50+
## Сниппеты
51+
52+
<!-- Блоки ниже заполняются автоматически, не трогать -->
53+
### Экранирование кода
54+
55+
```bsl
56+
// BSLLS:IncorrectUseOfStrTemplate-off
57+
// BSLLS:IncorrectUseOfStrTemplate-on
58+
```
59+
60+
### Параметр конфигурационного файла
61+
62+
```json
63+
"IncorrectUseOfStrTemplate": false
64+
```

docs/diagnostics/index.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@
88

99
## Список реализованных диагностик
1010

11-
Общее количество: **138**
11+
Общее количество: **139**
1212

1313
* Потенциальная уязвимость: **4**
1414
* Уязвимость: **3**
15-
* Ошибка: **43**
15+
* Ошибка: **44**
1616
* Дефект кода: **88**
1717

1818

@@ -76,6 +76,7 @@
7676
[IfElseDuplicatedCondition](IfElseDuplicatedCondition.md) | Повторяющиеся условия в синтаксической конструкции Если...Тогда...ИначеЕсли... | Да | Важный | Дефект кода | `suspicious`
7777
[IfElseIfEndsWithElse](IfElseIfEndsWithElse.md) | Использование синтаксической конструкции Если...Тогда...ИначеЕсли... | Да | Важный | Дефект кода | `badpractice`
7878
[IncorrectUseLikeInQuery](IncorrectUseLikeInQuery.md) | Некорректное использование 'ПОДОБНО' | Да | Критичный | Ошибка | `standard`<br>`sql`<br>`unpredictable`
79+
[IncorrectUseOfStrTemplate](IncorrectUseOfStrTemplate.md) | Неверное использование "СтрШаблон" | Да | Блокирующий | Ошибка | `brainoverload`<br>`suspicious`<br>`unpredictable`
7980
[InvalidCharacterInFile](InvalidCharacterInFile.md) | Недопустимый символ | Да | Важный | Ошибка | `error`<br>`standard`<br>`unpredictable`
8081
[IsInRoleMethod](IsInRoleMethod.md) | Использование метода РольДоступна | Да | Важный | Дефект кода | `error`
8182
[JoinWithSubQuery](JoinWithSubQuery.md) | Соединение с вложенными запросами | Да | Важный | Дефект кода | `sql`<br>`standard`<br>`performance`
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# Incorrect use of "StrTemplate" (IncorrectUseOfStrTemplate)
2+
3+
Type | Scope | Severity | Activated<br>by default | Minutes<br>to fix | Tags
4+
:-: | :-: | :-: | :-: | :-: | :-:
5+
`Error` | `BSL`<br>`OS` | `Blocker` | `Yes` | `1` | `brainoverload`<br>`suspicious`<br>`unpredictable`
6+
7+
<!-- Блоки выше заполняются автоматически, не трогать -->
8+
## Description
9+
<!-- Описание диагностики заполняется вручную. Необходимо понятным языком описать смысл и схему работу -->
10+
11+
## Examples
12+
<!-- В данном разделе приводятся примеры, на которые диагностика срабатывает, а также можно привести пример, как можно исправить ситуацию -->
13+
14+
## Sources
15+
<!-- Необходимо указывать ссылки на все источники, из которых почерпнута информация для создания диагностики -->
16+
<!-- Примеры источников
17+
18+
* Источник: [Стандарт: Тексты модулей](https://its.1c.ru/db/v8std#content:456:hdoc)
19+
* Полезная информация: [Отказ от использования модальных окон](https://its.1c.ru/db/metod8dev#content:5272:hdoc)
20+
* Источник: [Cognitive complexity, ver. 1.4](https://www.sonarsource.com/docs/CognitiveComplexity.pdf) -->
21+
22+
## Snippets
23+
24+
<!-- Блоки ниже заполняются автоматически, не трогать -->
25+
### Diagnostic ignorance in code
26+
27+
```bsl
28+
// BSLLS:IncorrectUseOfStrTemplate-off
29+
// BSLLS:IncorrectUseOfStrTemplate-on
30+
```
31+
32+
### Parameter for config
33+
34+
```json
35+
"IncorrectUseOfStrTemplate": false
36+
```

docs/en/diagnostics/index.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ To escape individual sections of code or files from triggering diagnostics, you
88

99
## Implemented diagnostics
1010

11-
Total: **138**
11+
Total: **139**
1212

1313
* Security Hotspot: **4**
1414
* Vulnerability: **3**
15-
* Error: **43**
15+
* Error: **44**
1616
* Code smell: **88**
1717

1818

@@ -76,6 +76,7 @@ Total: **138**
7676
[IfElseDuplicatedCondition](IfElseDuplicatedCondition.md) | Duplicated conditions in If...Then...ElseIf... statements | Yes | Major | Code smell | `suspicious`
7777
[IfElseIfEndsWithElse](IfElseIfEndsWithElse.md) | Else...The...ElseIf... statement should end with Else branch | Yes | Major | Code smell | `badpractice`
7878
[IncorrectUseLikeInQuery](IncorrectUseLikeInQuery.md) | Incorrect use of 'LIKE' | Yes | Critical | Error | `standard`<br>`sql`<br>`unpredictable`
79+
[IncorrectUseOfStrTemplate](IncorrectUseOfStrTemplate.md) | Incorrect use of "StrTemplate" | Yes | Blocker | Error | `brainoverload`<br>`suspicious`<br>`unpredictable`
7980
[InvalidCharacterInFile](InvalidCharacterInFile.md) | Invalid character | Yes | Major | Error | `error`<br>`standard`<br>`unpredictable`
8081
[IsInRoleMethod](IsInRoleMethod.md) | IsInRole global method call | Yes | Major | Code smell | `error`
8182
[JoinWithSubQuery](JoinWithSubQuery.md) | Join with sub queries | Yes | Major | Code smell | `sql`<br>`standard`<br>`performance`

0 commit comments

Comments
 (0)