Как я нашел ошибку в 2000 файлах

Я добавлял новый плагин eslint, который будет сортировать импорты в js/ts файлах.

После добавления eslint-plugin-simple-import-sort,
я запустил eslint --fix и обнаружил, что изменилось около 2000 файлов.
Поскольку там было только изменение порядка импорта, я подумал, что проблем быть не должно.

Я был удивлен, когда обнаружил очень странное

TypeError: Cannot read properties of undefined
Вход в полноэкранный режим Выйти из полноэкранного режима

Изменение порядка импорта не помогло решить проблему.

И теперь я начал думать, как найти проблему, не перебирая все 2000 файлов.

Затем пришла идея. Поскольку все изменения независимы,
я могу сделать коммит для каждого изменения файла, а затем выполнить git bisect и найти файл, который вызывает проблему.

Поэтому я создал bash-скрипт, который будет получать имена всех файлов из git status и создавать коммит с именем файла:

Давайте посмотрим, как это сделать:

git status --porcelain # prints git status in a format that can be parsed
# M utils/index.ts
# M components/Button.tsx
# ...
Войти в полноэкранный режим Выйти из полноэкранного режима

Затем мы передадим этот результат в awk и выведем только имя файла:

git status --porcelain | awk '{print $2}'
# utils/index.ts
# components/Button.tsx
# ...
Войти в полноэкранный режим Выйти из полноэкранного режима

читаем каждую строку (имя файла) и делаем коммит с --no-verify, чтобы не запускать проверку перед коммитом:

#!/bin/bash
(git status --porcelain | awk '{print $2}') | 
while read -r line
do
    git add $line
    git commit -m "Add file $line" --no-verify
done
Войти в полноэкранный режим Выход из полноэкранного режима

После выполнения этого сценария у меня было около 2000 коммитов, где я мог запустить git bisect и найти проблему.

Я нашёл файл, который вызывал проблему, и он был совершенно не связан с файлом, в котором возникала ошибка.
Поэтому я просто проигнорировал правило сортировки в этом файле (до последующего исследования).
Затем я сделал мягкий сброс, чтобы отменить все 2000 коммитов, и вставил один коммит, который успешно добавил новый плагин eslint и правила в проект.

Оцените статью
Procodings.ru
Добавить комментарий