Skip to content

Latest commit

 

History

History
62 lines (49 loc) · 5.38 KB

File metadata and controls

62 lines (49 loc) · 5.38 KB

Большие задачи

  • Более умная работа с питоновскими аннотациями
  • Переписать угадывание типов
  • Придумать, как обрабатывать декораторы
  • Заменить парсер питоновского кода (чтобы поддерживать новые языковые конструкции)
  • Assert'ы не только для возвращаемого значения
    • сериализация аргументов функции перед тестом и после
    • сериализация класса перед тестом и после теста
    • Assert'ы для переменных из замыкания? (Можно считать, что это аналог static полей из джавы)
  • 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?

В чем идея PresitentSet и internal переопределение операций +=????