Visual Studio 2019 での IntelliSense の改善

Visual Studio 2019 リリースの過程で、C++ IntelliSense に多くの大幅な改善を行いました。 Visual Studio 2019 へのアップグレードに関心がある場合や、C++ コードを記述する際の生産性を高める方法を学びたい場合に備えて、いくつかのハイライトを集めました。 2019 プレビュー以降のブログをフォローしている場合は、これらの機能の一部に既に精通している可能性があります。このコレクションがお役に立てば幸いです。これらすべての機能を試してみたい場合は、Visual Studio 2019 の最新リリースを入手してください。

これらの機能の多くは、コミュニティの提案に基づいています。 Visual Studio に関する提案や問題が発生した場合は、開発者コミュニティでお知らせください。あなたのフィードバックは、私たちが素晴らしい製品を提供するのに本当に役立ちます!

C++ 標準

私たちは、Visual Studio を最新の言語標準で作業するための最適な IDE にするよう努めています。これには、コンパイラと標準ライブラリで多くの作業が必要ですが、コードの編集中にこれらの新機能をバックアップする IDE の対応する IntelliSense がなければ完全ではありません。

C++20

C++20 には、モジュール、コルーチン、概念、範囲、三方演算子、指定された初期化子などの優れた新機能が含まれています。これらの機能はすべて、おなじみの IntelliSense 機能によって IDE でサポートされています。

例:コルーチンのサポート:

これらの機能のほとんどは単独でブログ投稿に値するので、詳細を知りたい場合はこちらをご覧ください:

  • モジュール
  • コルーチン
  • コンセプト
  • 範囲

C++ の近代化

最新の言語標準を使用するためにコードベースをできるだけ簡単に更新できるようにしたいと考えています。これを行う 1 つの方法は、コード分析、コード整理、および C++ リンティング ツールを使用することです。これらは連携して機能し、コードの分析と更新をどの程度包括的に行いたいかに応じて、Visual Studio でダイヤルを回すことができます。これらの機能は、IntelliSense エンジン内で実行される新しい C++ リンターのような非常に軽量なものから、より多くのチェックを行う clang-tidy のような機能、そして MSVC のコード分析が提供する完全なルールセットにまで及びます。

エディタ内コード分析

Microsoft Visual C++ コンパイラは、しばらくの間、コード分析を広範囲にサポートしてきました。ただし、VS 2019 より前は、この包括的な分析から警告やエラーが表示される前に、コードをコンパイルする必要がありました。 Visual Studio の最新バージョンでは、編集中のファイルのコード分析がバックグラウンドで実行され、結果が IDE のエディターに直接表示されます。

エディター内コード分析の詳細については、こちらをご覧ください。

IntelliSense リンター

バックグラウンドで実行されるより包括的なコード分析を補完するものとして、IntelliSense C++ リンターを導入しました。 IntelliSense リンターは、最も重大な問題について、入力と同時に即座に結果を提供します。現在、リンターは一般的な C++ のタイプミス、算術および演算子の不一致などの一般的なバグ、パフォーマンスの問題、およびポインター演算の問題などのセキュリティの問題に焦点を当てています。

これにより、コンパイラによるより包括的なコード分析が補完されます。コード分​​析はリンターよりもはるかに柔軟で強力ですが、翻訳単位を最初にコンパイルする必要があるため、結果を提供するのに時間がかかります。リンターは、Visual Studio でデフォルトで有効になりました。 IntelliSense Linter の詳細については、こちらをご覧ください。

C++ コンセプト IntelliSense

C++20 の優れた新機能の 1 つは概念です。 Visual Studio を使用すると、コードで概念を作成して使用することがこれまで以上に簡単になります。以下のコードの最初のテンプレートでは、猫のプロパティを定義する概念「is_cat」を定義しています。 2 番目のテンプレートでは、その概念を使用して、渡すことができる型を制限しています。これは IntelliSense によって自動的に完全にサポートされており、メンバー リストには上記の概念 (「ペット」と「ニャー」) によって定義されたメソッドが含まれていることがわかります。

コード以外の情報を IDE に提供する必要はなく、型をテンプレート バー (2 番目のテンプレートの右側) に手動で入力する必要もありませんでした。代わりに、すべての情報はコードで定義された概念から得られます。

テンプレート IntelliSense

C++ を使用している場合は、多数のテンプレート化されたコードに遭遇したことは間違いありません。 IDE はこれらのテンプレートがどのようにインスタンス化されるかを正確に認識していないため、IDE でこれを操作するのは難しい場合があります。 Visual Studio 2019 の新しいテンプレート IntelliSense バーは、この問題の解決に役立ちます。テンプレート バーを使用すると、テンプレートがどのように使用されるかを IDE に伝え、それらの型に基づいて完全な IntelliSense を受け取ることができます。テンプレートにカーソルを置くと、新しいテンプレート バーが表示されます:

下のタイプのドロップダウンにある「インスタンス化」項目に気づいたかもしれません。 Visual Studio は、コードベース全体をスキャンして、テンプレートの使用方法に関する提案を自動的に提供できるようになりました。テンプレート バーの詳細については、こちらをご覧ください。

完全転送 IntelliSense (make_unique、make_shared、emplace、emplace_back)

受け取ったコミュニティ フィードバックの 1 つは、C++ での完全な転送テンプレートのために IntelliSense を改善することでした。 STL のいくつかの完全な転送テンプレートの処理方法を改善することで、そのための第一歩を踏み出しました。特に、make_unique、make_shared、emplace、および emplace_back です。

以前は次のように表示されていました:

パラメーターのヘルプに、型の実際のパラメーターが一覧表示されていないことに注意してください。 Visual Studio の最新バージョンでは、はるかに便利です:

ただし、これら 4 つの STL 関数だけで終わりたくはありません。ここでも、独自の完全な転送テンプレートをサポートする方法を調査しています。いつものように、これに関するフィードバックをお待ちしております。これに興味がある場合は、開発者コミュニティで自由に提案を開いてください。

C++ の生産性

言語の適合性とモダナイゼーション ツールに加えて、Visual Studio を市場で最も生産性の高い IDE にして作業を完了できるようにしたいと考えています。そのことを念頭に置いて、2019 年に生産性に重点を置いた IntelliSense 機能を多数追加しました。

インテリコード

IntelliCode は、機械学習を使用して、より優れたコード補完の推奨事項を提供します。 Visual Studio 2019 で C++ の IntelliCode サポートを追加しました。デフォルトでは、IntelliCode は STL などの一般的なライブラリに関する推奨事項を提供します。

Visual Studio 2019 16.5 ではこれをさらに一歩進め、独自のコードベースで IntelliCode をトレーニングする機能を追加しました。これにより、チーム独自のタイプでよりスマートな完了の推奨事項を取得できます。 Team Completion モデルを最新の状態に保つために、GitHub Actions または Azure Pipelines を使用してトレーニング プロセスを自動化できます。

インテリジェント メンバー リストのフィルタリング

メンバー リストは、使用可能なメンバーを一覧表示するときに、コードのコンテキストをより多く考慮に入れるようになりました。たとえば、const 変数でメンバー リストを呼び出すと、const 以外のすべての変数がリストに表示されなくなります。部分一致も、メンバー リストで太字で強調表示されるようになりました。

メンバー リストのフィルタリングの詳細については、こちらをご覧ください。

Doxygen サポート

コミュニティからフィードバックを受け取ったもう 1 つの機能は、お客様が XML ドキュメント コメントに加えて IDE での Doxygen サポートを望んでいたことです。 Visual Studio 2019 では、Doxygen が C++ で完全にサポートされるようになり、クイック インフォおよびパラメーター ヘルプ UI で情報が提供されます。

Visual Studio はデフォルトで Doxygen スタイルのコメントを使用しませんが、[ツール]> [オプション]> [テキスト エディター]> [C/C++]> [コード スタイル]> [全般] で有効にすることができます。さらに、好みのタイプのドキュメント コメントをプロジェクトの .editorconfig ファイルに追加できます。 Doxygen サポートの詳細については、こちらをご覧ください。

IntelliSense の色付けとクイック インフォの改善

可能な限り生産性を高めるために、クイック ヒント、パラメーター ヘルプ、およびメンバー リストの UI にいくつかの機能強化を行いました。最初に気付くのは、これらの UI がエディターに合わせて完全に色分けされていることです:

また、Quick Info を使用すると、オンラインでエラーや関数名、型名を簡単に検索できるようになりました。エラー リストを検索する代わりに、エディタ内の赤い波線にカーソルを合わせるだけで済みます:

クイック ヒントの機能強化の詳細については、こちらをご覧ください。

スニペット コミット オプション

スニペットとメンバー リストのコミット オプションをより柔軟にするためのフィードバックを受け取りました。デフォルトは同じままですが、[ツール オプション]> [テキスト エディター]> [C/C++]> [詳細設定]> [IntelliSense] に、Enter、Space、Tab から選択できる新しいオプションがあります:

プラットフォームのサポートと拡張性

Windows、Linux、コンソールなどのさまざまなプラットフォームをサポートするために、IntelliSense エンジンに新しい柔軟性と拡張性を導入しました。これには、CMake ツールチェーン ファイルを使用して IntelliSense エンジンを構成する機能が含まれます。これらのツールチェーンはコードにチェックインでき、各構成に独自のツールチェーンを含めることができ、これまでにないほどの柔軟性がもたらされます。

さらに、リモート コンピューターに対する IntelliSense の処理方法をいくつか更新しました。これにより、リモート マシン (または WSL) からシステム ヘッダーとライブラリ ヘッダーが自動的にダウンロードされ、それらを使用して、対象のマシン上の実際のヘッダーで完全な忠実度の IntelliSense が提供されるため、リモート IntelliSense の精度が向上します。

フィードバックをお送りください

Visual Studio の最新の更新プログラムのコピーを入手して、試してみてください。 Visual Studio に関するフィードバックをお待ちしております。開発者コミュニティに提案を送信してください。