QML静的解析1 - 基本セットアップ

この章では qmllint 拡張プラグインの基本的な構造と、qmllint での使用方法を紹介します。

プラグインを作成するためには、まずQmlCompilerモジュールを利用可能にする必要があります:

find_package(Qt6 REQUIRED COMPONENTS QmlCompiler)

次にプラグインを作成し、QmlCompilerモジュールとリンクします。

qt_add_plugin(HelloWorldPlugin)

target_sources(HelloWorldPlugin
    PRIVATE
        helloplugin.h
        helloplugin.cpp
)

target_link_libraries(HelloWorldPlugin PRIVATE Qt::QmlCompiler)

実装はプラグインでQtを拡張するパターンに従っています:QQmlSA::LintPlugin をサブクラス化します、

class HelloWorldPlugin : public QObject, public QQmlSA::LintPlugin
{
    Q_OBJECT
    Q_PLUGIN_METADATA(IID QmlLintPluginInterface_iid FILE "plugin.json")
    Q_INTERFACES(QQmlSA::LintPlugin)

public:
    void registerPasses(QQmlSA::PassManager *manager, const QQmlSA::Element &rootElement) override;
};

プラグインは、いくつかの重要な情報を含むplugin.json ファイルを参照します:

{
    "name": "HelloWorld",
    "author": "Qt Example",
    "description": "Demonstrates how to write a qmllint plugin",
    "version": "1.0",
    "loggingCategories": [
        {
            "name": "hello-world",
            "settingsName": "HelloWorld",
            "description": "Used to create test messages"
        }
    ]
}

name author version は、プラグインを記述するためのメタデータです。description

各プラグインは、警告をテーマ別にグループ化するために使用される、1つ以上のロギング・カテゴリーを持つことができます。loggingCategories はカテゴリーの配列を取ります。

  • nameこれはカテゴリを識別するために使われ、qmllintのフラグ名として使われます、
  • settingsNameqmllint.ini でカテゴリを設定するために使用されます。
  • descriptionこれはどのような警告メッセージがそのカテゴリでタグ付けされるかを記述します。

この例では、hello-world という一つのロギングカテゴリしかありません。各カテゴリに対して、プラグインでLoggerWarningId オブジェクトを作成する必要があります。

static constexpr QQmlSA::LoggerWarningId helloWorld { "Plugin.HelloWorld.hello-world" };

このオブジェクトは、Plugin.<plugin name>.<category name> という形式の文字列リテラルで構成します。

最後に、プラグインが実際に役に立つことをするためには、registerPasses 関数を実装しなければなりません。

void HelloWorldPlugin::registerPasses(QQmlSA::PassManager *manager, const QQmlSA::Element &rootElement)
{
    const bool pluginIsEnabled = manager->isCategoryEnabled(helloWorld);
    qDebug() << "Hello World plugin is" << (pluginIsEnabled ? "enabled" : "disabled");
    if (!pluginIsEnabled)
        return; // skip registration if the plugin is disabled anyway
    // here we will later register our passes
}

カテゴリーが有効になっているかどうかをチェックし、その状態を示す診断結果をqDebug 。現在、このプラグインは、パスの登録を行っていないため、有用なことは何も行っていないことに注意してください。これはこのチュートリアルの次の部分で行います。

しかし、プラグインが正しく検出されていることを確認することはできます。次のコマンドを使って確認します:

qmllint -P /path/to/the/directory/containing/the/plugin --Plugin.HelloWorld.hello-world info test.qml

-P オプションは qmllint に指定したフォルダ内のプラグインを探すように指示します。Qtの内部カテゴリとの衝突を避けるため、プラグインのカテゴリは常に "Plugin "で始まり、ドット、プラグイン名、さらにドット、最後にカテゴリが続きます。コマンドを実行すると、Hello World Plugin is enabled.

©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。