Бөлісу құралы:


Рефакторинг кода Python в Visual Studio

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

Visual Studio предоставляет несколько команд для автоматического преобразования и очистки исходного кода Python:

Предпосылки

  • Визуальная студия. Чтобы установить продукт, выполните действия, описанные в разделе "Установка Visual Studio".
  • Доступ к проекту кода Python с существующим кодом.

Переименование класса, метода или переменной

Команду "Переименовать" можно использовать для изменения имени определенного идентификатора, включая класс, метод или переменную. Visual Studio поддерживает обновление всех экземпляров идентификатора или только указанных экземпляров.

Ниже показано, как использовать команду "Переименовать " в коде.

  1. В коде щелкните правой кнопкой мыши идентификатор, который нужно переименовать, и выберите "Переименовать". Вы также можете поместить курсор на идентификатор и выбрать "Изменить>Рефакторинг>Переименовать" в меню или использовать сочетание клавиш Ctrl+R.

  2. В диалоговом окне "Переименовать " введите новое имя идентификатора, за которым следует ввод:

    Снимок экрана: указание другого имени идентификатора в Visual Studio 2022.

Добавление инструкции импорта

Если в коде есть идентификаторы, отсутствующие определения или вспомогательные сведения о типе, Visual Studio поможет устранить проблему. Когда вы помещаете курсор на идентификатор, который не содержит сведений, Visual Studio отображает смарт-тег (лампочку) слева от кода. Тег перечисляет команды для добавления необходимых import или from ... import инструкций для соответствующего идентификатора.

Ниже показано, как работать с смарт-тегом для добавления импорта в код.

  1. В коде поместите курсор на идентификатор, для которого Visual Studio отображает смарт-тег (лампочка). В этом примере смарт-тег отображается для вызова математического модуля:

    Снимок экрана: смарт-тег для идентификатора, который требует инструкции импорта, добавленной в Visual Studio 2022.

  2. В меню смарт-тегов выберите команду, чтобы добавить необходимые сведения о модуле или типе в файл кода. В этом примере выбрана команда для добавления инструкции import math .

    Visual Studio предлагает import дополнения для пакетов и модулей верхнего уровня в текущем проекте и стандартной библиотеке. Visual Studio также предлагает автозавершение для подпакетов, вложенных модулей и элементов модуля. К завершениям относятся функции, классы или экспортированные данные.

  3. После выбора параметра убедитесь, что в файл внесены ожидаемые изменения.

    Visual Studio добавляет инструкцию import в верхней части файла кода после других импортов или в существующую from ... import инструкцию, если тот же модуль уже импортирован. В этом примере оператор import math добавляется в верхней части файла после других импортов.

    Снимок экрана: инструкция импорта, добавленная после выполнения команды из смарт-тега в Visual Studio 2022.

Visual Studio пытается отфильтровать элементы, которые не определены в модуле. Примером является модуль, импортированный в другой модуль, который не является дочерним элементом импортируемого модуля. Многие модули используют инструкцию import sys , а не from xyz import sys. Вы не видите завершения импорта модуля sys из других модулей, даже если им не хватает участника __all__, который исключает модуль sys.

Аналогичным образом Visual Studio фильтрует функции, импортированные из других модулей или встроенного пространства имен. Если модуль импортирует settrace функцию из sys модуля, то в теории можно импортировать функцию из этого модуля. Однако оптимальным подходом является использование оператора import settrace from sys напрямую, поэтому Visual Studio специально предоставляет этот оператор.

Наконец, предположим, что модуль обычно исключается, но у него есть другие значения, которые включаются, например, имя, которому присвоено значение в модуле. Visual Studio по-прежнему исключает импорт. Это поведение предполагает, что значение не должно быть экспортировано, так как другой модуль определяет его. Другое назначение, скорее всего, будет фиктивным значением, которое также не экспортируется.

Удаление неиспользуемых импортов

При написании кода легко заканчивать с import строками кода для модулей, которые не используются совсем. Так как Visual Studio анализирует код, она может автоматически определить, требуется ли import оператор, глядя на то, используется ли импортированное имя в области, следующей после выполнения оператора.

Ниже показано, как удалить неиспользуемые импорты в коде.

  1. В коде поместите курсор на инструкцию import , для которой Visual Studio отображает смарт-тег (лампочка). В этом примере смарт-тег отображается для неиспользуемых модулей binascii, массива и глоба:

    Снимок экрана, на котором показано, как получить доступ к параметрам для удаления неиспользуемых импортов в Visual Studio 2022.

  2. Выберите параметр "Удалить все неиспользуемые импорты " или "Удалить неиспользуемый импорт ", чтобы удалить только выбранный модуль.

  3. После выбора параметра убедитесь, что изменения внесены в файл. В этом примере Visual Studio удаляет три неиспользуемых модуля: binascii, array и glob.

    Снимок экрана: результаты использования команды

Рекомендации при использовании команд рефакторинга

Прежде чем использовать команды рефакторинга, ознакомьтесь со следующими рекомендациями.

  • После выполнения команды рефакторинга можно отменить изменения с помощью команды «Изменить»>Отменить. Команда "Переименовать " предлагает функцию предварительной версии , чтобы вы могли видеть изменения перед их применением.

  • Visual Studio не учитывает поток управления в коде. Если вы используете идентификатор, прежде чем поддерживающее определение присутствует в коде, например оператор import, Visual Studio по-прежнему обрабатывает идентификатор как используемый. Visual Studio ожидает найти вспомогательные определения идентификаторов перед вызовами и назначениями.

  • Visual Studio игнорирует все from __future__ инструкции импорта. Эти инструкции являются импортами, выполняемыми внутри определения класса или с помощью from ... import * инструкций.