Python ではどのようなリファクタリング ツールを使用していますか?
-
09-06-2019 - |
質問
名前を変更したいクラスがたくさんあります。それらの中には小さな名前が付いているものもありますが、その名前は他のクラス名で再利用されており、その名前を変更したくないのです。このほとんどは Python コード内に存在しますが、クラス名を参照する XML コードもいくつかあります。
単純な検索と置換では、ここまでしかできません。私の場合、AdminAction の名前を AdminActionPlug に、AdminActionLogger の名前を AdminActionLoggerPlug に変更したいと考えています。そのため、最初の検索と置換が 2 番目の検索と置換にも誤ってヒットします。
Python リファクタリング ツールの経験がある人はいますか?XML ドキュメント内のクラス名も修正できればボーナス ポイントです。
解決
それまでの間、私は vim と何らかの形で統合されている 2 つのツールを試してみました。
1つ目は ロープ, 、Vim (および emacs) プラグインに付属する Python リファクタリング ライブラリ。名前をいくつか変更して試してみましたが、間違いなく期待どおりに機能しました。リファクタリングを差分としてプレビューできるようになりました。これは素晴らしいことです。少しテキスト中心ですが、学習するのに時間がかかるだけで、私にとっては問題ありません。
2つ目は 自転車修理マン これは名前でポイントを獲得すると思います。vim や emacs にもプラグインします。まだあまり遊んでいませんが、昔試した記憶があります。
両方ともまだ十分に試していませんし、より多くの種類のリファクタリングを試していませんが、もう少しハッキングしてみます。
他のヒント
強くお勧めします PyCharm - リファクタリングだけではありません。数年前に最初の PyCharm の回答がここに投稿されて以来、PyCharm のリファクタリング サポートは大幅に改善されました。
PyCharm で利用可能な Python リファクタリング (最終チェック日 2016/07/27 PyCharm 2016.2)
- 署名の変更
- Python パッケージ/モジュールに変換
- コピー
- 抽出リファクタリング
- 列をなして
- ブール値を反転する
- 最上位関数の作成
- 移動リファクタリング
- メンバーを押し下げる
- メンバーを引き上げる
- リファクタリングの名前変更
- 安全な削除
XML リファクタリング (XML ファイルのコンテキスト メニューをチェックインしました):
- 名前の変更
- 動く
- コピー
- サブクエリを CTE として抽出
- 列をなして
JavaScript リファクタリング:
- JavaScriptでパラメータを抽出する
- JavaScript で署名を変更する
- JavaScriptで変数を抽出する
WingIDE 4.0 (WingIDE は私が選んだ Python IDE) はいくつかのリファクタリングをサポートしますが、私は最新のベータ版、ベータ 6 などを試してみました。やるべきことはまだあります。Retract メソッドは適切に機能しますが、Rename Symbol は機能しません。
アップデート:4.0 リリースでは、すべてのリファクタリング ツールが修正されました。彼らは今、うまく機能しています。
IDE はリファクタリングをサポートできます。Eric、Eclipse、WingIDE にはリファクタリング用のツールが組み込まれています (名前変更を含む) を確認してください。そして、これは非常に安全なリファクタリングです。何か問題が発生した場合、IDE は ref を実行しません。
また、リファクタリング中にコードが影響を受けないようにするために、いくつかの単体テストを追加することも検討してください。
PyCharm いくつかのリファクタリング機能があります。
Pythonのリファクタリング
名前の変更 リファクタリングにより、グローバルなコード変更を安全かつ即座に実行できます。ファイル内のローカル変更はその場で実行されます。リファクタリングは、プレーンな Python および Django プロジェクトで機能します。
使用 変数/フィールド/定数の導入 そして インラインローカル メソッド内のコード構造を改善するため、 抽出方法 長いメソッドを分割するには、 スーパークラスの抽出, 押し上げる, 引き下げる そして 動く メソッドとクラスを移動します。
見てみましょう ボウラー (https://pybowler.io).
これは、rope よりもコマンドラインから直接使用するのに適しており、スクリプト (一回限りのスクリプト) を推奨します。
これを実行するには sed を使用できます。重要なのは、正規表現で単語の境界を認識できることを思い出してください。これはツールを入手すればすべてのプラットフォームで機能します。Windows では Cygwin ですが、Mac OS では開発ツールのインストールが必要になる場合があります。よくわかりませんが、Linux にはこれがすぐに使えます。したがって、man ページを読んで試行錯誤した 12 時間の後では、grep、xargs、および sed がうまくいくはずです ;)