Примените 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.
Другие вопросы по тегам