問題タブ [automated-refactoring]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
oop - SOLID原則施行の自動評価
プロジェクトでオブジェクト指向設計のSOLID原則がどの程度尊重されているかを自動的に評価できるツールはありますか?
c# - クラスからインターフェイスを簡単に作成するにはどうすればよいですか?
10個のメソッドを持つクラスがあります。私が欲しいのは、そのクラスのインターフェースを作成することです。つまり、インターフェースには、これらの10個のメソッドの署名のみが含まれます。
Visual Studioを使用して.NETで簡単に実行できますか?
プロジェクトのアーキテクチャを変更していて、プロジェクトに存在するすべてのクラスにインターフェイスが必要なため、この質問をしています。
eclipse - Test クラスを Source クラスと同期させる
Eclipse には 2 つのソース フォルダーがあり、1 つsrc
はtest
. それらはまったく同じパッケージ構造を持ち、各 src クラスには、その名前に「Test」が追加された同等のテストがあります。リファクタリング中に src クラスを移動することがあります。Eclipse がテスト クラスも自動的に移動する設定はありますか? また、ソース クラスの名前を変更する場合も同様です。
c++ - C++ ソースを解析し、ヘッダー内のインライン メソッドを .cpp ソース ファイルに移動するツールは?
私たちのアプリケーションのソース コードは、数十万行、数千のファイルで構成されており、場所によっては非常に古いものになっています。このアプリケーションは 1995 年か 1996 年に最初に作成されたものです。ここ数年で、私のチームはソースの品質を大幅に改善しましたが、特に私を悩ませている問題が 1 つあります。多くのクラスには、ヘッダー ファイルで完全に定義された多くのメソッドがあります。
場合によっては、ヘッダーでインラインで宣言されたメソッドに問題はありません-構造体のコンストラクター、インライン化によりかなり高速になる単純なメソッド(このような数学関数がいくつかあります)など。しかし、インライン化されたメソッドの自由な使用は明らかではありません理由は次のとおりです。
- 混雑
- メソッドの実装を見つけるのが難しくなります (特に、仮想関数のクラスのツリーを検索すると、ヘッダーでバージョンが宣言されているクラスが 1 つだけ見つかります...)
- おそらくコンパイルされたコードのサイズが増加します
- おそらく、大規模なコードベースでは不安定であることで有名なリンカに問題が発生します。公平を期すために、ここ数年でかなり良くなりましたが、完璧ではありません。
この最後の理由が問題を引き起こしている可能性があり、コードベースを調べてほとんどの定義をソース ファイルに移動するのは十分な理由です。
私たちのコードベースは巨大です。 これを (ほとんど) 実行できる自動化ツールはありますか?
ノート:
- Embarcadero RAD Studio 2010 を使用しています。つまり、C++ の方言にはVCL やその他の拡張機能などが含まれています。
- スタンドアロンのヘッダーもいくつかありますが、ほとんどのヘッダーは通常どおり、対応する .cpp ファイルとペアになっています。拡張子を除けば、ファイル名は同じです。つまり、Xh で定義されたメソッドがある場合は、それらを X.cpp に移動できます。これは、ツールがプロジェクト全体の解析を処理する必要がないことも意味します。本体が定義されたメソッドを確実に認識できる限り、おそらく .cpp/.h ファイルの個々のペアを解析し、インクルードを無視することができます。クラス宣言でそれを移動します。
r - R 言語対応のコードの再フォーマット/リファクタリング ツール?
最近、コーディング スタイルの点であらゆる場所にある R コードを扱っていることに気付きました。単一の構造に固執することについて厳密でない複数の作成者と個々の作成者です。現在よりも自動化したい特定のタスクがあります。
私は、次のタスクを管理するツール (またはツール) を探しています。リストは、希望の昇順でリストされていますが、存在に対する懐疑論の昇順でもあります。
基本的なフォーマット。「if( foo )」を「if (foo)」に変換したり、ブレースの位置を統一したりとか。
リストアクセスのために "foo$blah" を "foo[["blah"]]" に変換します。理想的には、オブジェクトが実際にリストであり、data.frame ではないかどうかを少なくとも推測し、リストのみを変換できるようにすることができます。
「=」を「<-」に変換しています。はい、これは単純な検索と置換ですが、実際にはそうではありません。ツール (または正規表現) は、"x = 5" を変換するが "foo(x=5)" を変換しないことを認識できるように、言語を認識する必要があります。また、単に記号を置き換えるだけでなく、代入演算子の両側に単一の空白を確保することも非常に便利です。
特に関数とファイル間での変数の名前変更。たとえば、リストに要素「foo」があるとします。一度「foobar」に変更できれば、コード フロー全体でそのリストのすべての使用を追跡する必要がなくなります。これには、別の関数で別の名前として存在するリストなどを識別するために、ツールが制御フロー全体を実行できる必要があると思います。
命名規則。標準的な命名規則 ( Googleなど) を定義し、すべての関数、変数などを識別して変換できるようにしたいと考えています。これは、リスト要素などの前のエントリと関連していることに注意してください。
基本的な unix 処理コマンド (例: sed) を自由にリストしてください。ただし、少なくとも通常は問題を起こさないほど十分にスマートである限り (例: "foo(x=5)" を "foo(x<-5)" に変換) 」)。
そのようなツールがすでに完璧な状態で存在していたとしたら、今では聞いたことがあると思います.Rのような言語では、これらの種類の変更を自動的に行うのは難しいことも認識しています.でも、夢は叶うよね?誰かがこれらのいくつか/すべてについての指針を持っていますか?
java - Java のリファクタリング/再構築ツール
小さなモジュールに分割したい大規模なモノリシック Web アプリケーションがあります。最初のステップとして、現在のように見えるパッケージ階層を変更したいと思います:
booking
たとえば、パッケージ構造が以下のパッケージ名として使用されている場合は、それを希望しますcom.companyname.project
たとえば、単純な正規表現を使用して再構築を行うことができるツールがあるかどうか疑問に思っています。
たとえば、次の
com.companyname.project.dao.bean.booking
ようになります。
com.companyname.project.booking.dao.bean
と
com.companyname.project.dao.service.booking
次のようになります。
com.companyname.project.booking.dao.service
Eclipse を使用してパッケージをドラッグ アンド ドロップすることもできますが、非常に反復的な作業になるため、最小限の関与でこれを実行できるものを探しています。
namespaces - プロジェクト全体を XE2 の名前空間に追加します
Embarcadero RAD Studioの多くのバージョンで使用されてきたC++ Builderアプリケーションがあります。今、私はそれをXE2でコンパイルしようとしていて、 TGroup というクラスがWinsockのTGroupクラスとあいまいになるという問題に遭遇しました。
驚いたことに、システムの最初のアーキテクトは名前空間を使用していなかったので、この問題は解決できたはずです。まず、すべてのプロジェクト コードを 1 つの名前空間に追加することにしました。しかし、すぐに、約1400 個の .h および .cpp ファイルを調べなければならないことに気付きました。
どうかお願いします...名前空間内にプロジェクト全体をすばやくカプセル化するための優れたツールはありますか?
ほとんどのファイルは、レイアウトが少し異なります。インクルードの後に定義があるものもあれば、そうでないものもあります。しかし、インクルードの後に名前空間宣言を挿入するだけで、最初は問題なく動作し、最後の#endifの直前で閉じることができます。これは包含ガード#defineです。
c# - Visual Studio を使用して、新しいクラスを使用するようにクラス コンストラクターをリファクタリングできますか?
コンストラクターにパラメーターが多すぎる次のクラスがあり、すべてのパラメーターをカプセル化するオブジェクトを 1 つだけ受け取るようにクラスをリファクタリングしたいと考えています。
Visual Studio リファクタリング ユーティリティを使用して、すべてのコンストラクター パラメーターを新しいクラスにカプセル化することはできますか?
だから私の質問は
- クラスへのすべての参照を手動で更新する必要がないように、Visual Studio を使用してこれを行うことはできます
MyClass
か? - Resharperなど、この機能をサポートする他のリファクタリング ツールはありますか?
単体テスト スイートでこのクラスへの参照が何千もあるため、これは大変な作業です。
java - 一般的な`catch(Exception e)`のみを使用したJavaコードベースの自動化された「修正」
私は大規模なコードベースを持っており、そこには多くのインスタンスがあります
アンチパターン。約700インスタンス。魔法のように、そしてまとめて、これらすべてを特殊なキャッチブロックの次の層に置き換えることができるツール(たとえば、IDEなど)があるかどうか疑問に思っています。以下に示す方法で、IntelliJまたはEclipseの「try/catchでラップ」するのと同様のマスリファクタリングを適用するもの。注:700個すべてが既知であると言っているわけではありませんIOException
。これは、特定の場合にスローされる唯一の例外タイプが)であると想定した単なる例IOException
です。
私が探しているリファクタリングは、try{}
IntelliJ/Eclipseが「catchでラップ」または「throws句に追加」クイックフィックスを提供するために行うのと同じブロックのセマンティック分析を行うものです。
私はこれが問題を「修正」しないことを理解していますが、それは考古学の段階的な手動ビットを節約します。
アイデア?
一般的な例外キャッチアンチパターンの検出に関する関連質問。