- Более умная работа с питоновскими аннотациями
- Переписать угадывание типов
- Придумать, как обрабатывать декораторы
- Заменить парсер питоновского кода
- Assert'ы не только для возвращаемого значения
- сериализация аргументов функции перед тестом и после
- сериализация класса перед тестом и после теста
- PythonTree <-> AssembleModel?
- (совсем на будущее) Можно перенести генерацию временных питоновский скриптов (для запуска функции, для mypy) в общий кодогенератор?
- Добавить mock-объекты
- Запуск в изолированном окружении
- Вынести Python-CLI
-
Все изменения положить в отдельные пакеты, в том числе перенести Python модели из Api.kt в PythonApi (возможно тоже в другой модуль?)
Кроме Api.kt внутри utbot-framework есть много Python- файлов и when, где есть питоновские ветки
-
Переписать в IdUtils.kt проверку на ClassId.enclosingClass для PythonClassId, по хорошему его нужно убрать, но при этом изменить логику на PythonClassId, так как дефолтная версия использует jClass
-
Обработка исключений в codegen (writeWarningAboutFunction)
Чтобы сделать нормальную обработку, надо в UtExecutionFailure отказаться от хранения Throwable, заменить его на какую-то абстракцию.
Сейчас, чтобы можно было хоть как-то упаковывать UtExecutionFailure от питона, я его оборачиваю в Throwable("питоновское исключение"). Понятно, что с таким подходом оттуда еще какую-то информацию (подробное сообщение, stacktrace) не достать.
В текущей реализации кодогенератор решает, что функция и должна возвращать исключение, и поэтому комментарий сам не добавляет. Чтобы для питона хоть как-то понимать, что в тесте кидается исключение, я добавила в createTestMethod (который теперь находится в PythonCgMethodConstructor.kt) дополнительный комментарий, который бывает только при питоновской кодогенерации.
-
переписать создание файлов на Psi Documents
-
создавать временную директорию в правильном месте
-
обрабатывать аргументы по имени (kwargs), *args, **kwargs
-
заменить klaxon на moshi
-
Более полный сбор конструкторов (учет наследования)
-
Нормально организовать питоновскую интроспекцию (не создавать каждый раз новый процесс)
-
учитывать AnnAssign
-
учитывать в ArgInfoCollector ситуации вида
arg.field[0] -
Понять, когда завершать fuzzing
- Либо timeout, либо кончились модели провайдеров?
-
json serializers для результата функции
-
обрабатывать вызов функции вида module.func()
-
разобраться с
nan(nan == nan->False) -
добавить обработку dataclass'ов
-
импорты в codegen
-
sys.pathв codegen -
получение
sys.pathиз настроек проекта -
добавить сообщение о mypy ошибках
-
обработка возвращаемого значения
-
алгоритм assert для списков / словарей
-
большие числа при генерации списков???
Проблемы могут быть с: __getitem__/__class_getitem__,
__add__/__radd__/__iadd__
Комментарии по типам:
datetime.timezone(x: timedelta)NoneType?