diff --git a/CHANGELOG.md b/CHANGELOG.md index 60c08d8e..27be39ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -52,6 +52,7 @@ - Структура модуля. Добавлена проверка области событий. - Отсутствует включение безопасного режима перед вызовом метода "Выполнить" или "Вычислить" - Структура модуля. Добавлена проверка метода вне области. +- Структура модуля. Добавлена проверка соответсвия состава областей верхнего модуля стандарту, их порядка и наличия дублей. - Структура модуля. Проверка что код инициализации расположен в области инициализации. - Структура модуля. Область объявления переменных. diff --git a/bundles/com.e1c.v8codestyle.bsl/markdown/module-structure-top-region.md b/bundles/com.e1c.v8codestyle.bsl/markdown/module-structure-top-region.md index 8f8d9e5b..393e3bcb 100644 --- a/bundles/com.e1c.v8codestyle.bsl/markdown/module-structure-top-region.md +++ b/bundles/com.e1c.v8codestyle.bsl/markdown/module-structure-top-region.md @@ -1,23 +1,40 @@ -# Module stucture top region +# Module stucture top regions -Check that module structure region is on top +A program module (common module, object module, object manager module, form module, command module, and so on) +can have the following sections ordered as listed below: + +- module header +- variable description section +- export procedures and functions of the module, which comprise its program interface +- event handlers of an object (form) +- internal procedures and functions of the module +- initialization section + +Some sections only appear in modules of specific types. For example, event handlers of form items can only exist in +form modules, while the variable description and initialization sections cannot be defined in nonglobal common modules, +object manager modules, record set modules, constant value modules, or the session module. + +Dividing the module code into sections makes the code easier to read and modify for different authors (developers), +both during group development and during application customization within specific deployment projects. ## Noncompliant Code Example ```bsl -#Region NotEmpty - #Region Public +// Enter code here. +#EndRegion -Procedure Test() Export - -EndProcedure +#Region Internal +// Enter code here. +#Region Private +// Enter code here. #EndRegion #EndRegion + ```bsl ## Compliant Solution @@ -25,11 +42,15 @@ EndProcedure ```bsl #Region Public +// Enter code here. +#EndRegion -Procedure Test1() Export - -EndProcedure +#Region Internal +// Enter code here. +#EndRegion +#Region Private +// Enter code here. #EndRegion ```bsl diff --git a/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-structure-top-region.md b/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-structure-top-region.md index b91bc84a..245bb4c9 100644 --- a/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-structure-top-region.md +++ b/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-structure-top-region.md @@ -1,19 +1,36 @@ -# Стандартная область структуры модуля верхнеуровневая +# Стандартные области структуры модуля верхнего уровня -Проверяет что стандартная область структуры модуля не является вложенной +В программном модуле (общие модули, модули объектов, модули менеджеров объектов, модули форм, команд и т.п.) +в общем случае могут присутствовать следующие разделы в приведенной ниже последовательности: + +- заголовок модуля +- раздел описания переменных +- экспортные процедуры и функции модуля, составляющие его программный интерфейс +- обработчики событий объекта (формы) +- служебные процедуры и функции модуля +- раздел инициализации + +Некоторые разделы могут присутствовать только в модулях определенного вида. Например, обработчики событий элементов форм +могут присутствовать только в модулях форм, а раздел описания переменных и раздел инициализации не могут быть определены +в неглобальных общих модулях, модулях менеджеров объектов, наборов записей, значений констант и модуле сеанса. + +Требование о разделении кода модуля на разделы призвано повысить читаемость кода и упростить внесение изменений +в код разными авторами (разработчиками) как при коллективной разработке, так и при доработке прикладных решений +на конкретных внедрениях. ## Неправильно ```bsl -#Область НеПустая - #Область ПрограммныйИнтерфейс +// Код процедур и функций +#КонецОбласти -Процедура Тест() Экспорт - -КонецПроцедуры +#Область СлужебныйПрограммныйИнтерфейс +// Код процедур и функций +#Область СлужебныеПроцедурыИФункции +// Код процедур и функций #КонецОбласти #КонецОбласти @@ -25,11 +42,15 @@ ```bsl #Область ПрограммныйИнтерфейс +// Код процедур и функций +#КонецОбласти -Процедура Тест() Экспорт - -КонецПроцедуры +#Область СлужебныйПрограммныйИнтерфейс +// Код процедур и функций +#КонецОбласти +#Область СлужебныеПроцедурыИФункции +// Код процедур и функций #КонецОбласти ``` diff --git a/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/ModuleStructure.java b/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/ModuleStructure.java index 76d9cd89..54a72ca6 100644 --- a/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/ModuleStructure.java +++ b/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/ModuleStructure.java @@ -13,10 +13,10 @@ package com.e1c.v8codestyle.bsl; import java.util.Collection; -import java.util.SortedSet; +import java.util.Set; import com._1c.g5.v8.dt.bsl.model.ModuleType; -import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.ImmutableSet; /** * Default module structure list of sections by the module type. @@ -31,8 +31,8 @@ public enum ModuleStructure COMMON_MODULE(ModuleStructureSection.PUBLIC, ModuleStructureSection.INTERNAL, ModuleStructureSection.PRIVATE), EXTERNAL_CONN_MODULE(ModuleStructureSection.EVENT_HANDLERS, ModuleStructureSection.PRIVATE), FORM_MODULE(ModuleStructureSection.VARIABLES, ModuleStructureSection.FORM_EVENT_HANDLERS, - ModuleStructureSection.FORM_COMMAND_EVENT_HANDLERS, ModuleStructureSection.FORM_HEADER_ITEMS_EVENT_HANDLERS, - ModuleStructureSection.FORM_TABLE_ITEMS_EVENT_HANDLERS, ModuleStructureSection.PRIVATE), + ModuleStructureSection.FORM_HEADER_ITEMS_EVENT_HANDLERS, ModuleStructureSection.FORM_TABLE_ITEMS_EVENT_HANDLERS, + ModuleStructureSection.FORM_COMMAND_EVENT_HANDLERS, ModuleStructureSection.PRIVATE), HTTP_SERVICE_MODULE(ModuleStructureSection.EVENT_HANDLERS, ModuleStructureSection.PRIVATE), INTEGRATION_SERVICE_MODULE(ModuleStructureSection.EVENT_HANDLERS, ModuleStructureSection.PRIVATE), MANAGED_APP_MODULE(ModuleStructureSection.VARIABLES, ModuleStructureSection.EVENT_HANDLERS, @@ -97,14 +97,14 @@ public enum ModuleStructure default: break; } - return ImmutableSortedSet.of(); + return Set.of(); } - private final SortedSet sections; + private final ImmutableSet sections; ModuleStructure(ModuleStructureSection... sections) { - this.sections = ImmutableSortedSet.copyOf(sections); + this.sections = ImmutableSet.copyOf(sections); } /** diff --git a/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/Messages.java b/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/Messages.java index 29d764de..5dd76b3a 100644 --- a/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/Messages.java +++ b/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/Messages.java @@ -132,10 +132,22 @@ final class Messages public static String ManagerModuleNamedSelfReferenceCheck_title; + public static String ModuleStructureTopRegionCheck_Check_duplicates_of_standard_regions; + + public static String ModuleStructureTopRegionCheck_Check_order_of_standard_regions; + public static String ModuleStructureTopRegionCheck_description; public static String ModuleStructureTopRegionCheck_error_message; + public static String ModuleStructureTopRegionCheck_Exclude_region_name; + + public static String ModuleStructureTopRegionCheck_Region_has_duplicate; + + public static String ModuleStructureTopRegionCheck_Region_has_the_wrong_order; + + public static String ModuleStructureTopRegionCheck_Region_is_not_standard_for_current_type_of_module; + public static String ModuleStructureTopRegionCheck_title; public static String ModuleUnusedMethodCheck_Title; diff --git a/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/ModuleStructureTopRegionCheck.java b/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/ModuleStructureTopRegionCheck.java index 0aacafbb..0fe37800 100644 --- a/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/ModuleStructureTopRegionCheck.java +++ b/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/ModuleStructureTopRegionCheck.java @@ -12,32 +12,42 @@ *******************************************************************************/ package com.e1c.v8codestyle.bsl.check; -import static com._1c.g5.v8.dt.bsl.model.BslPackage.Literals.REGION_PREPROCESSOR; +import static com._1c.g5.v8.dt.bsl.model.BslPackage.Literals.MODULE; import static com._1c.g5.v8.dt.mcore.McorePackage.Literals.NAMED_ELEMENT__NAME; +import java.util.ArrayList; import java.util.Collection; -import java.util.Optional; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; import org.eclipse.core.runtime.IProgressMonitor; -import com._1c.g5.v8.dt.bsl.model.ModuleType; +import com._1c.g5.v8.dt.bsl.model.Module; import com._1c.g5.v8.dt.bsl.model.RegionPreprocessor; -import com._1c.g5.v8.dt.core.platform.IV8Project; +import com._1c.g5.v8.dt.bsl.model.util.BslUtil; +import com._1c.g5.v8.dt.common.StringUtils; import com._1c.g5.v8.dt.core.platform.IV8ProjectManager; +import com._1c.g5.v8.dt.metadata.mdclass.ScriptVariant; import com.e1c.g5.v8.dt.check.CheckComplexity; import com.e1c.g5.v8.dt.check.ICheckParameters; import com.e1c.g5.v8.dt.check.components.ModuleTopObjectNameFilterExtension; import com.e1c.g5.v8.dt.check.settings.IssueSeverity; import com.e1c.g5.v8.dt.check.settings.IssueType; import com.e1c.v8codestyle.bsl.IModuleStructureProvider; +import com.e1c.v8codestyle.bsl.ModuleStructureSection; import com.e1c.v8codestyle.check.StandardCheckExtension; import com.e1c.v8codestyle.internal.bsl.BslPlugin; import com.google.inject.Inject; /** * Checks that region named as module structure name is on top level of module. + * Checks order of standard regions. + * Checks duplicate of standard regions. * * @author Dmitriy Marmyshev + * @author Artem Iliukhin * */ public class ModuleStructureTopRegionCheck @@ -45,6 +55,12 @@ public class ModuleStructureTopRegionCheck { private static final String CHECK_ID = "module-structure-top-region"; //$NON-NLS-1$ + private static final String CHECK_DUPLICATES_OF_STANDARD_REGIONS = "checkDuplicates"; //$NON-NLS-1$ + + private static final String CHECK_ORDER_OF_STANDARD_REGIONS = "checkOrder"; //$NON-NLS-1$ + + private static final String PARAMETER_EXCLUDE_REGION_LIST = "excludeRegionName"; //$NON-NLS-1$ + private final IModuleStructureProvider moduleStructureProvider; private final IV8ProjectManager v8ProjectManager; @@ -70,39 +86,214 @@ public class ModuleStructureTopRegionCheck builder.title(Messages.ModuleStructureTopRegionCheck_title) .description(Messages.ModuleStructureTopRegionCheck_description) .complexity(CheckComplexity.NORMAL) - .severity(IssueSeverity.MAJOR) + .severity(IssueSeverity.MINOR) .issueType(IssueType.CODE_STYLE) .extension(new ModuleTopObjectNameFilterExtension()) .extension(new StandardCheckExtension(getCheckId(), BslPlugin.PLUGIN_ID)) .module() - .checkedObjectType(REGION_PREPROCESSOR); + .checkedObjectType(MODULE) + .parameter(CHECK_DUPLICATES_OF_STANDARD_REGIONS, Boolean.class, Boolean.TRUE.toString(), + Messages.ModuleStructureTopRegionCheck_Check_duplicates_of_standard_regions) + .parameter(CHECK_ORDER_OF_STANDARD_REGIONS, Boolean.class, Boolean.TRUE.toString(), + Messages.ModuleStructureTopRegionCheck_Check_order_of_standard_regions) + .parameter(PARAMETER_EXCLUDE_REGION_LIST, String.class, StringUtils.EMPTY, + Messages.ModuleStructureTopRegionCheck_Exclude_region_name); } @Override protected void check(Object object, ResultAcceptor resultAceptor, ICheckParameters parameters, IProgressMonitor monitor) { - RegionPreprocessor region = (RegionPreprocessor)object; - if (region.getName() == null) + + if (monitor.isCanceled()) { return; } - IV8Project project = v8ProjectManager.getProject(region); + Module module = (Module)object; - ModuleType moduleType = getModuleType(region); + List allRegions = BslUtil.getAllRegionPreprocessors(module); + if (allRegions.isEmpty()) + { + return; + } + + ScriptVariant scriptVariant = v8ProjectManager.getProject(module).getScriptVariant(); Collection names = - moduleStructureProvider.getModuleStructureRegions(moduleType, project.getScriptVariant()); - if (!names.contains(region.getName())) - { - return; - } + moduleStructureProvider.getModuleStructureRegions(module.getModuleType(), scriptVariant); - Optional parent = getFirstParentRegion(region); - if (parent.isPresent()) + check(resultAceptor, allRegions, names, parameters, scriptVariant, monitor); + + } + + private void check(ResultAcceptor resultAceptor, List allRegions, Collection baseNames, + ICheckParameters parameters, ScriptVariant scriptVariant, IProgressMonitor monitor) + { + + Map> countRegions = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + List topRegions = new ArrayList<>(); + countDoublesAndFindTopRegions(allRegions, topRegions, countRegions); + LinkedList baseOrdered = new LinkedList<>(baseNames); + + String tableName = ModuleStructureSection.FORM_TABLE_ITEMS_EVENT_HANDLERS.getName(scriptVariant); + String commandName = ModuleStructureSection.FORM_COMMAND_EVENT_HANDLERS.getName(scriptVariant); + String[] regionNames = parameters.getString(PARAMETER_EXCLUDE_REGION_LIST).split(","); //$NON-NLS-1$ + + boolean checkDuplicates = parameters.getBoolean(CHECK_DUPLICATES_OF_STANDARD_REGIONS); + boolean checkOrder = parameters.getBoolean(CHECK_ORDER_OF_STANDARD_REGIONS); + for (RegionPreprocessor region : allRegions) { - resultAceptor.addIssue(Messages.ModuleStructureTopRegionCheck_error_message, NAMED_ELEMENT__NAME); + if (monitor.isCanceled()) + { + return; + } + + String regionName = region.getName(); + if (isExcludeName(regionName, regionNames)) + { + continue; + } + + boolean isStandard = baseNames.stream().anyMatch(regionName::equalsIgnoreCase) + || startsWithIgnoreCase(regionName, tableName); + boolean isTop = topRegions.stream().anyMatch(regionName::equalsIgnoreCase); + boolean isDuplicate = countRegions.get(regionName).size() > 1; + + if (checkDuplicates && isStandard && isDuplicate) + { + addIssueDuplicates(resultAceptor, region); + } + + if (!isTop && isStandard) + { + addIssueTop(resultAceptor, region); + } + + if (isTop && baseNames.stream().noneMatch(regionName::equalsIgnoreCase) + && !startsWithIgnoreCase(regionName, tableName)) + { + addIssueStandard(resultAceptor, region); + } + + if (isTop && isStandard && checkOrder && !isDuplicate) + { + addIssueOrder(resultAceptor, topRegions, baseOrdered, regionName, region, tableName, commandName); + } + } } + private static boolean startsWithIgnoreCase(String str, String prefix) + { + if (str == null || prefix == null) + { + return str == null && prefix == null; + } + if (prefix.length() > str.length()) + { + return false; + } + boolean ignoreCase = true; + return str.regionMatches(ignoreCase, 0, prefix, 0, prefix.length()); + } + + private void check(ResultAcceptor resultAceptor, RegionPreprocessor region, List topRegions, + LinkedList baseOrdered, String tableName, String commandName) + { + while (baseOrdered.peek() != null && !startsWithIgnoreCase(baseOrdered.peek(), tableName) + && !commandName.equalsIgnoreCase(baseOrdered.peek())) + { + baseOrdered.poll(); + } + + if (baseOrdered.peek() != null && startsWithIgnoreCase(baseOrdered.peek(), tableName)) + { + baseOrdered.poll(); + } + else if (baseOrdered.isEmpty() && topRegions.size() > 1 + || baseOrdered.peek() != null && !commandName.equalsIgnoreCase(baseOrdered.peek())) + { + resultAceptor.addIssue(Messages.ModuleStructureTopRegionCheck_Region_has_the_wrong_order, region, + NAMED_ELEMENT__NAME); + } + } + + private void check(ResultAcceptor resultAceptor, RegionPreprocessor region, LinkedList baseOrdered, + String regionName) + { + while (baseOrdered.peek() != null && !regionName.equalsIgnoreCase(baseOrdered.peek())) + { + baseOrdered.poll(); + } + + if (baseOrdered.peek() != null && regionName.equalsIgnoreCase(baseOrdered.peek())) + { + baseOrdered.poll(); + } + else if (baseOrdered.isEmpty()) + { + resultAceptor.addIssue(Messages.ModuleStructureTopRegionCheck_Region_has_the_wrong_order, region, + NAMED_ELEMENT__NAME); + } + } + + + private void addIssueOrder(ResultAcceptor resultAceptor, List topRegions, LinkedList baseOrdered, + String regionName, RegionPreprocessor regionPreprocessor, String tableName, String commandName) + { + if (startsWithIgnoreCase(regionName, tableName)) + { + check(resultAceptor, regionPreprocessor, topRegions, baseOrdered, tableName, commandName); + } + else + { + check(resultAceptor, regionPreprocessor, baseOrdered, regionName); + } + } + + private void addIssueStandard(ResultAcceptor resultAceptor, RegionPreprocessor region) + { + resultAceptor.addIssue(Messages.ModuleStructureTopRegionCheck_Region_is_not_standard_for_current_type_of_module, + region, NAMED_ELEMENT__NAME); + } + + + private void addIssueTop(ResultAcceptor resultAceptor, RegionPreprocessor region) + { + resultAceptor.addIssue(Messages.ModuleStructureTopRegionCheck_error_message, region, NAMED_ELEMENT__NAME); + } + + private void addIssueDuplicates(ResultAcceptor resultAceptor, RegionPreprocessor region) + { + resultAceptor.addIssue(Messages.ModuleStructureTopRegionCheck_Region_has_duplicate, region, + NAMED_ELEMENT__NAME); + } + + private void countDoublesAndFindTopRegions(List allRegions, List topRegions, + Map> countRegions) + { + for (RegionPreprocessor region : allRegions) + { + String regionName = region.getName(); + countRegions.putIfAbsent(regionName, new ArrayList<>()); + countRegions.get(regionName).add(region); + if (getFirstParentRegion(region).isEmpty()) + { + topRegions.add(regionName); + } + } + } + + private boolean isExcludeName(String regionName, String[] regionNames) + { + for (String name : regionNames) + { + if (regionName.equalsIgnoreCase(name)) + { + return true; + } + } + return false; + } + } diff --git a/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/messages.properties b/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/messages.properties index 385782da..cf3837f8 100644 --- a/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/messages.properties +++ b/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/messages.properties @@ -197,10 +197,22 @@ ModuleEmptyMethodCheck_Exclude_method_name_pattern_title = Exclude method name p ModuleEmptyMethodCheck_Title = Empty method check -ModuleStructureTopRegionCheck_description = Check that module structure region is on top +ModuleStructureTopRegionCheck_Check_duplicates_of_standard_regions=Check duplicates of standard regions + +ModuleStructureTopRegionCheck_Check_order_of_standard_regions=Check order of standard regions + +ModuleStructureTopRegionCheck_description = Check that the regions on top of the module structure matches with the standard ModuleStructureTopRegionCheck_error_message = Module structure region is not on top +ModuleStructureTopRegionCheck_Exclude_region_name=Comma-separated list of excluded region names + +ModuleStructureTopRegionCheck_Region_has_duplicate=Region has duplicate + +ModuleStructureTopRegionCheck_Region_has_the_wrong_order=Region has the wrong order + +ModuleStructureTopRegionCheck_Region_is_not_standard_for_current_type_of_module=Region is not standard for current type of module + ModuleStructureTopRegionCheck_title = Module structure top region ModuleUnusedLocalVariableCheck_Description = Unused module local variable check diff --git a/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/messages_ru.properties b/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/messages_ru.properties index db276dc2..f6327749 100644 --- a/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/messages_ru.properties +++ b/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/messages_ru.properties @@ -206,12 +206,24 @@ ModuleEmptyMethodCheck_Exclude_method_name_pattern_title = Шаблон искл ModuleEmptyMethodCheck_Title = Проверка пустых методов -ModuleStructureTopRegionCheck_description = Проверяет что стандартная область структуры модуля не является вложенной +ModuleStructureTopRegionCheck_description = Проверить, что области верхнего уровня структуры модуля соответствуют стандарту ModuleStructureTopRegionCheck_error_message = Стандартная область структуры модуля является вложенной ModuleStructureTopRegionCheck_title = Стандартная область структуры модуля верхнеуровневая +ModuleStructureTopRegionCheck_Check_duplicates_of_standard_regions=Дубли стандартных областей + +ModuleStructureTopRegionCheck_Check_order_of_standard_regions=Порядок стандартных областей + +ModuleStructureTopRegionCheck_Exclude_region_name=Comma-separated list of excluded region names + +ModuleStructureTopRegionCheck_Region_has_duplicate=Дублирование стандартной области + +ModuleStructureTopRegionCheck_Region_has_the_wrong_order=Неправильный порядок стандартной области + +ModuleStructureTopRegionCheck_Region_is_not_standard_for_current_type_of_module=Region is not standard for current type of module + ModuleStructureEventFormRegionsCheck_Multilevel_nesting_of_regions = Разрешить многоуровневое вложение областей ModuleStructureMethodInRegionCheck_Multilevel_nesting_of_regions = Разрешить многоуровневое вложение областей diff --git a/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/internal/bsl/ModuleStructureProvider.java b/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/internal/bsl/ModuleStructureProvider.java index 6af1abd4..e67268af 100644 --- a/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/internal/bsl/ModuleStructureProvider.java +++ b/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/internal/bsl/ModuleStructureProvider.java @@ -38,7 +38,7 @@ import com._1c.g5.v8.dt.bsl.model.ModuleType; import com._1c.g5.v8.dt.metadata.mdclass.ScriptVariant; import com.e1c.v8codestyle.bsl.IModuleStructureProvider; import com.e1c.v8codestyle.bsl.ModuleStructure; -import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.ImmutableSet; /** * The default implementation of module structure provider. @@ -132,7 +132,7 @@ public class ModuleStructureProvider @Override public Collection getModuleStructureRegions(ModuleType moduleType, ScriptVariant scriptVariant) { - return ImmutableSortedSet.copyOf(ModuleStructure.getStructureByType(moduleType) + return ImmutableSet.copyOf(ModuleStructure.getStructureByType(moduleType) .stream() .map(s -> s.getName(scriptVariant)) .collect(Collectors.toList())); diff --git a/tests/com.e1c.v8codestyle.bsl.itests/resources/module-structure-region-is-duplicated.bsl b/tests/com.e1c.v8codestyle.bsl.itests/resources/module-structure-region-is-duplicated.bsl new file mode 100644 index 00000000..999a8c47 --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/resources/module-structure-region-is-duplicated.bsl @@ -0,0 +1,28 @@ + +#If Server Or ThickClientOrdinaryApplication Or ExternalConnection Then + +#Region public + +Procedure PublicMethod() Export + PrivateMethod(); +EndProcedure + +#Region Public + +Procedure InternalMethod() Export + PrivateMethod(); +EndProcedure + +#EndRegion + +#EndRegion + +#Region Private + +Procedure PrivateMethod() + // add code +EndProcedure + +#EndRegion + +#EndIf diff --git a/tests/com.e1c.v8codestyle.bsl.itests/resources/module-structure-region-is-not-on-top.bsl b/tests/com.e1c.v8codestyle.bsl.itests/resources/module-structure-region-is-not-on-top.bsl new file mode 100644 index 00000000..fafa48d9 --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/resources/module-structure-region-is-not-on-top.bsl @@ -0,0 +1,28 @@ + +#If Server Or ThickClientOrdinaryApplication Or ExternalConnection Then + +#Region Public + +Procedure PublicMethod() Export + PrivateMethod(); +EndProcedure + +#Region Internal + +Procedure InternalMethod() Export + PrivateMethod(); +EndProcedure + +#EndRegion + +#EndRegion + +#Region Private + +Procedure PrivateMethod() + // add code +EndProcedure + +#EndRegion + +#EndIf diff --git a/tests/com.e1c.v8codestyle.bsl.itests/resources/module-structure-region-is-wrong-order.bsl b/tests/com.e1c.v8codestyle.bsl.itests/resources/module-structure-region-is-wrong-order.bsl new file mode 100644 index 00000000..47bdf089 --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/resources/module-structure-region-is-wrong-order.bsl @@ -0,0 +1,28 @@ + +#If Server Or ThickClientOrdinaryApplication Or ExternalConnection Then + +#Region private + +Procedure PrivateMethod() + // add code +EndProcedure + +#EndRegion + +#Region public + +Procedure PublicMethod() Export + PrivateMethod(); +EndProcedure + +#EndRegion + +#Region internal + +Procedure InternalMethod() Export + PrivateMethod(); +EndProcedure + +#EndRegion + +#EndIf diff --git a/tests/com.e1c.v8codestyle.bsl.itests/resources/module-structure-sub-region.bsl b/tests/com.e1c.v8codestyle.bsl.itests/resources/module-structure-sub-region.bsl index 43e888a0..803a3bc6 100644 --- a/tests/com.e1c.v8codestyle.bsl.itests/resources/module-structure-sub-region.bsl +++ b/tests/com.e1c.v8codestyle.bsl.itests/resources/module-structure-sub-region.bsl @@ -11,7 +11,7 @@ EndProcedure #Region NotEmpty -#Region Public +#Region Public1 Procedure Test() diff --git a/tests/com.e1c.v8codestyle.bsl.itests/resources/module-structure-top-region-compliant.bsl b/tests/com.e1c.v8codestyle.bsl.itests/resources/module-structure-top-region-compliant.bsl new file mode 100644 index 00000000..475471ca --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/resources/module-structure-top-region-compliant.bsl @@ -0,0 +1,28 @@ +# +If Server Or ThickClientOrdinaryApplication Or ExternalConnection Then + +#Region Public + +Procedure PublicMethod() Export + PrivateMethod(); +EndProcedure + +#EndRegion + +#Region Internal + +Procedure InternalMethod() Export + PrivateMethod(); +EndProcedure + +#EndRegion + +#Region Private + +Procedure PrivateMethod() + // add code +EndProcedure + +#EndRegion + +#EndIf \ No newline at end of file diff --git a/tests/com.e1c.v8codestyle.bsl.itests/resources/module-structure-top-region-noncompliant.bsl b/tests/com.e1c.v8codestyle.bsl.itests/resources/module-structure-top-region-noncompliant.bsl new file mode 100644 index 00000000..ea4ed887 --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/resources/module-structure-top-region-noncompliant.bsl @@ -0,0 +1,28 @@ + +#If Server Or ThickClientOrdinaryApplication Or ExternalConnection Then + +#Region NonPublic + +Procedure PublicMethod() Export + PrivateMethod(); +EndProcedure + +#EndRegion + +#Region Internal + +Procedure InternalMethod() Export + PrivateMethod(); +EndProcedure + +#EndRegion + +#Region Private + +Procedure PrivateMethod() + // add code +EndProcedure + +#EndRegion + +#EndIf diff --git a/tests/com.e1c.v8codestyle.bsl.itests/src/com/e1c/v8codestyle/bsl/check/itests/ModuleStructureTopRegionCheckTest.java b/tests/com.e1c.v8codestyle.bsl.itests/src/com/e1c/v8codestyle/bsl/check/itests/ModuleStructureTopRegionCheckTest.java index a05dc342..c5a2f01b 100644 --- a/tests/com.e1c.v8codestyle.bsl.itests/src/com/e1c/v8codestyle/bsl/check/itests/ModuleStructureTopRegionCheckTest.java +++ b/tests/com.e1c.v8codestyle.bsl.itests/src/com/e1c/v8codestyle/bsl/check/itests/ModuleStructureTopRegionCheckTest.java @@ -13,6 +13,7 @@ package com.e1c.v8codestyle.bsl.check.itests; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.util.List; @@ -32,11 +33,23 @@ public class ModuleStructureTopRegionCheckTest extends AbstractSingleModuleTestBase { + private static final String REGION_HAS_THE_WRONG_ORDER = "Region has the wrong order"; + private static final String REGION_HAS_DUPLICATE = "Region has duplicate"; + + private static final String CATALOG_FORM_MODULE_FILE_NAME = "/src/Catalogs/Catalog/Forms/ItemForm/Module.bsl"; + private static final String CHECK_ID = "module-structure-top-region"; //$NON-NLS-1$ + public ModuleStructureTopRegionCheckTest() { super(ModuleStructureTopRegionCheck.class); } + @Override + protected String getTestConfigurationName() + { + return "ModuleStructureTopRegionCheck"; + } + /** * Test that the region is on top of the module structure. * @@ -63,8 +76,7 @@ public class ModuleStructureTopRegionCheckTest List markers = getModuleMarkers(); assertEquals(1, markers.size()); - Marker marker = markers.get(0); - assertEquals("14", marker.getExtraInfo().get(IExtraInfoKeys.TEXT_EXTRA_INFO_LINE_KEY)); + assertEquals("12", markers.get(0).getExtraInfo().get(IExtraInfoKeys.TEXT_EXTRA_INFO_LINE_KEY)); } /** @@ -78,8 +90,98 @@ public class ModuleStructureTopRegionCheckTest updateModule(FOLDER_RESOURCE + "module-structure-sub-region-after-method.bsl"); List markers = getModuleMarkers(); - // FIXME has to be an error in line 18 - assertTrue(markers.isEmpty()); + assertEquals(1, markers.size()); + Marker marker = markers.get(0); + assertEquals("18", marker.getExtraInfo().get(IExtraInfoKeys.TEXT_EXTRA_INFO_LINE_KEY)); + } + /** + * Test that top module structure regions is compliant. + * + * @throws Exception the exception + */ + @Test + public void testTopRegionCompliant() throws Exception + { + updateModule(FOLDER_RESOURCE + "module-structure-top-region-compliant.bsl"); + + List markers = getModuleMarkers(); + assertTrue(markers.isEmpty()); + } + + /** + * Test that top module structure regions is non compliant. + * + * @throws Exception the exception + */ + @Test + public void testTopRegionNonCompliant() throws Exception + { + updateModule(FOLDER_RESOURCE + "module-structure-top-region-noncompliant.bsl"); + + List markers = getModuleMarkers(); + assertEquals(1, markers.size()); + Marker marker = markers.get(0); + assertEquals("4", marker.getExtraInfo().get(IExtraInfoKeys.TEXT_EXTRA_INFO_LINE_KEY)); + } + + /** + * Test that top module structure region is on top. + * + * @throws Exception the exception + */ + @Test + public void testTopRegionNotOnTop() throws Exception + { + updateModule(FOLDER_RESOURCE + "module-structure-region-is-not-on-top.bsl"); + + List markers = getModuleMarkers(); + assertEquals(1, markers.size()); + Marker marker = markers.get(0); + assertEquals("10", marker.getExtraInfo().get(IExtraInfoKeys.TEXT_EXTRA_INFO_LINE_KEY)); + } + + /** + * Test that top module structure region is duplicated. + * + * @throws Exception the exception + */ + @Test + public void testTopRegionIsDuplicated() throws Exception + { + updateModule(FOLDER_RESOURCE + "module-structure-region-is-duplicated.bsl"); + + List markers = getModuleMarkers(); + assertEquals(2, markers.size()); + assertEquals(REGION_HAS_DUPLICATE, markers.get(0).getMessage()); + assertEquals(REGION_HAS_DUPLICATE, markers.get(1).getMessage()); + } + + /** + * Test that top module structure region is wrong order. + * + * @throws Exception the exception + */ + @Test + public void testTopRegionIsWrongOrder() throws Exception + { + updateModule(FOLDER_RESOURCE + "module-structure-region-is-wrong-order.bsl"); + + List markers = getModuleMarkers(); + assertEquals(2, markers.size()); + assertEquals(REGION_HAS_THE_WRONG_ORDER, markers.get(0).getMessage()); + assertEquals(REGION_HAS_THE_WRONG_ORDER, markers.get(1).getMessage()); + } + + /** + * Test that top module structure regions in form module is compliant. + * + * @throws Exception the exception + */ + @Test + public void testTopRegionFormModuleCompliant() throws Exception + { + Marker marker = getFirstMarker(CHECK_ID, CATALOG_FORM_MODULE_FILE_NAME, getProject()); + assertNull(marker); } } diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/.project b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/.project new file mode 100644 index 00000000..0ed8b5f7 --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/.project @@ -0,0 +1,18 @@ + + + ModuleStructureTopRegionCheck + + + + + + org.eclipse.xtext.ui.shared.xtextBuilder + + + + + + org.eclipse.xtext.ui.shared.xtextNature + com._1c.g5.v8.dt.core.V8ConfigurationNature + + diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/.settings/org.eclipse.core.resources.prefs b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..99f26c02 --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/DT-INF/PROJECT.PMF b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/DT-INF/PROJECT.PMF new file mode 100644 index 00000000..6835f1cd --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/DT-INF/PROJECT.PMF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 +Runtime-Version: 8.3.19 diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/Catalogs/Catalog/Catalog.mdo b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/Catalogs/Catalog/Catalog.mdo new file mode 100644 index 00000000..c25ebdaf --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/Catalogs/Catalog/Catalog.mdo @@ -0,0 +1,43 @@ + + + + + + + + + + Catalog + + en + Catalog + + true + Catalog.Catalog.StandardAttribute.Code + Catalog.Catalog.StandardAttribute.Description + DontUse + Use + Managed + Use + 2 + true + 9 + 25 + String + Variable + true + true + AsDescription + InDialog + BothWays + Catalog.Catalog.Form.ItemForm + + ItemForm + + en + Item form + + PersonalComputer + MobileDevice + + diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/Catalogs/Catalog/Forms/ItemForm/Form.form b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/Catalogs/Catalog/Forms/ItemForm/Form.form new file mode 100644 index 00000000..239fffdd --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/Catalogs/Catalog/Forms/ItemForm/Form.form @@ -0,0 +1,174 @@ + + + + Code + 1 + true + true + + true + + + Object.Code + + + CodeExtendedTooltip + 3 + true + true + + true + + Label + true + true + + Left + + + + CodeContextMenu + 2 + true + true + + true + + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + Description + 4 + true + true + + true + + + Object.Description + + + DescriptionExtendedTooltip + 6 + true + true + + true + + Label + true + true + + Left + + + + DescriptionContextMenu + 5 + true + true + + true + + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + FormCommandBar + -1 + true + true + + true + + Left + true + + LockOwnerWindow + true + true + Vertical + true + true + true + true + true + + Object + 1 + + CatalogObject.Catalog + + + true + + + true + +
true
+ true +
+ + Table + + <key>en</key> + <value>Table</value> + + 2 + + ValueTable + + + true + + + true + + + Attribute1 + 3 + + String + + + + true + + + true + + + + + + + + +
diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/Catalogs/Catalog/Forms/ItemForm/Module.bsl b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/Catalogs/Catalog/Forms/ItemForm/Module.bsl new file mode 100644 index 00000000..6b1cc9d9 --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/Catalogs/Catalog/Forms/ItemForm/Module.bsl @@ -0,0 +1,23 @@ +#Region Variables + +#EndRegion + +#Region FormEventHandlers +// Enter code here. +#EndRegion + +#Region FormHeaderItemsEventHandlers +// Enter code here. +#EndRegion + +#Region FormTableItemsEventHandlersFormTableName +// Enter code here. +#EndRegion + +#Region FormCommandsEventHandlers +// Enter code here. +#EndRegion + +#Region Private +// Enter code here. +#EndRegion \ No newline at end of file diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/Catalogs/Catalog/ManagerModule.bsl b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/Catalogs/Catalog/ManagerModule.bsl new file mode 100644 index 00000000..e69de29b diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/Catalogs/Catalog/ObjectModule.bsl b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/Catalogs/Catalog/ObjectModule.bsl new file mode 100644 index 00000000..099e8923 --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/Catalogs/Catalog/ObjectModule.bsl @@ -0,0 +1,23 @@ +#Region Variables + +#EndRegion + +#Region Public +// Enter code here. +#EndRegion + +#Region EventHandlers +// Enter code here. +#EndRegion + +#Region Internal +// Enter code here. +#EndRegion + +#Region Private +// Enter code here. +#EndRegion + +#Region Initialize + +#EndRegion \ No newline at end of file diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/CommonModule/CommonModule.mdo b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/CommonModule/CommonModule.mdo new file mode 100644 index 00000000..a56f0e6f --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/CommonModule/CommonModule.mdo @@ -0,0 +1,11 @@ + + + CommonModule + + en + Common module + + true + true + true + diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/CommonModule/Module.bsl b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/CommonModule/Module.bsl new file mode 100644 index 00000000..e69de29b diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/ComplientCommonModule/ComplientCommonModule.mdo b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/ComplientCommonModule/ComplientCommonModule.mdo new file mode 100644 index 00000000..7761b7bf --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/ComplientCommonModule/ComplientCommonModule.mdo @@ -0,0 +1,11 @@ + + + ComplientCommonModule + + en + Complient common module + + true + true + true + diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/ComplientCommonModule/Module.bsl b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/ComplientCommonModule/Module.bsl new file mode 100644 index 00000000..375f167b --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/ComplientCommonModule/Module.bsl @@ -0,0 +1,24 @@ + +#Region Public + +Procedure PublicMethod() Export + PrivateMethod(); +EndProcedure + +#EndRegion + +#Region Internal + +Procedure InternalMethod() Export + PrivateMethod(); +EndProcedure + +#EndRegion + +#Region Private + +Procedure PrivateMethod() + // add code +EndProcedure + +#EndRegion \ No newline at end of file diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/NonComplientCommonModule/Module.bsl b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/NonComplientCommonModule/Module.bsl new file mode 100644 index 00000000..03b060fe --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/NonComplientCommonModule/Module.bsl @@ -0,0 +1,24 @@ + +#Region NonPublic + +Procedure PublicMethod() Export + PrivateMethod(); +EndProcedure + +#EndRegion + +#Region Internal + +Procedure InternalMethod() Export + PrivateMethod(); +EndProcedure + +#EndRegion + +#Region Private + +Procedure PrivateMethod() + // add code +EndProcedure + +#EndRegion \ No newline at end of file diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/NonComplientCommonModule/NonComplientCommonModule.mdo b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/NonComplientCommonModule/NonComplientCommonModule.mdo new file mode 100644 index 00000000..19182254 --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/NonComplientCommonModule/NonComplientCommonModule.mdo @@ -0,0 +1,11 @@ + + + NonComplientCommonModule + + en + Non complient common module + + true + true + true + diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/NonComplientCommonModule1/Module.bsl b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/NonComplientCommonModule1/Module.bsl new file mode 100644 index 00000000..f0fa730f --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/NonComplientCommonModule1/Module.bsl @@ -0,0 +1,24 @@ + +#Region Public + +Procedure PublicMethod() Export + PrivateMethod(); +EndProcedure + +#Region Internal + +Procedure InternalMethod() Export + PrivateMethod(); +EndProcedure + +#EndRegion + +#EndRegion + +#Region Private + +Procedure PrivateMethod() + // add code +EndProcedure + +#EndRegion \ No newline at end of file diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/NonComplientCommonModule1/NonComplientCommonModule1.mdo b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/NonComplientCommonModule1/NonComplientCommonModule1.mdo new file mode 100644 index 00000000..eeb11331 --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/NonComplientCommonModule1/NonComplientCommonModule1.mdo @@ -0,0 +1,11 @@ + + + NonComplientCommonModule1 + + en + Non complient common module1 + + true + true + true + diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/NonComplientCommonModule2/Module.bsl b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/NonComplientCommonModule2/Module.bsl new file mode 100644 index 00000000..8c8c0ae9 --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/NonComplientCommonModule2/Module.bsl @@ -0,0 +1,24 @@ + +#Region Public + +Procedure PublicMethod() Export + PrivateMethod(); +EndProcedure + +#Region Public + +Procedure InternalMethod() Export + PrivateMethod(); +EndProcedure + +#EndRegion + +#EndRegion + +#Region Private + +Procedure PrivateMethod() + // add code +EndProcedure + +#EndRegion \ No newline at end of file diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/NonComplientCommonModule2/NonComplientCommonModule2.mdo b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/NonComplientCommonModule2/NonComplientCommonModule2.mdo new file mode 100644 index 00000000..32451b6b --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/NonComplientCommonModule2/NonComplientCommonModule2.mdo @@ -0,0 +1,11 @@ + + + NonComplientCommonModule2 + + en + Non complient common module2 + + true + true + true + diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/NonComplientCommonModule3/Module.bsl b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/NonComplientCommonModule3/Module.bsl new file mode 100644 index 00000000..b7ab51bc --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/NonComplientCommonModule3/Module.bsl @@ -0,0 +1,24 @@ + +#Region Private + +Procedure PrivateMethod() + // add code +EndProcedure + +#EndRegion + +#Region Public + +Procedure PublicMethod() Export + PrivateMethod(); +EndProcedure + +#EndRegion + +#Region Internal + +Procedure InternalMethod() Export + PrivateMethod(); +EndProcedure + +#EndRegion \ No newline at end of file diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/NonComplientCommonModule3/NonComplientCommonModule3.mdo b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/NonComplientCommonModule3/NonComplientCommonModule3.mdo new file mode 100644 index 00000000..6e4a7f0f --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/CommonModules/NonComplientCommonModule3/NonComplientCommonModule3.mdo @@ -0,0 +1,11 @@ + + + NonComplientCommonModule3 + + en + Non complient common module3 + + true + true + true + diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/Configuration/CommandInterface.cmi b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/Configuration/CommandInterface.cmi new file mode 100644 index 00000000..0cf6de8a --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/Configuration/CommandInterface.cmi @@ -0,0 +1,2 @@ + + diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/Configuration/Configuration.mdo b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/Configuration/Configuration.mdo new file mode 100644 index 00000000..f19b3f9c --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/Configuration/Configuration.mdo @@ -0,0 +1,48 @@ + + + ModuleStructureTopRegionCheck + + en + Module structure top region check + + + + + + + + + 8.3.19 + ManagedApplication + PersonalComputer + + + true + + + OSBackup + true + + + Language.English + Managed + NotAutoFree + DontUse + DontUse + 8.3.19 + + English + + en + English + + en + + CommonModule.ComplientCommonModule + CommonModule.NonComplientCommonModule + CommonModule.NonComplientCommonModule1 + CommonModule.NonComplientCommonModule2 + CommonModule.NonComplientCommonModule3 + CommonModule.CommonModule + Catalog.Catalog + diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/Configuration/MainSectionCommandInterface.cmi b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/Configuration/MainSectionCommandInterface.cmi new file mode 100644 index 00000000..0cf6de8a --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/ModuleStructureTopRegionCheck/src/Configuration/MainSectionCommandInterface.cmi @@ -0,0 +1,2 @@ + +