You've already forked v8-code-style
mirror of
https://github.com/1C-Company/v8-code-style.git
synced 2025-07-17 13:07:50 +02:00
Merge branch 'master' of github.com:1C-Company/v8-code-style into edt-2023-1
This commit is contained in:
@ -13,13 +13,20 @@
|
||||
- Документ не имеет реквизита "Комментарий"
|
||||
- Реквизит "Комментарий" имеет корректный тип
|
||||
- В документе, предполагающем проведение, не установлен флаг "Привилегированный режим при проведении / отмене проведения"
|
||||
- Проверка наличия буквы "ё" в имени, синониме или комментарии объекта метаданных
|
||||
|
||||
#### Формы
|
||||
|
||||
|
||||
#### Код модулей
|
||||
|
||||
- Проверка использования метода ДанныеФормыВЗначение вместо РеквизитФормыВЗначение
|
||||
- В проверку использования нерекомендуемых методов (use-non-recommended-method) добавлен метод ПолучитьФорму(GetForm)
|
||||
- Использование устаревшего метода Найти
|
||||
- Отсутствует комментарий к экспортной процедуре (функции)
|
||||
- Документирующий комментарий не содержит секцию "Описание" для экспортной процедуры (функции)
|
||||
- Проверка корректного наименования переменных
|
||||
- Обращение к несуществующему параметру формы
|
||||
|
||||
#### Запросы
|
||||
|
||||
@ -33,6 +40,7 @@
|
||||
### Исправленные ошибки
|
||||
|
||||
- Требование к программному продукту: Для переменных общих модулей проверялся префикс расширения и диагностировалась ошибка
|
||||
- При анализе расположения устаревших методов учитывался только сценарий расположения устаревшей области в программном интерфейса, теперь учитывается еще и служебный программный интерфейс
|
||||
|
||||
## 0.4.0
|
||||
|
||||
|
@ -0,0 +1,28 @@
|
||||
# Rules for variable names generation
|
||||
|
||||
1. To name a variable, use conventional terms related to the respective subject area so
|
||||
that the variable's name would be descriptive and convey its purpose to the reader.
|
||||
2. Variable names mustn't contain spaces, even when it is composed of a few words.
|
||||
Each word in a variable name starts with a capital letter, including pronounces and prepositions.
|
||||
3. Variable names mustn't start with an underscore.
|
||||
4. Variable names must contain more than one character, except for loop counters.
|
||||
It is allowed to assign loop counters with single-character names.
|
||||
5. Name Boolean variables so that the name would convey the true state of the variable.
|
||||
|
||||
## Invalid variable name examples
|
||||
|
||||
```bsl
|
||||
arrOfAtrribute, _SetTypeDoc, nS
|
||||
```
|
||||
|
||||
## Correct variable name examples
|
||||
|
||||
```bsl
|
||||
Var DialogWorkingCatalog;
|
||||
Var NumberOfPacksInTheBox;
|
||||
NewDocumentRef;
|
||||
```
|
||||
|
||||
## See
|
||||
|
||||
- [Rules for variable names generation](https://kb.1ci.com/1C_Enterprise_Platform/Guides/Developer_Guides/1C_Enterprise_Development_Standards/Code_conventions/Module_formatting/Rules_for_variable_names_generation/)
|
@ -0,0 +1,68 @@
|
||||
# Documentation comment has no "Description" section for export procedure (function)
|
||||
|
||||
In the **Description section**, explain the purpose of the procedure or function in a short, but clear way,
|
||||
so that the reader would understand its behavior without looking into the source code.
|
||||
Here, you can also include the description of its mechanics and links to related procedures and functions.
|
||||
|
||||
If the procedure or function has no parameters, this can be the only comment section.
|
||||
The description text must not be identical to the name of the function or procedure.
|
||||
Start the description with a verb. For functions, usually, the description starts with "Returns."
|
||||
If returning a result is not the main purpose of the function,
|
||||
start the section with a verb that describes the main purpose.
|
||||
For example, "Validates," "Compares," or "Calculates."
|
||||
Don't start the description with excessive words like "Procedure" or its name.
|
||||
|
||||
## Noncompliant Code Example
|
||||
|
||||
```bsl
|
||||
|
||||
#Region Public
|
||||
|
||||
// Parameters:
|
||||
// RoleNames - String - comma-separated names of roles whose availability is checked.
|
||||
//
|
||||
// Returns:
|
||||
// Boolean - True if at least one of the passed roles is available to the current user or the
|
||||
// current user has administrative rights.
|
||||
//
|
||||
// Example:
|
||||
// If RolesAvailable("UseReportMailingLists,SendMail") Then ...
|
||||
//
|
||||
Function RolesAvailable(RoleNames) Export
|
||||
// code here
|
||||
EndFunction
|
||||
|
||||
#EndRegion
|
||||
|
||||
```
|
||||
|
||||
## Compliant Solution
|
||||
|
||||
```bsl
|
||||
|
||||
#Region Public
|
||||
|
||||
// Defines the availability of RoleNames roles to the current user,
|
||||
// as well as the availability of administrator rights.
|
||||
//
|
||||
// Parameters:
|
||||
// RoleNames - String - comma-separated names of roles whose availability is checked.
|
||||
//
|
||||
// Returns:
|
||||
// Boolean - True if at least one of the passed roles is available to the current user or the
|
||||
// current user has administrative rights.
|
||||
//
|
||||
// Example:
|
||||
// If RolesAvailable("UseReportMailingLists,SendMail") Then ...
|
||||
//
|
||||
Function RolesAvailable(RoleNames) Export
|
||||
// code here
|
||||
EndFunction
|
||||
|
||||
#EndRegion
|
||||
|
||||
```
|
||||
|
||||
## See
|
||||
|
||||
- [Procedure and function descriptions](https://kb.1ci.com/1C_Enterprise_Platform/Guides/Developer_Guides/1C_Enterprise_Development_Standards/Code_conventions/Module_formatting/Procedure_and_function_description)
|
@ -0,0 +1,50 @@
|
||||
# Export procedure (function) should be described by adding comment
|
||||
|
||||
Procedures and functions that belong to **program interface of modules** are required to have comments.
|
||||
Such procedures and functions are intended to be used in other functional subsystems (or in other applications)
|
||||
that might be in the scope of responsibility of other developers, and they should, therefore, be properly documented.
|
||||
|
||||
## Noncompliant Code Example
|
||||
|
||||
```bsl
|
||||
|
||||
#Region Public
|
||||
|
||||
Function RolesAvailable(RoleNames) Export
|
||||
// code here
|
||||
EndFunction
|
||||
|
||||
#EndRegion
|
||||
|
||||
```
|
||||
|
||||
## Compliant Solution
|
||||
|
||||
```bsl
|
||||
|
||||
#Region Public
|
||||
|
||||
// Defines the availability of RoleNames roles to the current user,
|
||||
// as well as the availability of administrator rights.
|
||||
//
|
||||
// Parameters:
|
||||
// RoleNames - String - comma-separated names of roles whose availability is checked.
|
||||
//
|
||||
// Returns:
|
||||
// Boolean - True if at least one of the passed roles is available to the current user or the
|
||||
// current user has administrative rights.
|
||||
//
|
||||
// Example:
|
||||
// If RolesAvailable("UseReportMailingLists,SendMail") Then ...
|
||||
//
|
||||
Function RolesAvailable(RoleNames) Export
|
||||
// code here
|
||||
EndFunction
|
||||
|
||||
#EndRegion
|
||||
|
||||
```
|
||||
|
||||
## See
|
||||
|
||||
- [Procedure and function descriptions](https://1c-dn.com/library/procedure_and_function_descriptions/)
|
@ -4,6 +4,8 @@ Make sure your configuration does not contain unused metadata objects, such as c
|
||||
command interface sections, and other. Also it must not contain the code of common modules, procedures,
|
||||
functions, and variables, which is not used in the configuration and for integration with other systems.
|
||||
|
||||
The check searches for all references to the method, so it can take a long time.
|
||||
|
||||
## Noncompliant Code Example
|
||||
|
||||
```bsl
|
||||
|
@ -0,0 +1,28 @@
|
||||
# Правила образования имен переменных
|
||||
|
||||
1. Имена переменных следует образовывать от терминов предметной области таким образом, чтобы из имени
|
||||
переменной было понятно ее назначение.
|
||||
2. Имена следует образовывать путем удаления пробелов между словами. При этом, каждое слово в имени
|
||||
пишется с прописной буквы. Предлоги и местоимения из одной буквы также пишутся прописными буквами.
|
||||
3. Имена переменных запрещается начинать с подчеркивания.
|
||||
4. Имена переменных не должны состоять из одного символа. Использование односимвольных имен переменных
|
||||
допускается только для счетчиков циклов..
|
||||
5. Переменные, отражающие состояние некоторого флага, следует называть так, как пишется истинное значение этого флага.
|
||||
|
||||
## Примеры некорректных имен переменных
|
||||
|
||||
```bsl
|
||||
массРеквизитов, _СоотвВидИмя, нС
|
||||
```
|
||||
|
||||
## Примеры корректных имен переменных
|
||||
|
||||
```bsl
|
||||
Перем ДиалогРаботыСКаталогом;
|
||||
Перем КоличествоПачекВКоробке;
|
||||
НовыйДокументСсылка;
|
||||
```
|
||||
|
||||
## См.
|
||||
|
||||
- [Правила образования имен переменных](https://its.1c.ru/db/v8std#content:454:hdoc:3)
|
@ -0,0 +1,68 @@
|
||||
# Документирующий комментарий не содержит секцию "Описание" для экспортной процедуры (функции)
|
||||
|
||||
**Секция "Описание"** содержит описание назначения процедуры (функции),
|
||||
достаточное для понимания сценариев ее использования без просмотра ее исходного кода.
|
||||
Также может содержать краткое описание принципов работы и перекрестные ссылки на связанные процедуры и функции.
|
||||
Может быть единственной секцией для процедур без параметров.
|
||||
|
||||
Описание не должно совпадать с именем процедуры (функции).
|
||||
Для процедур и функций секция должна начинаться с глагола. Для функций это, как правило:
|
||||
«Возвращает…». В тех случаях, когда возвращаемый результат является не основным в работе функции, –
|
||||
то с основного действия, например: «Проверяет…», «Сравнивает…», «Вычисляет…» и т.п.
|
||||
Не рекомендуется начинать описание с избыточных слов «Процедура...», «Функция...»,
|
||||
а также с имени самой процедуры (функции), от удаления которых смысл не меняется.
|
||||
|
||||
## Неправильно
|
||||
|
||||
```bsl
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Параметры:
|
||||
// ИменаРолей - Строка - имена ролей, доступность которых проверяется, разделенные запятыми.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Истина, если хотя бы одна из переданных ролей доступна текущему пользователю,
|
||||
// либо у него есть административные права.
|
||||
//
|
||||
// Пример:
|
||||
// Если РолиДоступны("ИспользованиеРассылокОтчетов,ОтправкаПоПочте") Тогда ...
|
||||
//
|
||||
Функция РолиДоступны(ИменаРолей) Экспорт
|
||||
// код
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
```
|
||||
|
||||
## Правильно
|
||||
|
||||
```bsl
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Определяет доступность ролей ИменаРолей текущему пользователю,
|
||||
// а также доступность административных прав.
|
||||
//
|
||||
// Параметры:
|
||||
// ИменаРолей - Строка - имена ролей, доступность которых проверяется, разделенные запятыми.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Истина, если хотя бы одна из переданных ролей доступна текущему пользователю,
|
||||
// либо у него есть административные права.
|
||||
//
|
||||
// Пример:
|
||||
// Если РолиДоступны("ИспользованиеРассылокОтчетов,ОтправкаПоПочте") Тогда ...
|
||||
//
|
||||
Функция РолиДоступны(ИменаРолей) Экспорт
|
||||
// код
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
```
|
||||
|
||||
## См.
|
||||
|
||||
- [Описание процедур и функций](https://its.1c.ru/db/v8std#content:453:hdoc:2)
|
@ -0,0 +1,55 @@
|
||||
# Отсутствует комментарий к экспортной процедуре (функции)
|
||||
|
||||
Описание **процедур и функций** рекомендуется выполнять в виде комментария к ним.
|
||||
Необходимость комментирования отдельных участков кода процедур и функций должна определяться разработчиком
|
||||
исходя из сложности и нестандартности конкретного участка кода.
|
||||
|
||||
Обязательного комментирования требуют процедуры и функции входящие в **программный интерфейс модулей** -
|
||||
такие процедуры и функции предназначены для использования в других функциональных подсистемах
|
||||
(или в других приложениях), за которые могут отвечать другие разработчики,
|
||||
поэтому они должны быть хорошо документированы.
|
||||
|
||||
## Неправильно
|
||||
|
||||
```bsl
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
Функция РолиДоступны(ИменаРолей) Экспорт
|
||||
// код
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
```
|
||||
|
||||
## Правильно
|
||||
|
||||
```bsl
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Определяет доступность ролей ИменаРолей текущему пользователю,
|
||||
// а также доступность административных прав.
|
||||
//
|
||||
// Параметры:
|
||||
// ИменаРолей - Строка - имена ролей, доступность которых проверяется, разделенные запятыми.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Истина, если хотя бы одна из переданных ролей доступна текущему пользователю,
|
||||
// либо у него есть административные права.
|
||||
//
|
||||
// Пример:
|
||||
// Если РолиДоступны("ИспользованиеРассылокОтчетов,ОтправкаПоПочте") Тогда ...
|
||||
//
|
||||
Функция РолиДоступны(ИменаРолей) Экспорт
|
||||
// код
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
```
|
||||
|
||||
## См.
|
||||
|
||||
- [Описание процедур и функций](https://its.1c.ru/db/v8std#content:453:hdoc:2)
|
@ -3,6 +3,8 @@
|
||||
Исключением являются экспортные методы, расположенные в области "ПрограммныйИнтерфейс",
|
||||
т.к. эти методы часто могут использоваться другими конфигурациями (библиотеками).
|
||||
|
||||
Проверка выполняет поиск всех ссылок на метод, поэтому может выполняться длительное время.
|
||||
|
||||
## Неправильно
|
||||
|
||||
```bsl
|
||||
|
@ -0,0 +1,14 @@
|
||||
# Обращение к несуществующему параметру формы
|
||||
|
||||
Параметры формы следует объявлять явно на закладке Параметры редактора формы.
|
||||
В таком случае в коде обработчика ПриСозданииНаСервере не требуется проверять
|
||||
наличие свойств у структуры Параметры, а сам состав параметров формы явно задекларирован
|
||||
(поэтому их не требуется восстанавливать, изучая весь код обработчика ПриСозданииНаСервере).
|
||||
|
||||
## Неправильно
|
||||
|
||||
## Правильно
|
||||
|
||||
## См.
|
||||
|
||||
- [Открытие параметризированных форм](https://its.1c.ru/db/v8std#content:741:hdoc)
|
@ -12,6 +12,10 @@
|
||||
ОбщаяФорма1 = ПолучитьФорму("ОбщаяФорма.ОбщаяФорма1");
|
||||
```
|
||||
|
||||
```bsl
|
||||
Найти(Сотрудник.Имя, "Иван");
|
||||
```
|
||||
|
||||
## Правильно
|
||||
|
||||
```bsl
|
||||
@ -24,8 +28,13 @@
|
||||
ОткрытьФорму("ОбщаяФорма.ОбщаяФорма1);
|
||||
```
|
||||
|
||||
```bsl
|
||||
СтрНайти(Сотрудник.Имя, "Иван");
|
||||
```
|
||||
|
||||
## См.
|
||||
|
||||
- [Ограничение на использование метода Сообщить](https://its.1c.ru/db/v8std#content:418:hdoc)
|
||||
- [Работа в разных часовых поясах](https://its.1c.ru/db/v8std#content:643:hdoc:2.1)
|
||||
- [Открытие форм](https://its.1c.ru/db/v8std#content:404:hdoc:1)
|
||||
- [Открытие форм](https://its.1c.ru/db/v8std#content:404:hdoc:1)
|
||||
- [Переход на платформу 1С:Предприятие 8.3](https://its.1c.ru/db/metod8dev#content:5293:hdoc)
|
@ -0,0 +1,27 @@
|
||||
# Использование РеквизитФормыВЗначение и ДанныеФормыВЗначение
|
||||
|
||||
В большинстве случаев в модулях форм следует использовать метод формы РеквизитФормыВЗначение вместо метода ДанныеФормыВЗначение.
|
||||
|
||||
Рекомендация обусловлена соображениями унификации прикладного кода и тем, что синтаксис метода РеквизитФормыВЗначение проще,
|
||||
чем у ДанныеФормыВЗначение (а следовательно, меньше вероятность ошибки).
|
||||
В ДанныеФормыВЗначение необходимо дополнительно передавать тип значения, а для РеквизитФормыВЗначение это не обязательно,
|
||||
а в практическом плане - избыточно.
|
||||
|
||||
Наличие в платформе 1С:Предприятие метода формы РеквизитФормыВЗначение (наряду с методом глобального контекста ДанныеФормыВЗначение)
|
||||
объясняется только удобством его применения. С точки зрения эффективности и результата методы работают одинаково.
|
||||
|
||||
## Неправильно
|
||||
|
||||
```bsl
|
||||
ТаблицаПодписей = ДанныеФормыВЗначение(ТаблицаПодписей, Тип("ТаблицаЗначений"));
|
||||
```
|
||||
|
||||
## Правильно
|
||||
|
||||
```bsl
|
||||
ТаблицаПодписей = РеквизитФормыВЗначение("ТаблицаПодписей");
|
||||
```
|
||||
|
||||
## См.
|
||||
|
||||
- [Использование РеквизитФормыВЗначение и ДанныеФормыВЗначение](https://its.1c.ru/db/v8std#content:409:hdoc)
|
@ -0,0 +1,14 @@
|
||||
# Unknown form parameter access
|
||||
|
||||
For parameterizable forms, all parameters must be provided in the form's parameter set.
|
||||
By this, all the form's parametrization options are described in the parameter set in a declarative way.
|
||||
|
||||
Specify the parameters in the code that opens the form (OpenForm).
|
||||
|
||||
## Noncompliant Code Example
|
||||
|
||||
## Compliant Solution
|
||||
|
||||
## См.
|
||||
|
||||
- [Opening form](https://kb.1ci.com/1C_Enterprise_Platform/Guides/Developer_Guides/1C_Enterprise_Development_Standards/Designing_user_interfaces/Implementation_of_form/Opening_forms/?language=en)
|
@ -12,6 +12,10 @@ Date = CurrentDate();
|
||||
CommonForm1 = GetForm("CommonForm.CommonForm1");
|
||||
```
|
||||
|
||||
```bsl
|
||||
Find(Catalog.Name, "Joy");
|
||||
```
|
||||
|
||||
## Compliant Solution
|
||||
|
||||
```bsl
|
||||
@ -24,8 +28,13 @@ Date = CurrentSessionDate();
|
||||
OpenForm("CommonForm.CommonForm1");
|
||||
```
|
||||
|
||||
```bsl
|
||||
StrFind(Catalog.Name, "Joy");
|
||||
```
|
||||
|
||||
## See
|
||||
|
||||
- [Restriction on the use of the Message method](https://its.1c.ru/db/v8std#content:418:hdoc)
|
||||
- [Working in different time zones](https://its.1c.ru/db/v8std#content:643:hdoc:2.1)
|
||||
- [Opening forms](https://kb.1ci.com/1C_Enterprise_Platform/Guides/Developer_Guides/1C_Enterprise_Development_Standards/Designing_user_interfaces/Implementation_of_form/Opening_forms/?language=en)
|
||||
- [Opening forms](https://kb.1ci.com/1C_Enterprise_Platform/Guides/Developer_Guides/1C_Enterprise_Development_Standards/Designing_user_interfaces/Implementation_of_form/Opening_forms/?language=en)
|
||||
- [Version 8.3](https://kb.1ci.com/1C_Enterprise_Platform/What___s_New/What___s_New/Version_8.3.6/?language=en)
|
@ -0,0 +1,27 @@
|
||||
# Using FormAttributeToValue and FormDataToValue
|
||||
|
||||
In most cases, FormAttributeToValue is preferable to FormDataToValue.
|
||||
|
||||
Sticking to this recommendation will help you to keep the code consistent with other 1C:Enterprise applications. Also,
|
||||
FormAttributeToValue has simpler syntax, that is, less chance to make a code mistake.
|
||||
FormDataToValue requires the data type to be specified explicitly.
|
||||
|
||||
In contrast, FormAttributeToValue doesn't require data type to be specified.
|
||||
|
||||
1C:Enterprise supports both the FormAttributeToValue and FormDataToValue methods,
|
||||
but the last-mentioned is considered more usable. In terms of efficiency and output, the methods are equal.
|
||||
|
||||
## Noncompliant Code Example
|
||||
|
||||
```bsl
|
||||
SignaturesTable = FormDataToValue(SignaturesTable, Type("ValueTable"));
|
||||
```
|
||||
|
||||
## Compliant Solution
|
||||
|
||||
```bsl
|
||||
SignaturesTable = FormAttributeToValue("SignaturesTable");
|
||||
```
|
||||
|
||||
## See
|
||||
[Using FormAttributeToValue and FormDataToValue](https://kb.1ci.com/1C_Enterprise_Platform/Guides/Developer_Guides/1C_Enterprise_Development_Standards/Code_conventions/Using_applied_objects_and_universal_value_collections/Using_FormAttributeToValue_and_FormDataToValue)
|
@ -347,6 +347,26 @@
|
||||
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.UnknownFormParameterAccessCheck">
|
||||
</check>
|
||||
<check
|
||||
category="com.e1c.v8codestyle.bsl"
|
||||
class="com.e1c.v8codestyle.bsl.check.VariableNameInvalidCheck">
|
||||
</check>
|
||||
<check
|
||||
category="com.e1c.v8codestyle.bsl"
|
||||
class="com.e1c.v8codestyle.bsl.check.UsingFormDataToValueCheck">
|
||||
</check>
|
||||
<check
|
||||
category="com.e1c.v8codestyle.bsl"
|
||||
class="com.e1c.v8codestyle.internal.bsl.ExecutableExtensionFactory:com.e1c.v8codestyle.bsl.check.ExportProcedureMissingCommentCheck">
|
||||
</check>
|
||||
<check
|
||||
category="com.e1c.v8codestyle.bsl"
|
||||
class="com.e1c.v8codestyle.internal.bsl.ExecutableExtensionFactory:com.e1c.v8codestyle.bsl.comment.check.ExportProcedureCommentDescriptionCheck">
|
||||
</check>
|
||||
</extension>
|
||||
<extension
|
||||
point="org.eclipse.core.runtime.preferences">
|
||||
|
@ -125,6 +125,7 @@ public class DeprecatedProcedureOutsideDeprecatedRegionCheck
|
||||
return false;
|
||||
}
|
||||
return regionFirst.get().getName().equals(ModuleStructureSection.DEPRECATED_REGION.getName(scriptVariant))
|
||||
&& regionTop.get().getName().equals(ModuleStructureSection.PUBLIC.getName(scriptVariant));
|
||||
&& (regionTop.get().getName().equals(ModuleStructureSection.PUBLIC.getName(scriptVariant))
|
||||
|| regionTop.get().getName().equals(ModuleStructureSection.INTERNAL.getName(scriptVariant)));
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,111 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (C) 2022, 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.check;
|
||||
|
||||
import static com._1c.g5.v8.dt.bsl.model.BslPackage.Literals.METHOD;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.xtext.nodemodel.ILeafNode;
|
||||
import org.eclipse.xtext.nodemodel.INode;
|
||||
import org.eclipse.xtext.nodemodel.util.NodeModelUtils;
|
||||
|
||||
import com._1c.g5.v8.dt.bsl.documentation.comment.BslCommentUtils;
|
||||
import com._1c.g5.v8.dt.bsl.model.Method;
|
||||
import com._1c.g5.v8.dt.bsl.model.RegionPreprocessor;
|
||||
import com._1c.g5.v8.dt.mcore.McorePackage;
|
||||
import com.e1c.g5.v8.dt.check.CheckComplexity;
|
||||
import com.e1c.g5.v8.dt.check.ICheckParameters;
|
||||
import com.e1c.g5.v8.dt.check.settings.IssueSeverity;
|
||||
import com.e1c.g5.v8.dt.check.settings.IssueType;
|
||||
import com.e1c.v8codestyle.bsl.ModuleStructureSection;
|
||||
import com.e1c.v8codestyle.check.StandardCheckExtension;
|
||||
import com.e1c.v8codestyle.internal.bsl.BslPlugin;
|
||||
|
||||
/**
|
||||
* Check that comment is added to the export procedure (function)
|
||||
*
|
||||
* @author Olga Bozhko
|
||||
*/
|
||||
public class ExportProcedureMissingCommentCheck
|
||||
extends AbstractModuleStructureCheck
|
||||
{
|
||||
private static final String CHECK_ID = "export-procedure-missing-comment"; //$NON-NLS-1$
|
||||
|
||||
@Override
|
||||
public String getCheckId()
|
||||
{
|
||||
return CHECK_ID;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureCheck(CheckConfigurer builder)
|
||||
{
|
||||
builder.title(Messages.ExportProcedureMissingCommentCheck_title)
|
||||
.description(Messages.ExportProcedureMissingCommentCheck_description)
|
||||
.complexity(CheckComplexity.NORMAL)
|
||||
.severity(IssueSeverity.MINOR)
|
||||
.issueType(IssueType.CODE_STYLE)
|
||||
.extension(new StandardCheckExtension(453, getCheckId(), BslPlugin.PLUGIN_ID))
|
||||
.module()
|
||||
.checkedObjectType(METHOD);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void check(Object object, ResultAcceptor resultAceptor, ICheckParameters parameters,
|
||||
IProgressMonitor monitor)
|
||||
{
|
||||
Method method = (Method)object;
|
||||
|
||||
if (method.isExport() && verifyTopRegion(getTopParentRegion(method))
|
||||
&& isMethodHasNoComment(NodeModelUtils.findActualNodeFor(method)))
|
||||
{
|
||||
resultAceptor.addIssue(
|
||||
MessageFormat.format(Messages.ExportProcedureMissingCommentCheck_Export_procedure_missing_comment,
|
||||
method.getName()),
|
||||
McorePackage.Literals.NAMED_ELEMENT__NAME);
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean verifyTopRegion(Optional<RegionPreprocessor> regionTop)
|
||||
{
|
||||
if (regionTop.isEmpty())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return regionTop.get().getName().equals(ModuleStructureSection.PUBLIC.getNames()[0])
|
||||
|| regionTop.get().getName().equals(ModuleStructureSection.PUBLIC.getNames()[1]);
|
||||
}
|
||||
|
||||
private static boolean isMethodHasNoComment(INode root)
|
||||
{
|
||||
if (root != null)
|
||||
{
|
||||
boolean lastNodeIsComment = false;
|
||||
for (ILeafNode node : root.getLeafNodes())
|
||||
{
|
||||
if (node.isHidden())
|
||||
{
|
||||
lastNodeIsComment = BslCommentUtils.isCommentNode(node);
|
||||
}
|
||||
else
|
||||
{
|
||||
return !lastNodeIsComment;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
@ -169,6 +169,12 @@ final class Messages
|
||||
|
||||
public static String ExportMethodInCommandModule_Do_not_use_export_method_in_commands_module;
|
||||
|
||||
public static String ExportProcedureMissingCommentCheck_description;
|
||||
|
||||
public static String ExportProcedureMissingCommentCheck_Export_procedure_missing_comment;
|
||||
|
||||
public static String ExportProcedureMissingCommentCheck_title;
|
||||
|
||||
public static String ExportVariableInObjectModuleCheck_Description;
|
||||
|
||||
public static String ExportVariableInObjectModuleCheck_Issue;
|
||||
@ -338,6 +344,12 @@ final class Messages
|
||||
|
||||
public static String RollbackTransactionCheck_Transactions_is_broken_des;
|
||||
|
||||
public static String UnknownFormParameterAccessCheck_description;
|
||||
|
||||
public static String UnknownFormParameterAccessCheck_title;
|
||||
|
||||
public static String UnknownFormParameterAccessCheck_Unknown_form_parameter_access;
|
||||
|
||||
public static String UseNonRecommendedMethods_description;
|
||||
|
||||
public static String UseNonRecommendedMethods_message;
|
||||
@ -366,6 +378,12 @@ final class Messages
|
||||
|
||||
public static String MissingTemporaryFileDeletionCheck_title;
|
||||
|
||||
public static String FormDataToValueCheck_Description;
|
||||
|
||||
public static String FormDataToValueCheck_Issue;
|
||||
|
||||
public static String FormDataToValueCheck_Title;
|
||||
|
||||
public static String FormModulePragmaCheck_description;
|
||||
|
||||
public static String FormModulePragmaCheck_Form_module_compilation_pragma_used;
|
||||
@ -422,6 +440,14 @@ final class Messages
|
||||
|
||||
public static String LockOutOfTry_Method_lock_out_of_try;
|
||||
|
||||
public static String VariableNameInvalidCheck_description;
|
||||
public static String VariableNameInvalidCheck_message_variable_length_is_less_than;
|
||||
public static String VariableNameInvalidCheck_param_MIN_NAME_LENGTH_PARAM_title;
|
||||
public static String VariableNameInvalidCheck_title;
|
||||
public static String VariableNameInvalidCheck_variable_name_is_invalid;
|
||||
public static String VariableNameInvalidCheck_variable_name_must_start_with_a_capital_letter;
|
||||
public static String VariableNameInvalidCheck_variable_name_starts_with_an_underline;
|
||||
|
||||
static
|
||||
{
|
||||
// initialize resource bundle
|
||||
@ -432,4 +458,4 @@ final class Messages
|
||||
{
|
||||
// N/A
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,144 @@
|
||||
/*******************************************************************************
|
||||
* 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.check;
|
||||
|
||||
import static com._1c.g5.v8.dt.bsl.model.BslPackage.Literals.DYNAMIC_FEATURE_ACCESS;
|
||||
import static com._1c.g5.v8.dt.bsl.model.BslPackage.Literals.FEATURE_ACCESS__NAME;
|
||||
import static com._1c.g5.v8.dt.mcore.McorePackage.Literals.CONTAINING_SOURCE_DERIVED_PROPERTY__CONTAINING_SOURCE;
|
||||
import static com._1c.g5.v8.dt.mcore.McorePackage.Literals.DERIVED_PROPERTY__SOURCE;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.Collection;
|
||||
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.xtext.EcoreUtil2;
|
||||
|
||||
import com._1c.g5.v8.dt.bsl.model.DynamicFeatureAccess;
|
||||
import com._1c.g5.v8.dt.bsl.model.Expression;
|
||||
import com._1c.g5.v8.dt.bsl.model.FeatureEntry;
|
||||
import com._1c.g5.v8.dt.bsl.model.ModuleType;
|
||||
import com._1c.g5.v8.dt.bsl.model.StaticFeatureAccess;
|
||||
import com._1c.g5.v8.dt.bsl.resource.DynamicFeatureAccessComputer;
|
||||
import com._1c.g5.v8.dt.mcore.ContainingSourceDerivedProperty;
|
||||
import com._1c.g5.v8.dt.mcore.DerivedProperty;
|
||||
import com._1c.g5.v8.dt.mcore.Environmental;
|
||||
import com.e1c.g5.v8.dt.check.CheckComplexity;
|
||||
import com.e1c.g5.v8.dt.check.ICheckParameters;
|
||||
import com.e1c.g5.v8.dt.check.components.BasicCheck;
|
||||
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;
|
||||
|
||||
/**
|
||||
* Check the use unknown form parameter access in form module
|
||||
* @author Vadim Goncharov
|
||||
*/
|
||||
public class UnknownFormParameterAccessCheck
|
||||
extends BasicCheck
|
||||
{
|
||||
|
||||
private static final String CHECK_ID = "unknown-form-parameter-access"; //$NON-NLS-1$
|
||||
|
||||
private static final String PARAMETERS_KEYWORD = "Parameters"; //$NON-NLS-1$
|
||||
|
||||
private static final String PARAMETERS_KEYWORD_RU = "Параметры"; //$NON-NLS-1$
|
||||
|
||||
private final DynamicFeatureAccessComputer dynamicComputer;
|
||||
|
||||
/**
|
||||
* Instantiates a new unknown form parameter access check.
|
||||
*
|
||||
* @param dynamicComputer the dynamic computer, cannot be {@code null}
|
||||
*/
|
||||
@Inject
|
||||
public UnknownFormParameterAccessCheck(DynamicFeatureAccessComputer dynamicComputer)
|
||||
{
|
||||
super();
|
||||
this.dynamicComputer = dynamicComputer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCheckId()
|
||||
{
|
||||
return CHECK_ID;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureCheck(CheckConfigurer builder)
|
||||
{
|
||||
builder.title(Messages.UnknownFormParameterAccessCheck_title)
|
||||
.description(Messages.UnknownFormParameterAccessCheck_description)
|
||||
.complexity(CheckComplexity.NORMAL)
|
||||
.severity(IssueSeverity.MINOR)
|
||||
.issueType(IssueType.CODE_STYLE)
|
||||
.extension(new StandardCheckExtension(741, getCheckId(), BslPlugin.PLUGIN_ID))
|
||||
.extension(ModuleTypeFilter.onlyTypes(ModuleType.FORM_MODULE))
|
||||
.module()
|
||||
.checkedObjectType(DYNAMIC_FEATURE_ACCESS);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void check(Object object, ResultAcceptor resultAcceptor, ICheckParameters parameters,
|
||||
IProgressMonitor monitor)
|
||||
{
|
||||
DynamicFeatureAccess dfa = (DynamicFeatureAccess)object;
|
||||
|
||||
String dfaName = dfa.getName();
|
||||
Expression src = dfa.getSource();
|
||||
if (!(src instanceof StaticFeatureAccess) || !isFormParameterAccess((StaticFeatureAccess)src)
|
||||
|| monitor.isCanceled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Environmental envs = EcoreUtil2.getContainerOfType(dfa, Environmental.class);
|
||||
|
||||
if (!monitor.isCanceled() && isEmptySource(dynamicComputer.resolveObject(dfa, envs.environments())))
|
||||
{
|
||||
resultAcceptor.addIssue(
|
||||
MessageFormat.format(Messages.UnknownFormParameterAccessCheck_Unknown_form_parameter_access, dfaName),
|
||||
dfa, FEATURE_ACCESS__NAME);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isFormParameterAccess(StaticFeatureAccess sfa)
|
||||
{
|
||||
String name = sfa.getName();
|
||||
return name.equalsIgnoreCase(PARAMETERS_KEYWORD) || name.equalsIgnoreCase(PARAMETERS_KEYWORD_RU);
|
||||
}
|
||||
|
||||
// TODO replace this method with BslUtil after 2022.2+
|
||||
private static boolean isEmptySource(Collection<FeatureEntry> features)
|
||||
{
|
||||
if (features.isEmpty())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return features.stream().allMatch(e -> {
|
||||
if (e.getFeature() instanceof ContainingSourceDerivedProperty)
|
||||
{
|
||||
return e.getFeature().eGet(CONTAINING_SOURCE_DERIVED_PROPERTY__CONTAINING_SOURCE, false) == null;
|
||||
}
|
||||
else if (e.getFeature() instanceof DerivedProperty)
|
||||
{
|
||||
return e.getFeature().eGet(DERIVED_PROPERTY__SOURCE, false) == null;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
}
|
@ -52,6 +52,8 @@ public class UseNonRecommendedMethodCheck
|
||||
"ТекущаяДата", //$NON-NLS-1$
|
||||
"Message", //$NON-NLS-1$
|
||||
"Сообщить", //$NON-NLS-1$
|
||||
"Find", //$NON-NLS-1$
|
||||
"Найти", //$NON-NLS-1$
|
||||
"ПолучитьФорму", //$NON-NLS-1$
|
||||
"GetForm"); //$NON-NLS-1$
|
||||
|
||||
|
@ -0,0 +1,71 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (C) 2022, 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.check;
|
||||
|
||||
import static com._1c.g5.v8.dt.bsl.model.BslPackage.Literals.STATIC_FEATURE_ACCESS;
|
||||
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
|
||||
import com._1c.g5.v8.dt.bsl.model.StaticFeatureAccess;
|
||||
import com.e1c.g5.v8.dt.check.CheckComplexity;
|
||||
import com.e1c.g5.v8.dt.check.ICheckParameters;
|
||||
import com.e1c.g5.v8.dt.check.components.BasicCheck;
|
||||
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;
|
||||
|
||||
/**
|
||||
* Checking the use of the FormDataToValue method that is not recommended.
|
||||
*
|
||||
* @author Artem Iliukhin
|
||||
*/
|
||||
public class UsingFormDataToValueCheck
|
||||
extends BasicCheck
|
||||
{
|
||||
|
||||
private static final String CHECK_ID = "using-form-data-to-value"; //$NON-NLS-1$
|
||||
private static final String NAME = "FormDataToValue"; //$NON-NLS-1$
|
||||
private static final String NAME_RU = "ДанныеФормыВЗначение"; //$NON-NLS-1$
|
||||
|
||||
@Override
|
||||
public String getCheckId()
|
||||
{
|
||||
return CHECK_ID;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureCheck(CheckConfigurer builder)
|
||||
{
|
||||
builder.title(Messages.FormDataToValueCheck_Title)
|
||||
.description(Messages.FormDataToValueCheck_Description)
|
||||
.complexity(CheckComplexity.NORMAL)
|
||||
.severity(IssueSeverity.TRIVIAL)
|
||||
.issueType(IssueType.CODE_STYLE)
|
||||
.extension(new StandardCheckExtension(409, getCheckId(), BslPlugin.PLUGIN_ID))
|
||||
.module()
|
||||
.checkedObjectType(STATIC_FEATURE_ACCESS);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void check(Object object, ResultAcceptor resultAceptor, ICheckParameters parameters,
|
||||
IProgressMonitor monitor)
|
||||
{
|
||||
StaticFeatureAccess featureAccess = (StaticFeatureAccess)object;
|
||||
String name = featureAccess.getName();
|
||||
if (NAME.equalsIgnoreCase(name) || NAME_RU.equalsIgnoreCase(name))
|
||||
{
|
||||
resultAceptor.addIssue(Messages.FormDataToValueCheck_Issue, object);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,164 @@
|
||||
/*******************************************************************************
|
||||
* 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
|
||||
* Vadim Goncharov - issue #385
|
||||
*******************************************************************************/
|
||||
|
||||
package com.e1c.v8codestyle.bsl.check;
|
||||
|
||||
import static com._1c.g5.v8.dt.bsl.model.BslPackage.Literals.DECLARE_STATEMENT;
|
||||
import static com._1c.g5.v8.dt.bsl.model.BslPackage.Literals.STATIC_FEATURE_ACCESS;
|
||||
import static com._1c.g5.v8.dt.bsl.model.BslPackage.Literals.VARIABLE;
|
||||
import static com._1c.g5.v8.dt.mcore.McorePackage.Literals.NAMED_ELEMENT__NAME;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.xtext.EcoreUtil2;
|
||||
|
||||
import com._1c.g5.v8.dt.bsl.model.DeclareStatement;
|
||||
import com._1c.g5.v8.dt.bsl.model.ExplicitVariable;
|
||||
import com._1c.g5.v8.dt.bsl.model.ForStatement;
|
||||
import com._1c.g5.v8.dt.bsl.model.StaticFeatureAccess;
|
||||
import com._1c.g5.v8.dt.bsl.model.Variable;
|
||||
import com.e1c.g5.v8.dt.check.CheckComplexity;
|
||||
import com.e1c.g5.v8.dt.check.ICheckParameters;
|
||||
import com.e1c.g5.v8.dt.check.components.BasicCheck;
|
||||
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;
|
||||
|
||||
/**
|
||||
* Check that variable name is correct.
|
||||
* @author Vadim Goncharov
|
||||
*/
|
||||
public class VariableNameInvalidCheck
|
||||
extends BasicCheck
|
||||
{
|
||||
|
||||
private static final String CHECK_ID = "bsl-variable-name-invalid"; //$NON-NLS-1$
|
||||
|
||||
private static final String MIN_NAME_LENGTH_PARAM_NAME = "minNameLength"; //$NON-NLS-1$
|
||||
|
||||
private static final Integer MIN_NAME_LENGTH_DEFAULT = 3;
|
||||
|
||||
private static final String UNDERLINE_SYM = "_"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* Instantiates a new instance of filter by variable name.
|
||||
*/
|
||||
public VariableNameInvalidCheck()
|
||||
{
|
||||
super();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCheckId()
|
||||
{
|
||||
return CHECK_ID;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureCheck(CheckConfigurer builder)
|
||||
{
|
||||
builder.title(Messages.VariableNameInvalidCheck_title)
|
||||
.description(Messages.VariableNameInvalidCheck_description)
|
||||
.complexity(CheckComplexity.NORMAL)
|
||||
.severity(IssueSeverity.MINOR)
|
||||
.issueType(IssueType.CODE_STYLE)
|
||||
.extension(new StandardCheckExtension(454, getCheckId(), BslPlugin.PLUGIN_ID))
|
||||
.module()
|
||||
.checkedObjectType(VARIABLE, STATIC_FEATURE_ACCESS, DECLARE_STATEMENT)
|
||||
.parameter(MIN_NAME_LENGTH_PARAM_NAME, Integer.class, MIN_NAME_LENGTH_DEFAULT.toString(),
|
||||
Messages.VariableNameInvalidCheck_param_MIN_NAME_LENGTH_PARAM_title);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void check(Object object, ResultAcceptor resultAceptor, ICheckParameters parameters,
|
||||
IProgressMonitor monitor)
|
||||
{
|
||||
|
||||
int minLength = parameters.getInt(MIN_NAME_LENGTH_PARAM_NAME);
|
||||
if (minLength <= 0)
|
||||
{
|
||||
minLength = MIN_NAME_LENGTH_DEFAULT;
|
||||
}
|
||||
|
||||
if (object instanceof Variable)
|
||||
{
|
||||
checkVariable((Variable)object, minLength, resultAceptor);
|
||||
}
|
||||
else if (object instanceof DeclareStatement)
|
||||
{
|
||||
for (ExplicitVariable variable : ((DeclareStatement)object).getVariables())
|
||||
{
|
||||
if (monitor.isCanceled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
checkVariable(variable, minLength, resultAceptor);
|
||||
}
|
||||
|
||||
}
|
||||
else if (object instanceof StaticFeatureAccess)
|
||||
{
|
||||
Variable variable = ((StaticFeatureAccess)object).getImplicitVariable();
|
||||
|
||||
if (variable == null || monitor.isCanceled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isForStatementAccessVariable(variable))
|
||||
{
|
||||
checkVariable(variable, minLength, resultAceptor);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void checkVariable(Variable variable, int minLength, ResultAcceptor resultAceptor)
|
||||
{
|
||||
|
||||
String name = variable.getName();
|
||||
int nameLength = name.length();
|
||||
String msgTemplate = Messages.VariableNameInvalidCheck_variable_name_is_invalid;
|
||||
String msg = null;
|
||||
|
||||
if (nameLength < minLength)
|
||||
{
|
||||
msg = MessageFormat.format(msgTemplate, name, MessageFormat
|
||||
.format(Messages.VariableNameInvalidCheck_message_variable_length_is_less_than, minLength));
|
||||
resultAceptor.addIssue(msg, variable, NAMED_ELEMENT__NAME);
|
||||
}
|
||||
|
||||
if (name.startsWith(UNDERLINE_SYM))
|
||||
{
|
||||
msg = MessageFormat.format(msgTemplate, name,
|
||||
Messages.VariableNameInvalidCheck_variable_name_starts_with_an_underline);
|
||||
resultAceptor.addIssue(msg, variable, NAMED_ELEMENT__NAME);
|
||||
}
|
||||
else if (!Character.isUpperCase(name.charAt(0)))
|
||||
{
|
||||
msg = MessageFormat.format(msgTemplate, name,
|
||||
Messages.VariableNameInvalidCheck_variable_name_must_start_with_a_capital_letter);
|
||||
resultAceptor.addIssue(msg, variable, NAMED_ELEMENT__NAME);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private boolean isForStatementAccessVariable(Variable variable)
|
||||
{
|
||||
return EcoreUtil2.getContainerOfType(variable, ForStatement.class) != null;
|
||||
}
|
||||
|
||||
}
|
@ -156,6 +156,12 @@ ExtensionMethodPrefixCheck_Description = The procedure (function) in the module
|
||||
|
||||
ExtensionMethodPrefixCheck_Ext_method__0__should_have__1__prefix = The method "{0}" should have "{1}" prefix
|
||||
|
||||
ExportProcedureMissingCommentCheck_description=Export procedure (function) should be described by adding comment
|
||||
|
||||
ExportProcedureMissingCommentCheck_Export_procedure_missing_comment=Export procedure (function) "{0}" should be described by adding comment
|
||||
|
||||
ExportProcedureMissingCommentCheck_title=Export procedure (function) should be described by adding comment
|
||||
|
||||
ExtensionMethodPrefixCheck_Title = Extension method does not have extension prefix
|
||||
|
||||
ExtensionVariablePrefixCheck_Description = The variable in the module of the extension object does not have a prefix corresponding to the prefix of the extension itself
|
||||
@ -164,6 +170,12 @@ ExtensionVariablePrefixCheck_Title = Extension variable does not have extension
|
||||
|
||||
ExtensionVariablePrefixCheck_Variable_0_should_have_1_prefix = The variable "{0}" should have "{1}" prefix
|
||||
|
||||
FormDataToValueCheck_Description = Using FormDataToValue instead FormAttributeToValue
|
||||
|
||||
FormDataToValueCheck_Issue = Use FormAttributeToValue instead FormDataToValue
|
||||
|
||||
FormDataToValueCheck_Title = Using FormDataToValue instead FormAttributeToValue
|
||||
|
||||
FormModuleMissingPragmaCheck_Missing_compilation_directives = Missing compilation directives
|
||||
|
||||
FormModuleMissingPragmaCheck_description = Always use compilation pragma in form module
|
||||
@ -438,6 +450,12 @@ StructureCtorTooManyKeysCheck_description = Check structure constructor has too
|
||||
|
||||
StructureCtorTooManyKeysCheck_title = Structure constructor has too many keys
|
||||
|
||||
UnknownFormParameterAccessCheck_Unknown_form_parameter_access = Unknown form parameter "{0}" access
|
||||
|
||||
UnknownFormParameterAccessCheck_description = Unknown form parameter access
|
||||
|
||||
UnknownFormParameterAccessCheck_title = Unknown form parameter access
|
||||
|
||||
UseNonRecommendedMethods_description = Using non-recommended methods
|
||||
|
||||
UseNonRecommendedMethods_message = Using non-recommended method
|
||||
@ -445,3 +463,17 @@ UseNonRecommendedMethods_message = Using non-recommended method
|
||||
UseNonRecommendedMethods_parameter = List of non-recommended methods
|
||||
|
||||
UseNonRecommendedMethods_title = Using non-recommended methods
|
||||
|
||||
VariableNameInvalidCheck_description=Variable name is invalid
|
||||
|
||||
VariableNameInvalidCheck_message_variable_length_is_less_than=variable length is less than {0}
|
||||
|
||||
VariableNameInvalidCheck_param_MIN_NAME_LENGTH_PARAM_title=Min. lenght of variable name
|
||||
|
||||
VariableNameInvalidCheck_title=Variable name is invalid
|
||||
|
||||
VariableNameInvalidCheck_variable_name_is_invalid=Variable name {0} is invalid: {1}
|
||||
|
||||
VariableNameInvalidCheck_variable_name_must_start_with_a_capital_letter=variable name must start with a capital letter
|
||||
|
||||
VariableNameInvalidCheck_variable_name_starts_with_an_underline=variable name starts with an underline
|
@ -162,8 +162,20 @@ ExtensionVariablePrefixCheck_Description = Переменная модуля р
|
||||
|
||||
ExtensionVariablePrefixCheck_Title = Переменная расширения должна содержать в имени префикс расширения
|
||||
|
||||
ExportProcedureMissingCommentCheck_description=Отсутствует комментарий к экспортной процедуре (функции)
|
||||
|
||||
ExportProcedureMissingCommentCheck_Export_procedure_missing_comment=Отсутствует комментарий к экспортной процедуре (функции) "{0}"
|
||||
|
||||
ExportProcedureMissingCommentCheck_title=Отсутствует комментарий к экспортной процедуре (функции)
|
||||
|
||||
ExtensionVariablePrefixCheck_Variable_0_should_have_1_prefix = Переменная "{0}" должна иметь префикс "{1}"
|
||||
|
||||
FormDataToValueCheck_Description = Использование ДанныеФормыВЗначение вместо РеквизитФормыВЗначение
|
||||
|
||||
FormDataToValueCheck_Issue = Рекомендуется использовать РеквизитФормыВЗначение вместо ДанныеФормыВЗначение
|
||||
|
||||
FormDataToValueCheck_Title = Использование ДанныеФормыВЗначение вместо РеквизитФормыВЗначение
|
||||
|
||||
FormModuleMissingPragmaCheck_Missing_compilation_directives = Пропущена директива компиляции
|
||||
|
||||
FormModuleMissingPragmaCheck_description = Всегда использовать директивы компиляции в модуле формы
|
||||
@ -438,6 +450,12 @@ StructureCtorTooManyKeysCheck_description = Проверка конструкт
|
||||
|
||||
StructureCtorTooManyKeysCheck_title = Конструктор структуры содержит слишком много ключей
|
||||
|
||||
UnknownFormParameterAccessCheck_Unknown_form_parameter_access = Обращение к несуществующему параметру формы "{0}"
|
||||
|
||||
UnknownFormParameterAccessCheck_description = Обращение к несуществующему параметру формы
|
||||
|
||||
UnknownFormParameterAccessCheck_title = Обращение к несуществующему параметру формы
|
||||
|
||||
UseNonRecommendedMethods_description = Использование не рекомендованных методов
|
||||
|
||||
UseNonRecommendedMethods_message = Используется не рекомендуемый метод
|
||||
@ -445,3 +463,17 @@ UseNonRecommendedMethods_message = Используется не рекомен
|
||||
UseNonRecommendedMethods_parameter = Список дополнительных не рекомендуемых методов для проверки
|
||||
|
||||
UseNonRecommendedMethods_title = Использование не рекомендуемых методов
|
||||
|
||||
VariableNameInvalidCheck_description = Имя переменной введено некорректно
|
||||
|
||||
VariableNameInvalidCheck_message_variable_length_is_less_than = длина переменной меньше, чем {0}
|
||||
|
||||
VariableNameInvalidCheck_param_MIN_NAME_LENGTH_PARAM_title = Мин. длина переменной
|
||||
|
||||
VariableNameInvalidCheck_title = Имя переменной введено некорректно
|
||||
|
||||
VariableNameInvalidCheck_variable_name_is_invalid = Имя переменной {0} введено некорректно: {1}
|
||||
|
||||
VariableNameInvalidCheck_variable_name_must_start_with_a_capital_letter = имя переменной должно начинаться с заглавной буквы
|
||||
|
||||
VariableNameInvalidCheck_variable_name_starts_with_an_underline = имя переменной начинается с символа подчеркивания
|
@ -0,0 +1,123 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (C) 2022, 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.comment.check;
|
||||
|
||||
import static com._1c.g5.v8.dt.mcore.McorePackage.Literals.NAMED_ELEMENT__NAME;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.emf.ecore.EObject;
|
||||
|
||||
import com._1c.g5.v8.dt.bsl.documentation.comment.BslDocumentationComment;
|
||||
import com._1c.g5.v8.dt.bsl.documentation.comment.IDescriptionPart;
|
||||
import com._1c.g5.v8.dt.bsl.model.PreprocessorItem;
|
||||
import com._1c.g5.v8.dt.bsl.model.RegionPreprocessor;
|
||||
import com.e1c.g5.v8.dt.check.CheckComplexity;
|
||||
import com.e1c.g5.v8.dt.check.ICheckParameters;
|
||||
import com.e1c.g5.v8.dt.check.settings.IssueSeverity;
|
||||
import com.e1c.g5.v8.dt.check.settings.IssueType;
|
||||
import com.e1c.v8codestyle.bsl.ModuleStructureSection;
|
||||
import com.e1c.v8codestyle.check.StandardCheckExtension;
|
||||
import com.e1c.v8codestyle.internal.bsl.BslPlugin;
|
||||
|
||||
/**
|
||||
* Check that comment for the export procedure (function) contains Description section
|
||||
*
|
||||
* @author Olga Bozhko
|
||||
*/
|
||||
public class ExportProcedureCommentDescriptionCheck
|
||||
extends AbstractDocCommentTypeCheck
|
||||
{
|
||||
private static final String CHECK_ID = "doc-comment-export-procedure-description-section"; //$NON-NLS-1$
|
||||
|
||||
@Override
|
||||
public String getCheckId()
|
||||
{
|
||||
return CHECK_ID;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureCheck(CheckConfigurer builder)
|
||||
{
|
||||
builder.title(Messages.ExportMethodCommentDescriptionCheck_title)
|
||||
.description(Messages.ExportMethodCommentDescriptionCheck_description)
|
||||
.complexity(CheckComplexity.NORMAL)
|
||||
.severity(IssueSeverity.MINOR)
|
||||
.issueType(IssueType.CODE_STYLE)
|
||||
.extension(new StandardCheckExtension(453, getCheckId(), BslPlugin.PLUGIN_ID))
|
||||
.delegate(BslDocumentationComment.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void checkDocumentationCommentObject(IDescriptionPart object, BslDocumentationComment root,
|
||||
DocumentationCommentResultAcceptor resultAceptor, ICheckParameters parameters, IProgressMonitor monitor)
|
||||
{
|
||||
if (!root.getMethod().isExport())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
BslDocumentationComment docComment = (BslDocumentationComment)object;
|
||||
BslDocumentationComment.Description description = docComment.getDescription();
|
||||
if (description != null && description.getParts().isEmpty()
|
||||
&& verifyTopRegion(getTopParentRegion(root.getMethod())))
|
||||
{
|
||||
resultAceptor.addIssue(MessageFormat.format(
|
||||
Messages.ExportMethodCommentDescriptionCheck_Missing_Description_in_export_procedure_comment,
|
||||
root.getMethod().getName()), root.getMethod(), NAMED_ELEMENT__NAME);
|
||||
}
|
||||
}
|
||||
|
||||
private static Optional<RegionPreprocessor> getTopParentRegion(EObject object)
|
||||
{
|
||||
EObject parent = object.eContainer();
|
||||
PreprocessorItem lastItem = null;
|
||||
RegionPreprocessor region = null;
|
||||
do
|
||||
{
|
||||
if (parent instanceof RegionPreprocessor)
|
||||
{
|
||||
RegionPreprocessor parentRegion = (RegionPreprocessor)parent;
|
||||
if (lastItem != null && parentRegion.getItem().equals(lastItem))
|
||||
{
|
||||
region = parentRegion;
|
||||
}
|
||||
else
|
||||
{
|
||||
lastItem = null;
|
||||
}
|
||||
}
|
||||
else if (parent instanceof PreprocessorItem)
|
||||
{
|
||||
lastItem = (PreprocessorItem)parent;
|
||||
}
|
||||
parent = parent.eContainer();
|
||||
}
|
||||
while (parent != null);
|
||||
|
||||
return Optional.ofNullable(region);
|
||||
}
|
||||
|
||||
private static boolean verifyTopRegion(Optional<RegionPreprocessor> regionTop)
|
||||
{
|
||||
if (regionTop.isEmpty())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return regionTop.get().getName().equals(ModuleStructureSection.PUBLIC.getNames()[0])
|
||||
|| regionTop.get().getName().equals(ModuleStructureSection.PUBLIC.getNames()[1]);
|
||||
}
|
||||
|
||||
}
|
@ -32,6 +32,9 @@ final class Messages
|
||||
public static String ExportFunctionReturnSectionCheck_description;
|
||||
public static String ExportFunctionReturnSectionCheck_Export_function_return_section_required;
|
||||
public static String ExportFunctionReturnSectionCheck_title;
|
||||
public static String ExportMethodCommentDescriptionCheck_description;
|
||||
public static String ExportMethodCommentDescriptionCheck_Missing_Description_in_export_procedure_comment;
|
||||
public static String ExportMethodCommentDescriptionCheck_title;
|
||||
public static String FieldDefinitionNameCheck_description;
|
||||
public static String FieldDefinitionNameCheck_Field_name__N__is_incorrect_name;
|
||||
public static String FieldDefinitionNameCheck_title;
|
||||
|
@ -32,6 +32,12 @@ ExportFunctionReturnSectionCheck_description = Documentation comment return sect
|
||||
|
||||
ExportFunctionReturnSectionCheck_title = Documentation comment return section for export function
|
||||
|
||||
ExportMethodCommentDescriptionCheck_description=Missing Description section in the comment for export procedure (function)
|
||||
|
||||
ExportMethodCommentDescriptionCheck_Missing_Description_in_export_procedure_comment=Missing Description section in the comment for export procedure (function) "{0}"
|
||||
|
||||
ExportMethodCommentDescriptionCheck_title=Missing Description section in the comment for export procedure (function)
|
||||
|
||||
FieldDefinitionNameCheck_Field_name__N__is_incorrect_name = Field name "{0}" is incorrect name
|
||||
|
||||
FieldDefinitionNameCheck_description = Documentation comment field is correct name
|
||||
|
@ -32,6 +32,12 @@ ExportFunctionReturnSectionCheck_description = Секция возвращаем
|
||||
|
||||
ExportFunctionReturnSectionCheck_title = Секция возвращаемого значения документирующего комментария для экспортной функции
|
||||
|
||||
ExportMethodCommentDescriptionCheck_description=В комментарии к экспортной процедуре (функции) отсутствует секция "Описание"
|
||||
|
||||
ExportMethodCommentDescriptionCheck_Missing_Description_in_export_procedure_comment=В комментарии к экспортной процедуре (функции) "{0}" отсутствует секция "Описание"
|
||||
|
||||
ExportMethodCommentDescriptionCheck_title=В комментарии к экспортной процедуре (функции) отсутствует секция "Описание"
|
||||
|
||||
FieldDefinitionNameCheck_Field_name__N__is_incorrect_name = Имя поля "{0}" является некорректным
|
||||
|
||||
FieldDefinitionNameCheck_description = Поле документирующего комментария является корректным именем
|
||||
|
@ -0,0 +1,12 @@
|
||||
# Check Russian Yo letter "ё" in the name, synonym or comment of metadata object
|
||||
|
||||
In Russian locale, it is not allowed to use the letter "ё" in names, synonyms and comments of metadata objects.
|
||||
|
||||
|
||||
## Noncompliant Code Example
|
||||
|
||||
## Compliant Solution
|
||||
|
||||
## See
|
||||
|
||||
[Name, synonym, and comment (in Russian)](https://its.1c.ru/db/v8std#content:474:hdoc)
|
@ -0,0 +1,12 @@
|
||||
# Проверка наличия буквы "ё" в имени, синониме или комментарии объекта метаданных
|
||||
|
||||
В именах, синонимах и комментариях объектов метаданных не допускается использовать букву "ё".
|
||||
|
||||
|
||||
## Неправильно
|
||||
|
||||
## Правильно
|
||||
|
||||
## См.
|
||||
|
||||
[Имя, синоним, комментарий](https://its.1c.ru/db/v8std#content:474:hdoc)
|
@ -8,4 +8,5 @@
|
||||
## Правильно
|
||||
|
||||
## См.
|
||||
|
||||
[Безопасное хранение паролей](https://its.1c.ru/db/v8std#content:740:hdoc:2)
|
||||
|
@ -8,4 +8,5 @@ avoid storing passwords or any other confidential information in the infobase.
|
||||
## Compliant Solution
|
||||
|
||||
## See
|
||||
|
||||
[Secure password storage](https://support.1ci.com/hc/en-us/articles/360011003100-Secure-password-storage)
|
||||
|
@ -110,6 +110,10 @@
|
||||
category="com.e1c.v8codestyle.md"
|
||||
class="com.e1c.v8codestyle.internal.md.ExecutableExtensionFactory:com.e1c.v8codestyle.md.check.ExtensionMdObjectNamePrefixCheck">
|
||||
</check>
|
||||
<check
|
||||
category="com.e1c.v8codestyle.md"
|
||||
class="com.e1c.v8codestyle.internal.md.ExecutableExtensionFactory:com.e1c.v8codestyle.md.check.MdObjectNameUnallowedLetterCheck">
|
||||
</check>
|
||||
<check
|
||||
category="com.e1c.v8codestyle.md"
|
||||
class="com.e1c.v8codestyle.md.check.DocumentPostInPrivilegedModeCheck">
|
||||
@ -123,5 +127,5 @@
|
||||
class="com.e1c.v8codestyle.md.check.MdObjectAttributeCommentNotExistCheck">
|
||||
</check>
|
||||
</extension>
|
||||
|
||||
</plugin>
|
||||
|
||||
</plugin>
|
@ -0,0 +1,91 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (C) 2022, 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.md.check;
|
||||
|
||||
import static com._1c.g5.v8.dt.metadata.mdclass.MdClassPackage.Literals.MD_OBJECT;
|
||||
import static com._1c.g5.v8.dt.metadata.mdclass.MdClassPackage.Literals.MD_OBJECT__COMMENT;
|
||||
import static com._1c.g5.v8.dt.metadata.mdclass.MdClassPackage.Literals.MD_OBJECT__NAME;
|
||||
import static com._1c.g5.v8.dt.metadata.mdclass.MdClassPackage.Literals.MD_OBJECT__SYNONYM;
|
||||
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
|
||||
import com._1c.g5.v8.dt.metadata.mdclass.MdObject;
|
||||
import com.e1c.g5.v8.dt.check.CheckComplexity;
|
||||
import com.e1c.g5.v8.dt.check.ICheckParameters;
|
||||
import com.e1c.g5.v8.dt.check.components.BasicCheck;
|
||||
import com.e1c.g5.v8.dt.check.components.TopObjectFilterExtension;
|
||||
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.md.CorePlugin;
|
||||
|
||||
/**
|
||||
* Check in Russian locale, names, synonyms and comments of metadata objects do not contain the letter "ё".
|
||||
*
|
||||
* @author Olga Bozhko
|
||||
*/
|
||||
public class MdObjectNameUnallowedLetterCheck
|
||||
extends BasicCheck
|
||||
{
|
||||
private static final String CHECK_ID = "mdo-ru-name-unallowed-letter"; //$NON-NLS-1$
|
||||
private static final String LANGUAGE_KEY_RU = "ru"; //$NON-NLS-1$
|
||||
private static final String UNALLOWED_LETTER = "ё"; //$NON-NLS-1$
|
||||
private static final String ISSUE_MESSAGE =
|
||||
Messages.MdObjectNameUnallowedLetterCheck_Ru_locale_unallowed_letter_used_for_name_synonym_or_comment;
|
||||
|
||||
@Override
|
||||
public String getCheckId()
|
||||
{
|
||||
return CHECK_ID;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureCheck(CheckConfigurer builder)
|
||||
{
|
||||
builder.title(Messages.MdObjectNameUnallowedLetterCheck_title)
|
||||
.description(Messages.MdObjectNameUnallowedLetterCheck_description)
|
||||
.complexity(CheckComplexity.NORMAL)
|
||||
.severity(IssueSeverity.MINOR)
|
||||
.extension(new TopObjectFilterExtension())
|
||||
.issueType(IssueType.UI_STYLE)
|
||||
.extension(new StandardCheckExtension(474, getCheckId(), CorePlugin.PLUGIN_ID))
|
||||
.extension(new SkipAdoptedInExtensionMdObjectExtension())
|
||||
.topObject(MD_OBJECT)
|
||||
.features(MD_OBJECT__NAME, MD_OBJECT__SYNONYM, MD_OBJECT__COMMENT);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void check(Object object, ResultAcceptor resultAceptor, ICheckParameters parameters,
|
||||
IProgressMonitor monitor)
|
||||
{
|
||||
MdObject mdObject = (MdObject)object;
|
||||
if (hasUnallowedLetter(mdObject.getName()))
|
||||
{
|
||||
resultAceptor.addIssue(ISSUE_MESSAGE, MD_OBJECT__NAME);
|
||||
}
|
||||
if (hasUnallowedLetter(mdObject.getSynonym().get(LANGUAGE_KEY_RU)))
|
||||
{
|
||||
resultAceptor.addIssue(ISSUE_MESSAGE, MD_OBJECT__SYNONYM);
|
||||
}
|
||||
if (hasUnallowedLetter(mdObject.getComment()))
|
||||
{
|
||||
resultAceptor.addIssue(ISSUE_MESSAGE, MD_OBJECT__COMMENT);
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean hasUnallowedLetter(String testableString)
|
||||
{
|
||||
return testableString != null && testableString.contains(UNALLOWED_LETTER);
|
||||
|
||||
}
|
||||
}
|
@ -76,6 +76,9 @@ final class Messages
|
||||
public static String MdObjectNameLength_Maximum_name_length_description;
|
||||
public static String MdObjectNameLength_message;
|
||||
public static String MdObjectNameLength_title;
|
||||
public static String MdObjectNameUnallowedLetterCheck_description;
|
||||
public static String MdObjectNameUnallowedLetterCheck_Ru_locale_unallowed_letter_used_for_name_synonym_or_comment;
|
||||
public static String MdObjectNameUnallowedLetterCheck_title;
|
||||
public static String MdListObjectPresentationCheck_decription;
|
||||
public static String MdListObjectPresentationCheck_Neither_Object_presentation_nor_List_presentation_is_not_filled;
|
||||
public static String MdListObjectPresentationCheck_title;
|
||||
|
@ -111,6 +111,12 @@ MdObjectNameLength_message = Metadata object name should be less then {0}
|
||||
|
||||
MdObjectNameLength_title = Metadata object name length
|
||||
|
||||
MdObjectNameUnallowedLetterCheck_Ru_locale_unallowed_letter_used_for_name_synonym_or_comment = In Russian locale, name, synonym or comment of metadata object contain the unallowed letter
|
||||
|
||||
MdObjectNameUnallowedLetterCheck_description = In Russian locale name, synonym or comment of metadata object contain the unallowed letter
|
||||
|
||||
MdObjectNameUnallowedLetterCheck_title = In Russian locale name, synonym or comment of metadata object contain the unallowed letter
|
||||
|
||||
MdObjectNameWithoutSuffix_Name_suffix_list_title = Name suffix list, comma separated
|
||||
|
||||
MdOwnerAttributeSynonymEmpty_Description = Synonym of the 'Owner' or 'Parent' standard attribute is not specified
|
||||
|
@ -112,6 +112,12 @@ MdObjectNameLength_message = Длина имени объекта метадан
|
||||
|
||||
MdObjectNameLength_title = Длина имени объекта метаданных
|
||||
|
||||
MdObjectNameUnallowedLetterCheck_Ru_locale_unallowed_letter_used_for_name_synonym_or_comment = Имя, синоним или комментарий содержит букву “ё”
|
||||
|
||||
MdObjectNameUnallowedLetterCheck_description = Имя, синоним или комментарий содержит букву “ё”
|
||||
|
||||
MdObjectNameUnallowedLetterCheck_title = Имя, синоним или комментарий содержит букву “ё”
|
||||
|
||||
MdObjectNameWithoutSuffix_Name_suffix_list_title = Список суффиксов имени, разделенный запятой
|
||||
|
||||
MdOwnerAttributeSynonymEmpty_Description = Не задан синоним у стандартного свойства 'Владелец' или 'Родитель'
|
||||
|
@ -53,6 +53,7 @@
|
||||
```
|
||||
|
||||
## См.
|
||||
|
||||
- [Эффективные условия запросов](https://its.1c.ru/db/v8std#content:658:hdoc)
|
||||
- [Особенности использования в запросах оператора ПОДОБНО](https://its.1c.ru/db/v8std#content:726:hdoc)
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
# Проверки модулей 1С
|
||||
|
||||
|
||||
Общее количество проверок: 78
|
||||
Общее количество проверок: 81
|
||||
|
||||
| Код проверки | Наименование |
|
||||
|--------------|--------------|
|
||||
@ -19,6 +19,7 @@
|
||||
| [doc-comment-complex-type-with-link](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-complex-type-with-link.md) | Поле документирующего комментария использует объявление сложного типа вместо ссылки на тип |
|
||||
| [doc-comment-description-ends-on-dot](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-description-ends-on-dot.md) | Многострочное описание документирующего комментария оканчивается на точку |
|
||||
| [doc-comment-export-function-return-section](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-export-function-return-section.md) | Секция возвращаемого значения документирующего комментария для экспортной функции |
|
||||
| [doc-comment-export-procedure-description-section](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-export-procedure-description-section.md) | Документирующий комментарий не содержит секцию "Описание" для экспортной процедуры (функции) |
|
||||
| [doc-comment-field-in-description-suggestion](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-field-in-description-suggestion.md) | Многострочное описание документирующего комментария содержит определение поля |
|
||||
| [doc-comment-field-name](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-field-name.md) | Поле документирующего комментария является корректным именем |
|
||||
| [doc-comment-field-type](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-field-type.md) | Поле документирующего комментария не имеет определения типа |
|
||||
@ -35,6 +36,7 @@
|
||||
| [empty-except-statement](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/empty-except-statement.md) | Конструкция "Попытка...Исключение...КонецПопытки" не содержит кода в исключении |
|
||||
| [event-heandler-boolean-param](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/event-heandler-boolean-param.md) | Использование булевого параметра обработчика события |
|
||||
| [export-method-in-command-form-module](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/export-method-in-command-form-module.md) | Ограничения на использование экспортных процедур и функций в модуле команд и форм |
|
||||
| [export-procedure-missing-comment](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/export-procedure-missing-comment.md) | Отсутствует комментарий к экспортной процедуре (функции) |
|
||||
| [extension-method-prefix](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/extension-method-prefix.md) | У метода отсутствует префикс расширения |
|
||||
| [extension-variable-prefix](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/extension-variable-prefix.md) | У имени переменной отсутствует префикс расширения |
|
||||
| [form-module-missing-pragma](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/form-module-missing-pragma.md) | Всегда использовать директивы компиляции в модуле формы |
|
||||
@ -81,5 +83,6 @@
|
||||
| [structure-consructor-value-type](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/structure-consructor-value-type.md) | Типизация значений в конструкторе структуры |
|
||||
| [typed-value-adding-to-untyped-collection](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/typed-value-adding-to-untyped-collection.md) | Добавление типизированного значения в не типизированную коллекцию |
|
||||
| [use-non-recommended-method](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/use-non-recommended-method.md) | Использование не рекомендуемых методов |
|
||||
| [using-form-data-to-value](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/using-form-data-to-value.md) | Использование РеквизитФормыВЗначение и ДанныеФормыВЗначение |
|
||||
| [using-isinrole](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/using-isinrole.md) | Использован метод "РольДоступна" |
|
||||
| [variable-value-type](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/variable-value-type.md) | Переменная имеет тип значения |
|
||||
|
@ -1,11 +1,11 @@
|
||||
# Индекс проверок
|
||||
|
||||
|
||||
Общее количество проверок 1С:Стандарты разработки V8: 139
|
||||
Общее количество проверок 1С:Стандарты разработки V8: 146
|
||||
|
||||
- form: 7
|
||||
- md: 22
|
||||
- bsl: 78
|
||||
- md: 26
|
||||
- bsl: 81
|
||||
- ql: 8
|
||||
- right: 24
|
||||
|
||||
@ -40,6 +40,7 @@
|
||||
| [doc-comment-complex-type-with-link](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-complex-type-with-link.md) | Поле документирующего комментария использует объявление сложного типа вместо ссылки на тип |
|
||||
| [doc-comment-description-ends-on-dot](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-description-ends-on-dot.md) | Многострочное описание документирующего комментария оканчивается на точку |
|
||||
| [doc-comment-export-function-return-section](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-export-function-return-section.md) | Секция возвращаемого значения документирующего комментария для экспортной функции |
|
||||
| [doc-comment-export-procedure-description-section](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-export-procedure-description-section.md) | Документирующий комментарий не содержит секцию "Описание" для экспортной процедуры (функции) |
|
||||
| [doc-comment-field-in-description-suggestion](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-field-in-description-suggestion.md) | Многострочное описание документирующего комментария содержит определение поля |
|
||||
| [doc-comment-field-name](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-field-name.md) | Поле документирующего комментария является корректным именем |
|
||||
| [doc-comment-field-type](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-field-type.md) | Поле документирующего комментария не имеет определения типа |
|
||||
@ -52,10 +53,12 @@
|
||||
| [doc-comment-return-section-type](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-return-section-type.md) | Секция возвращаемого значения документирующего комментария содержит корректные типы |
|
||||
| [doc-comment-type](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-type.md) | Определение типа документирующего комментария |
|
||||
| [doc-comment-use-minus](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-use-minus.md) | Использование только дефис-минуса в документирующем комментарии |
|
||||
| [document-post-in-privileged-mode](../../bundles/com.e1c.v8codestyle.md/markdown/ru/document-post-in-privileged-mode.md) | В документе, предполагающем проведение, не установлен флаг "Привилегированный режим при проведении / отмене проведения" |
|
||||
| [dynamic-access-method-not-found](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/dynamic-access-method-not-found.md) | Метод в объекте не найден |
|
||||
| [empty-except-statement](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/empty-except-statement.md) | Конструкция "Попытка...Исключение...КонецПопытки" не содержит кода в исключении |
|
||||
| [event-heandler-boolean-param](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/event-heandler-boolean-param.md) | Использование булевого параметра обработчика события |
|
||||
| [export-method-in-command-form-module](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/export-method-in-command-form-module.md) | Ограничения на использование экспортных процедур и функций в модуле команд и форм |
|
||||
| [export-procedure-missing-comment](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/export-procedure-missing-comment.md) | Отсутствует комментарий к экспортной процедуре (функции) |
|
||||
| [extension-md-object-prefix](../../bundles/com.e1c.v8codestyle.md/markdown/ru/extension-md-object-prefix.md) | У имени объекта отсутствует префикс расширения |
|
||||
| [extension-method-prefix](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/extension-method-prefix.md) | У метода отсутствует префикс расширения |
|
||||
| [extension-variable-prefix](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/extension-variable-prefix.md) | У имени переменной отсутствует префикс расширения |
|
||||
@ -75,8 +78,11 @@
|
||||
| [lock-out-of-try](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/lock-out-of-try.md) | Вызов "Заблокировать()" находится вне попытки |
|
||||
| [manager-module-named-self-reference](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/manager-module-named-self-reference.md) | Избыточное обращение по собственному имени внутри модуля менеджера |
|
||||
| [md-list-object-presentation](../../bundles/com.e1c.v8codestyle.md/markdown/ru/md-list-object-presentation.md) | Не заполнено ни представление объекта, ни представление списка |
|
||||
| [md-object-attribute-comment-incorrect-type](../../bundles/com.e1c.v8codestyle.md/markdown/ru/md-object-attribute-comment-incorrect-type.md) | Реквизит «Комментарий» у документов |
|
||||
| [md-object-attribute-comment-not-exist](../../bundles/com.e1c.v8codestyle.md/markdown/ru/md-object-attribute-comment-not-exist.md) | Документ не имеет реквизита "Комментарий" |
|
||||
| [md-standard-attribute-synonym-empty](../../bundles/com.e1c.v8codestyle.md/markdown/ru/md-standard-attribute-synonym-empty.md) | Не задан синоним стандартного реквизита "Родитель" или "Владелец". |
|
||||
| [mdo-name-length](../../bundles/com.e1c.v8codestyle.md/markdown/ru/mdo-name-length.md) | Длина имени объекта метаданных |
|
||||
| [mdo-ru-name-unallowed-letter](../../bundles/com.e1c.v8codestyle.md/markdown/ru/mdo-ru-name-unallowed-letter.md) | Проверка наличия буквы "ё" в имени, синониме или комментарии объекта метаданных |
|
||||
| [mdo-scheduled-job-description](../../bundles/com.e1c.v8codestyle.md/markdown/ru/mdo-scheduled-job-description.md) | Задано наименование предопределенного регламентного задания |
|
||||
| [method-param-value-type](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/method-param-value-type.md) | Параметр метода имеет тип |
|
||||
| [method-too-many-params](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/method-too-many-params.md) | Метод содержит слишком много параметров |
|
||||
@ -150,5 +156,6 @@
|
||||
| [typed-value-adding-to-untyped-collection](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/typed-value-adding-to-untyped-collection.md) | Добавление типизированного значения в не типизированную коллекцию |
|
||||
| [unsafe-password-ib-storage](../../bundles/com.e1c.v8codestyle.md/markdown/ru/unsafe-password-ib-storage.md) | Небезопасное хранение паролей в информационной базе |
|
||||
| [use-non-recommended-method](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/use-non-recommended-method.md) | Использование не рекомендуемых методов |
|
||||
| [using-form-data-to-value](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/using-form-data-to-value.md) | Использование РеквизитФормыВЗначение и ДанныеФормыВЗначение |
|
||||
| [using-isinrole](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/using-isinrole.md) | Использован метод "РольДоступна" |
|
||||
| [variable-value-type](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/variable-value-type.md) | Переменная имеет тип значения |
|
||||
|
@ -25,6 +25,7 @@ doc-comment-collection-item-type
|
||||
doc-comment-complex-type-with-link
|
||||
doc-comment-description-ends-on-dot
|
||||
doc-comment-export-function-return-section
|
||||
doc-comment-export-procedure-description-section
|
||||
doc-comment-field-in-description-suggestion
|
||||
doc-comment-field-name
|
||||
doc-comment-field-type
|
||||
@ -37,10 +38,12 @@ doc-comment-ref-link
|
||||
doc-comment-return-section-type
|
||||
doc-comment-type
|
||||
doc-comment-use-minus
|
||||
document-post-in-privileged-mode
|
||||
dynamic-access-method-not-found
|
||||
empty-except-statement
|
||||
event-heandler-boolean-param
|
||||
export-method-in-command-form-module
|
||||
export-procedure-missing-comment
|
||||
extension-md-object-prefix
|
||||
extension-method-prefix
|
||||
extension-variable-prefix
|
||||
@ -60,8 +63,11 @@ invocation-parameter-type-intersect
|
||||
lock-out-of-try
|
||||
manager-module-named-self-reference
|
||||
md-list-object-presentation
|
||||
md-object-attribute-comment-incorrect-type
|
||||
md-object-attribute-comment-not-exist
|
||||
md-standard-attribute-synonym-empty
|
||||
mdo-name-length
|
||||
mdo-ru-name-unallowed-letter
|
||||
mdo-scheduled-job-description
|
||||
method-param-value-type
|
||||
method-too-many-params
|
||||
@ -135,5 +141,6 @@ subsystem-synonym-too-long
|
||||
typed-value-adding-to-untyped-collection
|
||||
unsafe-password-ib-storage
|
||||
use-non-recommended-method
|
||||
using-form-data-to-value
|
||||
using-isinrole
|
||||
variable-value-type
|
||||
|
@ -1,7 +1,7 @@
|
||||
# Проверки метаданных 1С
|
||||
|
||||
|
||||
Общее количество проверок: 22
|
||||
Общее количество проверок: 26
|
||||
|
||||
| Код проверки | Наименование |
|
||||
|--------------|--------------|
|
||||
@ -18,10 +18,14 @@
|
||||
| [configuration-data-lock-mode](../../bundles/com.e1c.v8codestyle.md/markdown/ru/configuration-data-lock-mode.md) | Режим блокировки данных конфигурации |
|
||||
| [db-object-anyref-type](../../bundles/com.e1c.v8codestyle.md/markdown/ru/db-object-anyref-type.md) | Реквизиты составного типа, такие как ЛюбаяСсылка и аналогичные |
|
||||
| [db-object-ref-non-ref-type](../../bundles/com.e1c.v8codestyle.md/markdown/ru/db-object-ref-non-ref-type.md) | Реквизиты составного типа |
|
||||
| [document-post-in-privileged-mode](../../bundles/com.e1c.v8codestyle.md/markdown/ru/document-post-in-privileged-mode.md) | В документе, предполагающем проведение, не установлен флаг "Привилегированный режим при проведении / отмене проведения" |
|
||||
| [extension-md-object-prefix](../../bundles/com.e1c.v8codestyle.md/markdown/ru/extension-md-object-prefix.md) | У имени объекта отсутствует префикс расширения |
|
||||
| [md-list-object-presentation](../../bundles/com.e1c.v8codestyle.md/markdown/ru/md-list-object-presentation.md) | Не заполнено ни представление объекта, ни представление списка |
|
||||
| [md-object-attribute-comment-incorrect-type](../../bundles/com.e1c.v8codestyle.md/markdown/ru/md-object-attribute-comment-incorrect-type.md) | Реквизит «Комментарий» у документов |
|
||||
| [md-object-attribute-comment-not-exist](../../bundles/com.e1c.v8codestyle.md/markdown/ru/md-object-attribute-comment-not-exist.md) | Документ не имеет реквизита "Комментарий" |
|
||||
| [md-standard-attribute-synonym-empty](../../bundles/com.e1c.v8codestyle.md/markdown/ru/md-standard-attribute-synonym-empty.md) | Не задан синоним стандартного реквизита "Родитель" или "Владелец". |
|
||||
| [mdo-name-length](../../bundles/com.e1c.v8codestyle.md/markdown/ru/mdo-name-length.md) | Длина имени объекта метаданных |
|
||||
| [mdo-ru-name-unallowed-letter](../../bundles/com.e1c.v8codestyle.md/markdown/ru/mdo-ru-name-unallowed-letter.md) | Проверка наличия буквы "ё" в имени, синониме или комментарии объекта метаданных |
|
||||
| [mdo-scheduled-job-description](../../bundles/com.e1c.v8codestyle.md/markdown/ru/mdo-scheduled-job-description.md) | Задано наименование предопределенного регламентного задания |
|
||||
| [register-resource-precision](../../bundles/com.e1c.v8codestyle.md/markdown/ru/register-resource-precision.md) | Длина ресурса регистра накопления или бухгалтерии |
|
||||
| [scheduled-job-periodicity-too-short](../../bundles/com.e1c.v8codestyle.md/markdown/ru/scheduled-job-periodicity-too-short.md) | Периодичность выполнения регламентного задания меньше одной минуты. |
|
||||
|
@ -0,0 +1,37 @@
|
||||
Процедура ТестПодчеркивания()
|
||||
Перем _ЯвнаяПеременнаяТестоваяПодчеркивание;
|
||||
_НеявнаяПеременнаяПодчеркивание = 2;
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестЗаглавнаяБуква()
|
||||
Перем явнаяПеременнаяТестоваяНижнийРегистр;
|
||||
неявнаяПеременнаяНижнийРегистр = 2;
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестМинимальнаяДлина()
|
||||
Перем ЯП;
|
||||
НП = 2;
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестКорректныеНаименования()
|
||||
Перем ЯвнаяПеременнаяКорректноеНаименование;
|
||||
НеявнаяПеременнаяКорректноеНаименование = 2;
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестИтераторы()
|
||||
МассивКонтрагентов = Новый Массив();
|
||||
Для й = 0 По МассивКонтрагентов.ВГраница() Цикл
|
||||
//Обработка массива
|
||||
КонецЦикла;
|
||||
|
||||
Для Каждого Эл Из МассивКонтрагентов Цикл
|
||||
//Обработка массива
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестИменаПараметровМетодов(Контрагенты)
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестИменаПараметровМетодов2(_Контрагенты)
|
||||
КонецПроцедуры
|
@ -0,0 +1,14 @@
|
||||
#Region Internal
|
||||
|
||||
#Region Deprecated
|
||||
|
||||
// Deprecated. Instead, use SupportedProcedure
|
||||
Procedure DeprecatedProcedure() Export
|
||||
|
||||
DeprecatedProcedure()
|
||||
|
||||
EndProcedure
|
||||
|
||||
#EndRegion
|
||||
|
||||
#EndRegion
|
@ -0,0 +1,18 @@
|
||||
|
||||
#Region Public
|
||||
|
||||
// Parameters:
|
||||
// RoleNames - String - comma-separated names of roles whose availability is checked.
|
||||
//
|
||||
// Returns:
|
||||
// Boolean - True if at least one of the passed roles is available to the current user or the
|
||||
// current user has administrative rights.
|
||||
//
|
||||
// Example:
|
||||
// If RolesAvailable("UseReportMailingLists,SendMail") Then ...
|
||||
//
|
||||
Function RolesAvailable(RoleNames) Export
|
||||
// code here
|
||||
EndFunction
|
||||
|
||||
#EndRegion
|
@ -0,0 +1,21 @@
|
||||
|
||||
#Region Public
|
||||
|
||||
// Defines the availability of RoleNames roles to the current user,
|
||||
// as well as the availability of administrator rights.
|
||||
//
|
||||
// Parameters:
|
||||
// RoleNames - String - comma-separated names of roles whose availability is checked.
|
||||
//
|
||||
// Returns:
|
||||
// Boolean - True if at least one of the passed roles is available to the current user or the
|
||||
// current user has administrative rights.
|
||||
//
|
||||
// Example:
|
||||
// If RolesAvailable("UseReportMailingLists,SendMail") Then ...
|
||||
//
|
||||
Function RolesAvailable(RoleNames) Export
|
||||
// code here
|
||||
EndFunction
|
||||
|
||||
#EndRegion
|
@ -0,0 +1,7 @@
|
||||
#Region Public
|
||||
|
||||
Procedure ExportProcedureWithoutComment() Export
|
||||
ExportProcedureWithoutComment()
|
||||
EndProcedure
|
||||
|
||||
#EndRegion
|
@ -0,0 +1,20 @@
|
||||
#Region Public
|
||||
|
||||
// Defines the availability of RoleNames roles to the current user,
|
||||
// as well as the availability of administrator rights.
|
||||
//
|
||||
// Parameters:
|
||||
// RoleNames - String - comma-separated names of roles whose availability is checked.
|
||||
//
|
||||
// Returns:
|
||||
// Boolean - True if at least one of the passed roles is available to the current user or the
|
||||
// current user has administrative rights.
|
||||
//
|
||||
// Example:
|
||||
// If RolesAvailable("UseReportMailingLists,SendMail") Then ...
|
||||
//
|
||||
Function RolesAvailable(RoleNames) Export
|
||||
// code here
|
||||
EndFunction
|
||||
|
||||
#EndRegion
|
@ -0,0 +1,7 @@
|
||||
#Region Internal
|
||||
|
||||
Procedure ExportProcedureWithoutComment() Export
|
||||
ExportProcedureWithoutComment()
|
||||
EndProcedure
|
||||
|
||||
#EndRegion
|
@ -0,0 +1,3 @@
|
||||
Function FunctionName(Parameters) Export
|
||||
Return Find("Test with word", "word");
|
||||
EndFunction
|
@ -0,0 +1,3 @@
|
||||
Procedure NonCompliant()
|
||||
SignaturesTable = FormDataToValue(SignaturesTable, Type("ValueTable"));
|
||||
EndProcedure
|
@ -56,7 +56,21 @@ public class DeprecatedProcedureOutsideDeprecatedRegionCheckTest
|
||||
}
|
||||
|
||||
/**
|
||||
* Test a deprecated method is placed a nested region in the Deprecated region of the Public region
|
||||
* Test a deprecated method is placed in the Deprecated region of the Internal region in a common module area
|
||||
*
|
||||
* @throws Exception the exception
|
||||
*/
|
||||
@Test
|
||||
public void testCompliantDeprecatedMethodInInternal() throws Exception
|
||||
{
|
||||
updateModule(FOLDER_RESOURCE + "deprecated-method-compliant2.bsl");
|
||||
|
||||
List<Marker> markers = getModuleMarkers();
|
||||
assertTrue(markers.isEmpty());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test a deprecated method is placed a nested region in the Deprecated region of the Public region
|
||||
* in a common module area
|
||||
*
|
||||
* @throws Exception the exception
|
||||
|
@ -0,0 +1,86 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (C) 2022, 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.check.itests;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com._1c.g5.v8.dt.validation.marker.IExtraInfoKeys;
|
||||
import com._1c.g5.v8.dt.validation.marker.Marker;
|
||||
import com.e1c.v8codestyle.bsl.check.ExportProcedureMissingCommentCheck;
|
||||
|
||||
/**
|
||||
* Tests for {@link ExportProcedureMissingCommentCheck} check.
|
||||
*
|
||||
* @author Olga Bozhko
|
||||
*/
|
||||
public class ExportProcedureMissingCommentCheckTest
|
||||
extends AbstractSingleModuleTestBase
|
||||
{
|
||||
private static final String MESSAGE = "Export procedure (function) {0} should be described by adding comment";
|
||||
private static final String EXPORT_PROCEDURE_NAME = "\"ExportProcedureWithoutComment\"";
|
||||
|
||||
public ExportProcedureMissingCommentCheckTest()
|
||||
{
|
||||
super(ExportProcedureMissingCommentCheck.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the comment is added to the export procedure
|
||||
*
|
||||
* @param @throws Exception the exceptions
|
||||
*/
|
||||
@Test
|
||||
public void testExportMethodWithComment() throws Exception
|
||||
{
|
||||
updateModule(FOLDER_RESOURCE + "export-procedure-with-comment.bsl");
|
||||
|
||||
List<Marker> markers = getModuleMarkers();
|
||||
assertTrue(markers.isEmpty());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the comment is not added to the export procedure
|
||||
*
|
||||
* @param @throws Exception the exceptions
|
||||
*/
|
||||
@Test
|
||||
public void testExportMethodWithoutComment() throws Exception
|
||||
{
|
||||
updateModule(FOLDER_RESOURCE + "export-procedure-no-comment.bsl");
|
||||
|
||||
List<Marker> markers = getModuleMarkers();
|
||||
assertEquals(1, markers.size());
|
||||
assertEquals("3", markers.get(0).getExtraInfo().get(IExtraInfoKeys.TEXT_EXTRA_INFO_LINE_KEY));
|
||||
assertEquals(MessageFormat.format(MESSAGE, EXPORT_PROCEDURE_NAME), markers.get(0).getMessage());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the comment is not added to the export procedure located not in Public Region
|
||||
*
|
||||
* @param @throws Exception the exceptions
|
||||
*/
|
||||
@Test
|
||||
public void testNonPublicExportMethodWithoutComment() throws Exception
|
||||
{
|
||||
updateModule(FOLDER_RESOURCE + "non-public-export-procedure-no-comment.bsl");
|
||||
|
||||
List<Marker> markers = getModuleMarkers();
|
||||
assertTrue(markers.isEmpty());
|
||||
}
|
||||
}
|
@ -0,0 +1,74 @@
|
||||
/*******************************************************************************
|
||||
* 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.check.itests;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com._1c.g5.v8.dt.validation.marker.IExtraInfoKeys;
|
||||
import com._1c.g5.v8.dt.validation.marker.Marker;
|
||||
import com.e1c.v8codestyle.bsl.check.UnknownFormParameterAccessCheck;
|
||||
|
||||
/**
|
||||
* Test class for {@link UnknownFormParameterAccessCheck}.
|
||||
* @author Vadim Goncharov
|
||||
*/
|
||||
public class UnknownFormParameterAccessCheckTest
|
||||
extends AbstractSingleModuleTestBase
|
||||
{
|
||||
|
||||
private static final String PROJECT_NAME = "UnknownFormParameterAccess";
|
||||
|
||||
private static final String COMMON_FORM_FILE_NAME = "/src/CommonForms/TestForm/Module.bsl";
|
||||
|
||||
|
||||
public UnknownFormParameterAccessCheckTest()
|
||||
{
|
||||
super(UnknownFormParameterAccessCheck.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTestConfigurationName()
|
||||
{
|
||||
return PROJECT_NAME;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getModuleFileName()
|
||||
{
|
||||
return COMMON_FORM_FILE_NAME;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the form module use unknown parameters access.
|
||||
*
|
||||
* @throws Exception the exception
|
||||
*/
|
||||
@Test
|
||||
public void testFormModuleUnknownParametersAccess() throws Exception
|
||||
{
|
||||
|
||||
List<Marker> markers = getModuleMarkers();
|
||||
assertEquals(2, markers.size());
|
||||
|
||||
Marker marker = markers.get(0);
|
||||
assertEquals("8", marker.getExtraInfo().get(IExtraInfoKeys.TEXT_EXTRA_INFO_LINE_KEY));
|
||||
|
||||
marker = markers.get(1);
|
||||
assertEquals("10", marker.getExtraInfo().get(IExtraInfoKeys.TEXT_EXTRA_INFO_LINE_KEY));
|
||||
}
|
||||
}
|
@ -0,0 +1,81 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (C) 2022, 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.check.itests;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com._1c.g5.v8.bm.core.IBmObject;
|
||||
import com._1c.g5.v8.dt.bsl.model.Module;
|
||||
import com._1c.g5.v8.dt.metadata.mdclass.AbstractForm;
|
||||
import com._1c.g5.v8.dt.validation.marker.IExtraInfoKeys;
|
||||
import com._1c.g5.v8.dt.validation.marker.Marker;
|
||||
import com.e1c.v8codestyle.bsl.check.UsingFormDataToValueCheck;
|
||||
|
||||
/**
|
||||
* The test for {@link UsingFormDataToValueCheck} check.
|
||||
*
|
||||
* @author Artem Iliukhin
|
||||
*/
|
||||
public class UsingFormDataToValueCheckTest
|
||||
extends AbstractSingleModuleTestBase
|
||||
{
|
||||
private static final String PROJECT_NAME = "CommonForm";
|
||||
|
||||
private static final String FQN = "CommonForm.Form.Form";
|
||||
|
||||
private static final String COMMON_FORM_FILE_NAME = "/src/CommonForms/Form/Module.bsl";
|
||||
|
||||
/**
|
||||
* Instantiates a new form data to value check test.
|
||||
*/
|
||||
public UsingFormDataToValueCheckTest()
|
||||
{
|
||||
super(UsingFormDataToValueCheck.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTestConfigurationName()
|
||||
{
|
||||
return PROJECT_NAME;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getModuleFileName()
|
||||
{
|
||||
return COMMON_FORM_FILE_NAME;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Module getModule()
|
||||
{
|
||||
IBmObject mdObject = getTopObjectByFqn(FQN, getProject());
|
||||
assertTrue(mdObject instanceof AbstractForm);
|
||||
Module module = ((AbstractForm)mdObject).getModule();
|
||||
assertNotNull(module);
|
||||
|
||||
return module;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFormModuleHasPragma() throws Exception
|
||||
{
|
||||
updateModule(FOLDER_RESOURCE + "using-form-data-to-value.bsl");
|
||||
|
||||
Marker marker = getModuleFirstMarker();
|
||||
assertEquals("2", marker.getExtraInfo().get(IExtraInfoKeys.TEXT_EXTRA_INFO_LINE_KEY));
|
||||
}
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
package com.e1c.v8codestyle.bsl.check.itests;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com._1c.g5.v8.dt.validation.marker.IExtraInfoKeys;
|
||||
import com._1c.g5.v8.dt.validation.marker.Marker;
|
||||
import com.e1c.v8codestyle.bsl.check.VariableNameInvalidCheck;
|
||||
|
||||
/**
|
||||
* The test for class {@link VariableNameInvalidCheck}.
|
||||
*
|
||||
* @author Vadim Goncharov
|
||||
*
|
||||
*/
|
||||
public class VariableNameInvalidCheckTest
|
||||
extends AbstractSingleModuleTestBase
|
||||
{
|
||||
|
||||
public VariableNameInvalidCheckTest()
|
||||
{
|
||||
super(VariableNameInvalidCheck.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test use invalid variable name.
|
||||
*
|
||||
* @throws Exception the exception
|
||||
*/
|
||||
@Test
|
||||
public void testVariableName() throws Exception
|
||||
{
|
||||
updateModule(FOLDER_RESOURCE + "bsl-variable-name-invalid.bsl");
|
||||
|
||||
List<Marker> markers = getModuleMarkers();
|
||||
assertEquals(7, markers.size());
|
||||
|
||||
List<String> benchmarkLines = Arrays.asList("2", "3", "7", "8", "12", "13", "36");
|
||||
|
||||
List<String> markersLines = new ArrayList<>();
|
||||
for (Marker m : markers)
|
||||
{
|
||||
markersLines.add(m.getExtraInfo().get(IExtraInfoKeys.TEXT_EXTRA_INFO_LINE_KEY));
|
||||
}
|
||||
|
||||
assertEquals(true, markersLines.containsAll(benchmarkLines) && benchmarkLines.containsAll(markersLines));
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,75 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (C) 2022, 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.comment.check.itests;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com._1c.g5.v8.dt.validation.marker.IExtraInfoKeys;
|
||||
import com._1c.g5.v8.dt.validation.marker.Marker;
|
||||
import com.e1c.v8codestyle.bsl.check.itests.AbstractSingleModuleTestBase;
|
||||
import com.e1c.v8codestyle.bsl.comment.check.ExportProcedureCommentDescriptionCheck;
|
||||
|
||||
/**
|
||||
* Tests for {@link ExportProcedureCommentDescriptionCheck} check.
|
||||
*
|
||||
* @author Olga Bozhko
|
||||
*/
|
||||
public class ExportProcedureCommentDescriptionCheckTest
|
||||
extends AbstractSingleModuleTestBase
|
||||
{
|
||||
private static final String MESSAGE =
|
||||
"Missing Description section in the comment for export procedure (function) {0}";
|
||||
private static final String EXPORT_FUNCTION_NAME = "\"RolesAvailable\"";
|
||||
|
||||
public ExportProcedureCommentDescriptionCheckTest()
|
||||
{
|
||||
super(ExportProcedureCommentDescriptionCheck.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the documentation comment for export procedure/functiion contains description section
|
||||
*
|
||||
* @throws Exception the exception
|
||||
*/
|
||||
@Test
|
||||
public void testFunctionHasDescriptionSection() throws Exception
|
||||
{
|
||||
updateModule(FOLDER_RESOURCE + "doc-comment-export-function-with-description-section.bsl");
|
||||
|
||||
List<Marker> markers = getModuleMarkers();
|
||||
assertTrue(markers.isEmpty());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the documentation comment for export procedure/function doesn't contain description section
|
||||
*
|
||||
* @throws Exception the exception
|
||||
*/
|
||||
@Test
|
||||
public void testFunctionHasNoDescriptionSection() throws Exception
|
||||
{
|
||||
updateModule(FOLDER_RESOURCE + "doc-comment-export-function-no-description-section.bsl");
|
||||
|
||||
List<Marker> markers = getModuleMarkers();
|
||||
assertEquals(1, markers.size());
|
||||
Marker marker = markers.get(0);
|
||||
assertEquals("14", marker.getExtraInfo().get(IExtraInfoKeys.TEXT_EXTRA_INFO_LINE_KEY));
|
||||
assertEquals(MessageFormat.format(MESSAGE, EXPORT_FUNCTION_NAME), marker.getMessage());
|
||||
}
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>UnknownFormParameterAccess</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
|
||||
<nature>com._1c.g5.v8.dt.core.V8ConfigurationNature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
@ -0,0 +1,2 @@
|
||||
eclipse.preferences.version=1
|
||||
encoding/<project>=UTF-8
|
@ -0,0 +1,2 @@
|
||||
Manifest-Version: 1.0
|
||||
Runtime-Version: 8.3.19
|
@ -0,0 +1,51 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form:Form xmlns:form="http://g5.1c.ru/v8/dt/form">
|
||||
<autoCommandBar>
|
||||
<name>FormCommandBar</name>
|
||||
<id>-1</id>
|
||||
<visible>true</visible>
|
||||
<enabled>true</enabled>
|
||||
<userVisible>
|
||||
<common>true</common>
|
||||
</userVisible>
|
||||
<horizontalAlign>Left</horizontalAlign>
|
||||
<autoFill>true</autoFill>
|
||||
</autoCommandBar>
|
||||
<handlers>
|
||||
<event>OnCreateAtServer</event>
|
||||
<name>OnCreateAtServer</name>
|
||||
</handlers>
|
||||
<autoTitle>true</autoTitle>
|
||||
<autoUrl>true</autoUrl>
|
||||
<group>Vertical</group>
|
||||
<autoFillCheck>true</autoFillCheck>
|
||||
<allowFormCustomize>true</allowFormCustomize>
|
||||
<enabled>true</enabled>
|
||||
<showTitle>true</showTitle>
|
||||
<showCloseButton>true</showCloseButton>
|
||||
<parameters>
|
||||
<name>Parameter1</name>
|
||||
<valueType>
|
||||
<types>String</types>
|
||||
<stringQualifiers/>
|
||||
</valueType>
|
||||
</parameters>
|
||||
<parameters>
|
||||
<name>Parameter2</name>
|
||||
<valueType>
|
||||
<types>String</types>
|
||||
<stringQualifiers/>
|
||||
</valueType>
|
||||
</parameters>
|
||||
<parameters>
|
||||
<name>Parameter3</name>
|
||||
<valueType>
|
||||
<types>String</types>
|
||||
<stringQualifiers/>
|
||||
</valueType>
|
||||
</parameters>
|
||||
<commandInterface>
|
||||
<navigationPanel/>
|
||||
<commandBar/>
|
||||
</commandInterface>
|
||||
</form:Form>
|
@ -0,0 +1,15 @@
|
||||
|
||||
&AtServer
|
||||
Procedure OnCreateAtServer(Cancel, StandardProcessing)
|
||||
|
||||
P1 = Parameters.Parameter1;
|
||||
P2 = Parameters.Parameter2;
|
||||
P3 = Parameters.Parameter3;
|
||||
P4 = Parameters.Parameter4;
|
||||
If Parameters.Property("Parameter5") Then
|
||||
P5 = Parameters.Parameter5;
|
||||
EndIf;
|
||||
//@skip-check unknown-form-parameter-access
|
||||
P6 = Parameters.Parameter6;
|
||||
|
||||
EndProcedure
|
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonForm xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="8dc7cfba-d593-432a-b0c3-7ac2b5d38bd9">
|
||||
<name>TestForm</name>
|
||||
<synonym>
|
||||
<key>en</key>
|
||||
<value>Test form</value>
|
||||
</synonym>
|
||||
<usePurposes>PersonalComputer</usePurposes>
|
||||
<usePurposes>MobileDevice</usePurposes>
|
||||
</mdclass:CommonForm>
|
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<cmi:CommandInterface xmlns:cmi="http://g5.1c.ru/v8/dt/cmi"/>
|
@ -0,0 +1,42 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="6234ca5c-8e27-4656-945d-048f274720a1">
|
||||
<name>UnknownFormParameterAccess</name>
|
||||
<synonym>
|
||||
<key>en</key>
|
||||
<value>Unknown form parameter access</value>
|
||||
</synonym>
|
||||
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="6b9561da-fe94-41a2-9388-44b1e2dfb672"/>
|
||||
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="4748215e-a509-4cb7-ac81-d7a1ec6ca42d"/>
|
||||
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="c2e48825-e973-41eb-8f1d-5ec5f006a910"/>
|
||||
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="54d0cc7d-5970-41e0-b9f2-33a7e0360836"/>
|
||||
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="64a8c69e-aa14-40b8-9097-5f1e9c54a0f6"/>
|
||||
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="1f353d72-1841-437b-8b63-a08c470dd1ec"/>
|
||||
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="38d1b124-f2dc-44e6-b025-26bbe53c9bc1"/>
|
||||
<configurationExtensionCompatibilityMode>8.3.19</configurationExtensionCompatibilityMode>
|
||||
<defaultRunMode>ManagedApplication</defaultRunMode>
|
||||
<usePurposes>PersonalComputer</usePurposes>
|
||||
<usedMobileApplicationFunctionalities>
|
||||
<functionality>
|
||||
<use>true</use>
|
||||
</functionality>
|
||||
<functionality>
|
||||
<functionality>OSBackup</functionality>
|
||||
<use>true</use>
|
||||
</functionality>
|
||||
</usedMobileApplicationFunctionalities>
|
||||
<defaultLanguage>Language.English</defaultLanguage>
|
||||
<dataLockControlMode>Managed</dataLockControlMode>
|
||||
<objectAutonumerationMode>NotAutoFree</objectAutonumerationMode>
|
||||
<modalityUseMode>DontUse</modalityUseMode>
|
||||
<synchronousPlatformExtensionAndAddInCallUseMode>DontUse</synchronousPlatformExtensionAndAddInCallUseMode>
|
||||
<compatibilityMode>8.3.19</compatibilityMode>
|
||||
<languages uuid="84439c11-320a-4cf4-8042-61fe3b450cb1">
|
||||
<name>English</name>
|
||||
<synonym>
|
||||
<key>en</key>
|
||||
<value>English</value>
|
||||
</synonym>
|
||||
<languageCode>en</languageCode>
|
||||
</languages>
|
||||
<commonForms>CommonForm.TestForm</commonForms>
|
||||
</mdclass:Configuration>
|
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<cmi:CommandInterface xmlns:cmi="http://g5.1c.ru/v8/dt/cmi"/>
|
@ -0,0 +1,106 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (C) 2022, 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.md.check.itests;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com._1c.g5.v8.dt.core.platform.IDtProject;
|
||||
import com._1c.g5.v8.dt.validation.marker.Marker;
|
||||
import com.e1c.g5.v8.dt.testing.check.CheckTestBase;
|
||||
import com.e1c.v8codestyle.md.check.MdObjectNameUnallowedLetterCheck;
|
||||
|
||||
/**
|
||||
* Tests for {@link MdObjectNameUnallowedLetterCheck} check
|
||||
*
|
||||
* @author OlgaBozhko
|
||||
*
|
||||
*/
|
||||
public class MdObjectNameUnallowedLetterCheckTest
|
||||
extends CheckTestBase
|
||||
{
|
||||
private static final String CHECK_ID = "mdo-ru-name-unallowed-letter"; //$NON-NLS-1$
|
||||
private static final String PROJECT_NAME = "MdObjectNameUnallowedLetter";
|
||||
private static final String MESSAGE =
|
||||
"In Russian locale, name, synonym or comment of metadata object contain the unallowed letter";
|
||||
|
||||
/**
|
||||
* Test that md object name, synonym and comment do not contain unallowed letter "ё" (Ru locale)
|
||||
*
|
||||
* @throws Exception the exception
|
||||
*/
|
||||
@Test
|
||||
public void testMdObjectNameNoUnallowedLetter() throws Exception
|
||||
{
|
||||
IDtProject dtProject = openProjectAndWaitForValidationFinish(PROJECT_NAME);
|
||||
assertNotNull(dtProject);
|
||||
|
||||
long id = getTopObjectIdByFqn("Catalog.ТестовыйКаталог", dtProject);
|
||||
Marker marker = getFirstMarker(CHECK_ID, id, dtProject);
|
||||
assertNull(marker);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that md object name contains unallowed letter "ё" (Ru locale)
|
||||
*
|
||||
* @throws Exception the exception
|
||||
*/
|
||||
@Test
|
||||
public void testMdObjectNameHasUnallowedLetter() throws Exception
|
||||
{
|
||||
IDtProject dtProject = openProjectAndWaitForValidationFinish(PROJECT_NAME);
|
||||
assertNotNull(dtProject);
|
||||
|
||||
long id = getTopObjectIdByFqn("Catalog.ТестовыйКаталог_ё_имя", dtProject);
|
||||
Marker marker = getFirstMarker(CHECK_ID, id, dtProject);
|
||||
assertNotNull(marker);
|
||||
assertEquals(marker.getMessage(), MESSAGE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that md object synonym contains unallowed letter "ё" (Ru locale)
|
||||
*
|
||||
* @throws Exception the exception
|
||||
*/
|
||||
@Test
|
||||
public void testMdObjectSynonymHasUnallowedLetter() throws Exception
|
||||
{
|
||||
IDtProject dtProject = openProjectAndWaitForValidationFinish(PROJECT_NAME);
|
||||
assertNotNull(dtProject);
|
||||
|
||||
long id = getTopObjectIdByFqn("Catalog.ТестовыйКаталог_синоним", dtProject);
|
||||
Marker marker = getFirstMarker(CHECK_ID, id, dtProject);
|
||||
assertNotNull(marker);
|
||||
assertEquals(marker.getMessage(), MESSAGE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that md object comment contains unallowed letter "ё" (Ru locale)
|
||||
*
|
||||
* @throws Exception the exception
|
||||
*/
|
||||
@Test
|
||||
public void testMdObjectCommentHasUnallowedLetter() throws Exception
|
||||
{
|
||||
IDtProject dtProject = openProjectAndWaitForValidationFinish(PROJECT_NAME);
|
||||
assertNotNull(dtProject);
|
||||
|
||||
long id = getTopObjectIdByFqn("Catalog.ТестовыйКаталог_комментарий", dtProject);
|
||||
Marker marker = getFirstMarker(CHECK_ID, id, dtProject);
|
||||
assertNotNull(marker);
|
||||
assertEquals(marker.getMessage(), MESSAGE);
|
||||
}
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>MdObjectNameUnallowedLetter</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
|
||||
<nature>com._1c.g5.v8.dt.core.V8ConfigurationNature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
@ -0,0 +1,2 @@
|
||||
eclipse.preferences.version=1
|
||||
encoding/<project>=UTF-8
|
@ -0,0 +1,2 @@
|
||||
Manifest-Version: 1.0
|
||||
Runtime-Version: 8.3.19
|
@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:Catalog xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="36ba5cf6-b579-431a-9f66-6640d73f9f37">
|
||||
<producedTypes>
|
||||
<objectType typeId="35de42a7-469b-4f3f-8c9b-0cfc2b6ec57f" valueTypeId="9efd60b8-1495-4acf-af4a-e9432c4dc5b4"/>
|
||||
<refType typeId="cdc2d275-e18d-448d-a496-99c90347395a" valueTypeId="b1c7b91a-d456-4243-a03c-4a464b8e899d"/>
|
||||
<selectionType typeId="d2cdeab3-4f0c-4faa-ad72-14bbb5adef4f" valueTypeId="61810606-50ae-4e1e-8880-53ff549236c1"/>
|
||||
<listType typeId="b77c7b07-6d3f-4153-9865-8ddbb800cf35" valueTypeId="6e426ab0-9989-4686-b24b-3c3560cf0670"/>
|
||||
<managerType typeId="6322be2b-8368-4699-9f53-1237a2f60e89" valueTypeId="f843b101-ae66-4eb4-9295-45449f4e5239"/>
|
||||
</producedTypes>
|
||||
<name>ТестовыйКаталог</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Тестовый каталог</value>
|
||||
</synonym>
|
||||
<useStandardCommands>true</useStandardCommands>
|
||||
<inputByString>Catalog.ТестовыйКаталог.StandardAttribute.Code</inputByString>
|
||||
<inputByString>Catalog.ТестовыйКаталог.StandardAttribute.Description</inputByString>
|
||||
<fullTextSearchOnInputByString>DontUse</fullTextSearchOnInputByString>
|
||||
<createOnInput>Use</createOnInput>
|
||||
<dataLockControlMode>Managed</dataLockControlMode>
|
||||
<fullTextSearch>Use</fullTextSearch>
|
||||
<objectPresentation>
|
||||
<key>ru</key>
|
||||
<value>1</value>
|
||||
</objectPresentation>
|
||||
<levelCount>2</levelCount>
|
||||
<foldersOnTop>true</foldersOnTop>
|
||||
<codeLength>9</codeLength>
|
||||
<descriptionLength>25</descriptionLength>
|
||||
<codeType>String</codeType>
|
||||
<codeAllowedLength>Variable</codeAllowedLength>
|
||||
<checkUnique>true</checkUnique>
|
||||
<autonumbering>true</autonumbering>
|
||||
<defaultPresentation>AsDescription</defaultPresentation>
|
||||
<editType>InDialog</editType>
|
||||
<choiceMode>BothWays</choiceMode>
|
||||
</mdclass:Catalog>
|
@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:Catalog xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="1ad2aba2-aea6-4e58-a3eb-f243ec84bceb">
|
||||
<producedTypes>
|
||||
<objectType typeId="f53604a9-2b8c-4793-9aa7-8f4da8a78831" valueTypeId="f9503cd1-fd45-4d9a-a128-756511bb55de"/>
|
||||
<refType typeId="f3ef8059-06af-4e5c-86b4-209e8f65cf13" valueTypeId="b252a136-e1f0-43e9-8589-00102d2ba8b7"/>
|
||||
<selectionType typeId="e229648b-ec16-43d8-b470-604d23cedbd9" valueTypeId="978a2d02-cff0-4bf5-a02c-62aa7c6843b6"/>
|
||||
<listType typeId="26a87f3d-3832-4e1e-989f-c823d58f4ec9" valueTypeId="5ce1bac8-50a9-4fe7-b935-75e218beb7d4"/>
|
||||
<managerType typeId="e7fbf22a-1d8e-4992-825d-5d0ebef5af36" valueTypeId="d5c4e733-4e8b-4662-9a9b-05a802931f7d"/>
|
||||
</producedTypes>
|
||||
<name>ТестовыйКаталог_комментарий</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Тестовый каталог комментарий</value>
|
||||
</synonym>
|
||||
<comment>ТестовыйКаталог_ё_комментарий</comment>
|
||||
<useStandardCommands>true</useStandardCommands>
|
||||
<inputByString>Catalog.ТестовыйКаталог_комментарий.StandardAttribute.Code</inputByString>
|
||||
<inputByString>Catalog.ТестовыйКаталог_комментарий.StandardAttribute.Description</inputByString>
|
||||
<fullTextSearchOnInputByString>DontUse</fullTextSearchOnInputByString>
|
||||
<createOnInput>Use</createOnInput>
|
||||
<dataLockControlMode>Managed</dataLockControlMode>
|
||||
<fullTextSearch>Use</fullTextSearch>
|
||||
<objectPresentation>
|
||||
<key>ru</key>
|
||||
<value>1</value>
|
||||
</objectPresentation>
|
||||
<levelCount>2</levelCount>
|
||||
<foldersOnTop>true</foldersOnTop>
|
||||
<codeLength>9</codeLength>
|
||||
<descriptionLength>25</descriptionLength>
|
||||
<codeType>String</codeType>
|
||||
<codeAllowedLength>Variable</codeAllowedLength>
|
||||
<checkUnique>true</checkUnique>
|
||||
<autonumbering>true</autonumbering>
|
||||
<defaultPresentation>AsDescription</defaultPresentation>
|
||||
<editType>InDialog</editType>
|
||||
<choiceMode>BothWays</choiceMode>
|
||||
</mdclass:Catalog>
|
@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:Catalog xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="d5f9e89a-54b4-4f90-8366-ca7e1da45c1a">
|
||||
<producedTypes>
|
||||
<objectType typeId="dccfe4b2-98fb-45fe-8a98-9d37785a5120" valueTypeId="0e56efd8-9b3e-49bd-9b98-188f45b7a624"/>
|
||||
<refType typeId="75150b58-4ff4-4115-851f-ef544f42a42d" valueTypeId="42bf34f3-8354-42d3-b556-11c5bfa7addc"/>
|
||||
<selectionType typeId="cba8806c-b871-4d98-9162-b82a5a6c5896" valueTypeId="1a273781-e2e2-4c49-bb9c-43b5231fd3b4"/>
|
||||
<listType typeId="1748e86d-01b6-4d52-9119-bafc9f79e1b1" valueTypeId="63042547-9011-40a1-a638-e4a1b403575f"/>
|
||||
<managerType typeId="0d3261b2-99c9-4a45-bd04-43ceaa17e430" valueTypeId="adbb1328-0456-48c6-9636-3ae849ee92fd"/>
|
||||
</producedTypes>
|
||||
<name>ТестовыйКаталог_синоним</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Тестовый каталог ё синоним</value>
|
||||
</synonym>
|
||||
<useStandardCommands>true</useStandardCommands>
|
||||
<inputByString>Catalog.ТестовыйКаталог_синоним.StandardAttribute.Code</inputByString>
|
||||
<inputByString>Catalog.ТестовыйКаталог_синоним.StandardAttribute.Description</inputByString>
|
||||
<fullTextSearchOnInputByString>DontUse</fullTextSearchOnInputByString>
|
||||
<createOnInput>Use</createOnInput>
|
||||
<dataLockControlMode>Managed</dataLockControlMode>
|
||||
<fullTextSearch>Use</fullTextSearch>
|
||||
<objectPresentation>
|
||||
<key>ru</key>
|
||||
<value>1</value>
|
||||
</objectPresentation>
|
||||
<levelCount>2</levelCount>
|
||||
<foldersOnTop>true</foldersOnTop>
|
||||
<codeLength>9</codeLength>
|
||||
<descriptionLength>25</descriptionLength>
|
||||
<codeType>String</codeType>
|
||||
<codeAllowedLength>Variable</codeAllowedLength>
|
||||
<checkUnique>true</checkUnique>
|
||||
<autonumbering>true</autonumbering>
|
||||
<defaultPresentation>AsDescription</defaultPresentation>
|
||||
<editType>InDialog</editType>
|
||||
<choiceMode>BothWays</choiceMode>
|
||||
</mdclass:Catalog>
|
@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:Catalog xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="b2ee6a43-df0e-4285-8176-c18b6e241b93">
|
||||
<producedTypes>
|
||||
<objectType typeId="3e22bd6f-7750-4422-8b02-91a662f8f78e" valueTypeId="ccbb7362-df67-49f4-967c-12a82849dc54"/>
|
||||
<refType typeId="df29049e-8d24-4a91-875c-2a2cffc7e359" valueTypeId="bc30dc0c-5984-4a89-989b-35c9c54aad91"/>
|
||||
<selectionType typeId="9476418d-7fbb-4051-a7b8-6e4b750ec9c8" valueTypeId="548ecb1c-a491-4aa3-a765-a0355dc95d0b"/>
|
||||
<listType typeId="fb2ad3de-9a62-40b4-857c-0406b01e0705" valueTypeId="741f1b6a-0913-44d9-9737-359dee40e17d"/>
|
||||
<managerType typeId="c2d2e7ed-2eb1-4c84-84ca-f3a72c0948b1" valueTypeId="8302eeb7-0f61-4d95-bb16-a1c65491e9a7"/>
|
||||
</producedTypes>
|
||||
<name>ТестовыйКаталог_ё_имя</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Тестовый каталог</value>
|
||||
</synonym>
|
||||
<useStandardCommands>true</useStandardCommands>
|
||||
<inputByString>Catalog.ТестовыйКаталог_ё_имя.StandardAttribute.Code</inputByString>
|
||||
<inputByString>Catalog.ТестовыйКаталог_ё_имя.StandardAttribute.Description</inputByString>
|
||||
<fullTextSearchOnInputByString>DontUse</fullTextSearchOnInputByString>
|
||||
<createOnInput>Use</createOnInput>
|
||||
<dataLockControlMode>Managed</dataLockControlMode>
|
||||
<fullTextSearch>Use</fullTextSearch>
|
||||
<objectPresentation>
|
||||
<key>ru</key>
|
||||
<value>1</value>
|
||||
</objectPresentation>
|
||||
<levelCount>2</levelCount>
|
||||
<foldersOnTop>true</foldersOnTop>
|
||||
<codeLength>9</codeLength>
|
||||
<descriptionLength>25</descriptionLength>
|
||||
<codeType>String</codeType>
|
||||
<codeAllowedLength>Variable</codeAllowedLength>
|
||||
<checkUnique>true</checkUnique>
|
||||
<autonumbering>true</autonumbering>
|
||||
<defaultPresentation>AsDescription</defaultPresentation>
|
||||
<editType>InDialog</editType>
|
||||
<choiceMode>BothWays</choiceMode>
|
||||
</mdclass:Catalog>
|
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<cmi:CommandInterface xmlns:cmi="http://g5.1c.ru/v8/dt/cmi"/>
|
@ -0,0 +1,46 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="52fc997f-b6f0-4ff9-ac4c-96d06e01b36d">
|
||||
<name>MdObjectNameUnallowedLetter</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Md object name unallowed letter</value>
|
||||
</synonym>
|
||||
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="6391eb7f-d6e1-4614-a8eb-9186ff89f1a9"/>
|
||||
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="f56c5439-a106-4d05-9a32-4b32958d9427"/>
|
||||
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="70760f62-8e17-4642-a514-af74dc4478bb"/>
|
||||
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="bd9aa895-f22f-4480-8d48-ec7650f91219"/>
|
||||
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="e3bbdd1b-3d9b-4148-b4ea-9aa669b4ccc7"/>
|
||||
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="884fbe5f-df0a-4a02-80cb-9a15fecda65b"/>
|
||||
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="5fa81625-81ed-4f4d-88d2-c6a38b0e0004"/>
|
||||
<configurationExtensionCompatibilityMode>8.3.19</configurationExtensionCompatibilityMode>
|
||||
<defaultRunMode>ManagedApplication</defaultRunMode>
|
||||
<usePurposes>PersonalComputer</usePurposes>
|
||||
<scriptVariant>Russian</scriptVariant>
|
||||
<usedMobileApplicationFunctionalities>
|
||||
<functionality>
|
||||
<use>true</use>
|
||||
</functionality>
|
||||
<functionality>
|
||||
<functionality>OSBackup</functionality>
|
||||
<use>true</use>
|
||||
</functionality>
|
||||
</usedMobileApplicationFunctionalities>
|
||||
<defaultLanguage>Language.English</defaultLanguage>
|
||||
<dataLockControlMode>Managed</dataLockControlMode>
|
||||
<objectAutonumerationMode>NotAutoFree</objectAutonumerationMode>
|
||||
<modalityUseMode>DontUse</modalityUseMode>
|
||||
<synchronousPlatformExtensionAndAddInCallUseMode>DontUse</synchronousPlatformExtensionAndAddInCallUseMode>
|
||||
<compatibilityMode>8.3.19</compatibilityMode>
|
||||
<languages uuid="8b10cd01-c878-4d58-bef3-0d10f2da0207">
|
||||
<name>English</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>English</value>
|
||||
</synonym>
|
||||
<languageCode>ru</languageCode>
|
||||
</languages>
|
||||
<catalogs>Catalog.ТестовыйКаталог</catalogs>
|
||||
<catalogs>Catalog.ТестовыйКаталог_ё_имя</catalogs>
|
||||
<catalogs>Catalog.ТестовыйКаталог_комментарий</catalogs>
|
||||
<catalogs>Catalog.ТестовыйКаталог_синоним</catalogs>
|
||||
</mdclass:Configuration>
|
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<cmi:CommandInterface xmlns:cmi="http://g5.1c.ru/v8/dt/cmi"/>
|
Reference in New Issue
Block a user