Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#1224 Проверяет отсутствие кода после асинхронного вызова #1234

Merged
merged 28 commits into from
Apr 16, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
642868e
Проверяет отсутствие кода после асинхронного вызова
iArtemv Dec 9, 2022
24fcc00
Merge remote-tracking branch 'origin/master' into feature/issue-1224-…
iArtemv Jan 23, 2023
c453d38
Merge remote-tracking branch 'origin/master' into feature/issue-1224-…
iArtemv Jan 24, 2023
4b513d4
Исправление замечаний cr
iArtemv Jan 26, 2023
80e93f7
Исправление по замечаниям
iArtemv Mar 7, 2023
00ccad7
Исправление ошибок
iArtemv Mar 7, 2023
5b10563
Исправление потокобезопасности
iArtemv Mar 9, 2023
7b2ef3f
Исправление имени типа
iArtemv Mar 9, 2023
b0df18b
Исправление учтен оператор Ждать
iArtemv Mar 10, 2023
2967576
Добавлен тест
iArtemv Mar 10, 2023
7ca2399
Исправления
iArtemv Mar 10, 2023
0b53010
Исправление
iArtemv Mar 11, 2023
53b4341
Добавлен пример в документацию
iArtemv Mar 13, 2023
1c5d333
Merge remote-tracking branch 'origin/master' into
iArtemv Mar 13, 2023
ddda9f5
Исправление замечаний CR
iArtemv Mar 14, 2023
ecefabd
Добавлен параметр в настройку проверки
iArtemv Mar 14, 2023
968ddaa
Уточнен комментарий
iArtemv Mar 14, 2023
824d327
Исправление проверки типа
iArtemv Mar 14, 2023
3b67312
Merge remote-tracking branch 'origin/master' into
iArtemv Mar 14, 2023
b26b76e
Исправление форматирования
iArtemv Mar 14, 2023
d4beb5e
Исправление тестов
iArtemv Mar 15, 2023
f42d46a
Исправление дублей
iArtemv Mar 15, 2023
64ae81b
Исправление имени
iArtemv Mar 15, 2023
fbbb6ba
Исправление по cr
iArtemv Mar 20, 2023
d6c0932
Исправление по замечаниям cr
iArtemv Mar 22, 2023
24ad506
Исправление замечаний и добавление тестов
iArtemv Mar 22, 2023
89186b2
Merge remote-tracking branch 'origin/master' into
iArtemv Mar 22, 2023
600bc10
Исправление форматирования файла свойств
iArtemv Mar 22, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

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

- Проверка отсутствия кода после асинхронного вызова
- Проверка использования метода ДанныеФормыВЗначение вместо РеквизитФормыВЗначение
- В проверку использования нерекомендуемых методов (use-non-recommended-method) добавлен метод ПолучитьФорму(GetForm)
- Использование устаревшего метода Найти
Expand Down Expand Up @@ -74,7 +75,6 @@
- Устаревшая процедура (функция) расположена вне области "УстаревшиеПроцедурыИФункции"
- Использован обработчик событий, подключаемый из кода и не содержащий префикса "Подключаемый_"


### Новые быстрые исправления (Quick-fix)

- Исправление превышения максимального количества допустимых пустых строк
Expand Down
1 change: 1 addition & 0 deletions bundles/com.e1c.v8codestyle.bsl/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ Bundle-RequiredExecutionEnvironment: JavaSE-11
Automatic-Module-Name: com.e1c.v8codestyle.bsl
Bundle-ActivationPolicy: lazy
Import-Package: com._1c.g5.v8.bm.core;version="[7.0.0,8.0.0)",
com._1c.g5.v8.dt.bm.xtext;version="[14.1.100,15.0.0)",
com._1c.g5.v8.dt.bsl;version="[5.0.0,6.0.0)",
com._1c.g5.v8.dt.bsl.comment;version="[3.0.0,4.0.0)",
com._1c.g5.v8.dt.bsl.common;version="[6.0.0,7.0.0)",
Expand Down
24 changes: 24 additions & 0 deletions bundles/com.e1c.v8codestyle.bsl/markdown/code-after-async-call.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# The asynchronous method is not followed by lines of code

In the asynchronous approach the method is called as usual, but control returns to the caller before the asynchronous
method is completed. After that, execution of the caller continues.

## Noncompliant Code Example

```bsl
Text = "Warning text";
ShowMessageBox( , Text);
Message("Warning is closed");
```

## Compliant Solution

```bsl
Text = "Warning text";
Await DoMessageBoxAsync(Text);
Message("Warning is closed");
```

## See

- [Synchronous and asynchronous operations](https://kb.1ci.com/1C_Enterprise_Platform/Guides/Developer_Guides/1C_Enterprise_8.3.19_Developer_Guide/Chapter_4._1C_Enterprise_language/4.7._Queries/4.7.9._Synchronous_and_asynchronous_operations/)
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Код расположен после асинхронного вызова

При асинхронном подходе вызов метода выполняется как обычно, но управление возвращается вызывающему коду до того,
как асинхронный метод завершит свою работу. После этого вызывающий код продолжает свое выполнение.
Особенность асинхронного выполнения: исполнение на стороне вызывающего кода продолжится до того,
как полностью закончилось исполнение вызванного метода.

Для правильного решения нужно вынести весь код, который должен быть выполнен после выполнения асинхронного действия,
в экспортный метод и указать его имя в обработке оповещения, которая будет вызвана после завершения асинхронного действия.
Или использовать асинхронность через обещания, например, Ждать ПредупреждениеАсинх(Текст).

## Неправильно

```bsl
Текст = "Текст предупреждения";
ПоказатьПредупреждение( , Текст);
Сообщить("Закрыли предупреждение");
```

```bsl
ПоказатьПредупреждение(,ТекстПредупреждения);
Отказ = Истина;
```

## Правильно

```bsl
Текст = "Текст предупреждения";
Ждать ПредупреждениеАсинх(Текст);
Сообщить("Закрыли предупреждение");
```

```bsl
&НаКлиенте
Процедура Команда1(Команда)
Оповещение = Новый ОписаниеОповещения("ПредупреждениеЗавершение", ЭтотОбъект);
Текст = "Текст предупреждения";
ПоказатьПредупреждение(Оповещение, Текст);
КонецПроцедуры

&НаКлиенте
Процедура ПредупреждениеЗавершение(ДополнительныеПараметры) Экспорт
iArtemv marked this conversation as resolved.
Show resolved Hide resolved
Сообщить("Закрыли предупреждение");
КонецПроцедуры;
```

```bsl
Отказ = Истина;
ПоказатьПредупреждение(,ТекстПредупреждения);
```

## См.

- [Синхронные и асинхронные методы работы](https://its.1c.ru/db/v8319doc#bookmark:dev:TI000001505)
4 changes: 4 additions & 0 deletions bundles/com.e1c.v8codestyle.bsl/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -347,6 +347,10 @@
category="com.e1c.v8codestyle.bsl"
class="com.e1c.v8codestyle.internal.bsl.ExecutableExtensionFactory:com.e1c.v8codestyle.bsl.check.DeprecatedProcedureOutsideDeprecatedRegionCheck">
</check>
<check
category="com.e1c.v8codestyle.bsl"
class="com.e1c.v8codestyle.internal.bsl.ExecutableExtensionFactory:com.e1c.v8codestyle.bsl.check.CodeAfterAsyncCallCheck">
</check>
<check
category="com.e1c.v8codestyle.bsl"
class="com.e1c.v8codestyle.internal.bsl.ExecutableExtensionFactory:com.e1c.v8codestyle.bsl.check.UnknownFormParameterAccessCheck">
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/*******************************************************************************
* Copyright (C) 2023, 1C-Soft LLC and others.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* 1C-Soft LLC - initial API and implementation
*******************************************************************************/
package com.e1c.v8codestyle.bsl;

import java.util.Collection;
import java.util.Map;

import com._1c.g5.v8.dt.platform.version.Version;

/**
* Platform context asynchronous methods provider
*
* @author Artem Iliukhin
*/
public interface IAsyncInvocationProvider
{

/**
* Global context methods.
*
* @param version the version of platform, cannot be {@code null}
* @return the asynchronous invocation names
*/
Collection<String> getAsyncInvocationNames(Version version);

/**
* Methods with a list of types in which they are used.
*
* @param version the version of platform, cannot be {@code null}
* @return the asynchronous type method names
*/
Map<String, Collection<String>> getAsyncTypeMethodNames(Version version);

}
Loading