mirror of
https://github.com/1C-Company/v8-code-style.git
synced 2025-02-09 12:03:44 +02:00
Для проверки экспортных методов добавлены доп параметры
This commit is contained in:
parent
2e4dcb0011
commit
7b970c41fc
@ -1,7 +1,12 @@
|
||||
# Restrictions on the use of export procedures and functions in a command and form modules
|
||||
|
||||
Do not embed export procedures and functions in modules of commands and forms.
|
||||
You cannot address such modules from external code, so embedded export procedures and functions become dysfunctional.
|
||||
Do not place export procedures and functions in command and form modules.
|
||||
To implement export procedures and functions, it is recommended that you use object modules, object manager modules, or
|
||||
common modules.
|
||||
|
||||
Recommended once a form is opened, don't address form methods and properties.
|
||||
|
||||
An exception to this rule are export procedures that handle notifications (NotifyDescription.ProcedureName).
|
||||
|
||||
## Noncompliant Code Example
|
||||
|
||||
@ -22,3 +27,5 @@ EndProcedure
|
||||
## See
|
||||
|
||||
- [Restrictions on the use of export procedures and functions](https://support.1ci.com/hc/en-us/articles/360011002940-Restrictions-on-the-use-of-export-procedures-and-functions)
|
||||
- [Rules for creating form modules](https://support.1ci.com/hc/en-us/articles/360011003920-Rules-for-creating-form-modules)
|
||||
- [Opening forms](https://support.1ci.com/hc/en-us/articles/360011003960-Opening-forms)
|
||||
|
@ -1,9 +1,12 @@
|
||||
# Ограничения на использование экспортных процедур и функций в модуле команд и форм
|
||||
|
||||
Не следует размещать экспортные процедуры и функции в модулях команд и
|
||||
форм. К этим модулям нет возможности обращаться из внешнего по
|
||||
отношению к ним кода, поэтому экспортные процедуры и функции в этих
|
||||
модулях не имеют смысла.
|
||||
Не следует размещать экспортные процедуры и функции в модулях команд и форм.
|
||||
Для реализации экспортных процедур и функций рекомендуется использовать модули объектов, модули менеджеров объектов или
|
||||
общие модули.
|
||||
|
||||
Так же, рекомендуется избегать обращения к методам и свойствам формы после ее открытия.
|
||||
|
||||
Исключения из этого правила составляют экспортные процедуры-обработчики оповещений (ОписаниеОповещения.ИмяПроцедуры).
|
||||
|
||||
## Неправильно
|
||||
|
||||
@ -23,3 +26,5 @@
|
||||
## См.
|
||||
|
||||
- [Ограничения на использование экспортных процедур и функций](https://its.1c.ru/db/v8std#content:544:hdoc)
|
||||
- [Правила создания модулей форм](https://its.1c.ru/db/v8std#content:630:hdoc)
|
||||
- [Открытие форм](https://its.1c.ru/db/v8std#content:404:hdoc)
|
||||
|
@ -233,7 +233,7 @@
|
||||
</check>
|
||||
<check
|
||||
category="com.e1c.v8codestyle.bsl"
|
||||
class="com.e1c.v8codestyle.bsl.check.ExportMethodInCommandFormModuleCheck">
|
||||
class="com.e1c.v8codestyle.internal.bsl.ExecutableExtensionFactory:com.e1c.v8codestyle.bsl.check.ExportMethodInCommandFormModuleCheck">
|
||||
</check>
|
||||
<check
|
||||
category="com.e1c.v8codestyle.bsl"
|
||||
|
@ -14,14 +14,18 @@ package com.e1c.v8codestyle.bsl.check;
|
||||
|
||||
import static com._1c.g5.v8.dt.bsl.model.BslPackage.Literals.MODULE;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.emf.common.util.TreeIterator;
|
||||
import org.eclipse.emf.ecore.EObject;
|
||||
import org.eclipse.xtext.EcoreUtil2;
|
||||
|
||||
import com._1c.g5.v8.dt.bsl.common.IBslPreferences;
|
||||
import com._1c.g5.v8.dt.bsl.model.BslPackage;
|
||||
import com._1c.g5.v8.dt.bsl.model.Expression;
|
||||
import com._1c.g5.v8.dt.bsl.model.Method;
|
||||
@ -30,6 +34,8 @@ import com._1c.g5.v8.dt.bsl.model.ModuleType;
|
||||
import com._1c.g5.v8.dt.bsl.model.OperatorStyleCreator;
|
||||
import com._1c.g5.v8.dt.bsl.model.StringLiteral;
|
||||
import com._1c.g5.v8.dt.common.StringUtils;
|
||||
import com._1c.g5.v8.dt.mcore.Environmental;
|
||||
import com._1c.g5.v8.dt.mcore.util.Environments;
|
||||
import com._1c.g5.v8.dt.mcore.util.McoreUtil;
|
||||
import com.e1c.g5.v8.dt.check.CheckComplexity;
|
||||
import com.e1c.g5.v8.dt.check.ICheckParameters;
|
||||
@ -38,9 +44,10 @@ import com.e1c.g5.v8.dt.check.settings.IssueSeverity;
|
||||
import com.e1c.g5.v8.dt.check.settings.IssueType;
|
||||
import com.e1c.v8codestyle.check.StandardCheckExtension;
|
||||
import com.e1c.v8codestyle.internal.bsl.BslPlugin;
|
||||
import com.google.inject.Inject;
|
||||
|
||||
/**
|
||||
* Checks an export procedure or function was found in the command module.
|
||||
* Checks an export procedure or function was found in the command or form module.
|
||||
*
|
||||
* @author Artem Iliukhin
|
||||
*/
|
||||
@ -48,9 +55,27 @@ public final class ExportMethodInCommandFormModuleCheck
|
||||
extends BasicCheck
|
||||
{
|
||||
|
||||
private static final String PATTERN_EXCLUDE = "^(?U)(Подключаемый|Attachable)_.*$"; //$NON-NLS-1$
|
||||
private static final String TYPE_NAME = "NotifyDescription"; //$NON-NLS-1$
|
||||
private static final String CHECK_ID = "export-method-in-command-form-module"; //$NON-NLS-1$
|
||||
private static final String PARAMETER_NOTIFY_METHODS_EXCLUSION = "notifyDescriptionMethods"; //$NON-NLS-1$
|
||||
private static final String PARAMETER_EXCLUDE_METHOD_NAME_PATTERN = "excludeModuleMethodNamePattern"; //$NON-NLS-1$
|
||||
private static final String PARAMETER_CHECK_FORM_SERVER_METHODS = "checkFormServerMethods"; //$NON-NLS-1$
|
||||
private static final String PARAMETER_CHECK_FORM_CLIENT_METHODS = "checkFormClientMethods"; //$NON-NLS-1$
|
||||
|
||||
private final IBslPreferences bslPreferences;
|
||||
|
||||
/**
|
||||
* Instantiates a new export method in command form module check.
|
||||
*
|
||||
* @param bslPreferences the BSL preferences service, cannot be {@code null}.
|
||||
*/
|
||||
@Inject
|
||||
public ExportMethodInCommandFormModuleCheck(IBslPreferences bslPreferences)
|
||||
{
|
||||
super();
|
||||
this.bslPreferences = bslPreferences;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCheckId()
|
||||
@ -69,6 +94,12 @@ public final class ExportMethodInCommandFormModuleCheck
|
||||
.extension(new StandardCheckExtension(getCheckId(), BslPlugin.PLUGIN_ID))
|
||||
.module()
|
||||
.checkedObjectType(MODULE)
|
||||
.parameter(PARAMETER_CHECK_FORM_SERVER_METHODS, Boolean.class, Boolean.TRUE.toString(),
|
||||
Messages.ExportMethodInCommandFormModuleCheck_CheckServerMethodForm)
|
||||
.parameter(PARAMETER_CHECK_FORM_CLIENT_METHODS, Boolean.class, Boolean.FALSE.toString(),
|
||||
Messages.ExportMethodInCommandFormModuleCheck_CheckClientMethodForm)
|
||||
.parameter(PARAMETER_EXCLUDE_METHOD_NAME_PATTERN, String.class, PATTERN_EXCLUDE,
|
||||
Messages.ExportMethodInCommandFormModuleCheck_ExludeMethodNamePattern)
|
||||
.parameter(PARAMETER_NOTIFY_METHODS_EXCLUSION, String.class, StringUtils.EMPTY,
|
||||
Messages.ExportMethodInCommandFormModuleCheck_Notify_description_methods);
|
||||
}
|
||||
@ -79,7 +110,12 @@ public final class ExportMethodInCommandFormModuleCheck
|
||||
{
|
||||
Module module = (Module)object;
|
||||
ModuleType type = module.getModuleType();
|
||||
if (type != ModuleType.COMMAND_MODULE && type != ModuleType.FORM_MODULE)
|
||||
boolean serverMethodCheck =
|
||||
parameters.getBoolean(PARAMETER_CHECK_FORM_SERVER_METHODS) && type == ModuleType.FORM_MODULE;
|
||||
boolean clientMethodCheck =
|
||||
parameters.getBoolean(PARAMETER_CHECK_FORM_CLIENT_METHODS) && type == ModuleType.FORM_MODULE;
|
||||
boolean commandModule = type == ModuleType.COMMAND_MODULE;
|
||||
if (!commandModule && !(serverMethodCheck || clientMethodCheck))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -94,7 +130,25 @@ public final class ExportMethodInCommandFormModuleCheck
|
||||
|
||||
if (method.isExport())
|
||||
{
|
||||
exportMethods.put(method.getName(), method);
|
||||
if (commandModule)
|
||||
{
|
||||
exportMethods.put(method.getName(), method);
|
||||
}
|
||||
else if (serverMethodCheck && clientMethodCheck)
|
||||
{
|
||||
exportMethods.put(method.getName(), method);
|
||||
}
|
||||
else if (serverMethodCheck ^ clientMethodCheck)
|
||||
{
|
||||
Environmental environmental = EcoreUtil2.getContainerOfType(method, Environmental.class);
|
||||
Environments enivronmetsObject = environmental.environments();
|
||||
Environments checkingEnvs = bslPreferences.getLoadEnvs(method)
|
||||
.intersect(serverMethodCheck ? Environments.ALL_SERVERS : Environments.ALL_CLIENTS);
|
||||
if (enivronmetsObject.containsAny(checkingEnvs))
|
||||
{
|
||||
exportMethods.put(method.getName(), method);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -110,6 +164,24 @@ public final class ExportMethodInCommandFormModuleCheck
|
||||
return;
|
||||
}
|
||||
|
||||
String excludeNamePattern = parameters.getString(PARAMETER_EXCLUDE_METHOD_NAME_PATTERN);
|
||||
if (!StringUtils.isEmpty(excludeNamePattern))
|
||||
{
|
||||
for (Iterator<Entry<String, Method>> it = exportMethods.entrySet().iterator(); it.hasNext();)
|
||||
{
|
||||
Map.Entry<String, Method> entry = it.next();
|
||||
if (isExcludeName(entry.getKey(), excludeNamePattern))
|
||||
{
|
||||
it.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (exportMethods.isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (TreeIterator<EObject> iterator = module.eAllContents(); iterator.hasNext();)
|
||||
{
|
||||
if (monitor.isCanceled())
|
||||
@ -145,4 +217,9 @@ public final class ExportMethodInCommandFormModuleCheck
|
||||
BslPackage.Literals.METHOD__EXPORT);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isExcludeName(String name, String excludeNamePattern)
|
||||
{
|
||||
return StringUtils.isNotEmpty(excludeNamePattern) && name.matches(excludeNamePattern);
|
||||
}
|
||||
}
|
||||
|
@ -70,6 +70,12 @@ final class Messages
|
||||
|
||||
public static String EventHandlerBooleanParamCheck_title;
|
||||
|
||||
public static String ExportMethodInCommandFormModuleCheck_CheckClientMethodForm;
|
||||
|
||||
public static String ExportMethodInCommandFormModuleCheck_CheckServerMethodForm;
|
||||
|
||||
public static String ExportMethodInCommandFormModuleCheck_ExludeMethodNamePattern;
|
||||
|
||||
public static String ExportMethodInCommandFormModuleCheck_Notify_description_methods;
|
||||
|
||||
public static String ExportMethodInCommandModule_Do_not_emded_export_method_in_modules_of_command_des;
|
||||
|
@ -70,6 +70,9 @@ EventHandlerBooleanParamCheck_description = Use event handler boolean parameter
|
||||
|
||||
EventHandlerBooleanParamCheck_title = Use event handler boolean parameter
|
||||
|
||||
ExportMethodInCommandFormModuleCheck_CheckClientMethodForm=Check the client method of the form
|
||||
ExportMethodInCommandFormModuleCheck_CheckServerMethodForm=Check the server method of the form
|
||||
ExportMethodInCommandFormModuleCheck_ExludeMethodNamePattern=Exclude method name pattern
|
||||
ExportMethodInCommandFormModuleCheck_Notify_description_methods=Comma-separated list of excluded notification method names
|
||||
|
||||
ExportMethodInCommandModule_Do_not_emded_export_method_in_modules_of_command_des=Do not embed export procedures and functions in modules of commands and forms. You cannot address such modules from external code, so embedded export procedures and functions become dysfunctional.
|
||||
|
@ -70,6 +70,12 @@ EventHandlerBooleanParamCheck_description = Использование буле
|
||||
|
||||
EventHandlerBooleanParamCheck_title = Использование булевого параметра обработчика события
|
||||
|
||||
ExportMethodInCommandFormModuleCheck_CheckClientMethodForm=Проверить клиентский метод формы
|
||||
|
||||
ExportMethodInCommandFormModuleCheck_CheckServerMethodForm=Проверить серверный метод формы
|
||||
|
||||
ExportMethodInCommandFormModuleCheck_ExludeMethodNamePattern=Шаблон исключаемых имен методов
|
||||
|
||||
ExportMethodInCommandFormModuleCheck_Notify_description_methods=Список исключаемых имен методов оповещения, разделенные запятой
|
||||
|
||||
ExportMethodInCommandModule_Do_not_emded_export_method_in_modules_of_command_des=Не следует размещать экспортные процедуры и функции в модулях команд и форм. К этим модулям нет возможности обращаться из внешнего по отношению к ним кода, поэтому экспортные процедуры и функции в этих модулях не имеют смысла.
|
||||
|
@ -1,5 +1,5 @@
|
||||
|
||||
&AtClient
|
||||
&AtServer
|
||||
Procedure Test() Export
|
||||
|
||||
EndProcedure
|
Loading…
x
Reference in New Issue
Block a user