Skip to content

Commit

Permalink
Merge pull request #1567 from artbear/str-template-1235
Browse files Browse the repository at this point in the history
  • Loading branch information
nixel2007 authored Apr 4, 2021
2 parents eefcde8 + 859c162 commit ca997a6
Show file tree
Hide file tree
Showing 11 changed files with 479 additions and 4 deletions.
64 changes: 64 additions & 0 deletions docs/diagnostics/IncorrectUseOfStrTemplate.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# Неверное использование "СтрШаблон" (IncorrectUseOfStrTemplate)

Тип | Поддерживаются<br>языки | Важность | Включена<br>по умолчанию | Время на<br>исправление (мин) | Тэги
:-: | :-: | :-: | :-: | :-: | :-:
`Ошибка` | `BSL`<br>`OS` | `Блокирующий` | `Да` | `1` | `brainoverload`<br>`suspicious`<br>`unpredictable`

<!-- Блоки выше заполняются автоматически, не трогать -->
## Описание диагностики
<!-- Описание диагностики заполняется вручную. Необходимо понятным языком описать смысл и схему работу -->
При использовании метода `СтрШаблон` нужно внимательно составлять шаблонную строку и передавать правильное количество параметров.
И можно довольно легко ошибиться при передаче значений для `СтрШаблон`.

Важно помнить, что
- `СтрШаблон` принимает только параметры от `%1` до `%10`
- если требуется передать сразу после шаблона число, нужно добавить скобки - `"%(1)45"`

## Примеры
<!-- В данном разделе приводятся примеры, на которые диагностика срабатывает, а также можно привести пример, как можно исправить ситуацию -->

1. Количество переданных после шаблонной строки значений не равно (меньше или больше) максимальному номеру из строки вида %N внутри шаблонной строки
- `СтрШаблон("Наименование (версия %1)");`
- `СтрШаблон("%1 (версия %2)", Наименование);`

2. не передается вообще никаких значений, кроме форматированной строки
из-за большого число скобок внутри несложного выражения с `НСтр` и `СтрШаблон`
Пример:
- `СтрШаблон(НСтр("ru='Наименование (версия %1)'", Версия()));`
- здесь ошибочно не закрыта скобка для `НСтр`
- в итоге выражение после вычисления `НСтр` становится пустым.

Выявить подобную ошибку чтением кода довольно сложно из-за наличия скобок.
И можно поймать только в рантайме, получив исключение.

Правильный вариант:
- `СтрШаблон(НСтр("ru='Наименование (версия %1)'"), Версия());`

3. Пример передачи цифр сразу после шаблонного значения
- `СтрШаблон("Наименование %(1)2"), Наименование);`

## Источники
<!-- Необходимо указывать ссылки на все источники, из которых почерпнута информация для создания диагностики -->
<!-- Примеры источников
* Источник: [Стандарт: Тексты модулей](https://its.1c.ru/db/v8std#content:456:hdoc)
* Полезная информация: [Отказ от использования модальных окон](https://its.1c.ru/db/metod8dev#content:5272:hdoc)
* Источник: [Cognitive complexity, ver. 1.4](https://www.sonarsource.com/docs/CognitiveComplexity.pdf) -->

- [Требования по локализации - Стандарт](https://its.1c.ru/db/v8std/content/763/hdoc)

## Сниппеты

<!-- Блоки ниже заполняются автоматически, не трогать -->
### Экранирование кода

```bsl
// BSLLS:IncorrectUseOfStrTemplate-off
// BSLLS:IncorrectUseOfStrTemplate-on
```

### Параметр конфигурационного файла

```json
"IncorrectUseOfStrTemplate": false
```
5 changes: 3 additions & 2 deletions docs/diagnostics/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@

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

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

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


Expand Down Expand Up @@ -76,6 +76,7 @@
[IfElseDuplicatedCondition](IfElseDuplicatedCondition.md) | Повторяющиеся условия в синтаксической конструкции Если...Тогда...ИначеЕсли... | Да | Важный | Дефект кода | `suspicious`
[IfElseIfEndsWithElse](IfElseIfEndsWithElse.md) | Использование синтаксической конструкции Если...Тогда...ИначеЕсли... | Да | Важный | Дефект кода | `badpractice`
[IncorrectUseLikeInQuery](IncorrectUseLikeInQuery.md) | Некорректное использование 'ПОДОБНО' | Да | Критичный | Ошибка | `standard`<br>`sql`<br>`unpredictable`
[IncorrectUseOfStrTemplate](IncorrectUseOfStrTemplate.md) | Неверное использование "СтрШаблон" | Да | Блокирующий | Ошибка | `brainoverload`<br>`suspicious`<br>`unpredictable`
[InvalidCharacterInFile](InvalidCharacterInFile.md) | Недопустимый символ | Да | Важный | Ошибка | `error`<br>`standard`<br>`unpredictable`
[IsInRoleMethod](IsInRoleMethod.md) | Использование метода РольДоступна | Да | Важный | Дефект кода | `error`
[JoinWithSubQuery](JoinWithSubQuery.md) | Соединение с вложенными запросами | Да | Важный | Дефект кода | `sql`<br>`standard`<br>`performance`
Expand Down
36 changes: 36 additions & 0 deletions docs/en/diagnostics/IncorrectUseOfStrTemplate.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Incorrect use of "StrTemplate" (IncorrectUseOfStrTemplate)

Type | Scope | Severity | Activated<br>by default | Minutes<br>to fix | Tags
:-: | :-: | :-: | :-: | :-: | :-:
`Error` | `BSL`<br>`OS` | `Blocker` | `Yes` | `1` | `brainoverload`<br>`suspicious`<br>`unpredictable`

<!-- Блоки выше заполняются автоматически, не трогать -->
## Description
<!-- Описание диагностики заполняется вручную. Необходимо понятным языком описать смысл и схему работу -->

## Examples
<!-- В данном разделе приводятся примеры, на которые диагностика срабатывает, а также можно привести пример, как можно исправить ситуацию -->

## Sources
<!-- Необходимо указывать ссылки на все источники, из которых почерпнута информация для создания диагностики -->
<!-- Примеры источников
* Источник: [Стандарт: Тексты модулей](https://its.1c.ru/db/v8std#content:456:hdoc)
* Полезная информация: [Отказ от использования модальных окон](https://its.1c.ru/db/metod8dev#content:5272:hdoc)
* Источник: [Cognitive complexity, ver. 1.4](https://www.sonarsource.com/docs/CognitiveComplexity.pdf) -->

## Snippets

<!-- Блоки ниже заполняются автоматически, не трогать -->
### Diagnostic ignorance in code

```bsl
// BSLLS:IncorrectUseOfStrTemplate-off
// BSLLS:IncorrectUseOfStrTemplate-on
```

### Parameter for config

```json
"IncorrectUseOfStrTemplate": false
```
5 changes: 3 additions & 2 deletions docs/en/diagnostics/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ To escape individual sections of code or files from triggering diagnostics, you

## Implemented diagnostics

Total: **138**
Total: **139**

* Security Hotspot: **4**
* Vulnerability: **3**
* Error: **43**
* Error: **44**
* Code smell: **88**


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

0 comments on commit ca997a6

Please sign in to comment.