翻譯|使用教程|編輯:鮑佳佳|2020-11-02 11:15:29.153|閱讀 563 次
概述:我們已經實現了一個智能UI,使您的工作與特性更加透明:您可以直接在Cargo.toml文件中啟用或禁用工作空間的任何特定特性。名稱解析和代碼洞察力會考慮到這一點。在本文中讓我們詳細研究一下IntelliJ Rust如何處理Cargo特性,當它們在不同級別的依賴關系中使用時。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
IntelliJ IDEA是Java語言開發的集成環境,IntelliJ在業界被公認為優秀的Java開發工具之一,尤其在智能代碼助手、代碼自動提示、重構、J2EE支持、Ant、JUnit、CVS整合、代碼審查、 創新的GUI設計等方面的功能可以說是超常的。
像C/C++和其他本地語言一樣,Rust包括對條件編譯的支持。指示編譯器在編譯過程中是包含還是忽略一段代碼的最常見方法是添加一個帶有所需條件的cfg屬性。例如,您可以使用這種機制來檢查目標架構,并根據操作系統在編譯時切換代碼塊。
IntelliJ Rust會檢測您項目中的條件禁用塊,并將其從代碼庫中排除。這意味著名稱解析和分析會忽略這些塊,所以你不會在它們里面得到錯誤和警告,而且在自動完成中不會有該代碼的項目出現在其他地方。另外,該插件在編輯器中把禁用的塊灰化了。
這個級別的cfg支持在插件中已經有很長一段時間了,但是缺少了一些東西。條件選項可以包含Cargo功能。以前,IntelliJ Rust只支持項目依賴中聲明的特性,但現在你的工作空間特性也被支持了。
我們已經實現了一個智能UI,使您的工作與特性更加透明:您可以直接在Cargo.toml文件中啟用或禁用工作空間的任何特定特性。名稱解析和代碼洞察力會考慮到這一點。
讓我們詳細研究一下IntelliJ Rust如何處理Cargo特性,當它們在不同級別的依賴關系中使用時。
Library
最簡單的情況是,您需要從庫中排除功能,或者僅在構建中包括其中的一些功能。
首先,讓我們添加tokio板條箱并使用以下full選項啟用其所有功能:
tokio = { version = "0.3.0", features = ["full"] }
如果我們打開tokio的Cargo.toml并導航到該[features]部分,我們將在列出的所有功能旁邊看到選中的復選框full:
現在我們可以來代替指定一個特定的功能full,例如,signal。在tokio“ Cargo.toml”中,復選框的狀態將相應更改。只有signal和它取決于功能現在已啟用:
請注意,在外部依賴關系的情況下,此UI旨在幫助您掌握功能的狀態,但不能控制它們,因此該庫的Cargo.toml中的復選框不可單擊。如果需要更改功能列表,請繼續使用項目的.toml配置。
獨立包裝功能
另一種情況是,您在包內創建自己的功能部件并在cfg塊中使用它們。與外部庫不同,您可以在此處通過清除并選中相應的復選框來控制功能列表。
通常,Cargo功能是可加的,并且全部啟用時不會沖突,這就是IntelliJ Rust默認啟用工作區功能的原因。但是,您可能需要打開和關閉它們,并且插件的UI將幫助您做到這一點!
當您將工作區功能用作切換器而不是添加實例時,切換工作區功能特別方便(例如,Amethyst庫具有控制當前可調用的渲染引擎功能)。以前,您必須從Cargo.toml中手動刪除不需要的功能才能將其關閉。
由于用戶界面現在允許您輕松地在功能之間進行切換,因此請注意不要同時啟用任何互斥的功能。該插件不會阻止您這樣做,也不會顯示警告,因為在.toml文件級別,該插件沒有足夠的信息來檢測源中的潛在問題。
在下面,您可以看到同時啟用非添加功能時源中報告的多重解決情況:
相互依賴的程序包功能
一個稍微棘手的情況是您的功能相互依賴時:
[features] wrapper = ["calc"] calc = ["core"] core = []
如果您打開或關閉其中之一,則IntelliJ Rust將識別依賴關系并相應地切換相關功能。
具有跨箱依賴關系的功能
您的包裹功能也可以依賴于其他包裝箱中的功能。讓我們core從前面的示例中依賴于的macros功能tokio:
core = ["tokio/macros"]
切換到tokio的Cargo.toml,我們會注意到macros默認情況下禁用的方式如何在打開時啟用core,而在關閉時再次core禁用:
工作區的功能
一個更復雜的場景是在由多個程序包組成的工作區中使用要素時。
舉個簡單的例子,讓我們創建一個有兩個包的工作空間--bar和foo。在foo的Cargo.toml中,我們可以聲明對bar的依賴,并指定它使用bar中的一個名為bar_feature的特性。
在使用工作空間時,你可能想在里面開發一個單獨的箱子,就像一個獨立的實例一樣。在這種情況下,你需要對箱子的功能進行控制,并能夠在某一時刻禁用那些你不需要的功能。
那么,如果你關注bar,并故意禁用bar_feature,會發生什么?結果,foo中所有使用它的代碼都不會被解析,而且你在foo中出現的錯誤可能會很棘手,找不到原因。
為了幫助你避免這些問題,IntelliJ Rust會檢查你的工作空間依賴中的所需特性,并為它們提出快速修復建議。
最后,你的工作空間箱可以有相互依賴的特征。例如,foo中的foo_features依賴于bar_feature from bar。
在這里,當我們禁用時bar_feature,插件會foo_feature自動禁用。但是,當我們bar_feature重新打開時,foo_feature將不會啟用,因此您需要手動撤回相關功能。
如果您以前從未使用過此功能,建議您嘗試一下。如果您希望我們進一步研究其他功能,請在評論中給我們留言。
好了這就是今天的內容了,如果今天的文章未解決你的需求,可點擊獲取更多免費教程。不要忘了在評論與我們分享您的想法和建議,慧都作為IntelliJ IDEA正版合作商,我們推出"軟件國產化服務季"活動(點擊查看詳情)!現IntelliJ正版授權在線訂購最高立減3000元!低至1333!還有多種授權方式供你選擇。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: