iOS / OSX開発用のIDEの新しいリリースであるAppCode 2016.2が最近リリースされました。 猫の下には、Objective-CとSwiftの自動リファクタリングに関する多くのgifと考えがあります。

スイフト
変数を導入
Introduce Variable (別名Extract Variable )は、複雑な式の一部をローカル変数に自動的に抽出できるローカルリファクタリングです。 もちろん、これは手動で行うことができます。 変数の名前を入力し、その型を書き留めて、目的の式を割り当て、コード内のすべてを手動で修正し、発生するたびに修正することを忘れないようにしてください...それは良い習慣であり、iOS向けに開発するときはかなり速く動作することを覚えています。
真実は、この作業は日常的であり、日常的なタスクは常に自動化する方が良いということです。 Objective-Cの場合、このリファクタリングは長い間AppCodeに実装されています。 ちなみに、頻繁に使用することの興味深い効果は、変数の名前を書きたくないため、通常、通常の「変数タイプ-変数名」でコード行を開始することです。
結局のところ、最初に式を書くことができます-そして、変数にそれを自動的に選択し、その名前のヒントを選択するか、独自のものを入力します:

Introduce VariableをSwiftに実装するには、膨大な数の言語構造を処理する方法を学ぶ必要がありました。変数を抽出するには、その型を知る必要があり、これは条件の1つにすぎません。
デフォルトでは、定数は常に取得され、ポップアップウィンドウでletをvarに変更できます。

さて、それをさらに簡単にするために、オプションで変数タイプを自動的に置き換えることができます:

ちなみに、コード内のすべての箇所を手で置き換える必要はありません。AppCodeが自分で処理します。

コードエディターウィンドウのエラーと警告
コードを書くとき、すべてのエラーと警告をすぐに見たいでしょう。 いずれにしても、コンパイル後ではありません。 このバージョンでは、エディタにエラーと警告を表示するためにSourceKitを統合することにしました。

また、Xcodeが発行するのと同じクイックフィックスをユーザーが使用できるようにします。

実際、AppCodeでは、SourceKitはコードの外部ライナーとして使用されますが、その間、IntelliJプラットフォームを使用して新しいコード生成機能の開発を続けています。
スペルチェック
ソースコードやコメントのタイプミスはそれほど重要ではないように思われます-ライブラリやアプリケーションのパフォーマンスにまったく影響を与えないからです。 しかし、プロジェクトが公開され、これらのすべてのタイプミスがソースコードに基づいて自動的に生成されたドキュメントに該当する場合はどうでしょうか? この場合、それらを回避することが必要になり、大量のコードを手動でチェックするのは無益な作業です。
現在、AppCodeは、Swiftコードのコメントとソースコード自体の両方で、変数、クラス、さらにはそれらの部分の名前でもタイプミスを探しており、迅速な修正を支援しています。

C ++などのObjective-Cにもこの機能があります。 さらに、これは特定のプログラミング言語に適合したIntelliJプラットフォームのメカニズムの1つです。 AppCodeでコード検査がどのように機能するかについて詳しくは、 こちらをご覧ください 。
ライブテンプレート
ライブテンプレートは、ソースコードテンプレートです。 一番下の行は、Xcodeのスニペットに似た略語でソースコードの断片をすばやく挿入できるようにすることです。 違いは何ですか? たとえば、 ライブテンプレートを使用すると、次のことができます。

ちなみに、Objective-Cの場合、アナログとは、 それぞれ略語が組み込まれた組み込みテンプレートです。

魔法とは何ですか? AppCodeの値入力フィールドはスクリプト化できます。 たとえば、入力値の値をあるフィールドから別のフィールドにコピーします。 または-forテンプレートの場合と同様に、入力フィールドで、反復可能な近傍の配列を探します。 可能性は無限ではありませんが、可能性はあります。それらについては、 こちらをご覧ください 。
2番目の基本的な違いは、ソースコードの選択したフラグメントを何らかの式でラップする機能です(テンプレートで囲む ):

AppCode 2016.2では、Swiftのこれらすべてのメカニズムのサポートを追加し、Xcodeのスニペットに似たテンプレートの基本セットを作成しました。
自動補完の入力フィールド
Objective-CおよびSwiftコードにはパラメーター名があります-これは言語の特異性です。 それらを手動で挿入するのは不便なので、このリリースに追加されたもう1つの基本的な機能は、Swiftで関数とメソッドを自動補完するときに値を入力するためのパラメーター名とフィールドの自動挿入です。

Objective-c
完全な声明
JetBrains製品のコード補完には、コード内の特定の構成をすばやく完了する機能があります:セミコロン(カーソルが式の最後にない場合でも)、括弧、または中括弧を挿入し、すぐに次の式のセットに移動します。 このバージョンでは、このタイプのオートコンプリートを徹底的に改良しましたが、現在は次のように機能します。

ドキュメント
Objective-Cのメソッドと関数のドキュメントコメントを生成するために非常に長い時間を求められ、ほとんどの要求はVVDocumenterに類似した機能の要求に限定されていました。 そして、私たちの理解では、「AppCodeでObjective-Cのドキュメントサポートを正しく行った」が、「事前に入力されたパラメーターでコメントテンプレートを挿入する」アクションに限定される場合、ずっと前にこれを行っていました。

ところで、パラメータ名とドキュメントタグのオートコンプリートも機能します。

しかし、これでは十分ではありません。 ドキュメントを更新する必要があります。プロジェクト全体を少なくとも一度はドキュメント化したことのある人は誰でも、初めて書いたコメントを更新するよりも、一度書いたコメントを強制的に更新するのがはるかに難しいことを知っています。 そのため、パラメーター名のRename (変更の最も一般的なケースと思われるように)が正しく機能するように、コードにコメントの処理を実装しました。

追加のボーナス- クイックドキュメントウィンドウでのそのようなコメントの表示が大幅に改善されました。
混合コードの名前変更リファクタリング
Swiftは、新しく急速に開発されている言語です。 しかし、長い間、Objective-Cと並んで存在し、開発者はそれらを一緒に使用します。 したがって、「Swiftでのリファクタリング」と言いますが、実際には、ほとんどの場合、「混合コードでのリフォーリング」を意味します。 AppCodeでは、Swiftから使用されるSwiftエンティティとObjective-Cエンティティの両方で、 Renameが長い間使用されてきました。 このバージョンでは、Objective-Cから使用されるSwiftクラスメソッドの名前変更に取り組みました。
Swiftのクラスメソッドに追加の属性が含まれていない場合、Objective-Cの名前がSwiftのメソッドの名前と一致するため、簡単に名前を変更できます。

メソッドに@objcアノテーションを使用して作成されたエイリアスがある場合、すべてがより興味深いものになります。 この場合、Objective-CからRenameを呼び出すと 、AppCodeはSwiftで関数名を決定し、それを変更します。

別の興味深いケースは、Swiftの関数パラメーターの外部名の存在です。 たとえば、関数
function(extParam param:String)
Objective-Cの対応するメソッドは
functionWithExtParam
と呼ばれ
functionWithExtParam
。 また、このケースも正しく処理します。

これらの機能はメソッドとクラスにのみ実装されますが、将来的にはクラスフィールドにも同じことを行う予定です。
コードのフォーマット
AppCodeのコードフォーマット設定に関する別の記事を書くことができますが、Objective-C / C / C ++の場合、 LLVMとLLDBという 2つの新しい定義済みのフォーマットスタイルが追加されたことに簡単に注意します。
デモ
新機能のデモを含む小さなデモ(英語):
プラットフォームの変更はすべて、 anastasiak2512 による投稿で詳しく説明されていますが、C ++の新しいコード生成機能( 演算子の 生成と定義の生成 )について読むことができます。 従来、これらはすべてAppCodeで利用できます。
以上です。 当社のウェブサイトで製品のその他の機能についてお読みになり、 英語のブログでお楽しみになり、この投稿へのコメントで質問をしてください。