Я добавлял новый плагин 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 и правила в проект.