1
0
mirror of https://github.com/1C-Company/v8-code-style.git synced 2025-07-05 23:57:27 +02:00

Автоматическая генерация списков проверок

This commit is contained in:
Dmitriy Marmyshev
2022-01-27 09:28:30 +02:00
parent 5531123c44
commit ac6052fb43
29 changed files with 699 additions and 142 deletions

View File

@ -5,7 +5,8 @@
## 0.2.0 ## 0.2.0
Выпуск бета-версии для 1C:EDT 2021.3 - Выпуск бета-версии для 1C:EDT 2021.3
- Автоматические индексы описаний проверок в справке `Help -> Help contents -> 1C:Code style V8`
### Новые фичи ### Новые фичи

View File

@ -267,9 +267,14 @@
<headerHtmlFile>${markdown.page.generator.html.file.path}/html/header.html</headerHtmlFile> <headerHtmlFile>${markdown.page.generator.html.file.path}/html/header.html</headerHtmlFile>
<footerHtmlFile>${markdown.page.generator.html.file.path}/html/footer.html</footerHtmlFile> <footerHtmlFile>${markdown.page.generator.html.file.path}/html/footer.html</footerHtmlFile>
<pegdownExtensions>TABLES,FENCED_CODE_BLOCKS,AUTOLINKS,SMARTS,TASKLISTITEMS,EXTANCHORLINKS,TOC</pegdownExtensions> <pegdownExtensions>TABLES,FENCED_CODE_BLOCKS,AUTOLINKS,SMARTS,TASKLISTITEMS,EXTANCHORLINKS,TOC</pegdownExtensions>
<attributes>
<attribute>TableBlock|class=table table-striped table-bordered</attribute>
<attribute>BlockQuote|class=red</attribute>
</attributes>
<transformRelativeMarkdownLinks>true</transformRelativeMarkdownLinks> <transformRelativeMarkdownLinks>true</transformRelativeMarkdownLinks>
<inputEncoding>UTF-8</inputEncoding> <inputEncoding>UTF-8</inputEncoding>
<outputEncoding>UTF-8</outputEncoding> <outputEncoding>UTF-8</outputEncoding>
<applyFiltering>true</applyFiltering>
</configuration> </configuration>
</plugin> </plugin>
<plugin> <plugin>

View File

@ -1,10 +0,0 @@
# Form object data path referred to existing object for each segment
Checks that each segment of Form item data-path referred to existing object.
## Noncompliant Code Example
## Compliant Solution
## See

View File

@ -1,4 +1,4 @@
# input-field-list-choice-mode # Check input field has correct list choice mode if choice list is not empty
Check input field has correct list choice mode if choice list is not empty. Check input field has correct list choice mode if choice list is not empty.

View File

@ -1,11 +0,0 @@
# Путь к данным объекта формы ссылается на существующий объект в каждом сегменте пути
Проверяет что каждый сегмент пути к данным элемента формы ссылается на существующий объект.
## Неправильно
## Правильно
## См.
- [Общие требования к конфигурации](https://its.1c.ru/db/v8std#content:467:hdoc:2.2)

View File

@ -1,4 +1,4 @@
# input-field-list-choice-mode # В полях форм со списками выбора следует всегда устанавливать свойство **РежимВыбораИзСписка** в значение Истина
В полях форм со списками выбора следует всегда устанавливать свойство **РежимВыбораИзСписка** в значение Истина. В этом случае, в поле будет корректно выводиться локализуемое представление, а не значение из списка выбора. В полях форм со списками выбора следует всегда устанавливать свойство **РежимВыбораИзСписка** в значение Истина. В этом случае, в поле будет корректно выводиться локализуемое представление, а не значение из списка выбора.

View File

@ -1,4 +1,4 @@
# right-interactive-clear-deletion-mark-predefined-data # Установлено право "ИнтерактивноеСнятиеПометкиУдаленияПредопределенныхДанных"

View File

@ -1,4 +1,4 @@
# right-interactive-delete-marked-predefined-data # Установлено право "ИнтерактивноеУдалениеПомеченныхПредопределенныхДанных"

View File

@ -1,4 +1,4 @@
# right-interactive-delete-predefined-data # Установлено право "ИнтерактивноеУдалениеПредопределенныхДанных"

View File

@ -1,4 +1,4 @@
# right-interactive-delete # Установлено право "ИнтерактивноеУдаление"

View File

@ -1,4 +1,4 @@
# right-interactive-set-deletion-mark-predefined-data # Установлено право "ИнтерактивноеПометкаУдаленияПредопределенныхДанных"

View File

@ -1,4 +1,4 @@
# Права в роли содержат RLS # Право роли содержит текст ограничения доступа (RLS)

12
docs/.classpath Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="GROOVY_DSL_SUPPORT"/>
<classpathentry kind="con" path="GROOVY_SUPPORT"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View File

@ -22,6 +22,7 @@
</buildCommand> </buildCommand>
</buildSpec> </buildSpec>
<natures> <natures>
<nature>org.eclipse.jdt.groovy.core.groovyNature</nature>
<nature>org.eclipse.pde.PluginNature</nature> <nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature> <nature>org.eclipse.jdt.core.javanature</nature>
</natures> </natures>

View File

@ -0,0 +1,14 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=11
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
org.eclipse.jdt.core.compiler.release=enabled
org.eclipse.jdt.core.compiler.source=11

View File

@ -0,0 +1,2 @@
eclipse.preferences.version=1
groovy.compiler.level=30

5
docs/checks/.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
md/
form/
bsl/
ql/
right/

View File

@ -1,32 +1,50 @@
# Проверки модулей 1С # Проверки модулей 1С
- Проверка конструктора структуры содержащего больше 3х ключей
- Выполнение запроса в цикле с учетом локальных вызовов в модуле Общее количество проверок: 43
- Проверка ОбменДанными.Загрузка в обработчике события
- Система строгой типизации кода: | Код проверки | Наименование |
- Переменная имеет тип значения |--------------|--------------|
- Параметр метода имеет тип | [bsl-canonical-pragma](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/bsl-canonical-pragma.md) | Аннотация написана канонически |
- Функция возвращает типизированное значение | [bsl-nstr-string-literal-format](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/bsl-nstr-string-literal-format.md) | НСтр формат строкового литерала |
- Утверждение меняет тип | [change-and-validate-instead-of-around](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/change-and-validate-instead-of-around.md) | Используется аннотация &ИзменениеИКонтроль вместо &Вместо |
- Типизация значений в конструкторе структуры | [constructor-function-return-section](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/constructor-function-return-section.md) | Секция возвращаемого значения функции-конструктора данных |
- Вызываемый тип пересекается с типом параметра | [data-exchange-load](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/data-exchange-load.md) | Проверка ОбменДанными.Загрузка в обработчике события |
- Секция возвращаемого значения функции-конструктора данных | [doc-comment-collection-item-type](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-collection-item-type.md) | Тип коллекций в документирующем комментарии содержит тип элемента коллекции |
- Свойство объекта имеет тип возвращаемого значения | [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-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) | Поле документирующего комментария не имеет определения типа |
- НСтр формат строкового литерала | [doc-comment-field-type-strict](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-field-type-strict.md) | Поле документирующего комментария имеет описание типа |
- Использование булевого параметра обработчика события | [doc-comment-parameter-in-description-suggestion](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-parameter-in-description-suggestion.md) | Многострочное описание документирующего комментария содержит определение параметра |
- Метод содержит слишком много параметров | [doc-comment-parameter-section](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-parameter-section.md) | В секции параметров документирующего комментария пропущено определение параметра |
- Использование только дефис-минуса в документирующем комментарии | [doc-comment-procedure-return-section](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-procedure-return-section.md) | Документирующий комментарий содежрит секцию возвращаемого значения для процедуры |
- Использование не рекомендуемых методов: | [doc-comment-ref-link](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-ref-link.md) | Ссылка документирующего комментария на существующий объект |
- ТекущаяДата | [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) | Использование только дефис-минуса в документирующем комментарии |
- Стандартная область структуры модуля верхнеуровневая | [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) | Использование булевого параметра обработчика события |
- Описание оповещения на серверную процедуру | [form-module-missing-pragma](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/form-module-missing-pragma.md) | Всегда использовать директивы компиляции в модуле формы |
- Метод или переменная доступны НаКлиенте | [form-module-pragma](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/form-module-pragma.md) | Использование директив компиляции модуля формы |
| [function-return-value-type](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/function-return-value-type.md) | Функция возвращает типизированное значение |
| [invocation-form-event-handler](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/invocation-form-event-handler.md) | Программный вызов обработчика события формы |
| [invocation-parameter-type-intersect](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/invocation-parameter-type-intersect.md) | Вызываемый тип пересекается с типом параметра |
| [isinrole-using](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/isinrole-using.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) | Метод содержит слишком много параметров |
| [module-accessibility-at-client](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-accessibility-at-client.md) | Метод или переменная доступны НаКлиенте |
| [module-region-empty](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-region-empty.md) | Область пустая |
| [module-structure-top-region](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-structure-top-region.md) | Стандартная область структуры модуля верхнеуровневая |
| [new-color](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/new-color.md) | Использование конструкции "Новый Цвет" |
| [notify-description-to-server-procedure](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/notify-description-to-server-procedure.md) | Описание оповещения на серверную процедуру |
| [property-return-type](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/property-return-type.md) | Свойство объекта имеет тип возвращаемого значения |
| [query-in-loop](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/query-in-loop.md) | Запрос в цикле |
| [statement-type-change](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/statement-type-change.md) | Утверждение меняет тип |
| [structure-consructor-too-many-keys](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/structure-consructor-too-many-keys.md) | Конструктор структуры содержит слишком много ключей |
| [structure-consructor-value-type](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/structure-consructor-value-type.md) | Типизация значений в конструкторе структуры |
| [use-non-recommended-method](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/use-non-recommended-method.md) | Использование не рекомендуемых методов |
| [variable-value-type](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/variable-value-type.md) | Переменная имеет тип значения |

View File

@ -1,3 +1,102 @@
# Индекс проверок # Индекс проверок
Общее количество проверок 1С:Стандарты разработки V8: 87
- form: 1
- md: 14
- bsl: 43
- ql: 6
- right: 23
| Код проверки | Наименование |
|--------------|--------------|
| [bsl-canonical-pragma](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/bsl-canonical-pragma.md) | Аннотация написана канонически |
| [bsl-nstr-string-literal-format](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/bsl-nstr-string-literal-format.md) | НСтр формат строкового литерала |
| [change-and-validate-instead-of-around](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/change-and-validate-instead-of-around.md) | Используется аннотация &ИзменениеИКонтроль вместо &Вместо |
| [common-module-name-cached](../../bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-cached.md) | Общий модуль с повторно используемыми значениями |
| [common-module-name-client](../../bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-client.md) | Клиентский общий модуль должен оканчиваться на суффикс Клиент |
| [common-module-name-client-cached](../../bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-client-cached.md) | Клиентский общий модуль с повторно используемыми значениями |
| [common-module-name-client-server](../../bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-client-server.md) | Клиент-серверный общий модуль должен оканчиваться на суффикс КлиентСервер |
| [common-module-name-global](../../bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-global.md) | Глобальный общий модуль должен оканчиваться на суффикс Глобальный |
| [common-module-name-server-call](../../bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-server-call.md) | Общий модуль, для которого предусмотрен вызов сервера |
| [common-module-name-server-call-cached](../../bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-server-call-cached.md) | Общий модуль с повторно используемыми значениями |
| [common-module-type](../../bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-type.md) | Общий модуль имеет некорректный тип |
| [configuration-data-lock-mode](../../bundles/com.e1c.v8codestyle.md/markdown/ru/configuration-data-lock-mode.md) | Режим блокировки данных конфигурации |
| [constructor-function-return-section](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/constructor-function-return-section.md) | Секция возвращаемого значения функции-конструктора данных |
| [data-exchange-load](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/data-exchange-load.md) | Проверка ОбменДанными.Загрузка в обработчике события |
| [doc-comment-collection-item-type](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-collection-item-type.md) | Тип коллекций в документирующем комментарии содержит тип элемента коллекции |
| [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-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) | Поле документирующего комментария не имеет определения типа |
| [doc-comment-field-type-strict](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-field-type-strict.md) | Поле документирующего комментария имеет описание типа |
| [doc-comment-parameter-in-description-suggestion](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-parameter-in-description-suggestion.md) | Многострочное описание документирующего комментария содержит определение параметра |
| [doc-comment-parameter-section](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-parameter-section.md) | В секции параметров документирующего комментария пропущено определение параметра |
| [doc-comment-procedure-return-section](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-procedure-return-section.md) | Документирующий комментарий содежрит секцию возвращаемого значения для процедуры |
| [doc-comment-ref-link](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-ref-link.md) | Ссылка документирующего комментария на существующий объект |
| [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) | Использование только дефис-минуса в документирующем комментарии |
| [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) | Использование булевого параметра обработчика события |
| [form-module-missing-pragma](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/form-module-missing-pragma.md) | Всегда использовать директивы компиляции в модуле формы |
| [form-module-pragma](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/form-module-pragma.md) | Использование директив компиляции модуля формы |
| [function-return-value-type](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/function-return-value-type.md) | Функция возвращает типизированное значение |
| [input-field-list-choice-mode](../../bundles/com.e1c.v8codestyle.form/markdown/ru/input-field-list-choice-mode.md) | В полях форм со списками выбора следует всегда устанавливать свойство **РежимВыбораИзСписка** в значение Истина |
| [invocation-form-event-handler](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/invocation-form-event-handler.md) | Программный вызов обработчика события формы |
| [invocation-parameter-type-intersect](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/invocation-parameter-type-intersect.md) | Вызываемый тип пересекается с типом параметра |
| [isinrole-using](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/isinrole-using.md) | Использован метод "РольДоступна" |
| [md-list-object-presentation](../../bundles/com.e1c.v8codestyle.md/markdown/ru/md-list-object-presentation.md) | Не заполнено ни представление объекта, ни представление списка |
| [md-standard-attribure-synonym-empty](../../bundles/com.e1c.v8codestyle.md/markdown/ru/md-standard-attribure-synonym-empty.md) | Не задан синоним стандартного реквизита "Родитель" или "Владелец". |
| [mdo-name-length](../../bundles/com.e1c.v8codestyle.md/markdown/ru/mdo-name-length.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) | Метод содержит слишком много параметров |
| [module-accessibility-at-client](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-accessibility-at-client.md) | Метод или переменная доступны НаКлиенте |
| [module-region-empty](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-region-empty.md) | Область пустая |
| [module-structure-top-region](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-structure-top-region.md) | Стандартная область структуры модуля верхнеуровневая |
| [new-color](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/new-color.md) | Использование конструкции "Новый Цвет" |
| [notify-description-to-server-procedure](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/notify-description-to-server-procedure.md) | Описание оповещения на серверную процедуру |
| [property-return-type](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/property-return-type.md) | Свойство объекта имеет тип возвращаемого значения |
| [ql-camel-case-string-literal](../../bundles/com.e1c.v8codestyle.ql/markdown/ru/ql-camel-case-string-literal.md) | Строковый литерал в запросе содержит не КемелКейс контент |
| [ql-cast-to-max-number](../../bundles/com.e1c.v8codestyle.ql/markdown/ru/ql-cast-to-max-number.md) | Выражение к максимальному числу в запросе |
| [ql-join-to-sub-query](../../bundles/com.e1c.v8codestyle.ql/markdown/ru/ql-join-to-sub-query.md) | Соединение запроса с подзапросом |
| [ql-temp-table-index](../../bundles/com.e1c.v8codestyle.ql/markdown/ru/ql-temp-table-index.md) | Временная таблица должна содержать индексы |
| [ql-using-for-update](../../bundles/com.e1c.v8codestyle.ql/markdown/ru/ql-using-for-update.md) | Запрос содержит конструкцию "ДЛЯ ИЗМЕНЕНИЯ" |
| [ql-virtual-table-filters](../../bundles/com.e1c.v8codestyle.ql/markdown/ru/ql-virtual-table-filters.md) | Отбор виртуальной таблицы должен быть в параметрах |
| [query-in-loop](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/query-in-loop.md) | Запрос в цикле |
| [right-active-users](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-active-users.md) | Право установлено: Активные пользователи |
| [right-administration](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-administration.md) | Право установлено: Администрирование |
| [right-all-functions-mode](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-all-functions-mode.md) | Право установлено: Режим "Все функции" |
| [right-configuration-extensions-administration](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-configuration-extensions-administration.md) | Право установлено: Администрирование расширений конфигурации |
| [right-data-administration](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-data-administration.md) | Право установлено: Администрирование данных |
| [right-exclusive-mode](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-exclusive-mode.md) | Право установлено: Монопольный режим |
| [right-interactive-clear-deletion-mark-predefined-data](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-interactive-clear-deletion-mark-predefined-data.md) | Установлено право "ИнтерактивноеСнятиеПометкиУдаленияПредопределенныхДанных" |
| [right-interactive-delete](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-interactive-delete.md) | Установлено право "ИнтерактивноеУдаление" |
| [right-interactive-delete-marked-predefined-data](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-interactive-delete-marked-predefined-data.md) | Установлено право "ИнтерактивноеУдалениеПомеченныхПредопределенныхДанных" |
| [right-interactive-delete-predefined-data](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-interactive-delete-predefined-data.md) | Установлено право "ИнтерактивноеУдалениеПредопределенныхДанных" |
| [right-interactive-open-external-data-processors](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-interactive-open-external-data-processors.md) | Право установлено: Интерактивное открытие внешних обработок |
| [right-interactive-open-external-reports](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-interactive-open-external-reports.md) | Право установлено: Интерактивное открытие внешних отчетов |
| [right-interactive-set-deletion-mark-predefined-data](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-interactive-set-deletion-mark-predefined-data.md) | Установлено право "ИнтерактивноеПометкаУдаленияПредопределенныхДанных" |
| [right-output-to-printer-file-clipboard](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-output-to-printer-file-clipboard.md) | Право установлено: Вывод |
| [right-save-user-data](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-save-user-data.md) | Право установлено: Сохранение данных пользователя |
| [right-start-automation](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-start-automation.md) | Право установлено: Automation |
| [right-start-external-connection](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-start-external-connection.md) | Право установлено: Внешнее соединение |
| [right-start-thick-client](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-start-thick-client.md) | Право установлено: Толстый клиент |
| [right-start-thin-client](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-start-thin-client.md) | Право установлено: Тонкий клиент |
| [right-start-web-client](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-start-web-client.md) | Право установлено: Веб-клиент |
| [right-update-database-configuration](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-update-database-configuration.md) | Право установлено: Обновление конфигурации базы данных |
| [right-view-event-log](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-view-event-log.md) | Право установлено: Журнал регистрации |
| [role-right-has-rls](../../bundles/com.e1c.v8codestyle.right/markdown/ru/role-right-has-rls.md) | Право роли содержит текст ограничения доступа (RLS) |
| [scheduled-job-periodicity-too-short](../../bundles/com.e1c.v8codestyle.md/markdown/ru/scheduled-job-periodicity-too-short.md) | Периодичность выполнения регламентного задания меньше одной минуты. |
| [statement-type-change](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/statement-type-change.md) | Утверждение меняет тип |
| [structure-consructor-too-many-keys](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/structure-consructor-too-many-keys.md) | Конструктор структуры содержит слишком много ключей |
| [structure-consructor-value-type](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/structure-consructor-value-type.md) | Типизация значений в конструкторе структуры |
| [use-non-recommended-method](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/use-non-recommended-method.md) | Использование не рекомендуемых методов |
| [variable-value-type](../../bundles/com.e1c.v8codestyle.bsl/markdown/ru/variable-value-type.md) | Переменная имеет тип значения |

View File

@ -1,42 +1,87 @@
module-empty-method bsl-canonical-pragma
module-unused-local-variable bsl-nstr-string-literal-format
module-unused-method change-and-validate-instead-of-around
common-module-name-client common-module-name-cached
common-module-name-client-server common-module-name-client
common-module-name-global common-module-name-client-cached
common-module-type common-module-name-client-server
configuration-data-lock-mode common-module-name-global
md-list-object-presentation common-module-name-server-call
mdo-name-length common-module-name-server-call-cached
input-field-list-choice-mode common-module-type
empty-except-statement configuration-data-lock-mode
data-exchange-load constructor-function-return-section
query-in-loop data-exchange-load
structure-consructor-too-many-keys doc-comment-collection-item-type
ql-cast-to-max-number doc-comment-complex-type-with-link
ql-camel-case-string-literal doc-comment-description-ends-on-dot
ql-cast-to-max-number doc-comment-export-function-return-section
ql-join-to-sub-query doc-comment-field-in-description-suggestion
right-active-users doc-comment-field-name
right-administration doc-comment-field-type
right-all-functions-mode doc-comment-field-type-strict
right-configuration-extensions-administration doc-comment-parameter-in-description-suggestion
right-data-administration doc-comment-parameter-section
right-exclusive-mode doc-comment-procedure-return-section
right-interactive-delete doc-comment-ref-link
right-interactive-delete-marked-predefined-data doc-comment-return-section-type
right-interactive-delete-predefined-data doc-comment-type
right-interactive-clear-deletion-mark-predefined-data doc-comment-use-minus
right-interactive-open-external-data-processors dynamic-access-method-not-found
right-interactive-open-external-reports empty-except-statement
right-interactive-set-deletion-mark-predefined-data event-heandler-boolean-param
right-output-to-printer-file-clipboard form-module-missing-pragma
right-save-user-data form-module-pragma
right-start-automation function-return-value-type
right-start-external-connection input-field-list-choice-mode
right-start-thick-client invocation-form-event-handler
right-start-thin-client invocation-parameter-type-intersect
right-start-web-client isinrole-using
right-update-database-configuration md-list-object-presentation
right-view-event-log md-standard-attribure-synonym-empty
role-right-has-rls mdo-name-length
mdo-scheduled-job-description
method-param-value-type
method-too-many-params
module-accessibility-at-client
module-region-empty
module-structure-top-region
new-color
notify-description-to-server-procedure
property-return-type
ql-camel-case-string-literal
ql-cast-to-max-number
ql-join-to-sub-query
ql-temp-table-index
ql-using-for-update
ql-virtual-table-filters
query-in-loop
right-active-users
right-administration
right-all-functions-mode
right-configuration-extensions-administration
right-data-administration
right-exclusive-mode
right-interactive-clear-deletion-mark-predefined-data
right-interactive-delete
right-interactive-delete-marked-predefined-data
right-interactive-delete-predefined-data
right-interactive-open-external-data-processors
right-interactive-open-external-reports
right-interactive-set-deletion-mark-predefined-data
right-output-to-printer-file-clipboard
right-save-user-data
right-start-automation
right-start-external-connection
right-start-thick-client
right-start-thin-client
right-start-web-client
right-update-database-configuration
right-view-event-log
role-right-has-rls
scheduled-job-periodicity-too-short
statement-type-change
structure-consructor-too-many-keys
structure-consructor-value-type
use-non-recommended-method
variable-value-type

View File

@ -1,5 +1,8 @@
# Проверки Форм 1С # Проверки Форм 1С
- В полях форм со списками выбора следует всегда устанавливать свойство **РежимВыбораИзСписка** в значение Истина. Общее количество проверок: 1
- Путь к данным объекта формы ссылается на существующий объект в каждом сегменте пути
| Код проверки | Наименование |
|--------------|--------------|
| [input-field-list-choice-mode](../../bundles/com.e1c.v8codestyle.form/markdown/ru/input-field-list-choice-mode.md) | В полях форм со списками выбора следует всегда устанавливать свойство **РежимВыбораИзСписка** в значение Истина |

View File

@ -1,12 +1,21 @@
# Проверки метаданных 1С # Проверки метаданных 1С
- Длина имени объекта метаданного должна быть меньше чем 80 Общее количество проверок: 14
- Приложение должно использовать управляемый режим блокировки данных
- Общий модуль имеет некорректный тип | Код проверки | Наименование |
- Глобальный общий модуль должен оканчиваться на суффикс Глобальный |--------------|--------------|
- Клиент-серверный общий модуль должен оканчиваться на суффикс КлиентСервер | [common-module-name-cached](../../bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-cached.md) | Общий модуль с повторно используемыми значениями |
- Клиентский общий модуль должен оканчиваться на суффикс Клиент | [common-module-name-client](../../bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-client.md) | Клиентский общий модуль должен оканчиваться на суффикс Клиент |
- Не заполнено ни представление объекта, ни представление списка | [common-module-name-client-cached](../../bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-client-cached.md) | Клиентский общий модуль с повторно используемыми значениями |
- У предопределенного регламентного задания не должно быть заполнено наименование | [common-module-name-client-server](../../bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-client-server.md) | Клиент-серверный общий модуль должен оканчиваться на суффикс КлиентСервер |
- У стандартного свойства 'Владелец' или 'Родитель' должен быть заполнен синоним | [common-module-name-global](../../bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-global.md) | Глобальный общий модуль должен оканчиваться на суффикс Глобальный |
| [common-module-name-server-call](../../bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-server-call.md) | Общий модуль, для которого предусмотрен вызов сервера |
| [common-module-name-server-call-cached](../../bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-server-call-cached.md) | Общий модуль с повторно используемыми значениями |
| [common-module-type](../../bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-type.md) | Общий модуль имеет некорректный тип |
| [configuration-data-lock-mode](../../bundles/com.e1c.v8codestyle.md/markdown/ru/configuration-data-lock-mode.md) | Режим блокировки данных конфигурации |
| [md-list-object-presentation](../../bundles/com.e1c.v8codestyle.md/markdown/ru/md-list-object-presentation.md) | Не заполнено ни представление объекта, ни представление списка |
| [md-standard-attribure-synonym-empty](../../bundles/com.e1c.v8codestyle.md/markdown/ru/md-standard-attribure-synonym-empty.md) | Не задан синоним стандартного реквизита "Родитель" или "Владелец". |
| [mdo-name-length](../../bundles/com.e1c.v8codestyle.md/markdown/ru/mdo-name-length.md) | Длина имени объекта метаданных |
| [mdo-scheduled-job-description](../../bundles/com.e1c.v8codestyle.md/markdown/ru/mdo-scheduled-job-description.md) | Задано наименование предопределенного регламентного задания |
| [scheduled-job-periodicity-too-short](../../bundles/com.e1c.v8codestyle.md/markdown/ru/scheduled-job-periodicity-too-short.md) | Периодичность выполнения регламентного задания меньше одной минуты. |

View File

@ -1,8 +1,13 @@
# Проверки языка запросов 1С # Проверки языка запросов 1С
- Временная таблица должна содержать индексы
- Ограничение максимальной длины числа в запросе Общее количество проверок: 6
- Строковый литерал должен содержать CamelCase
- Соединение с подзапросом | Код проверки | Наименование |
- Использование конструкции "ДЛЯ ИЗМЕНЕНИЯ" |--------------|--------------|
- Отбор виртуальной таблицы должен быть в параметрах | [ql-camel-case-string-literal](../../bundles/com.e1c.v8codestyle.ql/markdown/ru/ql-camel-case-string-literal.md) | Строковый литерал в запросе содержит не КемелКейс контент |
| [ql-cast-to-max-number](../../bundles/com.e1c.v8codestyle.ql/markdown/ru/ql-cast-to-max-number.md) | Выражение к максимальному числу в запросе |
| [ql-join-to-sub-query](../../bundles/com.e1c.v8codestyle.ql/markdown/ru/ql-join-to-sub-query.md) | Соединение запроса с подзапросом |
| [ql-temp-table-index](../../bundles/com.e1c.v8codestyle.ql/markdown/ru/ql-temp-table-index.md) | Временная таблица должна содержать индексы |
| [ql-using-for-update](../../bundles/com.e1c.v8codestyle.ql/markdown/ru/ql-using-for-update.md) | Запрос содержит конструкцию "ДЛЯ ИЗМЕНЕНИЯ" |
| [ql-virtual-table-filters](../../bundles/com.e1c.v8codestyle.ql/markdown/ru/ql-virtual-table-filters.md) | Отбор виртуальной таблицы должен быть в параметрах |

View File

@ -1,7 +1,8 @@
# Проверки проектов 1С # Проверки проектов 1С
- [Проверки поставляемые 1C:Enterprise Development Tools](edt.md) - [Проверки поставляемые 1C:Enterprise Development Tools](edt.md)
- Проверки 1C:Code Style V8 - Проверки 1C:Code Style V8
- [Общий индекс](check_index.md)
- [Проверки метаданных](md.md) - [Проверки метаданных](md.md)
- [Проверки Форм](form.md) - [Проверки Форм](form.md)
- [Проверки прав ролей](right.md) - [Проверки прав ролей](right.md)

View File

@ -1,24 +1,30 @@
# Проверки прав ролей 1С # Проверки прав ролей 1С
- Право роли содержит текст ограничения доступа (RLS)
- Установлено право "ИнтерактивноеУдаление" Общее количество проверок: 23
- Установлено право "ИнтерактивноеУдалениеПомеченныхПредопределенныхДанных"
- Установлено право "ИнтерактивноеУдалениеПредопределенныхДанных" | Код проверки | Наименование |
- Установлено право "ИнтерактивноеПометкаУдаленияПредопределенныхДанных" |--------------|--------------|
- Установлено право "ИнтерактивноеСнятиеПометкиУдаленияПредопределенныхДанных" | [right-active-users](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-active-users.md) | Право установлено: Активные пользователи |
- Право "Активные пользователи" на корень конфигурации установлено только у стандартной роли | [right-administration](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-administration.md) | Право установлено: Администрирование |
- Право "Администрирование" на корень конфигурации установлено только у стандартной роли | [right-all-functions-mode](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-all-functions-mode.md) | Право установлено: Режим "Все функции" |
- Право "Режим "Все функции"" на корень конфигурации установлено только у стандартной роли | [right-configuration-extensions-administration](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-configuration-extensions-administration.md) | Право установлено: Администрирование расширений конфигурации |
- Право "Администрирование расширений конфигурации" на корень конфигурации установлено только у стандартной роли | [right-data-administration](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-data-administration.md) | Право установлено: Администрирование данных |
- Право "Администрирование данных" на корень конфигурации установлено только у стандартной роли | [right-exclusive-mode](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-exclusive-mode.md) | Право установлено: Монопольный режим |
- Право "Интерактивное открытие внешних обработок" на корень конфигурации установлено только у стандартной роли | [right-interactive-clear-deletion-mark-predefined-data](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-interactive-clear-deletion-mark-predefined-data.md) | Установлено право "ИнтерактивноеСнятиеПометкиУдаленияПредопределенныхДанных" |
- Право "Интерактивное открытие внешних отчетов" на корень конфигурации установлено только у стандартной роли | [right-interactive-delete](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-interactive-delete.md) | Установлено право "ИнтерактивноеУдаление" |
- Право "Вывод" на корень конфигурации установлено только у стандартной роли | [right-interactive-delete-marked-predefined-data](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-interactive-delete-marked-predefined-data.md) | Установлено право "ИнтерактивноеУдалениеПомеченныхПредопределенныхДанных" |
- Право "Сохранение данных пользователя" на корень конфигурации установлено только у стандартной роли | [right-interactive-delete-predefined-data](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-interactive-delete-predefined-data.md) | Установлено право "ИнтерактивноеУдалениеПредопределенныхДанных" |
- Право "Automation" на корень конфигурации установлено только у стандартной роли | [right-interactive-open-external-data-processors](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-interactive-open-external-data-processors.md) | Право установлено: Интерактивное открытие внешних обработок |
- Право "Внешнее соединение" на корень конфигурации установлено только у стандартной роли | [right-interactive-open-external-reports](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-interactive-open-external-reports.md) | Право установлено: Интерактивное открытие внешних отчетов |
- Право "Толстый клиент" на корень конфигурации установлено только у стандартной роли | [right-interactive-set-deletion-mark-predefined-data](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-interactive-set-deletion-mark-predefined-data.md) | Установлено право "ИнтерактивноеПометкаУдаленияПредопределенныхДанных" |
- Право "Тонкий клиент" на корень конфигурации установлено только у стандартной роли | [right-output-to-printer-file-clipboard](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-output-to-printer-file-clipboard.md) | Право установлено: Вывод |
- Право "Веб-клиент" на корень конфигурации установлено только у стандартной роли | [right-save-user-data](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-save-user-data.md) | Право установлено: Сохранение данных пользователя |
- Право "Обновление конфигурации базы данных" на корень конфигурации установлено только у стандартной роли | [right-start-automation](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-start-automation.md) | Право установлено: Automation |
- Право "Журнал регистрации" на корень конфигурации установлено только у стандартной роли | [right-start-external-connection](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-start-external-connection.md) | Право установлено: Внешнее соединение |
| [right-start-thick-client](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-start-thick-client.md) | Право установлено: Толстый клиент |
| [right-start-thin-client](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-start-thin-client.md) | Право установлено: Тонкий клиент |
| [right-start-web-client](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-start-web-client.md) | Право установлено: Веб-клиент |
| [right-update-database-configuration](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-update-database-configuration.md) | Право установлено: Обновление конфигурации базы данных |
| [right-view-event-log](../../bundles/com.e1c.v8codestyle.right/markdown/ru/right-view-event-log.md) | Право установлено: Журнал регистрации |
| [role-right-has-rls](../../bundles/com.e1c.v8codestyle.right/markdown/ru/role-right-has-rls.md) | Право роли содержит текст ограничения доступа (RLS) |

View File

@ -1,3 +1,4 @@
*.html *.html
*.css *.css
*.js *.js
*.xml

View File

@ -21,6 +21,26 @@
file="toc.xml" file="toc.xml"
primary="true"> primary="true">
</toc> </toc>
<toc
file="html/checks/md.xml"
primary="false">
</toc>
<toc
file="html/checks/form.xml"
primary="false">
</toc>
<toc
file="html/checks/bsl.xml"
primary="false">
</toc>
<toc
file="html/checks/ql.xml"
primary="false">
</toc>
<toc
file="html/checks/right.xml"
primary="false">
</toc>
</extension> </extension>
</plugin> </plugin>

View File

@ -34,6 +34,27 @@
<build> <build>
<plugins> <plugins>
<plugin>
<groupId>org.codehaus.gmaven</groupId>
<artifactId>groovy-maven-plugin</artifactId>
<version>2.1.1</version>
<executions>
<execution>
<id>generate-check-lists</id>
<phase>generate-sources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<properties>
<basePath>${project.basedir}</basePath>
<generateHelpContent>true</generateHelpContent>
</properties>
<source>${project.basedir}/src/CheckListGenerator.groovy</source>
</configuration>
</execution>
</executions>
</plugin>
<plugin> <plugin>
<groupId>com.ruleoftech</groupId> <groupId>com.ruleoftech</groupId>
<artifactId>markdown-page-generator-plugin</artifactId> <artifactId>markdown-page-generator-plugin</artifactId>

View File

@ -0,0 +1,310 @@
/*******************************************************************************
* Copyright (C) 2021, 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
*******************************************************************************/
import java.nio.file.Files
import java.nio.file.Path
import java.text.MessageFormat
/** Allows to generate all lists with checks
*
* @author Dmitriy Marmyshev
*
*/
/**
* The description of the check.
*/
class CheckDescription {
String title
String checkId
Path path
String url
}
/**
* Read check description.
*
* @param file the markdown file to get header and file name as check ID
* @return the check description
*/
CheckDescription readCheckDescription(String file) {
def fileReader = new File(file)
println("Read Markdown file: " + fileReader.absolutePath)
def line
def descr = null
fileReader.withReader { r ->
while( ( line = r.readLine() ) != null ) {
if (line.stripLeading().startsWith("# ")) {
def header = line.strip().substring(1).strip()
descr = new CheckDescription();
descr.title = header;
descr.path = fileReader.toPath();
def checkId = fileReader.name;
if(checkId.endsWith(".md"))
checkId = checkId.substring(0, checkId.length() -3)
descr.checkId = checkId;
break;
}
} ;
}
return descr;
}
/**
* Read descriptions in markdown files from directory.
*
* @param dirPath the directory path
* @return the list of check descriptions
*/
List<CheckDescription> readDescriptions(String dirPath) {
def checks = new ArrayList();
def dir = new File(dirPath);
println("Read directory: " + dir.absolutePath)
dir.eachFile { file ->
if(file.exists() && file.name.endsWith(".md")) {
def descr = readCheckDescription(file.absolutePath)
if(descr != null) {
checks.add(descr);
}
}
}
return checks;
}
/**
* Update check list by file path.
*
* @param listFile the list file
* @param checks the check descriptions to update
*/
void updateCheckList(Path listFile, List<CheckDescription> checks, String desciption = "") {
def file = listFile.toFile()
def line
def header = "";
file.withReader { r ->
while( ( line = r.readLine() ) != null ) {
if (line.stripLeading().startsWith("# ")) {
header = line
break;
}
} ;
}
Collections.sort(checks, { o1, o2 -> o1.checkId.compareTo(o2.checkId)})
println("Write file: " + file.absolutePath)
file.withWriter { w ->
w.writeLine(header)
w.writeLine("")
w.writeLine("")
if(!desciption.blank) {
w.write(desciption)
w.writeLine("")
w.writeLine("")
}
w.writeLine("| Код проверки | Наименование |")
w.writeLine("|--------------|--------------|")
checks.each { check ->
def checkIdContent = "[" + check.checkId+ "](" + check.url+ ")"
line = "| " + checkIdContent + " | " + check.title + " |"
w.writeLine(line)
}
}
}
String getCheckStatistic(Map<String, Integer> checkSegments, List<CheckDescription> checks) {
StringBuilder sb = new StringBuilder();
sb.append "Общее количество проверок 1С:Стандарты разработки V8: "
sb.append checks.size()
sb.append System.lineSeparator()
sb.append System.lineSeparator()
checkSegments.each { segment, total ->
sb.append "- "
sb.append segment
sb.append ": "
sb.append total
sb.append System.lineSeparator()
}
sb.append System.lineSeparator()
return sb.toString();
}
void generateToc(List<CheckDescription> checks, String segment, Path tocDir) {
Files.createDirectories(tocDir)
def file = tocDir.resolve(segment + ".xml").toFile();
def begin = "<toc label=\"{0}\" link_to=\"toc.xml#{0}\">"
def end = "</toc>"
def topicTemplate = " <topic href=\"../com.e1c.v8codestyle.{0}/check.descriptions/ru/{1}.html\" label=\"{2}\" />"
Collections.sort(checks, { o1, o2 -> o1.title.compareTo(o2.title)})
file.withWriter { w ->
w.write('''<?xml version="1.0" encoding="UTF-8"?>
<?NLS TYPE="org.eclipse.help.toc"?>
''')
w.writeLine(MessageFormat.format(begin, segment))
checks.each { check ->
def title = check.title
title = title.replace("&", "&amp;")
title = title.replace("\"", "&quot;")
title = title.replace("<", "&lt;")
title = title.replace(">", "&gt;")
title = title.replace("'", "&apos;")
w.writeLine(MessageFormat.format(topicTemplate, segment, check.checkId, title))
}
w.writeLine(end)
}
}
void addExternalLink(List<CheckDescription> checks, Path basePath) {
def webUrlPreffix = "https://github.com/1C-Company/v8-code-style/tree/master/bundles/"
def editPattern ='''
<div style="text-align: right">
<a href="{0}" target="_blank" title="Редактировать описание">
<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z">
</path></svg> Редактировать описание</a></div>
'''
checks.each { check ->
def path = basePath.relativize(check.path)
def url = webUrlPreffix + path.toString()
def editText = MessageFormat.format(editPattern, url)
def file = check.path.toFile()
def lines = file.readLines();
def editTextAdded = false
file.withWriter { w ->
lines.each { line ->
w.writeLine(line)
if(!editTextAdded && line.startsWith("# ")) {
w.writeLine(editText)
editTextAdded = true
}
}
}
}
}
void generateUrls(List<CheckDescription> checks, boolean helpContentLinks, Path basePath, String segment) {
// go upper from /html/checks/check_index.html
def topicTemplate = "../../../com.e1c.v8codestyle.{0}/check.descriptions/ru/{1}.html"
checks.each { check ->
if(helpContentLinks) {
check.url = MessageFormat.format(topicTemplate, segment, check.checkId)
}
else {
def path = basePath.relativize(check.path)
check.url = path.toString()
}
}
}
println "Get base path from script property \"basePath\"..."
def basePath = properties.get("basePath") as String
if(basePath == null || basePath.blank) {
println "Script property \"basePath\" is not set."
}
if((basePath == null || basePath.blank) && this.binding.variables.containsKey("args") && this.args.size() > 0) {
println "Get \"basePath\" from first calling parameter..."
basePath = this.args[0] as String;
}
if(basePath == null || basePath.blank) {
println "Base path is not set. Exit..."
return
}
// allows to copy check descriptions to make local refs in Eclipse help, generate other help content
def generateHelpContent = Boolean.valueOf(properties.get("generateHelpContent") as String)
println "Current base path: " + basePath
println("-----------------------------")
println("Generate check index content")
println("-----------------------------")
// generate check lists for: md, form, module, ql, right
def checksDir = "checks"
def htmlDir = "html"
def listBaseDir = Path.of(basePath, checksDir)
def descrDirPattern = Path.of(basePath, "/../bundles/com.e1c.v8codestyle.{0}/markdown/ru")
def checkIdFile = listBaseDir.resolve("checks_index.txt")
def tocDir = Path.of(basePath, htmlDir, checksDir)
def webUrlRemovePreffix = Path.of(basePath, "/../bundles")
def int basePathSegments = (new File(basePath)).toPath().nameCount
def Map<String, Integer> checkSegments = new HashMap();
checkSegments.put("md", 0)
checkSegments.put("form", 0)
checkSegments.put("bsl", 0)
checkSegments.put("ql", 0)
checkSegments.put("right", 0)
def List<CheckDescription> allChecks = new ArrayList<>();
checkSegments.forEach({ segment, total ->
println("Generate check index for: " + segment + "...")
def dirPath = MessageFormat.format(descrDirPattern.toString(), segment)
def checks = readDescriptions(dirPath);
if(generateHelpContent) {
generateToc(checks, segment, tocDir)
}
generateUrls(checks, generateHelpContent, listBaseDir, segment)
def description = "Общее количество проверок: " + checks.size()
def listFile = listBaseDir.resolve(segment + ".md")
updateCheckList(listFile, checks, description)
allChecks.addAll(checks)
println("Done.")
checkSegments.put(segment, checks.size())
})
println("-----------------------------")
println("Generate all check index...")
def description = getCheckStatistic(checkSegments, allChecks)
def listFile = listBaseDir.resolve("check_index.md")
updateCheckList(listFile, allChecks, description)
println("Done.")
// TODO Adding "Edit content" button should be added to md-files before bundle building
//if(generateHelpContent) {
// println("-----------------------------")
// println("Add external GitHub link...")
// addExternalLink(allChecks, webUrlRemovePreffix)
// println("Done.")
//}
println("-----------------------------")
println("Update all check ID index...")
def List<String> checkIds = new ArrayList<>();
allChecks.each { check ->
checkIds.add(check.checkId)
}
Collections.sort(checkIds)
def file = checkIdFile.toFile()
println("Write file: " + file.absolutePath)
file.withWriter { w ->
checkIds.each { checkId ->
w.writeLine(checkId)
}
}
println("Done.")