From 2b008f242150017415bc427d87e84ac81b95e877 Mon Sep 17 00:00:00 2001 From: Sami Shalayel Date: Fri, 15 Dec 2023 11:48:13 +0100 Subject: qmlls: adapt parser for attached/grouped properties completion Add a recovery mode to the parser to accept bindings that are not completely written out, and create an empty statement for that. This mode is called enableIncompleteBindings and is only enabled for qmlls. Also adapt qqmldomastcreator to those empty statements, and qmllsutils. Pick-to: 6.7 Fixes: QTBUG-120169 Task-number: QTBUG-92876 Change-Id: Ic24cbb61e3be08368027371e377bf75ce87fafb1 Reviewed-by: Qt CI Bot Reviewed-by: Ulf Hermann --- src/qml/parser/qqmljs.g | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src/qml/parser/qqmljs.g') diff --git a/src/qml/parser/qqmljs.g b/src/qml/parser/qqmljs.g index bc5955245a..bb27ccc96f 100644 --- a/src/qml/parser/qqmljs.g +++ b/src/qml/parser/qqmljs.g @@ -308,6 +308,12 @@ public: inline void enableIdentifierInsertion() { m_enableIdentifierInsertion = true; } + inline bool incompleteBindings() const + { return m_enableIncompleteBindings; } + + inline void enableIncompleteBindings() + { m_enableIncompleteBindings = true; } + protected: bool parse(int startToken); @@ -399,6 +405,7 @@ protected: QList diagnostic_messages; bool m_enableIdentifierInsertion = false; + bool m_enableIncompleteBindings = false; }; } // end of namespace QQmlJS @@ -1142,6 +1149,20 @@ case $rule_number: } break; ./ +UiObjectMember: UiQualifiedId Semicolon; +/. + case $rule_number: { + if (!m_enableIncompleteBindings) { + diagnostic_messages.append(compileError(loc(1), QLatin1String("Incomplete binding, expected token `:` or `{`"))); + return false; + } + AST::EmptyStatement *statement = new (pool) AST::EmptyStatement; + statement->semicolonToken = loc(2); + AST::UiScriptBinding *node = new (pool) AST::UiScriptBinding(sym(1).UiQualifiedId, statement); + sym(1).Node = node; + } break; +./ + UiPropertyType: T_VAR; /. case $rule_number: Q_FALLTHROUGH(); ./ UiPropertyType: T_RESERVED_WORD; -- cgit v1.2.3