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