Сокрытие кода. Folding. VSCode Расширение Explicit Folding
Показываю
Мне так намного проще бегать по коду
Зачем использовать folding / скрывать блоки кода
Проще удерживать важные куски кода в голове
Отображать только важное, а неважное — не отображать (= забрать у всякой чуши в коде возможность отвлекать / тратить энергию на распознавание того, что она делает)
Повысить лимит размера файла перед тем, как сочтем, что его пора разбивать на более мелкие, специализированные
Сократить количество функций, что вызываются лишь 1 раз (вместо функции ➜ inline-им её там, где вызывается ➜ оборачиваем в fold регион)
Обычные fold-ы
❌ Не позволяют задать область сокрытия кастомной области кода
❌ Команды «Fold level 1» скрывают все на 1-ом уровне. Но есть более сложные функции, которым я бы хотел описать области сокрытия + задать им summary того, что они делают
Пары #region / #endregion
❌ Слишком много букв
Big Brain Giga Chad VSCode Расширение Explicit Folding
✅ Позволяют задать кастомные области сокрытия кода
✅ Можно прописать им человеческий summary
✅ Можно скрывать все кастомные fold-ы keyboard shortcut-ом (я по-умолчанию гоняю с скрытыми fold-ами)
Мои настройки VSCode
// VSCode Preferences: Open User Settings (JSON)
{
// ...
"editor.defaultFoldingRangeProvider": "zokugun.explicit-folding",
"explicitFolding.rules": {
"*": { "begin": "##", "end": "##" }
},
"[python]": {
"explicitFolding.rules": [
{ "begin": "##", "end": "##" },
{ "begin": "cog}}}", "end": "{{{end}}}" }
]
},
"[proto]": {
"explicitFolding.rules": [
{ "begin": "message", "end": "}" },
{ "begin": "cog}}}", "end": "{{{end}}}" }
]
},
// ...
}
для cog тут заменил [[[]]] на {{{}}}, чтобы у меня кодогенерация не отрабатывал
Настроил с vscodevim
Биндю
Space+0 для сокрытия этих кастомных fold-ов
j— наgj,k— наgk(при нажатии вверх/вниз я fold перескакиваю, а не раскрываю его)ctrl+d— на12j,ctrl+u+ на12k(чтобы тоже перескакивали fold-ы)l—l+editor.unfold,0—0+editor.unfold,^—^+editor.unfold,$—$+editor.unfold
На подумать
Вкину пару мыслей:
— Jonathan Blow как-то отмечал что-то вроде: «Когда ты extract-ишь функцию из другой, ты не упрощаешь код»
— Кармак отмечал: «If a function is only called from a single place, consider inlining it» (John Carmack on Inlined Code)
Это я решил затестить подход с разработкой в преимущественно одном файле, о котором говорили Shawn McGrath и Sean Barrett то ли в On Game Programming #001, то ли в #002
Безумие moment. Ходят легенды, что я в одном файле писал геймплей + рендер клона Brotato. 14к+ строк. И довел игру до конца. Хочу этим сказать, что у меня сложилось впечатление, что с помощью удобных fold-ов в голове удерживать более обширную картину кода становится проще