mirror of
https://github.com/1C-Company/v8-code-style.git
synced 2024-12-04 11:39:52 +02:00
269 lines
24 KiB
Markdown
269 lines
24 KiB
Markdown
# Участие в проекте 1С:Стандарты разработки V8
|
|
|
|
Вначале, хотим поблагодарить Вас за желание участвовать в проекте!
|
|
|
|
Далее описаны советы, как сделать свое участие наиболее эффективным для проекта и для себя.
|
|
Будьте благоразумны, если что-либо здесь не описано.
|
|
|
|
## У меня есть вопрос
|
|
|
|
1. Для начала убедитесь, что ответа нет в самой 1C:EDT.
|
|
2. Поищите информация в документации проекта
|
|
|
|
**Вопрос есть, но ответа не нашел?** Создай `issue`
|
|
|
|
## Что я должен знать прежде чем начать
|
|
|
|
Изучите текущую функциональность проекта, цели проекта, где находится граница возможностей плагина и 1C:EDT.
|
|
|
|
Вопросы, которые не относятся к разаботке приложений в 1C:EDT по стандартам 1С, следует задавать в профильных сообществах.
|
|
|
|
## Сообщить об ошибке
|
|
|
|
Печально, что ошибка существует, но мы благодарны, что вы о ней нам сообщите!
|
|
|
|
#### Прежде чем зарегистрировать ошибку
|
|
|
|
* Проверьте [Docs](https://github.com/1C-Company/v8-code-style/docs/) на наличие описания, что не является ошибкой
|
|
* Проверьте раздел [Issues](https://github.com/1C-Company/v8-code-style/issues), чтобы не создавать дубликатов
|
|
|
|
#### Как сообщить об ошибке эффективно
|
|
|
|
Следуйте простым правилам:
|
|
|
|
1. Задайте понятный заголовок `issue`, лаконично и исчерпывающе определяющий проблему
|
|
* постарайтесь не допускать двойного смысла, сленга из других областей и т.д.
|
|
* Не используйте "метки" в заголовке - для этого используются метки (labels) на гитхабе
|
|
2. Опишите сценарий воспроизведения ошибки.
|
|
* скриншоты очень сильно помогают, но не заменяют сценарий
|
|
* добавьте логи ЖР, из лог-файлов (убедитесь, что они не содержат приватной информации)
|
|
3. Опишите, что есть ошибка по вашему мнению и почему
|
|
4. Опишите ожидаемое поведение
|
|
|
|
|
|
## Предложите улучшение функциональности
|
|
|
|
1. Задайте понятный заголовок `issue`, лаконично и исчерпывающе определяющий новую функциональность
|
|
2. Опишите суть улучшений и обсудите в issue варианты реализации.
|
|
3. Убедитесь совместно с авторами проекта, что ваше предложение не противоречит идеологии Стандартов 1С и 1C:EDT. При этом авторы проекта всегда рады обсуждению новых идей, всегда на стороне участников, предлагающих улучшения, но при этом постараются максимально разъяснить случаи отказа в принятии идеи/реквеста, если таковые возникнут.
|
|
4. Реализуйте Ваше улучшение функциональности проекта в отдельном форке и предложите его через [Pull/merge request](#Pull-Requests-Merge-Requests)
|
|
|
|
## Доработка кода
|
|
|
|
### Написание проверок
|
|
|
|
См. [Соглашение при создании проверок](Check_Convention.md)
|
|
|
|
### Исправление ошибок
|
|
|
|
* Создайте `issue` в проекте с описанием ошибки. Убедитесь, что владельцы проекта так же считают текущее поведение ошибочным.
|
|
* Создайте ветку в своем **форке** с именем `bugfix/issue-<Номер issue>-доп-название`
|
|
* Создайте **pull-request** из своей ветки в ветку **`master`** проекта v8-code-style
|
|
* Убедитесь, что модификация кода действительно исправляет ошибку, описанную в issue, и не привносит новую функциональность - новую функциональность следует делать отдельным issue и pull-request'ом.
|
|
* Следуйте общим правилам [Pull/merge request](#Pull-Requests-Merge-Requests)
|
|
|
|
### Pull Requests (Merge Requests)
|
|
|
|
* Создайте `issue` в проекте с описанием новой функциональности, желательно перед началом работы, чтобы исключить параллельную работу разных людей над одной задачей
|
|
* Создайте ветку в своем **форке** с именем `feature/issue-<Номер issue>-доп-название`
|
|
* Внесите изменения в конфигурацию или расширение
|
|
* Создайте **pull-request** из своей ветки в ветку **`master`** проекта v8-code-style
|
|
* Укажите ссылку на issue, которую закрывает данный pull-request
|
|
* Установите в своем PR флажок "allow edits from maintainers"
|
|
|
|
### Правила оформления коммитов
|
|
|
|
Правила необходимы для предотвращения написания бессмысленных заголовков, мешающих пониманию ситуации на проекте. Хорошие оформленные коммиты помогают значительно облегчить процесс выяснения причин внесенных в код изменений, анализируя историю коммитов. Так же это необходимо для стилистического единообразия сообщений коммитов в репозитории.
|
|
|
|
#### Тексты сообщений коммитов
|
|
|
|
При написании сообщения коммита следует использовать формат:
|
|
|
|
```
|
|
#<НОМЕР ЗАДАЧИ> Короткое сообщение что сделано
|
|
|
|
Длинное сообщение что сделано
|
|
```
|
|
|
|
1. Начинаем с номера задачи (например, #12311). Идентификатор необходим для интеграции с задачами GitHub
|
|
2. В качестве разделителя между номером задачи и заголовком коммита используем пробел.
|
|
3. Далее идет заголовок коммита:
|
|
- Пишем на русском языке.
|
|
- Заголовок с большой буквы.
|
|
- В конце заголовка точку не ставим.
|
|
- Желательно использовать настоящее время, а не прошедшее (например, "Исправление ошибок запуска при указанной web ИБ").
|
|
- Рекомендуем писать не слишком длинный заголовок, так как его отображение во многих интерфейсах выполнено в одну строку без переносов, так что, он может не влезть. Подробные детали пишем отдельным параграфом в описании коммита.
|
|
4. Описание коммита (опционально).
|
|
- Отделяем от заголовка пустой строкой.
|
|
- Пишем полноценные предложения (начинаем с большой буквы, заканчиваем точкой)
|
|
- Хорошей практикой является ограничение длины строк в сообщении ≈72 символами, с добавлением переносов, если не влезает. Многие UI инструменты для GIT (в том числе EGit) не делают переносы текста описания, если он не влез.
|
|
|
|
Контент сообщения коммита:
|
|
|
|
В сообщении коммита пишем "что" и "почему" сделано, но избегаем деталей "как" сделано. Назначение комментария - дать коллегам понять, что происходит в проекте.
|
|
|
|
1. Заголовок должен быть ёмкий и информативный.
|
|
2. Заголовок должен быть написан официальным языком, без разговорных оборотов.
|
|
3. Чтобы определить достаточность детализации заголовка коммита, попробуйте ответить на вопрос, не заглядывая в код:
|
|
- `[Bug]` Какая конкретно проблема здесь исправлена?
|
|
- `[Feature]` Какая функциональность здесь добавлена?
|
|
- `[Refactoring]` В каких компонентах/классах произведен рефакторинг?
|
|
- `[Tests]` Что они тестируют?
|
|
- `[Baseline]` В каком компоненте/плагине/пакете подняли версию/версии?
|
|
- `[Документация]` В каком компоненте добавлена документация?
|
|
- `[Исправление замечаний]` Какие именно проблемы вы исправили?
|
|
4. Зачем писать сообщение коммита?
|
|
- Когда сделанные изменения неочевидны коллегам, то, помимо комментария в самом коде, не будет лишним описать детальнее, зачем эти изменения были сделаны или, почему сделаны именно так, а не иначе.
|
|
- При исправлении сложных багов можно воспользоваться методологией [Root_cause_analysis](https://en.wikipedia.org/wiki/Root_cause_analysis), и указать причину ошибочного поведения, а так же, каким образом это исправили. Человек (или даже вы сами), который через пару лет наткнется на неочевидное изменение, скажет вам спасибо.
|
|
|
|
#### Количество коммитов
|
|
|
|
Стоит ли делать один коммит на фичу - зависит от фичи. Коммит - логически завершенное изменение, а сложная фича может содержать много таких изменений, слияние которых в один коммит, приводит к потере информации о деталях ее выполнения. Это касается не только фич.
|
|
|
|
Squash'ить коммиты стоит, если были сделаны лишнее изменения, которые в следующих коммитах отменили. Так же, стоит избегать коммитов вида "Поднятие версий", которые не являются самостоятельными (вызваны другими изменениями, без них билд проекта не будет выполнен).
|
|
|
|
### Лицензия
|
|
|
|
Лицензирование расширений, размещенных в данном проекте, осуществляется на условиях свободной (открытой) лицензии Eclipse Public License - v 2.0 (полный текст лицензии - https://www.eclipse.org/legal/epl-2.0/)
|
|
|
|
Это означает, что:
|
|
- Вы можете свободно и бесплатно заимствовать код и помещать его в свои проекты, учитывая однако, что такой код не становится вашей интеллектуальной собственностью, Вы лишь получаете неисключительные права его использования с учетом рамок и ограничений, описанных в EPL 2.0
|
|
- Внося изменения в расширение, модифицируя и дорабатывая его, а также объединяя файлы расширения с иными материалами, не относящимися к расширению (далее по тексту как «результаты работ»), Вы также обязаны публиковать это обновленный код на условиях EPL 2.0, т.е. автоматически предоставляете любым третьим лицам, включая ООО «1С-Софт» и иных контрибьюторов, безвозмездное право использования результатов Ваших работ на территории стран всего мира на условиях открытой лицензии EPL 2.0.
|
|
|
|
Загружая свои разработки, доработки и исправления к программам других авторов Вы также подтверждаете, что:
|
|
- являетесь единственным автором и обладателем имущественного права на результаты работ; в случае, если обладателем имущественного права на результаты работ является Ваш работодатель, Вы гарантируете наличие его согласия на публикацию кода на условиях открытой лицензии EPL 2.0;
|
|
- Вы снабдили результаты Ваших работ всеми необходимыми уведомлениями, свидетельствующими о том, что они подчиняются открытой лицензии EPL 2.0;
|
|
- Результаты Ваших работ доступны в виде исходного кода, или Вы обязуетесь сообщить, каким образом третьи лица без существенных затрат могут получить результаты Ваших работ в виде исходного кода;
|
|
- Bсе имеющиеся ранее уведомления других авторов (license notices) не были Вами удалены или изменены, а указанные Вами уведомления отражают достоверную информацию о Вас как правообладателе Вашего оригинального кода (включая ФИО или наименование организации-работодателя)
|
|
|
|
|
|
Пояснения выше приведены исключительно для удобства восприятия основных положений лицензии EPL 2.0. и не заменяет содержание понятий, приведенных по тексту лицензионного соглашения. Для более детального понимания Ваших прав и обязанностей рекомендуем ознакомиться с полным текстом открытой лицензии EPL 2.0.
|
|
|
|
Все файлы проекта, подлежащие лицензированию, должны иметь заголовок.
|
|
|
|
```java
|
|
/*******************************************************************************
|
|
* 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
|
|
*******************************************************************************/
|
|
```
|
|
|
|
##### Использование Eclipse Releng Tools для установки лицензии
|
|
|
|
Установите дополнительный инструмент `Eclipse Releng Tools` из репозитория для соответствующей версии Eclipse JDK, например: [The Eclipse Project Updates - http://download.eclipse.org/eclipse/updates/4.16](http://download.eclipse.org/eclipse/updates/4.16)
|
|
|
|
Добавьте в настройки согласно инструкции:
|
|
|
|
https://wiki.eclipse.org/Development_Resources/How_to_Use_Eclipse_Copyright_Tool
|
|
|
|
текст копирайта:
|
|
|
|
```
|
|
Copyright (C) ${date}, 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
|
|
```
|
|
|
|
Если вы не являетесь сотрудником фирмы 1С - допишите актуальную информацию в секцию `Contributors:`
|
|
|
|
Для всех новых или измененных файлов - выполняйте обновление копирайта: ПКМ по файлу - "Fix Copyrights".
|
|
|
|
|
|
### Язык проекта
|
|
|
|
Исходный код должен быть написан на Английском языке. Английский язык - является языком по умолчанию.
|
|
Не допускается использование транслита или иных не английских слов и терминов.
|
|
В случае, если вы затрудняетесь в выборе подходящего термина на английском - обратитесь за помощью в issue по вашей функциональности к владельцам проекта - мы всегда поможем!
|
|
|
|
Язык ведения проекта (issue, аудит и т.д.) - Русский, т.к. ориентация на русское сообщество программистов.
|
|
Поддержка разработчиков на других языка в будущем может быть решена дополнительно.
|
|
|
|
Все интерфейсные тексты, которые видит пользователь, должны быть написаны на английском яызке и локализированы - вынесены в отдельные ресурсные файлы `*.properties`.
|
|
|
|
Кодировка файлов `*.properties` - UTF-8.
|
|
|
|
Все локализируемые ресурсные файлы должны быть переведены на дополнительный русский язык.
|
|
|
|
Например:
|
|
|
|
- `messages.properties` - основной интерфейс, должен содержать английский интерфейс
|
|
- `messages_ru.properties` - дополнительный интерфейс на русском языке
|
|
|
|
В проекте используется система локализации **Eclipse NLS**:
|
|
|
|
- Необходимо создавать final-класс наследник `org.eclipse.osgi.util.NLS`
|
|
- В классе указывается консанта `BUNDLE_NAME` с полным квалификтором файла `messages` в котором хранятся локализованные сообщения.
|
|
- Создаются публичные константы, которые являются ключами в ресурсных файлах
|
|
|
|
```java
|
|
final class Messages
|
|
extends NLS
|
|
{
|
|
private static final String BUNDLE_NAME = "com.e1c.v8codestyle.md.check.messages"; //$NON-NLS-1$
|
|
public static String CommonModuleNameClient_description;
|
|
public static String CommonModuleNameClient_message;
|
|
static
|
|
{
|
|
// initialize resource bundle
|
|
NLS.initializeMessages(BUNDLE_NAME, Messages.class);
|
|
}
|
|
|
|
private Messages()
|
|
{
|
|
}
|
|
}
|
|
```
|
|
|
|
Для большего удобства используйте помощник Eclipse Externalize Strings Wizard, который помогает переносить интерфейсные строки из кода в ресурсные файлы, с автоматическим созданием файла констант NLS.
|
|
|
|
Для редактирования ресурсных файлов следует использовать плагин из Маркет-плайса Eclipse: [ResourceBundle Editor](https://marketplace.eclipse.org/node/2628188) или аналогичны, позволяющий синхронно редактировать интерфейсы на нескольких языках, корректно учитывающий кодировку UTF-8.
|
|
|
|
### Code Style
|
|
|
|
Необходимо использовать `1C:EDT Code style` из поставки JDT для разработки плагинов 1C:EDT из программы установки и запуска 1C:EDT Start.
|
|
|
|
|
|
### Документация не опциональна
|
|
|
|
При добавлении новой функциональности или изменении существующей - необходимо актуализировать [документацию](/docs).
|
|
|
|
### Тесты не опциональны
|
|
|
|
Для каждой функциональности необходимо писать JUnit 4 тесты.
|
|
|
|
Тесты должны включать в себя все варианты правильного и неправильного поведения системы, начальных условий.
|
|
|
|
Не следует тестировать поведение 1C:EDT, но только лишь поведение кода текущего проекта.
|
|
|
|
### Версионирование проекта
|
|
|
|
В проекте используется семантическое версионирование [https://semver.org/lang/ru/](https://semver.org/lang/ru/)
|
|
|
|
Текущая версия проекта "0" (еще нет "мажорного релиза"), это позволяет нам делать любые несовместимые изменения в каждой новой минорной версии.
|
|
Это так же связано с тем, что многие части API в таргет-платформе 1C:EDT еще не стабилизированы и часто меняются.
|
|
|
|
При этом, каждая минорная версия до первой мажорной - является полноценным релизом, готовым к использованию в проде.
|
|
|
|
|
|
Дополнительно следует изучить про версионирование в Eclipse:
|
|
|
|
|
|
[https://wiki.eclipse.org/Version_Numbering](https://wiki.eclipse.org/Version_Numbering)
|
|
|
|
[https://wiki.eclipse.org/Platform-releng/Incrementing_Version_Numbers](https://wiki.eclipse.org/Platform-releng/Incrementing_Version_Numbers)
|