Подтвердить что ты не робот

Почему отступы в пустых строках плохие?

Каждый проект FOSS, который я знаю, имеет правила против прокрутки пробелов в коде. Но я думаю, что очень естественно продолжать текущий отступ на следующей строке:

int main()
{
....int a = 42;
....
....return a;
}

Но git, тем не менее, вызывает предупреждения. Поэтому мой вопрос: почему эти вкладки внутри текущего отступов плохие?

Я не ищу ответов вроде "Это всегда делалось так". Пусть предполагается, что отступы выполняются последовательно во всем рассматриваемом проекте.

4b9b3361

Ответ 1

Возможно, это связано с тем, что слияние патчей с бесполезными пробелами сложнее, чем должно быть.

diff(1) и patch(1) обрабатывать пробелы и вкладки как важный контент. (Задайте любой исходный файл Makefile или .py - они важны!) И если ваша "пустая строка" имеет четыре пробела, а моя "пустая строка" имеет восемь пробелов на ней, любая попытка совместного использования патчей между мы потерпим неудачу по очень тривиальным причинам.

Предположим, что если вы опережаете изменение отступов блока кода, вам придется перейти к некоторой работе, чтобы сделать патчи в любом случае. Но попытка отслеживания сбоев слияния на строках, которые выглядят пустыми, болезненна. (Я потратил слишком много времени на свою жизнь, выполняя именно это. Да, vim listchars может помочь, но чтение кода с listchars на все время также вызывает раздражение.)

Таким образом, люди стандартизируют без каких-либо конечных пробелов. Возможно, нет смысла беспокоиться о десятке потерянных байтов здесь или там с точки зрения хранилища, но это действительно упрощает слияние патчей. Вероятно, мы могли бы также стандартизировать добавление конечных пробелов, точно так же, как вы предлагали, и быть такими же счастливыми, но мы могли бы также стандартизировать подход, который настолько редок, насколько это возможно.

Ответ 2

Это также может быть грубо для пользователей vi, привыкших использовать навигацию абзацев для перехода через код. Иногда я делаю это, когда vi, и это довольно удивительно, когда я пропускаю несколько функций, потому что невидимые символы говорят, что это на самом деле часть предыдущего абзаца.

Ответ 3

Я думаю, что это сводится к "избыточным скрытым байтам с сюрпризом в вашем коде PLZ".

Как указывает @sarnold, избыточные байты с сюрпризом делают исправление и различие излишне беспорядочно.