10 июля 2023 г. (изменено: 12 июля 2023 г.)

Канал: @cherkashindev

709

​​Проверка именования файлов и папок с помощью плагина 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-паттернов). Протестировать свой паттерн можно тут.

👍 3