Примените libcst codemod и пропустите тестовые файлы.
Я пишу кодмод с libcst , который наследуется отVisitorBasedCodemodCommand
. Он работает нормально, но довольно медленно. Один простой трюк — пропустить все тестовые файлы, начинающиеся сtest_
условно. Однако мне не удалось найти место для добавления такой логики в мой кодмод.
Я виделSkipFile
исключение , но я не знаю, откуда я мог его вызвать.
Как я могу игнорировать свои тестовые файлы?
1 ответ
Вы можете поднятьSkipFile
в любом месте codemod, когда вы обнаружите, что текущий файл не может быть изменен codemod. Поскольку вы заранее знаете, что хотите полностью пропустить тестовые файлы, вы можете отказаться от посещения узла модуля уже, например:
import pathlib
import libcst as cst
from libcst.codemod import VisitorBasedCodemodCommand, SkipFile
class SkipTests(VisitorBasedCodemodCommand):
def visit_Module(self, mod: cst.Module) -> bool | None:
if pathlib.Path(self.context.filename).name.startswith("test_"):
raise SkipFile("not touching any tests")
return True
Теперь, когда вы вызываетеlibcst.tool
с помощью codemod вы должны увидеть строку журнала для каждого пропущенного файла:
$ python -m libcst.tool codemod so.SkipTests .
Calculating full-repo metadata...
Executing codemod...
Codemodding /path/to/example/test_mod.py
Skipped codemodding /path/to/example/test_mod.py: not touching any tests
Finished codemodding 8 files!
- Transformed 7 files successfully.
- Skipped 1 files.
- Failed to codemod 0 files.
- 0 warnings were generated.