1
0
mirror of https://github.com/1C-Company/v8-code-style.git synced 2025-01-09 10:07:29 +02:00

Merge pull request #942 from 1C-Company/feature/build-docs-lists

Автоматическая генерация списков проверок
This commit is contained in:
Dmitriy Marmyshev 2022-02-07 11:42:01 +03:00 committed by GitHub
commit 584b8fd763
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
29 changed files with 699 additions and 142 deletions

View File

@ -5,7 +5,8 @@
## 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>
<footerHtmlFile>${markdown.page.generator.html.file.path}/html/footer.html</footerHtmlFile>
<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>
<inputEncoding>UTF-8</inputEncoding>
<outputEncoding>UTF-8</outputEncoding>
<applyFiltering>true</applyFiltering>
</configuration>
</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.

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>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.groovy.core.groovyNature</nature>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</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С
- Проверка конструктора структуры содержащего больше 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
module-unused-local-variable
module-unused-method
common-module-name-client
common-module-name-client-server
common-module-name-global
common-module-type
configuration-data-lock-mode
md-list-object-presentation
mdo-name-length
input-field-list-choice-mode
empty-except-statement
data-exchange-load
query-in-loop
structure-consructor-too-many-keys
ql-cast-to-max-number
ql-camel-case-string-literal
ql-cast-to-max-number
ql-join-to-sub-query
right-active-users
right-administration
right-all-functions-mode
right-configuration-extensions-administration
right-data-administration
right-exclusive-mode
right-interactive-delete
right-interactive-delete-marked-predefined-data
right-interactive-delete-predefined-data
right-interactive-clear-deletion-mark-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
bsl-canonical-pragma
bsl-nstr-string-literal-format
change-and-validate-instead-of-around
common-module-name-cached
common-module-name-client
common-module-name-client-cached
common-module-name-client-server
common-module-name-global
common-module-name-server-call
common-module-name-server-call-cached
common-module-type
configuration-data-lock-mode
constructor-function-return-section
data-exchange-load
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-field-in-description-suggestion
doc-comment-field-name
doc-comment-field-type
doc-comment-field-type-strict
doc-comment-parameter-in-description-suggestion
doc-comment-parameter-section
doc-comment-procedure-return-section
doc-comment-ref-link
doc-comment-return-section-type
doc-comment-type
doc-comment-use-minus
dynamic-access-method-not-found
empty-except-statement
event-heandler-boolean-param
form-module-missing-pragma
form-module-pragma
function-return-value-type
input-field-list-choice-mode
invocation-form-event-handler
invocation-parameter-type-intersect
isinrole-using
md-list-object-presentation
md-standard-attribure-synonym-empty
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
| Код проверки | Наименование |
|--------------|--------------|
| [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С
- Длина имени объекта метаданного должна быть меньше чем 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С
- Временная таблица должна содержать индексы
- Ограничение максимальной длины числа в запросе
- Строковый литерал должен содержать CamelCase
- Соединение с подзапросом
- Использование конструкции "ДЛЯ ИЗМЕНЕНИЯ"
- Отбор виртуальной таблицы должен быть в параметрах
Общее количество проверок: 6
| Код проверки | Наименование |
|--------------|--------------|
| [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С
- [Проверки поставляемые 1C:Enterprise Development Tools](edt.md)
- Проверки 1C:Code Style V8
- Проверки 1C:Code Style V8
- [Общий индекс](check_index.md)
- [Проверки метаданных](md.md)
- [Проверки Форм](form.md)
- [Проверки прав ролей](right.md)

View File

@ -1,24 +1,30 @@
# Проверки прав ролей 1С
- Право роли содержит текст ограничения доступа (RLS)
- Установлено право "ИнтерактивноеУдаление"
- Установлено право "ИнтерактивноеУдалениеПомеченныхПредопределенныхДанных"
- Установлено право "ИнтерактивноеУдалениеПредопределенныхДанных"
- Установлено право "ИнтерактивноеПометкаУдаленияПредопределенныхДанных"
- Установлено право "ИнтерактивноеСнятиеПометкиУдаленияПредопределенныхДанных"
- Право "Активные пользователи" на корень конфигурации установлено только у стандартной роли
- Право "Администрирование" на корень конфигурации установлено только у стандартной роли
- Право "Режим "Все функции"" на корень конфигурации установлено только у стандартной роли
- Право "Администрирование расширений конфигурации" на корень конфигурации установлено только у стандартной роли
- Право "Администрирование данных" на корень конфигурации установлено только у стандартной роли
- Право "Интерактивное открытие внешних обработок" на корень конфигурации установлено только у стандартной роли
- Право "Интерактивное открытие внешних отчетов" на корень конфигурации установлено только у стандартной роли
- Право "Вывод" на корень конфигурации установлено только у стандартной роли
- Право "Сохранение данных пользователя" на корень конфигурации установлено только у стандартной роли
- Право "Automation" на корень конфигурации установлено только у стандартной роли
- Право "Внешнее соединение" на корень конфигурации установлено только у стандартной роли
- Право "Толстый клиент" на корень конфигурации установлено только у стандартной роли
- Право "Тонкий клиент" на корень конфигурации установлено только у стандартной роли
- Право "Веб-клиент" на корень конфигурации установлено только у стандартной роли
- Право "Обновление конфигурации базы данных" на корень конфигурации установлено только у стандартной роли
- Право "Журнал регистрации" на корень конфигурации установлено только у стандартной роли
Общее количество проверок: 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) | Установлено право "ИнтерактивноеУдалениеПредопределенныхДанных" |
| [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
*.css
*.js
*.xml

View File

@ -21,6 +21,26 @@
file="toc.xml"
primary="true">
</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>
</plugin>

View File

@ -34,6 +34,27 @@
<build>
<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>
<groupId>com.ruleoftech</groupId>
<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.")