Есть ли способ запустить lint-staged только для новых файлов (тех, которые git не отслеживал раньше)
В моем проекте, написанном на Typescript, я хочу начать применять аннотации типов для возвращаемых типов и типов параметров всех функций. Для этого я создал отдельный конфиг tslint, который расширяет мой основной конфиг и добавляет это правило поверх этого. Я запускаю tslint через лайки и lint-staged с этой расширенной конфигурацией, чтобы проверить все подготовленные файлы перед внесением изменений. Проблема в том, что если я внесу изменения в один из старых файлов (некоторые из них довольно большие), lint staged тоже проверит этот файл и не даст мне выполнить коммит, если я не введу аннотации всех функций во всех файлах. Но это большая работа, и я хочу применить это только к новым файлам. Есть ли способ отфильтровать промежуточные файлы только к тем, которые добавлены в этот коммит?
3 ответа
пух-ступенчатый использует другую библиотеку им устроило-ГИТ-файлы(SGF) для получения списка файлов поставили перед мерзавец совершить.
Вот несколько кодов состояния, которые использует sgf.
- Добавлен (A)
- Скопировано (C)
- Удалено (D)
- Модифицированный (M)
- Переименовано (R)
lint-staged передал код состояния ACM в пакет sgf.
sgf.cwd = gitDir
*return pify(sgf)('ACM').then(files => {*
/* files is an Object{ filename: String, status: String } */
const filenames = files.map(file => file.filename)
Если ты хочешь lint-staged
чтобы получить только добавленные файлы, вы можете выполнить форк репо и передать AC вместо sgf. Было бы идеально, если бы у нас был способ это настроить. Я поднял вопрос в репо. Я надеюсь, они решат это
Начиная с версии 12.5.0 lint-staged, вы можете использовать--diff-filter
флаг с такими параметрами, как @Deadfish писал ранее.
Отlint-staged
документы:
--diff-filter: по умолчанию включаются только файлы, которые были добавлены, скопированы, изменены или переименованы. Используйте этот флаг, чтобы переопределить значение ACMR по умолчанию чем-то другим: добавлено (A), скопировано (C), удалено (D), изменено (M), переименовано (R), тип изменен (T), не объединен (U), неизвестен (X), или соединение разорвано (B).
В вашем файле package.json это будет примерно так:
"scripts": {
"lint:staged": "lint-staged --diff-filter=A"
}
Примечания к выпуску здесь: v0.12.5
Вы можете сделать это, если отделите свой "новый" код от "старого", используя структуру каталогов. После этого это всего лишь 2 различных шаблона глобуса в вашей конфигурации lint-staged.
Это самый простой способ сделать это, насколько я могу подумать, и он прекрасно работает с другими инструментами качества кода, такими как ESLint, так как вы можете поставить .eslintrc
в подкаталоги.