Comments 6
@lexx0606 - стоило бы сначала посмотреть существующие анализаторы. Например мой dеpendency_extractor, или nanoapi c визуализатором. Можно тогда найти насколько подсказок что упущено:
Есть такая штука в питоне, как Function Сomposition особенно если ее делать внутри класса (привет fastapi) или объявление класса внутри класса (привет модели django). В примере выше подобные функции будут помечены как методы класса. Хотя это не так.
Пропущена обработка importlib. А это значит, что динамические импорты идут лесом. Библиотеки использующие importlib, вместо условно статических импортов, будут неправильно интерпретированы.
Непонятно, что там с лямбдами, как атрибутами класса. Они будут превращены в методы?
Тайпинг пропущен как таковой. Однако, если в тайпинге указать
response: 'django.http.HttpResponse'
вроде импорта и нет... а вроде зависимость есть... Зря, конечно, что такое возможно в Python, ну что есть - то есть.
В общем, успехов автору. Все же, ИМХО, такой анализатор писать, используя llm в соавторах, пока рано. Лучше самому начать разбираться в Python, ну и расширять кругозор существующих аналогов тоже не помешает.
С ForwardReference чуть сложнее и зависит от задачи. Если задача найти циклические импорты, то ForwardReference их не образует ни в каком виде. С другой стороны, явный импорт внутри метода или функции — тоже (и тогда раскраска должна это отдельно отмечать).
Спасибо.
Посмотрел, importlib.import_module и importlib.__import__ при генерации AST не создают ast.Import. Надо бы было проверить сразу и самому, но использование importlib.import_module и importlib.__import__ при этом не самая частая практика. В окружениях я такое сейчас нашел только в реально больших проектах. Поэтому на практике недопоказанные импорты я бы заметил не скоро. Так что это исправлю в ближайшее время.
С остальными вещи тоже со временем посмотрю и сделаю нужные правки.
А nanoapi это бесплатная штука?
Спасибо, работает. Только на 104 строке опечатка, должно быть `for classeses in self.class_funct_def:`. Но схема всё равно получается нечитаемой. Стрелочки слишком длинные, блоки маленькие.
Посмотрите в сторону plantuml. У него под капотом тот же graphviz, но сам рендер получается приятнее.
Строим полный граф импортов python на основе статического анализа