Comma
This warning category is spelled [comma] by qmllint.
Do not use comma expressions
What happened?
A JavaScript comma expression was used outside of a for loop.
Why is this bad?
Comma expressions reduce readability of the code and obscure side-effects.
Example
import QtQuick Item { Component.onCompleted: init(config, true), enableLogging(categories), run(1000) // millis }
To fix this warning, refactor the code to use distinct statements for each operation. This way, each side effect is explicit instead of happening as part of another unrelated operation:
import QtQuick Item { Component.onCompleted: { init(config, true) enableLogging(categories) run(1000) // millis } }
In addition, there are some special considerations for cases where comma expressions appear because a variable is intentionally being captured for a binding, as in the following code, where previewOfFirstPage is a function defined in C++ which internally depends on Config.fontSize:
Text { // This causes the function to re-run when fontSize changes text: Config.fontSize, documentProvider.previewOfFirstPage() }
If you encounter this situation, consider one of the following approaches:
- If a function such as
previewOfFirstPagedepends on a property, prefer making this dependency explicit by passing the value as an argument.Text { text: documentProvider.previewOfFirstPage(Config.fontSize) }
- If changing the function signature is undesirable for API reasons, consider replacing the function with a Q_PROPERTY instead, so that change notifications for it can be emitted when the depenency is modified in C++:
void Config::setFontSize(int fontSize) { if (m_fontSize == fontSize) return; m_fontSize = fontSize; emit fontSizeChanged(); emit previewOfFirstPageChanged(); }
Text { text: documentProvider.previewOfFirstPage }
- If modifying the C++ implementation or adding QML dependencies is not possible, use a
qmllintdirective to silence the warning. Include a comment explaining that the intention is to capture the variable in the binding.Text { // This causes the function to re-run when fontSize changes text: Config.fontSize, documentProvider.previewOfFirstPage() // qmllint disable comma }