翻譯|行業資訊|編輯:鮑佳佳|2021-09-06 10:01:06.500|閱讀 187 次
概述:QML 工具是發展最快的領域之一,自 Qt 5.15 以來添加了大量新功能。在這里,我們將展示靜態分析和格式化 QML 領域的進展和未來計劃。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
【Qt開發主流庫:Qtitan組件集】
QML 工具是發展最快的領域之一,自 Qt 5.15 以來添加了大量新功能。在這里,我們將展示靜態分析和格式化 QML 領域的進展和未來計劃。
qmlint 自從在 Qt 5.4 中引入以來已經發展了很多。它最初是一個簡單的語法檢查器。從那時起,它獲得了警告不合格訪問、“with”語句和信號注入以及其他各種違反最佳實踐的能力。除了性能大幅提升之外,這里僅介紹 qmllint 中的一些新功能:
在 Qt 6.2 中,如果您使用新的 QML 模塊 CMake API,您將始終擁有${TARGETNAME}_qmllint模塊的目標。這意味著您可以調用 qmllint 而不必擔心導入路徑或 linting 所有文件,因為這一切都將由目標自動處理。
在接下來的幾周內,將在一系列博客文章中提供有關 QML 模塊 API 的更多詳細信息。
您現在可以將組件和屬性標記為已棄用,這在 C++ 中已經存在很長時間了:
import QtQuick Text { @Deprecated { reason: "Use newProperty instead!" } property int oldProperty property int newProperty Component.onCompleted: console.log(oldProperty); // Warning: XY.qml:8:40: Property "oldProperty" is deprecated (Reason: Use newProperty instead!) }
這將使您更容易就公共 API 中的更改進行交流。
您現在可以按類別禁用警告,例如默認情況下 qmllint 會通知您有關未使用的導入:
import QtQuick import QtQuick3D // Info: DEM.qml:2:1: Unused import at DEM.qml:2:1 Text { id: textElement text: "Hello world!" anchors.centerIn: parent }
如果您愿意,現在可以通過傳遞--unused-imports disable. 或者,您可以使用 將這個信息性消息變成一個完整的警告--unused-imports warning。在這種情況下,與所有警告一樣,未使用的導入警告將使 qmllint 返回退出代碼 1 ;這將導致使用該工具的任何 CI 或預提交掛鉤失敗。有關qmllint --help警告類別的完整列表,請參閱 的輸出。
除了能夠通過命令行提供選項之外,qmlint 現在還可以使用設置文件進行配置。這些工作類似于其他 linter 配置文件。
這對于使您的項目準備好在 CI 中使用特別有用。
有時您可能無法立即修復警告,但會發現它在其他地方很有用。因此,我們允許您逐行禁用警告:
import QtQuick Item { width: 50 // This is an unqualified access height: appWindow.height // qmllint disable unqualified // ... }
qmlint 也可以傳遞--json選項,該選項將使工具以機器可讀的格式輸出其警告,這對于集成到 CI 和預提交掛鉤非常有用。例如,這里有一個應用程序,其中 qmlint 的輸出用于在 GitHub 上生成自動代碼審查:
即使現在關于 qmllint 的工作仍在進行中,而且 qmllint 將在 Qt 6.3 中大大改進類型檢查和更多警告類別。我們還計劃使 qmlint 更具可擴展性,以便用戶能夠根據其項目的特定需求生成自己的警告。
我們使用 QML 來創建漂亮的 GUI,QML 可以用漂亮簡潔的方式表達我們想要的東西。IDE/編輯器(例如 Qt Creator)可以幫助我們保持所有代碼縮進,以便閱讀和查看。有時雖然人們只想從命令行重新格式化它,并獲得一個格式良好且可讀的 QML 文件。
qmlformat就是為了那個。它重新格式化您的文件,正確縮進它們,并重新格式化 javascript 表達式以使它們漂亮:)。雖然我們在自己的文件上廣泛測試了該工具,但我們知道可能會發生錯誤。作為額外的預防措施,qmlformat 驗證重新格式化輸出的語義結構是否與源文件的語義結構匹配。
這意味著不能重新格式化有小錯誤的文件。這并不總是人們想要的:也許你想要讓它成形以實際修復它。因此,如果可以解析文件,-f/--force命令行選項將禁用所有檢查,并重新格式化文件。
默認情況下qmlformat,QML 對象屬性會完全按照您編寫它們的順序保留。傳遞-n/--normalize的對象屬性根據我們的編碼約定中規定的規則重新排序。此選項對于將文件保持為標準化格式以及在比較文件時特別有用。
qmlformat 內部使用 qmldom,QML 作為樹的內部表示,包含導入、qml 對象、屬性定義和綁定。這種表示可以被編輯,每個元素都可以被唯一標識,并且可以以線程安全的方式更新。QML Design Studio 將在內部使用它來編輯 qml 文件,而無需處理更繁瑣的 AST。它也是我們正在研究的語言服務器協議實現的基礎,使所有新的工具改進在您選擇的 IDE 中可用。
冒險家已經可以使用以下命令可視化這個內部結構,目前我們不提供任何穩定性保證:
qmldom --dump <MyQmlFile>
這將返回 QML 文件中包含的主要內容的 json 描述,包括諸如棄用之類的注釋。
====================================================
想要了解或購買Qt正版授權的朋友,歡迎
Qt技術交流群現已開通,QQ搜索群號“765444821”或者掃描下方二維碼即可加入
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: