QML语言服务器参考

QML语言服务器是Qt附带的一个工具,它可以帮助您在自己的(支持LSP的)编辑器中编写代码。有关更多信息,请参阅语言服务器协议

目前,它可以实现以下功能

  • 自动完成代码
  • 显示qmllint警告
  • 导航到QML文件中的定义
  • 查找JavaScript变量和QML对象的用法
  • 重命名JavaScript变量和QML对象
  • 格式化QML文件

注意:当前qmlls处于开发中,更多详情请参见已知限制

支持的功能

代码检查

QML语言服务器可以自动检查打开的QML文件,并将警告或错误直接显示在编辑器中。有关代码检查过程的更多信息,请参阅qmllint

格式化

QML语言服务器可以从编辑器内部格式化整个文件。有关格式化过程的更多信息,请参阅qmlformat

查找定义

QML语言服务器可以查找JavaScript变量、函数、QML对象ID和QML属性的用法定义。

QML语言服务器还可以查找类型注解中所使用的JavaScript函数、QML对象属性和QML对象实例化中使用的类型的定义。

查找用法

QML语言服务器可以查找JavaScript变量、QML对象属性、JavaScript函数、QML对象方法和QML对象ID的用法。

重命名

只要在QML文件中定义,QML语言服务器就可以重命名JavaScript变量和函数,以及QML对象属性、方法和ID。

建议自动完成项

QML语言服务器为JavaScript变量、表达式和语句以及QML对象属性、方法和ID提供自动完成建议。

跟踪C++文件中的更改

QML语言服务器可以跟踪定义QML类型的C++文件中的更改。它将自动重建CMake QML模块,以提供关于由C++定义的QML类型的准确和最新的警告和完成项。

您可以通过禁用此功能

在您的编辑器中设置QML语言服务器

注意:您可以在使用 Qt 在线安装程序安装的 Qt 中,在 <Qt 安装文件夹>/bin/qmlls 下找到 QML 语言服务器的二进制文件。

设置构建目录

QML 语言服务器需要知道您的构建目录位置。您可以通过以下方式传递它:

  • --build-dir 命令行选项。在这种情况下,您的编辑器应该像以下这样调用 qmlls
    <path/to/qmlls> --build-dir <path/to/build-directory>
  • QMLLS_BUILD_DIRS 环境变量。
  • .qmlls.ini 设置文件,请参阅 配置文件

注意:当以多种方式指定构建目录时,命令行选项优先于环境变量,环境变量优先于设置文件。

禁用自动 CMake 构建

qmlls 会尝试在检测到定义为 C++ 的 QML 类型的源代码已修改时触发 CMake 重建。

要禁用此功能,请使用以下方法:

  • --no-cmake-calls 命令行选项。在这种情况下,您的编辑器应像以下这样调用 qmlls
    <path/to/qmlls> --build-dir <path/to/build-directory> --no-cmake-calls
  • QMLLS_NO_CMAKE_CALLS 环境变量。
  • .qmlls.ini 设置文件,请参阅 配置文件

配置文件

QML 语言服务器可以通过配置文件 .qmlls.ini 进行配置。此文件应在项目的根源目录中。它应是一个 ini 格式的文本文件。

注意:.qmlls.ini 文件可以通过 QT_QML_GENERATE_QMLLS_INI 自动生成。

配置文件应如下所示:

// .qmlls.ini
[General]
buildDir=<path/to/build-directory>
no-cmake-calls=<true-or-false>

目前,配置文件可以用来设置当前项目的构建目录,并且可以可选地禁用为 C++ 定义的 QML 类型自动 CMake 重新构建的功能。

注意:QML 语言服务器可以使用 --write-defaults 选项创建默认的配置文件。这将覆盖当前目录中已存在的 .qmlls.ini 文件。

已知限制

QML 语言服务器可能会在某些未构建的项目上发出错误警告,因为它需要构建信息来查找在同一项目中定义的 QML 模块,例如。

尽管涵盖了众多常见的 QML 功能,但 QML 语言服务器仍在开发中,一些功能尚不支持

  • 重命名 QML 类型。
  • 在无效的 QML 文件上建议自动完成。
  • 导航到在 C++ 中定义的对象的定义。
  • 支持所有功能的 QML 和 JavaScript 语言结构。

QML 语言服务器中的 QML 代码模型尚不支持所有 JavaScript 语言结构,这意味着在某些语言结构上的一些功能(如导航到定义和查找用法)可能不起作用。

© 2024 Qt 公司 Ltd. 本文档中的文档贡献是各自所有者的版权。本文件提供的文档是根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款许可的。Qt 及其相关商标是芬兰的 Qt 公司及其在全球的商标。所有其他商标均为其各自所有者的财产。