天天看點

VS2019中的IntelliSense改進是時候彙總一下了C++标準C++20C++現代化即時代碼分析IntelliSense LinterC++ Concept IntelliSense模闆IntelliSense完美轉發IntelliSenseC++生産力IntelliCode智能成員清單過濾文檔支援個性化着色和快速資訊一覽改進摘要送出選項平台的支援和擴充性總結最後

是時候彙總一下了

在已經釋出的幾個Visual Studio 2019版本中,我們已經對C++ IntelliSense做了相當多的改進和完善。在今天的這篇文章中,我們會彙總這些改進要點,如果你對Visual Studio 2019感興趣,或者希望在編寫C++代碼的時候更加有效率,歡迎繼續閱讀。

如果你一直看我們的部落格更新,則應該對下面的一些要點會比較熟悉。我們希望這篇文章會給你帶來幫助。

大部分的改進都來自于社群的建議,如果你有什麼好點子,歡迎告訴我們。

C++标準

我們一直緻力于使Visual Studio支援最新的C++标準。這涉及我們的編譯器和标準庫中的大量工作,但是如果沒有IDE中相應的IntelliSense來在編輯代碼時備份這些新功能,則還無法完成。

C++20

C++20包含了許多很棒的新功能,例如子產品,協程,概念,範圍,三向運算符,指定的初始化程式等等。你所知道和喜歡的IntelliSense功能在IDE中支援所有這些功能。

舉個協程支援的例子:

VS2019中的IntelliSense改進是時候彙總一下了C++标準C++20C++現代化即時代碼分析IntelliSense LinterC++ Concept IntelliSense模闆IntelliSense完美轉發IntelliSenseC++生産力IntelliCode智能成員清單過濾文檔支援個性化着色和快速資訊一覽改進摘要送出選項平台的支援和擴充性總結最後

如果需要了解其他關于C++20方面的主題,請閱讀我們之前的相關博文。

C++現代化

我們希望盡可能輕松地更新你的代碼庫,以使用最新的語言标準。

一種方法是使用我們的代碼分析,代碼整理和C++整理工具。這些功能可以協同工作,并允許你在Visual Studio中靈活配置,具體取決于你希望在分析和更新代碼時的全面程度。這些功能包括非常輕巧的産品(例如我們在IntelliSense引擎中運作的新C++ Linters)到諸如clang-tidy的功能(這些功能可帶來更多檢查),一直到MSVC的Code Analysis提供的完整規則集。

即時代碼分析

一段時間以來,Microsoft Visual C++編譯器已經為代碼分析提供了廣泛的支援。 但是,在VS 2019之前,你需要先編譯代碼,然後才能從此綜合分析中看到任何警告或錯誤。 在最新版本的Visual Studio中,代碼分析在背景運作,用于你正在編輯的任何檔案,并且結果直接顯示在IDE的編輯器中,如下圖所示:

VS2019中的IntelliSense改進是時候彙總一下了C++标準C++20C++現代化即時代碼分析IntelliSense LinterC++ Concept IntelliSense模闆IntelliSense完美轉發IntelliSenseC++生産力IntelliCode智能成員清單過濾文檔支援個性化着色和快速資訊一覽改進摘要送出選項平台的支援和擴充性總結最後

IntelliSense Linter

我們引入了IntelliSense C++ linter,作為對現在在背景運作得更全面的代碼分析的補充。 鍵入代碼時,IntelliSense linter可立即針對最關鍵的問題提供即時結果。目前,lint專注于常見的C ++錯别字,常見的錯誤(例如算術和運算符不比對),性能問題以及安全性問題(例如指針算術問題)。

VS2019中的IntelliSense改進是時候彙總一下了C++标準C++20C++現代化即時代碼分析IntelliSense LinterC++ Concept IntelliSense模闆IntelliSense完美轉發IntelliSenseC++生産力IntelliCode智能成員清單過濾文檔支援個性化着色和快速資訊一覽改進摘要送出選項平台的支援和擴充性總結最後

這是對編譯器更全面的代碼分析的補充。 盡管代碼分析比linter更為靈活和強大,但由于必須首先編譯翻譯單元,是以提供結果所需的時間也更長。現在預設情況下,在Visual Studio中啟用了linter。

C++ Concept IntelliSense

Concept是C++ 20中的一項偉大的新功能。 Visual Studio使在代碼中建立和使用Concept比以往更加容易。在下面代碼的第一個模闆中,我們定義了概念“ is_cat”,該Concept定義了貓的屬性。 在第二個模闆中,我們使用該Concept來限制可以傳遞給它的類型。 IntelliSense自動完全支援此功能,你可以看到成員清單包含上述Concept定義的方法(“寵物”和“喵”)。

VS2019中的IntelliSense改進是時候彙總一下了C++标準C++20C++現代化即時代碼分析IntelliSense LinterC++ Concept IntelliSense模闆IntelliSense完美轉發IntelliSenseC++生産力IntelliCode智能成員清單過濾文檔支援個性化着色和快速資訊一覽改進摘要送出選項平台的支援和擴充性總結最後

除了代碼之外,我們不需要向IDE提供任何資訊,也不需要手動在模闆欄中輸入類型(在第二個模闆的右側)。 相反,所有資訊都來自代碼中定義的概念。

模闆IntelliSense

如果使用C++,無疑會遇到很多模闆化的代碼。 在IDE中使用它可能會很棘手,因為IDE并不确切知道這些模闆将如何執行個體化。 Visual Studio 2019中的新模闆IntelliSense欄有助于解決此問題。 使用模闆欄,你可以告訴IDE如何使用模闆,并根據這些類型接收完整的IntelliSense。 如果将光标放在任何模闆中,你将看到新的模闆欄:

VS2019中的IntelliSense改進是時候彙總一下了C++标準C++20C++現代化即時代碼分析IntelliSense LinterC++ Concept IntelliSense模闆IntelliSense完美轉發IntelliSenseC++生産力IntelliCode智能成員清單過濾文檔支援個性化着色和快速資訊一覽改進摘要送出選項平台的支援和擴充性總結最後

你可能已經注意到下面類型下拉清單中的“執行個體”項。 現在,Visual Studio可以掃描整個代碼庫,以自動提供有關如何使用模闆的建議。

完美轉發IntelliSense

我們收到的一項社群回報是改進IntelliSense,以實作C++中完美的轉發模闆。 我們已認證改進STL中一些完善的轉發模闆的處理方式邁出了第一步。 特别是make_unique,make_shared,emplace和emplace_back。

如下圖所示:

VS2019中的IntelliSense改進是時候彙總一下了C++标準C++20C++現代化即時代碼分析IntelliSense LinterC++ Concept IntelliSense模闆IntelliSense完美轉發IntelliSenseC++生産力IntelliCode智能成員清單過濾文檔支援個性化着色和快速資訊一覽改進摘要送出選項平台的支援和擴充性總結最後

請注意,參數幫助不會列出你的類型的實際參數。 在最新版本的Visual Studio中,它更加友善:

VS2019中的IntelliSense改進是時候彙總一下了C++标準C++20C++現代化即時代碼分析IntelliSense LinterC++ Concept IntelliSense模闆IntelliSense完美轉發IntelliSenseC++生産力IntelliCode智能成員清單過濾文檔支援個性化着色和快速資訊一覽改進摘要送出選項平台的支援和擴充性總結最後

不過,我們不想僅止于這四個STL函數。 我們也在這裡研究支援你自己的完美轉發模闆的方法。 與往常一樣,我們很樂意聽到你對此的回報。

C++生産力

除了語言一緻性和現代化工具之外,我們還希望Visual Studio成為市場上生産力最高的IDE,以完成工作。 考慮到這一點,我們在2019年增加了一些針對生産力的IntelliSense功能。

IntelliCode

IntelliCode使用機器學習來提供更好的代碼完成建議。 我們在Visual Studio 2019中添加了對C++的IntelliCode支援。預設情況下,IntelliCode将為你提供有關STL等流行庫的建議。

VS2019中的IntelliSense改進是時候彙總一下了C++标準C++20C++現代化即時代碼分析IntelliSense LinterC++ Concept IntelliSense模闆IntelliSense完美轉發IntelliSenseC++生産力IntelliCode智能成員清單過濾文檔支援個性化着色和快速資訊一覽改進摘要送出選項平台的支援和擴充性總結最後

我們在Visual Studio 2019 16.5中更進一步,在其中添加了在你自己的代碼庫上訓練IntelliCode的功能。 這樣一來,你就可以針對自己團隊的類型獲得更明智的完成建議。

智能成員清單過濾

現在,“成員清單”在列出可用成員時會考慮更多代碼上下文。 例如,如果你在const變量上調用成員清單,則所有非const變量将不再顯示在清單中。 現在,部分比對在成員清單中也以粗體突出顯示。

文檔支援

我們收到社群回報的另一個功能是,除了XML文檔注釋之外,我們的客戶還希望在IDE中支援Doxygen。 在Visual Studio 2019中,C++現在完全支援Doxygen,并将在快速資訊和參數幫助UI中提供資訊:

VS2019中的IntelliSense改進是時候彙總一下了C++标準C++20C++現代化即時代碼分析IntelliSense LinterC++ Concept IntelliSense模闆IntelliSense完美轉發IntelliSenseC++生産力IntelliCode智能成員清單過濾文檔支援個性化着色和快速資訊一覽改進摘要送出選項平台的支援和擴充性總結最後

Visual Studio沒有預設使用Doxygen樣式的注釋,但是可以在“工具>選項>文本編輯器> C/C ++>正常”中啟用它們。 此外,你可以将自己喜歡的文檔注釋類型添加到項目的.editorconfig檔案中。

個性化着色和快速資訊一覽改進

為了幫助你提高工作效率,我們對“快速資訊”,“參數幫助”和“成員清單”使用者界面進行了多項增強。 你可能會注意到的第一件事是,這些UI現在已經完全着色以比對編輯器:

VS2019中的IntelliSense改進是時候彙總一下了C++标準C++20C++現代化即時代碼分析IntelliSense LinterC++ Concept IntelliSense模闆IntelliSense完美轉發IntelliSenseC++生産力IntelliCode智能成員清單過濾文檔支援個性化着色和快速資訊一覽改進摘要送出選項平台的支援和擴充性總結最後

現在,“快速資訊”還使你可以輕松地線上搜尋錯誤或功能并鍵入名稱。 現在,你隻需将滑鼠懸停在編輯器中的任何紅色花樣上,而不用在錯誤清單中進行搜尋:

VS2019中的IntelliSense改進是時候彙總一下了C++标準C++20C++現代化即時代碼分析IntelliSense LinterC++ Concept IntelliSense模闆IntelliSense完美轉發IntelliSenseC++生産力IntelliCode智能成員清單過濾文檔支援個性化着色和快速資訊一覽改進摘要送出選項平台的支援和擴充性總結最後

摘要送出選項

我們已經收到回報,以使摘要的送出選項和成員清單更加靈活。 預設值保持不變,但是現在在“工具選項>文本編輯器> C / C ++>進階> IntelliSense”中,可以在輸入,空格和制表符之間選擇新的選項:

VS2019中的IntelliSense改進是時候彙總一下了C++标準C++20C++現代化即時代碼分析IntelliSense LinterC++ Concept IntelliSense模闆IntelliSense完美轉發IntelliSenseC++生産力IntelliCode智能成員清單過濾文檔支援個性化着色和快速資訊一覽改進摘要送出選項平台的支援和擴充性總結最後

平台的支援和擴充性

我們在IntelliSense引擎中引入了新的靈活性和可擴充性,以支援各種平台,例如Windows,Linux和控制台。 這包括使用CMake工具鍊檔案配置IntelliSense引擎的能力。 這些工具鍊可以送出你的代碼,并且每個配置都可以具有獨特的工具鍊,進而帶來前所未有的靈活性。

此外,我們對遠端機器處理IntelliSense的方式進行了一些更新。 通過從遠端計算機(或WSL)自動下載下傳系統和頭檔案,并使用它們來提供完全保真的IntelliSense,以及目标計算機上的實際标頭,進而提高了遠端IntelliSense的準确性。

總結

感謝老大哥對廣大C++開發者的關心和愛護。

還說明:C++依然健康地活着,挺好的。

最後

Microsoft Visual C++團隊的部落格是我非常喜歡的部落格之一,裡面有很多關于Visual C++的知識和最新的開發進展。大浪淘沙,如果你對Visual C++這門古老的技術還是那麼感興趣,則可以經常去他們那(或者我這)逛逛。

本文來自:《IntelliSense Improvements in Visual Studio 2019》

VS2019中的IntelliSense改進是時候彙總一下了C++标準C++20C++現代化即時代碼分析IntelliSense LinterC++ Concept IntelliSense模闆IntelliSense完美轉發IntelliSenseC++生産力IntelliCode智能成員清單過濾文檔支援個性化着色和快速資訊一覽改進摘要送出選項平台的支援和擴充性總結最後

繼續閱讀