Какие инструменты рефакторинга вы используете для Python?

StackOverflow https://stackoverflow.com/questions/28796

  •  09-06-2019
  •  | 
  •  

Вопрос

У меня есть куча классов, которые я хочу переименовать.Некоторые из них имеют маленькие имена, и это имя повторно используется в других именах классов, где я не хочу, чтобы это имя менялось.Большая часть этого содержится в коде Python, но у нас также есть некоторый XML-код, который ссылается на имена классов.

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

У кого-нибудь есть опыт работы с инструментами рефакторинга Python?Бонусные баллы, если они также смогут исправить имена классов в XML-документах.

Это было полезно?

Решение

Тем временем я попробовал использовать два инструмента, которые имеют некоторую интеграцию с vim.

Первый - это Веревка, библиотека рефакторинга python, которая поставляется с подключаемым модулем Vim (и emacs).Я попробовал это для нескольких переименований, и это определенно сработало так, как ожидалось.Это позволило мне просмотреть рефакторинг как diff, что приятно.Это немного зависит от текста, но для меня это нормально, просто требуется больше времени на изучение.

Второе - это Мастер По ремонту велосипедов который, я думаю, выигрывает очки за название.Также подключается к vim и emacs.Я еще мало играл с ним, но помню, что пробовал его давным-давно.

Я еще недостаточно поиграл с обоими или попробовал другие виды рефакторинга, но я еще немного поработаю с ними.

Другие советы

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

Рефакторинг Python доступен в PyCharm (последний раз проверено 27.07.2016 в PyCharm 2016.2)

  • Изменить подпись
  • Преобразовать в пакет / модуль Python
  • Копировать
  • Извлекать рефакторинги
  • Встроенный
  • Инвертировать логическое значение
  • Создать функцию верхнего уровня
  • Перемещение Рефакторингов
  • Опускайте элементы вниз
  • Подтягивающие элементы вверх
  • Переименование Рефакторингов
  • Безопасное Удаление

Рефакторинг XML (я проверил в контекстном меню в XML-файле):

  • Переименовать
  • Двигаться
  • Копировать
  • Извлечь подзапрос как CTE
  • Встроенный

Рефакторинг Javascript:

  • Извлечь параметр в JavaScript
  • Изменить подпись в JavaScript
  • Извлечение переменной в JavaScript

WingIDE 4.0 (WingIDE - моя любимая среда разработки python IDE) будет поддерживать несколько рефакторингов, но я только что опробовал последнюю бета-версию beta6 и...нам еще многое предстоит сделать.Метод Retract работает хорошо, но символ Rename - нет.

Обновить:В версии 4.0 исправлены все инструменты рефакторинга.Сейчас они отлично работают.

Ваша IDE может поддерживать рефакторинг !!Проверьте это, у Eric, Eclipse, WingIDE есть встроенные инструменты для рефакторинга (включая переименование).И это очень безопасный рефакторинг - если что-то может пойти не так, IDE не будет выполнять ref.

Также подумайте о добавлении нескольких модульных тестов, чтобы убедиться, что ваш код не пострадал во время рефакторинга.

PyCharm есть некоторые функции рефакторинга.

РЕФАКТОРИНГ PYTHON

Переименовать рефакторинг позволяет безопасно и мгновенно вносить глобальные изменения в код.Локальные изменения внутри файла выполняются на месте.Рефакторинг работает в обычных проектах на Python и Django.

Использование Введите Переменную / Поле / Константу и Встроенный Локальный для улучшения структуры кода в рамках метода, Способ извлечения чтобы отказаться от более длинных методов, Извлечь суперкласс, Отжиматься, Потяните вниз и Двигаться перемещать методы и классы.

Я бы хотел взглянуть на Котелок (https://pybowler.io).

Он лучше подходит для использования непосредственно из командной строки, чем rope, и поощряет создание сценариев (одноразовых скриптов).

Вы можете использовать sed для выполнения этого.Хитрость заключается в том, чтобы вспомнить, что регулярные выражения могут распознавать границы слов.Это работает на всех платформах при условии, что вы получаете инструменты, которыми в Windows является Cygwin, Mac OS может потребовать установки инструментов разработки, я не уверен, а в Linux это есть "из коробки".Таким образом, grep, xargs и sed должны сделать свое дело после 12 часов чтения справочных страниц методом проб и ошибок ;)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top