Python ではどのようなリファクタリング ツールを使用していますか?

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

  •  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 がうまくいくはずです ;)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top