問題タブ [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.

0 投票する
2 に答える
521 参照

c++ - C++ リファクタリング: 条件付き展開とブロックの削除

私は、非常に大量のコード (主に C++) をリファクタリングして、特定の値に永続的に設定されている多数の一時的な構成チェックを削除しようとしています。たとえば、次のコードがあります。

value の呼び出しは bool または int を返します。これらの呼び出しが常に返す値を知っているので、呼び出しを通常の値に展開するためにいくつかの正規表現置換を行いました。

値は固定されていますが、コンパイル時に設定されるのではなく、共有メモリから読み取られるため、コンパイラは現在、舞台裏で何も最適化していないことに注意してください。

結果のコードは少し間抜けに見えますが、この正規表現アプローチは、コードの動作を変更せずに適用が簡単で呼び出しへの依存を削除するため、私が望む多くのことを達成します。ブロックが呼び出されないか、チェックが常に true を返すことを知っているため、多くのことを行います。また、(特にバージョン管理と比較する場合) 何が変更されたかを確認し、それをクリーンアップする最終ステップを実行するのがかなり簡単になり、コードの上のコードは最終的に次のようになります。

問題は、2 番目の、正しいが間抜けな段階から、最終的にクリーンなコードに到達するまでに、何百 (場合によっては何千) もの変更を加えなければならないことです。

これを処理できるリファクタリング ツールや、私が適用できるテクニックを誰かが知っているかどうか疑問に思いました。主な問題は、C++ 構文が完全な展開または削除を達成するのを非常に困難にし、上記のコードに多くの順列があることです。カバーする必要のあるさまざまな構文に対処するには、ほとんどコンパイラが必要だと感じています。

同様の質問があったことは知っていますが、このような要件を見つけることができず、質問されてからツールや手順が登場したかどうか疑問に思いましたか?

0 投票する
2 に答える
1691 参照

.net - Visual Studio Express 2010 Editionでインターフェイスを抽出する簡単な方法はありますか?

インターフェイスを抽出したい大きなクラスがあります。

リファクタリングオプションの下に「ExtractMethod」しか見つからなかったので、それを実行する無料のツールがあるかどうか疑問に思っています。手動でインターフェイスを作成する必要はありませんか?

0 投票する
0 に答える
259 参照

java - XSD のリファクタリングおよび / または Java コードの生成

私のアプリが提供しているサービスの XSD のレガシー セットが提供されており、リファクタリングが非常に必要です。一部のコンシューマー アプリには開発チームがないため、結果とスキーマを変更できません。ただし、実際のファイルに対しては何でもできます。

これが私のディレクトリ設定です:

    • サブディレクトリ1
      • 一般
      • 発達
    • サブディレクトリ2
      • 一般
      • 発達

簡単にするために、ファイル間のバージョンの増分により、complexType に要素が追加され、以前のバージョンがベース/スーパー クラスと見なされるように再適用できると仮定します。

これで、subdir1/common に、Include_v01.xsd と Include_v02.xsd を含めることができます。subdir1/development には、Include_v01.xsd を使用する svc1_v01.xsd と、Include_v02.xsd を使用する svc1_v02.xsd があります。

Subdir2/common では、Include_v02.xsd と Include_v03.xsd を使用できます subdir2/developmen では、Include_v02.xsd を使用する svc2_v01.xsd と、include_v03.xsd を使用する svc2_v02.xsd を使用できます

私はそのようなサブディレクトリを約20個持っています。これらのディレクトリには、約 1500 個ほどの XSD ファイルがあります。各 xsd には複数のインクルードを含めることができ、それ自体に複数のインクルードを含めることができ、それ自体に複数のインクルードを含めることができます。

最終的には、これらを最も単純な形式にリファクタリングしたいと考えています。たとえば、Include_v02.xsd のコピーは 1 つだけで、Include_v02.xsd は完全に別のコピーではなく、Include_v01.xsd から実際に構築されます。 . はい、ファイルをコピーし、名前を変更し、フィールドを 1 つ追加しただけのジャークもいます。次に、それを使用するすべてのサブディレクトリにコピーしました。

それよりも重要なのは、Java クラスを同様の構造で生成できることです。

現在、私ができる最善の方法は、ディレクトリで xjc を実行し、各サービスのスキーマを別のパッケージにコンパイルすることです。これにより、さまざまな Java パッケージに Include_v02 オブジェクトのコピーが大量に作成されます。スキーマがバージョン管理されていないか、バージョン間で再管理されていないため、この方法で行う必要があります。同じばかがファイルを複製し、名前を変更し、新しい要素を追加するだけで、ルート要素を同じに保ち、他の際立った特徴はありません。

それは難しい注文であり、Java オブジェクトを簡単にコピー/マージする方法、または異なるパッケージ内の同一の Java オブジェクト間で単純にコピーする方法に落ち着くでしょう。

ここで参照されているように、エピソード ファイルは、現在生成に使用しているスクリプトよりも優れているとは思えません。これは、多層のネスティングを考えると、各ルート要素を非常に慎重に把握する必要があるためです。使用済み。

EDIT============================ 私がInclude_v01.xsdに以下を持っていた場合:

そして、Include_v02.xsd には次のようなものがありました

私はいくつかの組み合わせが大好きです

にリファクタリングされた XSD

Include_v01.xsd 同じ Include_v02.xsd

また

Include_v01.xsd に残っているすべての個々の要素 (複合または単純) 新しい要素のみを追加して、Include_v01.xsd をインクルードするための Include_v02

また

2 つの Java クラス

Java クラスは私にとって最も重要ですが、そこに到達するのに役立つものは何でも優れています。

それがまったく可能でない場合、単純な場合、または価値がない場合は、同じオブジェクトが異なるパッケージに存在する場合に、同じオブジェクトを別のオブジェクトにコピーする簡単な方法にも感謝します。コードベースを単純化したいだけです。160 ほどのサービスがあり、それぞれに多くのバージョンがあり、各バージョンには SAME EXACT ファイルを含めることができます。これは、生成されたコードでは、同じクラスの 300 以上の定義を持つことができることを意味しますが、コピーされたインクルードのために異なるパッケージになります。

0 投票する
1 に答える
780 参照

java - Eclipse-移動と名前変更のリファクタリングを記録して別のワークスペースに適用します

私は現在、さまざまなチームによって作業されているかなりの数のサブモジュールを含む大きなJavaプロジェクトで作業しています。これらのチームの中には「フレームワーク」を構築しているものもあれば、フレームワークに基づいて「アプリケーション」を構築しているものもあります。

フレームワークの担当者がクラスを移動または名前変更すると、アプリケーションの担当者は、リファクタリングされたフレームワーククラスを使用している場所でコンパイルエラーが発生します。EclipseGalileo Release)に変更を記録し、別のワークスペースで参照を更新する方法はありますか?

これまでに試したのは、名前変更のリファクタリング中にリファクタリングスクリプトを作成することですが、そのスクリプトを別のワークスペースに適用しようとすると、で失敗しThe refactoring 'Rename Type' (org.eclipse.jdt.ui.rename.type) cannot be performed, since its input 'xxx.TestClass" does not existsます。まあ、それは(もう)大丈夫ではありませんが、私が欲しいのはxxx.TestClass、私のプロジェクト内のすべての参照をに変更することxxx.MyRenamedTestClassです。組み込みの機能または既存のプラグインを使用してこれを行う方法はEclipseにありますか、それとも自分で作成する必要がありますか?

ご協力いただきありがとうございます!

編集:今では、「Migrate JAR」プラグインが私が探している機能を提供していることがわかりましたが、JARはEclipseではなくMavenで構築しています。今、ソースコードを調べて、再利用できるパーツを見つけています。

0 投票する
4 に答える
3781 参照

c++ - .h をヘッダーと実装に自動的に分割 (リファクタリング) (h+cpp)

C++ コードを記述する場合、ヘッダー ファイルに完全な「実装」コードを記述することから始めることがよくあります。その後、実装を .cpp ファイルにリファクタリングする必要があります。

これは素晴らしいことですが、このプロセスは面倒ですが、それ以外は非常に簡単だと思います。そのため、これを自動化する方法はあるのでしょうか?

具体的には、宣言内のすべてのクラスと関数の定義を変換し、それらを新しいファイル.hで宣言したいと考えています。.cpp

私は xcode を使用していますが、どんな解決策にもオープンです。

0 投票する
2 に答える
241 参照

c# - Visual Studio 2010 のプロンプトに、リファクタリング用のファイルを準備できませんでしたと表示されます。これを修正するにはどうすればよいですか?

Visual Studio 2010 Ultimate を使用して C# 環境で Web 開発を行っています。Intellisense は引き続き機能し、コードは正常にコンパイルおよび実行されますが、右クリック メニューのリファクタリング ツールを使用してコードをリファクタリングできません。代わりに、「リファクタリング用のファイルを準備できませんでした」というプロンプトが表示されます。設定をデフォルトにリセットしましたが、うまくいきません。まだ機能していません。定義に移動するなど、他の機能は正しく機能しています。

0 投票する
1 に答える
113 参照

c# - デバッガーからコードを生成できるツールはありますか?

VS2010のイミディエイトウィンドウで?variableの同等のリファクタリングを考えています。何かがその出力を取得するか、別のメカニズムを使用して、そのオブジェクトとそのプロパティを(再帰的に)生成するコードを作成できますか。

統合テストに使用できるライブの「モック」オブジェクトを作成することを検討しています。この機能により、はるかに簡単になります。

更新:基本的に、次のことができるかどうかを確認しています...

0 投票する
1 に答える
3575 参照

matlab - MATLAB でのリファクタリング

私は前任者が書いたいくつかのプログラムを組み込むという無駄な仕事を手に入れました。整理されていないコードの恐ろしい混乱。

これまでのところ、自動識別 (Ci) についてしか知りません。そこで、何かツールを提案していただけないでしょうか。

私が抱えているいくつかの重要な問題:

  • ファイル全体で同じ構造への代入が輝きます
  • これは 1 つの大きなコード ファイルです。分割したいと思います
  • 非常に多くのコードが、決して使用されない結果を生成します

更新見栄え の良い部分で、Emacs の Matlab モードが非常に合理的な長すぎる行を分割できることがわかりました。

0 投票する
2 に答える
3453 参照

xcode - Xcode Extractリファクタリング機能の使用方法は?

XcodeのExtractリファクタリングツールをどのように使用しますか?

どのコードを選択しても、常に同じ役に立たないエラーメッセージが表示されます。

選択範囲には、抽出できるものは含まれていません。別の選択をして、再試行してください。

以下のスクリーンショットを参照してください。 コードを選択し、[リファクタリング]>[抽出...]メニューを使用します

選択範囲には、抽出できるものは含まれていません。

それを機能させるには何に従う必要がありますか?

私はこれを単純なiOSプロジェクトで行っていますが、特別なことはなく、C++もありません。Xcodeの最新バージョン(4.4)と最新の開発者プレビューリリースを試してみました。

これはバグですか?回避策はありますか?

0 投票する
1 に答える
364 参照

c++ - C++ プログラムでのマクロの使用を最小限に抑えるためのツール

さまざまな C++ スタイル ガイドでは、C プリプロセッサ マクロの使用を推奨していません。

マクロの使用によるエラーの検出に役立つツール (CPPCHECKER、Check) や、プリプロセッサ ディレクティブの存在下でリファクタリングを提供するツール (CSCout、XRefactory) があることは知っています。

C++ プログラムのマクロに代わるもの (インライン関数、定数式など) を提案するリファクタリング ツールがあるかどうか疑問に思っていました。