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

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

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

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
70
0
36 999
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Ответ принят как подходящий

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

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

Второй - Ремонтник велосипедов, который, как мне кажется, приносит очки по названию. Также подключается к vim и emacs. Еще не очень много играл с ним, но помню, как давно пробовал.

Еще не поигрался с обоими в достаточной мере или пробовал больше типов рефакторинга, но я еще попробую их взломать.

Однажды Великий Бог сойдет с Небес и даст нам инструмент рефакторинга, основанный на Dev Express C# Code Rush для других языков. Когда наступит этот день, Ctrl + Plick станет наиболее часто используемым ярлыком на Земле. Аминь.

Pedro Dusso 05.04.2013 20:25

Веревка находится в странном месте. Там много документации, но все еще трудно понять. Нет хороших руководств. Кто-то должен просто сделать версию vim на github под названием modern vim IDE, включая батареи, и сэкономить нам много времени. Janus - отличное начало, но он не включает никаких библиотек рефакторинга, автозавершения кода Django и т. д.

user798719 28.06.2013 07:27

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

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

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

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

Просто попробовал Wing 6.0.4 pro на основе этого ответа, и первый простой рефакторинг, который я сделал (перемещение функций в отдельные файлы), сломал код, просто добавив новые операторы импорта за последним импортом, он смог найти без отступов, и хотя этот оператор не был на высшем уровне. Шесть лет спустя все еще основные проблемы. Не рекомендуется!

Kilian Brendel 20.04.2017 11:51

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

Надеюсь, поскольку он предлагает то же самое (найти и заменить), что и ответ с наименьшим количеством голосов.

CornSmith 14.12.2013 11:23

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

PYTHON REFACTORING

Rename refactoring allows to perform global code changes safely and instantly. Local changes within a file are performed in-place. Refactorings work in plain Python and Django projects.

Use Introduce Variable/Field/Constant and Inline Local for improving the code structure within a method, Extract Method to break up longer methods, Extract Superclass, Push Up, Pull Down and Move to move the methods and classes.

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

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

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

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

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

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

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

Я только что проверил, он не может переименовать функцию внутри файла pyx Cython.

rwst 08.01.2018 11:44

Я бы посмотрел на Котелок (https://pybowler.io).

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

На самом деле я сам использовал RedBaron

qff 09.02.2021 23:36

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