Skip to content

[intensive] пробелы ➡ табы #1097

Open
@baileys-li

Description

@baileys-li

Мы же все понимаем, что рано или поздно кто-то бы открыл это ишью.
Думаю первое апреля лучшая дата. 😉

Я больше всего удивляюсь, что в той серии Кремниевой Долины, та чувиха внатуре печатала пробелы через пробел. Просто конченная.

Проблема

Тема холиварная, тема срачегенная, но давайте взглянем сначала на аргументы, которые можно легко верифицировать.

Почему табы лучше 😺

  • Меньший размер. Один символ, понятное дело, меньше чем минимум два. Просто возьмите любой файл, где много строк и отступов, и сравните размер с табами и пробелами. Капля в море, но все равно меньше байтов по сети гонять, сервера меньше греются, глобальное потепление отодвигаем чуть-чуть-чуть-чуть-чуть дальше.
  • Настраиваемые. Можно у себя локально поменять принятый в команде размер, если не подойдёт. Или там где отступы влияют на код, сделать побольше, чтобы в .py или .pug точно не перепутать попадает ли код в if блок или нет. С пробелами надо всё переформатировать и следить за тем, чтобы не пошло в коммит. Это дополнительные трудности, которых нет на табах.
  • Доступные. Это следует из предыдущего пункта, но так важно, что стоит выделить отдельно. Слабовидящие могут локально у себя поменять размер и они не помешают другим разработчикам.

Почему пробелы лучше 💩

  • Легаси. Так просто привыкли.
    • Но это важно? Миллионы мух не могут ошибаться? Люди привыкли к jQuery, но это не повод не переходить на ECMAScript.
    • У Вадима Макеева было видео, что табы во всём лучше, но он перешел на пробелы, потому что в open source приносят ПР, которые конфликтуют с кодгайдом. Но это странный аргумент, потому что хороший разработчик должен уметь подстраиваться под кодгайд проекта. И студентов мы этому тоже учим. Почему любители табов идут навстречу и понимают, что в проектах может быть установленный кодгайд, а любители пробелов нет? Это не справедливо.
    • Кейс Макеева все равно не подходит под студентов Академии, потому что они не разрабатывают либы, где много контрибьютеров. Проекты в рамках курсов идут в основном в их портфолио и то до поры, пока у них не будут рабочие кейсы.
  • Некоторые форматы принимают только пробелы. Это действительно проблема. Вот бы мы давали студентам какой-то инструмент который позволял настраивать отступы для конкретных форматов файлов <подмиг-подмиг>.

Дополнительно

Это уже больше вкусовщина и не относиться к прямому применению, но табы это буквально символ для оступов. Точно так же как многоточие это , а не ...; тире — это , а не -; в русском языке кавычки это «ёлочки». Если у вас тоже что-то вроде перфекционизма или ОКР, то возникает жгучее желание использовать "правильный" символ вместо "неправильного". (тут кавычки не «ёлочки», потому что я их в воздухе показываю)

Это как семантика в HTML.

Вывод

Табы объективно лучше.

Решение

В шаблонах проектов меняем настройки .editorconfig на:

root = true

[*]
charset = utf-8
end_of_line = lf
tab_width = 4
indent_style = tab
insert_final_newline = true
trim_trailing_whitespace = true

[*.md]
trim_trailing_whitespace = false

[*.{yaml,yml}]
indent_style = space
indent_size = 2

Для YAML делаем отдельное исключение, потому что они воспринимают только пробелы. Возможно есть ещё какие-то форматы, но для курсов HTML/CSS и JS ничего больше в голову не приходит.

Для курсов JS долнительно вносим правило в ESLint:

rules:
  indent: [error, tab]

Ну и чтобы в ручную не фиксить все отступы в шаблонах, воспользоваться npm пакетом

npx eclint fix .
# Либо pnpx, если в системе стоит pnpm
# pnpx eclint fix .

Он deprecated и там зависимости старые, но для одноразовых применений сойдёт.

# Чеклист
- [ ]  обновить `.editorconfig` 
- [ ] обновить ESLint правило
- [ ] обновить файлы в шаблонах проектов

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions