10 июля 2023 г. (изменено: 12 июля 2023 г.)
Канал: @cherkashindev
Проверка именования файлов и папок с помощью плагина eslint-plugin-import
Во время код ревью, можно заметить, что мы часто оставляем одни и те же комментарии об именованиях или каких-то соглашениях (которые описаны в вики, и которые никто не читает). В такой момент, нужно задуматься можно ли эти проверки как-то оптимизировать. Например недавно я писал пост о том как контролировать импорты в JS с помощью import/no-restricted-path. Сегодня я хочу рассказать о проверке именования файлов и папок.
Наверняка в вашем проекте есть какая-то определённая структура организации папок, например, это могут быть папки:
- /models
- /services
- /stores
- /pages
И скорее всего все файлы в этих папках должны иметь определённый суффикс:
- Model
- Service
- Store
- Page
И уж точно, в каждом проекте есть утилитные файлы для строк, массивов или ваших внутренних бизнес моделей. И как такие файлы только не именуют:
- Helper/Helpers
- Util/Utils
- Utility/Utilities
Чтобы избежать всей этой путаницы и обеспечить единое именование файлов можно использовать плагин eslint-plugin-import
Плагин содержит несколько плавил:
1️⃣ check-file/filename-blocklist
Синтаксис следующий — вы описываете объект, у которого:
- ключи — запрещённые паттерны
- значения — тот паттерн, который рекомендуется использовать.
Например, если мы хотим обеспечить единое именование утилитных методов, чтобы все они оканчивались на `Utils`, то нам нужно запретить использование суффиксов: Helper, Util, Utilities. Также, нужно учесть, что:
- Первая буква может быть как в верхнем, так и в нижнем регистрах
- Все суффиксы могут быть как в единственном, так и во множественном числе
Описание такого правила будет выглядеть так:
plugins: [
'check-file',
],
rules: {
"check-file/filename-blocklist": [
"error",
{
"**/*+([Hh]elper?(s|*)|[Uu]til|[Uu]tilitie?(s|*)).ts": "*Utils.ts"
}
]
}2️⃣ check-file/folder-naming-convention
Это правило позволяет нам задать паттерн именования папок:
- ключ — паттерн для папок, которые необходимо валидировать
- значение — паттерн, которому папки должны удовлетворять. В нашем случае, паттерну удовлетворяют все папки, которые не называются Helpers, Util, Utilities.
"check-file/folder-naming-convention": [
"error",
{
"src/**/": "!([Hh]elper?(s|*)|[Uu]til|[Uu]tilitie?(s|*))"
}
]Все правила описываются с помощью glob-паттернов). Протестировать свой паттерн можно тут.