Чи добре вносити зміни стилю кодування на проект з відкритим кодом, який не дотримується кращих практик?


38

Нещодавно я натрапив на декілька проектів з відкритим кодом Ruby (або більшість з них був Ruby) на GitHub, які, перевіряючись інструментом аналізу коду, як Rubocop , створюють багато правопорушень .

Тепер більшість цих правопорушень включають використання подвійних лапок замість одинарних лапок (коли не інтерполяція), не дотримання правил 2 пробілів на рівні, що перевищують правило довжини рядка 80 символів, або використання {та }для багаторядкових блоків.

[Посібник] щодо стилю Ruby рекомендує найкращі практики, щоб реальні програмісти Ruby могли писати код, який може підтримуватися іншими реальними програмістами Ruby. ~ Джерело: Посібник зі стилів Ruby

Хоча вони невеликі та їх легко виправити, чи доцільно змінити стиль кодування проекту з відкритим кодом, виправивши правопорушення та зробивши запит на видалення? Я визнаю, що деякі проекти, наприклад Rails, не приймають косметичних змін, а деякі просто занадто великі, щоб "виправити" все відразу (наприклад, Rails генерує понад 80 000 правопорушень при запуску Rubocop - незалежно від того, у них є власний невеликий набір кодування конвенції, яких слід дотримуватися під час участі). Зрештою, керівництво по стилю Ruby є чомусь разом з такими інструментами, як Rubocop.

Люди цінують послідовність, тому внесення таких змін - це щось добре для спільноти Рубі в цілому, правда?

[Автор (и) посібника зі стилю Ruby] не придумав нікуди всіх правил - вони в основному базуються на моїй багаторічній кар'єрі професійного інженера-програмного забезпечення, відгуках та пропозиціях членів спільноти Ruby та різних високо оцінені ресурси програмування Ruby, такі як "Програмування Ruby 1.9" та "Мова програмування Ruby". ~ Джерело: Посібник зі стилів Ruby

Чи не дотримуйтесь конвенцій та передового досвіду кодування спільноти, що в основному заохочує погану практику?


3
Подібне запитання: чи слід рефакторировать клас F від кодового клімату? , але з більшою увагою на архітектуру.
амон


5
Багато з цих стильових проблем звучать досить незначно tbh.
JL235


4
@MathewFoscarini ні, про що вони запитують: "Якщо я придбаю радіолокаційну пістолет, чи можу я вирішити, які місцеві закони про рух?"
Джон Ханна

Відповіді:


65

Запитайте у обслуговуючого персоналу.

Стиль кодування є досить суб'єктивною дискусією, і такі правила, як максимальна довжина рядка до 80 символів, є досить суб'єктивними - хоча загальна згода повинна бути, що короткі рядки краще читати, 80 можуть бути занадто обмежуючими для деяких із сьогоднішніми розмірами екрана та IDE.

Інші правила також можна ігнорувати спеціально. Наприклад, розробник може розглянути можливість кращого використання подвійних лапок для нього і буде готовий прийняти "ризик" випадкової інтерполяції та надзвичайно невелике збільшення часу розбору.

Багатьом утримувачам також не подобаються великі зміни стилю кодування, оскільки вони нудні для перегляду, і є ймовірність, що це може ввести помилки. Наприклад, рядок може бути переключений на одну цитату, навіть якщо вона містила навмисну ​​інтерполяцію і мала використовувати подвійні лапки. Підтримувачі воліють робити очищення стилів під час роботи над цим фактичним кодом, щоб вони могли перевірити, чи зміни стилів не вводять нових помилок.


34
Багатьом утримувачам також не подобаються великі зміни, які не є суворо необхідними, оскільки вони, як правило, створюють конфлікти злиття, які теж не є строго необхідними.
Ян Худек

4
Ви втратите функцію примітки (які створюють рядок коду) у контролі джерела, якщо є помилка, важко звинуватити, де вона була введена, і відстежувати, чи є більше подібних помилок.
однолітк

4
Крім того - якщо конвенції щодо конкретних проектів узгоджуються, ви можете створити специфічну для проекту конфігурацію для інструменту перевірки конвенції та запропонувати конфігурацію конвенцій як запит на витяг. Таким чином, технічне обслуговування може перевірити свій проект за допомогою своїх конфігурацій. (Я не знаю, чи можливо це за допомогою інструменту, який ви використовували.)
Пітер Кофлер

+1 про конфлікти злиття. Я щойно прийняв переробку стилю кодування і хотів би цього не зробити, оскільки це спричинило злиття конфліктів з PR-колами інших людей. Це легко вирішити, але я б скоріше це зробив по частинах
Daenyth

Ідентифікатор IDE є обмежуючим, якщо він не дозволяє показувати два окремі файли поруч, а не вина короткого рядка коду.
unperson325680

48

Ви, здається, в основному мотивовані повагою до авторитету інструменту "rubocop" та керівництва по стилю Ruby, яким користувачі, які не можуть ділитися. Вони вже мають власний стиль і звикли до нього, тому будь-яка зміна вплине на всіх, хто працює над проектом, і це велика робота, особливо якщо проект великий.

Розглянемо мотивацію обслуговуючого персоналу. Вони (ймовірно) хочуть, щоб до них приєдналися нові люди, надсилаючи виправлення, звіти про помилки, робочий код та добре написану документацію. Якщо ви з'явитесь і скажете "У вас є правопорушення в рубокопі", вони не збираються думати "О добре, хтось новий, який допоможе поділити навантаження", вони подумають "Хто це хлопець? Чому він нам говорить? що робити?".

Проекти з відкритим кодом, як правило, є меритократіями: ви отримуєте повагу виходячи з якості вашої роботи. Якщо ви показуєте і займаєтеся чудовими справами, а потім викликаєте свої стильові проблеми, вони швидше слухатимуть, хоча вони все ще можуть сказати ні. Є відкрите джерело: "Розмова дешева, покажіть мені код".


1
Найкраща відповідь. Ви повинні поважати зусилля тих, хто прийшов раніше, надсилаючи запити на тягу. Зміна стилю проекту під ногами всіх існуючих розробників, особливо всіх, хто має вищий "ранг", ніж у вас в меритократії, ускладнює їм запам’ятати нові правила, які ви запроваджуєте. Це зашкодило б їх здатності підтримувати проект таким, яким вони були. Крім того, якби ви вже брали участь у розробці проекту, ви, мабуть, знаєте думки керівника щодо стилістичних змін та найкращого моменту у життєвому циклі проекту для їх впровадження.
Кріс Кіл

1
Саме так. Наприклад, проект Linux, незважаючи на досить суворий посібник зі стилів щодо нових фрагментів коду, не дозволить вам просто подати великий запит на виправлення, виправляючи проблеми стилізації, тому що він залякує злиття. Він навіть просить вас підтримувати локальний стиль, навіть якщо це означає, що це суперечить керівництву зі стилю проекту.
Майлз Руут

25

Прагматизм над Догмою, завжди. Посібники зі стилю кодування - це особливо підступна форма зла, яка привертає увагу від архітектурних проблем до легковажних дурниць, як одинарне / подвійне цитування. Запитайте себе: чи дійсно це має значення?

Вони можуть бути хорошими до певного моменту, але, коли ви ставитесь до них з майже релігійним запалом, ви зайшли занадто далеко. Це вказівки, пропозиції, думки, а не факти.

Чи варто їх просто ігнорувати тоді? Ні, є користь у використанні інструментів, щоб отримати загальне уявлення про те, що потрібно дивитись, але не більше.

Дивно, як часто молодші типи плутають думку на факти.


11
Варто додати, що зміни при переформатуванні, як правило, створюють конфлікти злиття, що є дуже вагомою причиною для більшості утримувачів ненавидіти переформатування саме заради цього.
Ян Худек

13

Ви можете перетягнути ці зміни лише за наявності відкритої проблеми для виправлення форматування. В іншому випадку створіть свою власну гілку, і якщо автор бачить, що більше людей використовує вашу гілку просто тому, що вона читає. Вони будуть об'єднуватися у відділення самостійно, але будьте готові підтримувати вашу гілку, об’єднуючись у оновлення та постійно фіксуючи форматування.

Якщо проект для вас недостатньо важливий, щоб продовжувати підтримувати власну філію, тоді прибирати її не варто.

Запит на витяг може бути прийнятий автором особисто. Це не механізм надання критики, і переформатування всього кодексу можна сприймати як критику.

Якщо ви не хочете підтримувати власну філію, але хочете внести свій внесок у проект. Відкрийте нове видання та опишіть, чому поточний формат викликає у вас проблеми, тоді запропонуйте вирішити проблему для автора. Якщо автор погоджується, то він призначить це питання вам, і тепер у вас є дозвіл на запит на тягу.

Ви торкнулися теми, з якою я також погоджуюсь, є надзвичайною проблемою на GitHub . Відформатувавши вбік, існує ряд проектів, які неправильно використовують примітки та викликають хаос із багатьма IDE. Я можу придумати три широко популярні проекти, які неправильно використовують застарілі прапори, які поширюють попереджувальні повідомлення в моєму IDE. Я надіслав запити на витяг, щоб виправити їх, але автори не використовують один і той же IDE, тому запити на вилучення ігноруються.

Розгалуження, злиття та закріплення здаються єдиним рішенням.


На вашу думку, чи вважаєте ви вигоди для майбутніх дописувачів дійсним "приводом" для запиту на вилучення, який фіксує правопорушення? Наприклад, щоб майбутнім учасникам не потрібно було переживати за перегляд усієї бази коду, щоб зрозуміти його стиль кодування.
raf

@RafalChmiel Коли автор приймає запит на виклик, особа, яка надіслала цю тягу, потрапляє до репо-репортажу та публічно перераховується як учасник проекту, і він залишається внесеним до списку учасників. Переглядаючи запит на витяг, автор пам’ятатиме про це, приймаючи рішення про його прийняття. Майте це на увазі, коли надсилаєте запити на тягу. Робіть речі, гідні того, щоб стати учасником.
Реаг.

Те , що я мав в виду, що в майбутньому користь вкладників, фіксуючи злочину є вагомою підставою для об'єднання ЧО з такими виправленнями? Чому керівник повинен об'єднувати такий PR? Можливо, формулювання мого запитання було трохи недооцінене.
raf

2
@RafalChmiel все, що ви заявляєте як причину, - це лише ваша думка. Якщо це образливий код, схожий на бика, тоді запишіть свої страхи у випуску. Якщо автор захищається від такого потягу, то протирайте сльози тканиною.
Реаг.

10

Взяті з самого сайту Rubocop (моє наголос):

Одна річ завжди хвилювала мене як розробника Ruby - розробники Python мають чудовий посилання на стиль програмування (PEP-8), і ми ніколи не отримали офіційного керівництва , яке б документувало стиль кодування Ruby та найкращі практики.

Будь ласка зрозумій:

Офіційного керівництва по стилю Ruby немає

Я не кажу, що керування стилем - це погано. Але не тільки немає офіційного довідника, але мати керівництво по стилю - це вибір, який робиться на особистому, проектному, командному, фірмовому рівні. Посібники зі стилю - використовувати термін психологія - "групова соціальна норма".

Що це означає для вас? Що ж, якщо вас не вважають частиною групи, це означає, що все, що ви - або будь-який інший веб-сайт, - навряд чи візьме на себе будь-який вплив. Тож якщо ви не є активним, шанованим учасником цього конкретного проекту, то, швидше за все, ваші пропозиції будуть ігноровані, або, в кращому випадку, будуть нагадуванням про попередні міркування щодо того, щоб мати керівництво по стилю. У гіршому випадку це буде сприйматись як образа, або як інтерлопер чи мотоцикл, що стирчить ніс там, де він не належить.

Ви не можете просто запропонувати керівництво по стилю?

Насправді, це, здається, саме те, що ви хочете зробити: ви вірите в цінність стильових посібників, ви високо цінуєте послідовність і хочете євангелізувати за відданість уніфікованим настановам стилів.

Це добре, до тих пір, поки вам справді зрозуміло, що ви збираєтеся і що ви хочете досягти. Якщо ви вірите в конкретний посібник зі стилів і вважаєте, що це єдиний справжній посібник зі стилів, або принаймні краще, ніж будь-які беззаконні язичники, що бігають навколо практикуючих, то це теж добре.

Але те, що люди не цінують, розповідається, що їх поведінка не відповідає неофіційним, необов'язковим, значною мірою довільним правилам, які виходять із джерела, яке вони не вважають законною владою. Коли ви це вирішите зробити, або якщо ви просто сприймаєте це, чим ви сприймаєтесь , ви отримаєте менше "лікування червоною доріжкою", а більше "розлючених тубільців зі списами та великим киплячим котлом". лікування.


3

Пропонувати тут альтернативну думку, у багатьох випадках така зміна буде бажаною. Проекти з відкритим кодом, як правило, мають багато авторів. Часто відсутній "стиль кодування"; стиль - це все те, що використовувала людина, яка написала відповідний код. Якщо один файл був написаний іншою людиною, ніж інший, стиль може бути різним. Навіть у проектах, де існує консенсус-стиль, якщо вони регулярно не перевіряють цей стиль, він часто не використовується.

Поширений приклад цього в моєму досвіді - коли хтось вносить якийсь код за допомогою запиту на виклик, який має відносно низьку якість. Однак код може працювати. Різні люди мають різні погляди на це. Деякі люди відмовляться об'єднати запит на витяг, якщо стиль не є хорошим. Деяких людей це не хвилює, поки код працює. Деякі люди вважають за краще гарний стиль, але вони не хочуть відлякувати дописувачів купою коментарів "виправити пробіл тут" (я особисто завжди відчуваю трохи вини, роблячи ці коментарі, хоча я знаю, що вони є на краще корисною базою коду, тому що вона, здається, може відлякати учасника).

Тому не припускайте, що стиль, який ви бачите, - це стиль, якого хоче проект. Насправді, це, ймовірно, може бути узагальнено для сприяння відкритому коду взагалі: не вважайте, що код, який має проект з відкритим кодом, - це той код, який він хоче .

Однак ви повинні знати про деякі речі:

  • Деякі люди релігійні щодо стилю. Якщо стане зрозуміло, що вони не хочуть рухатися з місця, не турбуйтеся.

  • Це величезна проблема на велосипеді . У всіх і їхнього брата є думка про ці речі. З’єднання такого запиту на витяг може бути важким через це.

  • Також може бути важко об'єднати такий запит на витяг, оскільки він швидко отримає конфлікти злиття; в основному всякий раз, коли будь-яка частина бази коду, яку ви змінили, зміни, навіть якщо вона є тривіальними способами.

Я б дотримувався підходу "запитай спочатку". Якщо вони відкриті для цього, і ви готові дотримуватися запиту на завершення, тоді перейдіть до цього.


2

Раніше я був великий у тому, щоб мати хороший посібник зі стилів, але, враховуючи стан справ у Рубі, "я пішов далі".

В основному я живу з тим, з чим працюю, інакше дотримуюсь загальних умов, які я навчився з багатьох робіт.

Для Ruby, яка є моєю мовою вибору, я також (в голові) розділив стиль на загальновизнані, загальноприйняті мої уподобання та найкращі практики. Речі, які є загальновизнаними, я можу надіслати зміни як частину запиту на зміну для проблеми або запиту гілки функції.

Приклади кожного стилю (на мою думку):

Загальновизнаний для Ruby:

  • пробіли, а не вкладки
  • два космічні відступи
  • method_names_use_underscores
  • Константи починаються з Caps.

Загальноприйняті:

  • Не використовуйте дужки, якщо немає необхідності
  • Використовуйте { }для блоків однієї лінії та do endдля багаторядкових блоків.
  • CONSTANTS_ARE_IN_ALL_CAPS
  • Використовуйте предикативні висловлювання ( cond ? true : false), if thenякщо вираз відповідає одному рядку.

Особисті переваги:

  • Довжина рядка 120 символьних ліній
  • тематичні whenзаяви відступ 2 з саза.
  • Використовуйте одинарні лапки, якщо не потрібні подвійні.

Ніякої угоди:

  • Виклади справи
  • Довжина лінії

Кращі практики:

  • малі методи, <= 5 рядків, якщо це можливо.
  • малі класи, <= 100 рядків, якщо це можливо.
  • Уникайте констант
  • Код має тести

Нарешті, як детально описали інші, слід поцікавитися спочатку. Зрештою, ключовим для стилю є спілкування між розробниками та чутливість до інших. Наприклад, якщо я хочу змінити стиль у проекті з відкритим кодом, я часто буду робити запит на тягу для однієї або двох фактичних функцій або виправлення помилок. Після того , як супроводжуючий мене знає і бачить , що я сприяв, то я міг би запропонувати зміни стилю. Я лише пропоную їх. Наприклад, "Роблячи ще одну функцію в проекті x, я помітив, що у вас є декілька пробілів у кількох файлах, і мені було цікаво, чи можу я змінити їх на 2?"


1

Хоча вони невеликі та їх легко виправити, чи вважаєте ви, що добре змінити стиль кодування проекту з відкритим кодом, виправивши правопорушення та зробивши запит на відкликання?

Словом, ні!

Звичайно, я припускаю, що це лише питання стилю і не є фактичними помилками - витягнути запити для останніх завжди були б розумними (IMO.) Я також припускаю, що ви чужий для проекту і не контактує з людьми, які вже підтримують його.

Однак серед будь-якої мови завжди є люди, які мають свої вподобання, які відрізняються від керівництва зі стилем, для кращого чи гіршого, і намагаються застосувати ті зміни стилів для людей, яких ти не знаєш , та проект, у якому ти не є частиною з , якщо нічого іншого не міг попадається як трохи грубо. Зрештою - чого ви досягаєте (насправді), якщо запит було прийнято? Ймовірно, якби члени одного проекту хотіли змінити стиль на щось інше, вони б це вже зробили - і все, що ви зробили б із цим запитом, - це нав'язувати їм стиль, який не обов'язково працює краще для існуючих членів.

Це незначно змінюється, якщо ви готові внести свій внесок у проект іншими способами, крім того, щоб робити «виправлення стилів». Я б сказав, що якщо ви хочете відкрити діалог із обслуговуючими особами про те, як ви хотіли б працювати над проектом, але вам не складно нестандартний стиль, тоді це добре. Але я дійсно не просто сліпо ходитиму наосліп, створюючи запити на тягнення для багатьох проектів, які містять лише зміни стилю!


1

Будь-яка зміна може вводити помилки, навіть змінюючи типографічне формулювання коду.
Тому в коді жодних змін не повинно здійснюватися, якщо не існує справжнього ділового випадку, і "але код не виглядає добре" або "код не відповідає стандартам кодування" не є дійсним діловим випадком. Ризик просто занадто великий.
Тепер, якщо ви все-таки вносите значні зміни у вихідний файл, витягнення всього файлу у відповідність зі стандартами може бути прийнятним, але, швидше за все, ви будете робити невеликі зміни, і в цьому випадку майже універсально бажано зберігати власні зміни в рядок з існуючим кодом, навіть незважаючи на те, що існуючий код не відповідає стандартам кодування.
Чорт забирає, що код може бути результатом генератора коду і часом відновлюватися. Генератори коду відомі для створення потворних кодів ...


1

У мене є кілька помірно успішних проектів .NET, і у мене було кілька PR-адрес від людей, які, схоже, пройшли код з ReSharper і StyleCop і "виправили" купу матеріалів. Я не приймаю ці піар з кількох причин:

  • Незважаючи на те, що багато змін є на краще, деякі з них негативно впливають на код, як правило, на продуктивність, а вибір хороших деталей вишні - це занадто важка робота.
  • Навіть якщо всі зміни були або доброякісними, або навіть корисними, кожну зміну кожного файлу в кожному комітеті потрібно переглянути, і знову ж таки, це займе занадто багато часу.

Це означає, що якщо хтось хоче додати кращу перевірку помилок або коментарі док, я б прийняв цю піар з серцебиттям.


-1

Потрібно з’ясувати, чи вважають обслуговуючі особи такі порушення кодування недоліком, чи проект має інший стандарт стилю кодування.

Якщо він має інший стандарт, ви можете запропонувати допомогти документувати або формалізувати його. Тоді може виявитися, що є деякі порушення цього стилю, і ви можете їх виправити.


це, здається, не пропонує нічого цінного за іншу відповідь, яку було опубліковано за кілька годин до цієї
гнат
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.