Користувальницькькі налаштування

Налаштування сайту


codingguidelines

Розбіжності

Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.

Посилання на цей список змін

Порівняння попередніх версій Попередня ревізія
Наступна ревізія
Попередня ревізія
codingguidelines [2023/06/17 13:30]
nightfly [Навіщо це?]
codingguidelines [2024/01/26 18:39] (поточний)
nightfly [Базові конструкції мови та форматування]
Рядок 20: Рядок 20:
   * Оптимізованість   * Оптимізованість
  
-Для стислості будемо називати його **П.І.З.Д.А.Т.О.**.+Для стислості будемо називати його **П.І.З.Д.А.Т.О.**, що характеризуватиме те, як він повинен би виглядати.
  
 ===== Error reporting ===== ===== Error reporting =====
Рядок 29: Рядок 29:
  
 <file ini php.ini> <file ini php.ini>
-post_max_size 64M +magic_quotes_gpc Off  
-upload_max_filesize 64M+magic_quotes_runtime Off  
 +magic_quotes_sybase = Off  
 +date.timezone="Europe/Kiev"
  
 display_errors = On display_errors = On
Рядок 37: Рядок 39:
 log_errors_max_len = 1024 log_errors_max_len = 1024
 report_memleaks = On report_memleaks = On
-track_errors = On 
 html_errors = On html_errors = On
-ліміт_пам'яті 256M+memory_limit 512M 
 +max_input_vars = 50000 
 + 
 +post_max_size = 64M 
 +upload_max_filesize = 64M
 </file> </file>
  
Рядок 45: Рядок 50:
 Щодо memory_limit, для нових установок він за замовчуванням 512M, для старих, до 2018 року - 256M. Якщо ваш модуль і механіки, які ви реалізовуєте, вимагають значно більше пам'яті на базах від 10k абонентів - варто прямо згадати вимогу відкручувати для них memory_limit у документації, а також конкретні передумови для цього.  Щодо memory_limit, для нових установок він за замовчуванням 512M, для старих, до 2018 року - 256M. Якщо ваш модуль і механіки, які ви реалізовуєте, вимагають значно більше пам'яті на базах від 10k абонентів - варто прямо згадати вимогу відкручувати для них memory_limit у документації, а також конкретні передумови для цього. 
  
-Також ваш код має працювати з **error_reporting(E_ALL)**. Якщо з якихось причин він вимагає //error_reporting(0)// - отже, з вами і вашим кодом щось не так, можете його заховати і нікому не показувати. Нехай помре на самоті разом з вашими амбіціями.+Також ваш код має працювати з **error_reporting(E_ALL)**. Якщо з якихось причин він вимагає //error_reporting(0)// - отже, з вами і вашим кодом щось не так. Можете його заховати і нікому не показувати. Нехай помре на самотіразом з вашими амбіціями.
  
  
Рядок 56: Рядок 61:
 ==== PHP-теги ==== ==== PHP-теги ====
  
-PHP-код обов'язково слід поміщати в повну версію (<?php ?>) тегів або скорочену (скорочений запис echo) версію (<?= ?>) тегів і неприпустимо поміщати в жодні інші різновиди тегів типу (типу <%).+PHP-код обов'язково слід розміщувати в повній версії (<?php ?>) тегів або в скороченій (скорочений запис echo) версію (<?= ?>) тегів і неприпустимо поміщати в жодні інші різновиди тегів типу (типу <%).
  
  
Рядок 83: Рядок 88:
 Щодо скорочених AND (&&) OR (||) все залишається на вашій совісті, але загалом економія одного байта у випадку AND та економія нуля байт у випадку OR може не коштувати погіршення читабельності та самоочевидності вашого коду.  Щодо скорочених AND (&&) OR (||) все залишається на вашій совісті, але загалом економія одного байта у випадку AND та економія нуля байт у випадку OR може не коштувати погіршення читабельності та самоочевидності вашого коду. 
  
-На тему табів, відступів та іншого - більшість розробників використовує IDE NetBeans і рефлекторно натискає **Alt+Shift+F** для автоматичного форматування коду.+На тему табів, відступів та іншого - більшість розробників використовує IDE NetBeans та Visual Studio Code і рефлекторно натискає **Alt+Shift+F** для автоматичного форматування коду.
  
-==== Іменування змінних і констант ====+==== Іменування змінних та констант ====
  
 +Постарайтеся, щоб оголошені вами змінні своїм виглядом показували, що вони таке і навіщо вони потрібні, а в ідеалі символізували, що всередині них повинно знаходитися. Допустимими є lowerCamelCase і snake_case. Найкращим - lowerCamelCase. Постарайтесь також уникнути ubogogo_translitu, ischeBilshUbogogoTranslitu та стилю "ЧмАфКи ФсЄм КтО в еТОМ чАті". Для констант можете використовувати КАПС або ЗМІЇНИЙ_КАПС.
  
-Постарайтеся, щоб оголошені вами змінні своїм виглядом показували, що вони таке і навіщо вони потрібні, а в ідеалі символізували, що всередині них повинно знаходитися. Допустимими є lowerCamelCase і snake_case. Найкращим - lowerCamelCase. Постарайтеся також уникнути ubogogo_translita, escheBoleeUbogogoTranslita і стилю "ЧмАфКи ФсЕм КтО в еТОМ чАті". Для констант можете використовувати КАПС або ЗМЕЇНИЙ_КАПС.+Приклади **гарного іменування змінних**:
  
-Приклади гарного іменування змінних: 
 <code php> <code php>
-$allCities = array(); // очевидно, що тут має бути масив із містами +$allCities = array(); // очевидно, що тут має бути масив із всіма містами 
-$allUserData = zb_UserGetAllDataCache(); // ухти, це масив із кешованими даними користувачів+ 
 +$allUserData = zb_UserGetAllDataCache(); // ухти, це масив із кешованими даними усіх користувачів 
 $totalUsers = 666; // дуже схоже на лічильник якихось користувачів, правда? $totalUsers = 666; // дуже схоже на лічильник якихось користувачів, правда?
 +
 $switchesCount = 12; // лічильник світчів, спробуй не здогадатися $switchesCount = 12; // лічильник світчів, спробуй не здогадатися
-$result = 'some string here'; // так, зрозуміло що це результат чогось, що потім буде кудись повернуто.+ 
 +$filteredDevices=array(); // а це, як ви і подумали, масив з якимись відфільтрованими пристроями 
 + 
 +$result = 'some string here'; // так, зрозуміло що це результат чогось, що потім буде кудись повернуто чи відображено
 </code> </code>
  
-І ось у якому вигляді категорично не хочеться бачити роботу зі змінними та їх іменуванням:+І ось у якому вигляді **категорично не хочеться бачити** роботу зі змінними та їх іменуванням: 
 <code php> <code php>
 $a=$b+$c; $a=$b+$c;
 +
 $huitka=132/4; $huitka=132/4;
 +
 $LOLIMHERE=SOMESHIT666(); $LOLIMHERE=SOMESHIT666();
 +
 $f_ar_type_data=12; $f_ar_type_data=12;
 +
 $obj1=$obj2; $obj1=$obj2;
 </code> </code>
Рядок 111: Рядок 127:
  
 <code php> <code php>
-$i = 0; // стандартний інкрементний або декрементний лічильник+$i = 0; // стандартний інкрементний або декрементний лічильник, ну там для $i++, наприклад.
 $total = 0; // загальний лічильник чогось що ми рахували раніше $total = 0; // загальний лічильник чогось що ми рахували раніше
 $count = 0; // приблизно те ж саме за духом $count = 0; // приблизно те ж саме за духом
 $all = array(); // масив з якимось набором даних, який ми будемо потім перебирати $all = array(); // масив з якимось набором даних, який ми будемо потім перебирати
 +
 // Конструкції виду $io => $each є для нас надтиповими на проходах масивів // Конструкції виду $io => $each є для нас надтиповими на проходах масивів
 foreach ($all as $io => $each) { foreach ($all as $io => $each) {
Рядок 139: Рядок 156:
     public function __construct() {     public function __construct() {
         $this->loadData();         $this->loadData();
-    } 
- 
-    public function renderList() { 
-        ..... 
     }     }
  
Рядок 149: Рядок 162:
     }     }
          
 +    public function renderList() {
 +        .....
 +    }
 +   
     protected function save() {     protected function save() {
         .....         .....
Рядок 169: Рядок 186:
  
 Приклад: Приклад:
 +
 <code php> <code php>
 // так, відноситься до роботи з "адресами", і робить "змінити" чого? Правильно - "імені міста" // так, відноситься до роботи з "адресами", і робить "змінити" чого? Правильно - "імені міста"
 +
 function zb_AddressChangeCityName($cityid, $cityname) { function zb_AddressChangeCityName($cityid, $cityname) {
 ... ...
Рядок 216: Рядок 235:
 </code>     </code>    
  
-Область видимості (protected/public/private) має бути явно вказана для кожного методу. Теж саме відноситься і до іменування властивостей всередині класу.+Область видимості (protected/public/private) має бути явно вказана для кожного методу. Теж саме відноситься і до іменування властивостей всередині класу. Утримайтесь від шаблону проектування "Паблік Морозов".
  
 ==== Іменування аргументів методів і функцій ==== ==== Іменування аргументів методів і функцій ====
  
-див. "Іменування змінних".+див. [[codingguidelines#іменування_змінних_і_констант|Іменування змінних]].
  
 ==== Іменування опцій у конфігах ==== ==== Іменування опцій у конфігах ====
-Просто зазирніть у файли конфігурації типу [[alteriniconf|alter.ini]] і усвідомте, що все просто. Імена опцій регістро-залежні, тому КАПСОМ, можливо ЗМЕЇНИМ_КАПСОМ або ЗЛИТНИМКАПСОМ. Для булевих значень типу "вкл/викл" рекомендується використовувати 1/0 відповідно. Рядкові значення беруться в лапки.+ 
 +Просто зазирніть у файли конфігурації типу [[alteriniconf|alter.ini]] і усвідомте, що все просто. Імена опцій регістро-залежні, тому КАПСОМ, можливо ЗМІЇНИМ_КАПСОМ або ЗЛИТНИМКАПСОМ. Для булевих значень типу "вкл/викл" рекомендується використовувати 1/0 відповідно. Рядкові значення беруться в лапки.
  
 Приклад того, як це має виглядати: Приклад того, як це має виглядати:
Рядок 235: Рядок 255:
  
 ==== Збереження Legacy ==== ==== Збереження Legacy ====
-**Щодо збереження легасі на рівні передбачуваності поведінки системи**: якщо ви робите функціонал, який змінює поведінку системи за замовчуванням, пам'ятайте, що робите ви його передусім не для себе, а для купи мереж, які сподіваються, що після оновлення поведінка їхньої системи буде передбачуваною та звичною, а дівчатка-касирки не почнуть писати заяви про звільнення паралельно з системними адміністраторами, які викидаються з вікон. Якщо для реалізації запланованого вами функціоналу потрібно змінити поведінку системи, цей функціонал потрібно вимкнути за допомогою файлів конфігурації та відключити за замовчуванням. Погодьтеся, ви не будете втішені тим, що після оновлення під час спроби потрапити до профілю користувача, ви замість нього побачите фотку цицьок, нехай навіть дуже красивих. Кожного разу, коли вам хочеться зробити "для всіх" щось, що здається вам дуже крутим, подивіться для [[http://stats.ubilling.net.ua/graph/|скількох]] мереж ви хочете зробити життя "веселішим" і адекватно оцініть шанси на потрапляння цього в мейнстрім. 
  
-**З приводу збереження легасі на рівні коду**: на даний момент, ми змушені підтримувати працездатність Ubilling від PHP 5.3 до PHP 7.4 (так, це можливо і не складно), через велику кількість старих установок, які міняти ніхто не буде, так як вони успішно працюють роками. Тому утримайтеся як від використання нового синтаксису масивів із квадратними брекетами у вигляді +**Щодо збереження легасі на рівні передбачуваності поведінки системи**: якщо ви робите функціонал, який змінює поведінку системи за замовчуванням, пам'ятайте, що робите ви його передусім не для себе, а для купи мереж, які сподіваються, що після оновлення поведінка їхньої системи буде передбачуваною та звичною, а дівчатка-касирки не почнуть писати заяви про звільнення паралельно з системними адміністраторами, які викидаються з вікон. Якщо для реалізації запланованого вами функціоналу потрібно змінити поведінку системи, цей функціонал потрібно вимкнути за допомогою файлів конфігурації та відключити за замовчуванням. Погодьтеся, ви не будете радіти тому, що після оновлення під час спроби потрапити до профілю користувача, ви замість нього побачите фотку цицьок, нехай навіть дуже гарних. Кожного разу, коли вам хочеться зробити "для всіх" щось, що здається вам дуже крутим, подивіться для [[http://stats.ubilling.net.ua/graph/|скількох]] мереж ви хочете зробити життя "веселішим" і адекватно оцініть шанси на потрапляння цього в мейнстрім. 
 + 
 +**З приводу збереження легасі на рівні коду**: на даний момент, ми змушені підтримувати працездатність Ubilling від PHP 5.3 до PHP 7.4 та PHP 8.2 з PHP 8.3 (так, це можливо і зовсім не складно), через велику кількість старих установок, які міняти та перевстановлювати на проді, ніхто не буде, так як вони успішно працюють роками. Тому утримайтеся як від використання нового синтаксису масивів із квадратними брекетами у вигляді 
  
 <code php> <code php>
Рядок 247: Рядок 268:
  
 І використовуйте старий і загалом зручний формат оголошення масивів у вигляді І використовуйте старий і загалом зручний формат оголошення масивів у вигляді
 +
 <code php> <code php>
 $userStates = array( $userStates = array(
Рядок 254: Рядок 276:
 </code> </code>
  
-Ні, це не стосується використання автоінкрементних квадратних дужок у масивах, воно працює нормально:+Ні, це не стосується використання автоінкрементних квадратних дужок при заповненні даних у масивах, воно працює нормально де завгодно: 
 <code php> <code php>
 $data[] = $userLink; $data[] = $userLink;
Рядок 263: Рядок 286:
 Також не використовуйте функціонал, який давно deprecated і помре з дня на день, такого плану, як скажімо ereg_replace.  Також не використовуйте функціонал, який давно deprecated і помре з дня на день, такого плану, як скажімо ereg_replace. 
  
-У разі, якщо вам потрібно змінити наявний код, що вже працює, переконайтеся, що його поведінка радикально не зміниться. Якщо вам потрібно додати якісь параметри до функції або методу - додавайте їх наприкінці оголошення функції, за можливістю вказуйте дефолтні значення, і переконайтеся, що з ними функція залишиться працездатною і збереже свою попередню поведінку. Якщо з якихось причин це неможливо, ви **зобов'язані переглянути всі** місця, де використовується ця функція або метод, доповнити їх передачею правильних параметрів, і переконатися в адекватному функціонуванні всіх цих місць. +У разі, якщо вам потрібно змінити наявний код, що вже працює, переконайтесь, що його поведінка радикально не зміниться. Якщо вам потрібно додати якісь параметри до функції або методу - додавайте їх наприкінці оголошення функції, за можливістю вказуйте дефолтні значення, і переконайтеся, що з ними чи без них, функція залишиться працездатною і збереже свою попередню поведінку. Якщо з якихось причин це неможливо, ви **зобов'язані переглянути всі** місця, де використовується ця функція або метод, доповнити їх передачею правильних параметрів, і переконатися в адекватному функціонуванні всіх цих місць. 
  
 Якщо ви пишете щось поруч з існуючим кодом, що в основному повторює його функціональність, але несе підтримку іншого функціоналу, постарайтеся слідувати ідеології та стилю оригіналу. Цілком можливо, що хтось за вами буде це лагодити і допилювати. Не потрібно викликати в нього когнітивний дисонанс. Якщо ви пишете щось поруч з існуючим кодом, що в основному повторює його функціональність, але несе підтримку іншого функціоналу, постарайтеся слідувати ідеології та стилю оригіналу. Цілком можливо, що хтось за вами буде це лагодити і допилювати. Не потрібно викликати в нього когнітивний дисонанс.
Рядок 269: Рядок 292:
 ==== Коментування коду ==== ==== Коментування коду ====
  
-Коментування функцій і методів - **суворо обов'язкове**. Коментування змінних і констант у класах - рекомендоване. Також якщо вам не вдалося уникнути неочевидних місць у коді, коментування цих місць також рекомендується. Формат коментарів, PHPDoc сумісний для методів і функцій, або однорядковий для маленьких коментарів усередині коду. Мова коментарів - базова англійська. Шекспір відпочиває. У крайньому разі скористайтеся Google translate. Виглядати це має таким чино:+Коментування всіх функцій і методів - **суворо обов'язкове**. Коментування змінних і констант у класах - рекомендоване. Також якщо вам не вдалося уникнути неочевидних місць у коді, коментування цих місць також рекомендується. Формат коментарів, PHPDoc-сумісний для методів і функцій, або однорядковийдля маленьких коментарів усередині коду. Мова коментарів - базова англійська. Шекспір відпочиває. У крайньому разі скористайтеся Google translate. Виглядати це має таким чином:
  
 <code php> <code php>
 +
 +/**
 + * Implementation of funeral services with graves management
 + */
 +
 class UbillingFuneralServices { class UbillingFuneralServices {
  
Рядок 396: Рядок 424:
  
 ==== Локалізація ==== ==== Локалізація ====
-З огляду на те, що Ubilling використовується на території різних країн, де використовуються різні мови, подбайте про те, щоб ваш код можна було легко локалізувати. Тобто під час виведення будь-яких написів, використовуйте штатну i18n функцію __('English string here'). Детальніше про те, як працює локалізація, ви можете дізнатися в базовому посібнику з [[development|розробки модулів]]. Як мінімум від вас очікується написання рядків, що підлягають локалізації, англійською з бажаним самостійним перекладом українською та кацапською або вашою нативною мовою.+ 
 +З огляду на те, що Ubilling використовується на території різних країн, де використовуються різні мови, подбайте про те, щоб ваш код можна було легко локалізувати. Тобто під час виведення будь-яких написів, використовуйте штатну i18n функцію __('String in English here'). Детальніше про те, як працює локалізація, ви можете дізнатися в базовому посібнику з [[development|розробки модулів]]. Як мінімум від вас очікується написання рядків, що підлягають локалізації, англійською з бажаним самостійним перекладом українською та вашою нативною мовою.
  
 ==== Логування ==== ==== Логування ====
-Під час запису подій у загальний системний лог, за допомогою log_register() або будь-якими іншими способами, постарайтеся дотримуватися таких угод, у тексті запису: 
  
 +Під час запису подій у загальний системний лог, за допомогою log_register() або будь-якими іншими способами, постарайтеся дотримуватися таких домовленостей, у тексті запису:
  
   * (логін користувача)   * (логін користувача)
   * {логін адміністратора}   * {логін адміністратора}
-  * <nowiki>((ID користувача УКХ))</nowiki>+  * <nowiki>((ID користувача УКВ))</nowiki>
   * [цифровий ID чого-небудь]   * [цифровий ID чого-небудь]
-  * `якесь строкове значення`+  * `якесь рядкове значення`
  
 Хороший приклад: Хороший приклад:
Рядок 422: Рядок 451:
  
 ==== Документування змін ==== ==== Документування змін ====
-Якщо у вас є доступ до редагування цієї wiki - документуйте зміни внесені вами. Як мінімум варто додати відомості про те, що ви щось зробили в [[changelog|Чейнджлог]]. Кінцеві користувачі повинні знати, як змінитися їхнє життя в майбутньому. Зміни, які не видимі кінцевому користувачеві і ніяк не впливають на його життя, в принципі, можна не описувати, хоча теж можна у вигляді "проведено рефакторинг/чистка/оптимізація коду". Намагайтеся зробити це коротко і зрозуміло, бажано в один рядок. Хорошими прикладами можуть бути такі описи зроблених вами змін:+Якщо у вас є доступ до редагування цієї wiki - документуйте зміни внесені вами. Як мінімум варто додати відомості про те, що ви щось зробили в [[changelog|Чейнджлог]]. Кінцеві користувачі повинні знати, як змінитися їхнє життя в майбутньому. Зміни, які не видимі кінцевому користувачеві і ніяк не впливають на його життя, в принципі, можна не описувати, хоча теж схвалюються, у вигляді "там-то проведено рефакторинг/чистка/оптимізація коду". Намагайтеся зробити це коротко і зрозуміло, бажано в один рядок. Хорошими прикладами можуть бути такі описи зроблених вами змін:
  
   * Модуль "Безвихідь": більше не викликає масової загибелі перламутрових їжаків.   * Модуль "Безвихідь": більше не викликає масової загибелі перламутрових їжаків.
Рядок 431: Рядок 460:
   * alter.ini: додано нову опцію CHAINSAW_ENABLED, призначену для ввімкнення техаської різанини бензопилою.   * alter.ini: додано нову опцію CHAINSAW_ENABLED, призначену для ввімкнення техаської різанини бензопилою.
  
-Також у разі додавання нової опції, ви маєте задокументувати її на сторінках, присвячених відповідному файлу конфігурації, на кшталт таких для [[alteriniconf|alter.ini]] або [[userstats|userstats.ini]], де опції слід зазначати зі значеннями за замовчуванням, а також у [[relnotes|Рекомендаціях до оновлення]]. Також не забуваємо заповнювати опціями та їхніми значеннями за замовчуванням самі файли оновлень для поточного релізу в **content/updates/configs/**+Також у разі додавання нової опції, ви маєте задокументувати її на сторінках, присвячених відповідному файлу конфігурації, на кшталт таких для [[alteriniconf|alter.ini]] або [[userstats|userstats.ini]], де опції слід її зазначатизі значеннями за замовчуванням, а також у [[relnotes|Рекомендаціях до оновлення]]. Також не забуваємо заповнювати опціями та їхніми значеннями за замовчуванням самі файли оновлень для поточного релізу в **content/updates/configs/**
  
-У яких випадках, для вашого модуля, або чого б то не було, варто заводити окрему сторінку документації? Критерії дуже прості: +У яких випадках, для вашого модулю, або чого б то не було, варто заводити окрему сторінку документації?  
 + 
 +Критерії дуже прості: 
  
   - Ваш модуль вимагає конфігурації, відмінної від увімкнення/вимкнення   - Ваш модуль вимагає конфігурації, відмінної від увімкнення/вимкнення
Рядок 441: Рядок 472:
   - Робить неочевидні сторонній людині штуки   - Робить неочевидні сторонній людині штуки
  
-Не обов'язково писати покроковий мануал з картинками для домогосподарок. Ми сподіваємося, що нашим продуктом користуватимуться мінімально профпридатні системні адміністратори провайдерів (ну хоча б у майбутньому). Тому документацію ви пишете насамперед для себе - це дасть змогу в майбутньому вам без проблем самим же використовувати написаний вами функціонал, а також позбавить головного болю з підтримкою інших користувачів, які хочуть його використовувати, та заощадить ваш же час. Тикнути посиланням у документацію - завжди швидше і простіше. +Не обов'язково писати покроковий мануал з картинками для домогосподарок. Ми сподіваємося, що нашим продуктом користуватимуться мінімально профпридатні системні адміністратори провайдерів (ну хоча б у майбутньому). Тому документацію ви пишете насамперед для себе - це дасть змогу в майбутньому вам без проблем самим же використовувати написаний вами функціонал, а також позбавить головного болю з підтримкою інших користувачів, які хочуть його використовувати, та заощадить ваш же час. Тикнути посиланням у документацію - завжди швидше і простіше ніж щоразу на пальцях пояснювати кожному "що" і "як?". 
-==== Пасхалки, відсилання та інший фансервіс ====+ 
 +==== Великодки, відсилки та інший фансервіс ====
  
-Вітаються. Будь-які. У будь-якому не уебанському вигляді.  +Вітаються. Будь-які. У будь-якому не уєбанському вигляді.  
-Ваш код - це продукт ваших взаємин зі всесвітом. І якщо він складається з відсилань до фільмів, няшок, поней, музики, вершників апокаліпсису, фурреїв, семи смертних гріхів, лолікону, легкої наркоманії, ударних гелікоптерів, інді-ігор і панцушотів, чому б і ні. І хто ми такі, щоб вас засуджувати? +Ваш код - це продукт ваших взаємин зі всесвітом. І якщо він складається з відсилок до фільмів, няшок, понєй, музики, вершників апокаліпсису, фуррєй, семи смертних гріхів, легкої наркоманії, ударних гелікоптерів, інді-ігор і панцушотів, чому б і ні. І хто ми такі, щоб вас засуджувати? 
  
 ==== А де ж Best Practices? ==== ==== А де ж Best Practices? ====
Рядок 452: Рядок 484:
 ==== Контрибуція в Ubilling ==== ==== Контрибуція в Ubilling ====
  
-Будь ласка, якщо ви хочете зробити свій внесок у розвиток проекту, робіть нормальні пуллреквести. Ніхто не хоче і не буде витрачати свій особистий час на построкове і побайтовое вивчення (ми це називаємо "очний diff") вашої писанини, надісланої на пошту, месенджери або розкиданої по форумах і пейстбінах.+Будь ласка, якщо ви хочете зробити свій внесок у розвиток проекту, робіть нормальні пуллреквести. Ніхто не хоче і не буде витрачати свій особистий час на порядкове і побайтовое вивчення (ми це називаємо "очний diff") вашої писанини, надісланої на пошту, месенджери або розкиданої по форумах і пейстбінах.
  
 ==== Оформлення Пуллреквестів ==== ==== Оформлення Пуллреквестів ====
Рядок 479: Рядок 511:
 {{ :faq-pr-create-pr.png?500 |}} {{ :faq-pr-create-pr.png?500 |}}
  
-Після створення пулреквесту - [[https://github.com/nightflyza/Ubilling|Github]] визначить, чи є конфлікт з офіційним кодом чи ні. Якщо конфлікту немає, то просто чекаємо поки його зморжать. Якщо конфлікт є - закриваємо пулреквест і робимо всі зміни по новій, тільки так, щоб не вийшли знову конфлікти.  +Після створення пулреквесту - [[https://github.com/nightflyza/Ubilling|Github]] визначить, чи є конфлікт з офіційним кодом чи ні. Якщо конфлікту немає, то просто чекаємо поки його змерджать. Якщо конфлікт є - закриваємо пулреквест і робимо всі зміни по новій, тільки так, щоб не вийшли знову конфлікти.  
-Чекаємо, поки мейнтейнер усе смердить. +Чекаємо, поки мейнтейнер усе змерджить. 
 Головне, щоб ваші коміти не перетиналися з його змінами, інакше тоді доведеться все заново робити. Головне, щоб ваші коміти не перетиналися з його змінами, інакше тоді доведеться все заново робити.
  
-Далі повертаємося в гілку master офіційного проєкту й оновлюємо вже змерзлий код:+Далі повертаємося в гілку master офіційного проєкту й оновлюємо вже змерджений код:
 <code bash> <code bash>
 git checkout master git checkout master
codingguidelines.1686997804.txt.gz · Востаннє змінено: 2023/06/17 13:30 повз nightfly