Description
Мы же все понимаем, что рано или поздно кто-то бы открыл это ишью.
Думаю первое апреля лучшая дата. 😉
Проблема
Тема холиварная, тема срачегенная, но давайте взглянем сначала на аргументы, которые можно легко верифицировать.
Почему табы лучше 😺
- Меньший размер. Один символ, понятное дело, меньше чем минимум два. Просто возьмите любой файл, где много строк и отступов, и сравните размер с табами и пробелами. Капля в море, но все равно меньше байтов по сети гонять, сервера меньше греются, глобальное потепление отодвигаем чуть-чуть-чуть-чуть-чуть дальше.
- Настраиваемые. Можно у себя локально поменять принятый в команде размер, если не подойдёт. Или там где отступы влияют на код, сделать побольше, чтобы в
.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 правило
- [ ] обновить файлы в шаблонах проектов