Наверняка у вас тоже иногда бывает такое, когда пулл-реквест разрастается на слишком много тысяч строк, и он затем тяжело проходит код-ревью, потому что смотреть на него доставляет физическую боль. Есть трюк, который поможет сократить дифф примерно вполовину, а в некоторых случаях даже сильнее.
Следите за простой арифметикой. Допустим, вы полностью переписываете какой-то метод из N строк. В диффе получится N удалений и N добавлений, итого — 2 * N.
class Example:
- def method(self, arg1):
- return 1
+ def method(self, arg2):
+ return 2
Это много. Это может спугнуть ревьювера, и он просто не откроет ваш пулл-реквест, поэтому лучше так не делать. Есть до безобразия гениальное решение — просто напишите новый код метода ниже, и он заменит собой старый! Код работает точно так же, тесты выдают красивую зеленую галочку, а дифф сократился в два раза, потому что больше нет удалений! class Example:
def method(self, arg1):
return 1
+ def method(self, arg2):
+ return 2
Аналогично можно поступать и с классами целиком, и даже с целыми файлами. Если же вам нужно избавиться от класса, метода или функции, то можно использовать волшебное слово del, и тогда в диффе вообще окажется только одна строчка: class Example:
def method(self):
...
+ del method
Кроме того, я рекомендую ещё на этапе написания кода подумать о будущих правках, которые его непременно настигнут, и писать как можно более длинные строки. Лучше сразу же закладываться в хорошие практики и традиции. За счёт длины вы уменьшите количество строк, а значит и все диффы в будущем будут меньше. Код становится короче и выразительнее, а вам и вашим коллегам придётся меньше скроллить вверх-вниз. В Python для этого можно использовать множественные присваивания, точку с запятой и многие другие приёмы:import requests, psycopg2; session, number, connection, matrix = requests.Session(), 5, psycopg2.connect("postgresql://localhost/dbname"), [[1, 2], [3, 4]]
for _ in range(5): print("Hello!")
Кстати, насчёт тестов. Лучше без большой необходимости их вообще не трогать. Но если уж вам пришлось, то лучше сделать один тест (новый), который проверяет все аспекты сразу — и позитивные, и негативные кейсы, и краевые случаи, и бенчмаркает скорость работы, и проверяет отсутствие утечек памяти. Чтобы он был и юнит, и интеграционный одновременно. Можно описать это всё через несколько слоёв параметризаций. Для простоты тестирования лучше сразу же замокать все внешние системы, а также проблемные части кода, иначе тест будет падать и его придётся каждый раз переписывать, когда что-то меняется, а это раздует диффы.Вывод: создавая пулл-ревест, подумайте о чувствах того, кто будет его читать. Идите ему навстречу, улучшайте его экспириенс, уменьшайте объем его работы, и он в итоге напишет вам меньше дискуссий, так что процесс пройдет проще для всех сторон.
Пользуйтесь этими лайфхаками на радость вашим коллегам! Желаю, чтобы ваши пулл-реквесты-многотысячники всегда быстро и без единого вопроса собирали нужные аппрувы! ✊
#секретымастерства