Инструмент Python для проверки всех функций в проекте

1

У меня есть смутное воспоминание об этом вопросе, заданном где-то в киберпространстве, но я не могу найти его снова.

Скажем, у меня есть файл с набором функций (и или классов), но я знаю, что некоторые из них не используются нигде в моем проекте. Есть ли инструмент для сканирования моего проекта, чтобы увидеть, какие функции не используются?

Я знаю, что могу сделать это индивидуально для каждой функции, например, используя Pycharm, но я не знаю, как это сделать для всех функций в файле. Похоже, для этого нужен инструмент, но я не знаю об этом.

РЕДАКТИРОВАТЬ

Я знаю, что есть крайние случаи кода, как указано в @deceze, которые делают этот вид проверки использования невозможным вообще. Но я был бы доволен инструментом, который работает в 99% случаев. Остальное можно поймать, например, с помощью единичных тестов и вручную обрабатывать.

  • 1
    pylint? Нечто подобное определено, но не используется
  • 2
    Обратите внимание, что это практически невозможно из-за того, что вы можете (в качестве крайнего примера) выполнить getattr(foo, input('Enter function name'))() , который невозможно отследить статическим инструментом.
Показать ещё 1 комментарий
Теги:
python-3.x

2 ответа

1

Я не знаю ни о каком инструменте, который исследует весь ваш проект, но вы можете легко сделать один из нескольких строк кода, используя библиотеку jedi.

Здесь есть jedi.Script.usages, который именно здесь вы хотите, инструмент будет делать что-то вроде:

  • Создайте среду jedi, используя ваш интерпретатор python по выбору (этот способ будет содержать информацию о sys.path
  • Пройдите над файлами проекта, которые вы хотите проанализировать, и извлеките функции, которые вы хотите проверить, используя (glob, os.walk, custom cli,...)
  • В каждом файле вам просто нужно извлечь функции, которые вы хотите проанализировать (в вашем парсере вы храните местоположения в виде пар линий/столбцов)
  • Создайте скрипт jedi с предыдущим местоположением и вызовите его, а затем сохраните результаты в словаре
  • прибыль

PS: самым "сложным" шагом будет тот, который извлекает функции из ваших файлов python, но я думаю, что это также можно было бы сделать с помощью jedi, вместо этого используя другие встроенные синтаксические анализаторы python, здесь непроверенный фрагмент кода:

for definition in jedi.names(source, all_scopes=True, definitions=True, references=True):
    if definition.parent().type == "function": # The name is located in a function ...
        ass = definition.goto_assignments()
        if len(ass) > 0 and ass[0].parent().type == "function": # ... and is assigned to in a function
            print("Found a local variable:", definition.name)

Извлечен из этой проблемы github

  • 0
    Ого, я НИКОГДА не слышал о джедаях (вероятно, потому что я использую Pycharm с незапамятных времен). Выглядит интересно.
  • 0
    @Ray Настоятельно рекомендуется, я пользователь SublimeText, но я могу предоставить вам множество IDE, которые используют удивительную библиотеку джедаев, поддерживающую автозаполнение за кулисами, это отличная библиотека. Кстати, отредактировал мой вопрос ... Хорошая вещь об этой библиотеке в том, что публичный интерфейс очень тонкий, и вы сами можете легко создавать такие инструменты ... попробуйте! ;)
0

Coverage.py - недавно использовал его, чтобы показать мое тестовое покрытие. Но его можно использовать и в других контекстах

Ещё вопросы

Сообщество Overcoder
Наверх
Меню