Какие инструменты рефакторинга вы используете для Python?
-
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 часов чтения справочных страниц методом проб и ошибок ;)