aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiguel Costa <miguel.costa@qt.io>2023-04-20 12:34:42 +0200
committerMiguel Costa <miguel.costa@qt.io>2023-09-05 15:03:01 +0000
commit5302a5e64bcb421563f4b11ee97213739a4c1e69 (patch)
tree9241a72980597409b3d1d910e70f6d591291ac23
parent12947bdb56b9846e2e2dd1780218bc00f84da40f (diff)
Update QML spec to Qt 5.15.9
Updated the QML parser to use the language specifications of Qt 5.15.9, which brings in some new features (e.g. 'required' keyword). Fixes: QTVSADDINBUG-1087 Change-Id: I26950de4c8f27bc29e450fe5a34677c05b7f013a Reviewed-by: Karsten Heimrich <karsten.heimrich@qt.io> (cherry picked from commit 013b817e5f8732a52a8baae9d25240d33ddbab8d)
-rw-r--r--QtVsTools.Package/QML/Parser/QmlParserInterop.cs1
-rw-r--r--QtVsTools.Package/QML/Syntax/QmlAst.cs14
-rw-r--r--QtVsTools.Package/QML/Syntax/QmlSyntax.cs235
-rw-r--r--VsQml/astvisitor.cpp5
-rw-r--r--VsQml/astvisitor.h1
-rw-r--r--VsQml/vsqml.cpp4
6 files changed, 138 insertions, 122 deletions
diff --git a/QtVsTools.Package/QML/Parser/QmlParserInterop.cs b/QtVsTools.Package/QML/Parser/QmlParserInterop.cs
index 901ef7b5..d8eb710e 100644
--- a/QtVsTools.Package/QML/Parser/QmlParserInterop.cs
+++ b/QtVsTools.Package/QML/Parser/QmlParserInterop.cs
@@ -340,7 +340,6 @@ namespace QtVsTools.Qml
UnmarshalNode(nodeData, node);
node.ImportToken = UnmarshalLocation(nodeData);
node.FileNameToken = UnmarshalLocation(nodeData);
- node.VersionToken = UnmarshalLocation(nodeData);
node.AsToken = UnmarshalLocation(nodeData);
node.ImportIdToken = UnmarshalLocation(nodeData);
node.SemicolonToken = UnmarshalLocation(nodeData);
diff --git a/QtVsTools.Package/QML/Syntax/QmlAst.cs b/QtVsTools.Package/QML/Syntax/QmlAst.cs
index 6e5482dc..61de275a 100644
--- a/QtVsTools.Package/QML/Syntax/QmlAst.cs
+++ b/QtVsTools.Package/QML/Syntax/QmlAst.cs
@@ -33,7 +33,7 @@ namespace QtVsTools.Qml.Syntax
{
public enum AstNodeKind
{
- #region Copied from qqmljsast_p.h
+ #region Copied from qqmljsast_p.h: enum Node::Kind
Undefined,
ArgumentList,
@@ -132,12 +132,15 @@ namespace QtVsTools.Qml.Syntax
PatternElementList,
PatternProperty,
PatternPropertyList,
-
+ Type,
+ TypeArgumentList,
+ TypeAnnotation,
UiArrayBinding,
UiImport,
UiObjectBinding,
UiObjectDefinition,
+ UiInlineComponent,
UiObjectInitializer,
UiObjectMemberList,
UiArrayMemberList,
@@ -150,7 +153,11 @@ namespace QtVsTools.Qml.Syntax
UiSourceElement,
UiHeaderItemList,
UiEnumDeclaration,
- UiEnumMemberList
+ UiEnumMemberList,
+ UiVersionSpecifier,
+ UiRequired,
+ UiAnnotation,
+ UiAnnotationList
#endregion
}
@@ -167,7 +174,6 @@ namespace QtVsTools.Qml.Syntax
public UiImport() : base(AstNodeKind.UiImport) { }
public SourceLocation ImportToken { get; set; }
public SourceLocation FileNameToken { get; set; }
- public SourceLocation VersionToken { get; set; }
public SourceLocation AsToken { get; set; }
public SourceLocation ImportIdToken { get; set; }
public SourceLocation SemicolonToken { get; set; }
diff --git a/QtVsTools.Package/QML/Syntax/QmlSyntax.cs b/QtVsTools.Package/QML/Syntax/QmlSyntax.cs
index 8d428c4f..42f34478 100644
--- a/QtVsTools.Package/QML/Syntax/QmlSyntax.cs
+++ b/QtVsTools.Package/QML/Syntax/QmlSyntax.cs
@@ -45,143 +45,151 @@ namespace QtVsTools.Qml.Syntax
/// </summary>
public enum TokenKind
{
- #region Copied from qqmljsgrammar_p.h
+ #region Copied from qqmljsgrammar_p.h: enum QQmlJSGrammar::VariousConstants
EOF_SYMBOL = 0,
- REDUCE_HERE = 125,
+ REDUCE_HERE = 131,
T_AND = 1,
T_AND_AND = 2,
T_AND_EQ = 3,
- T_ARROW = 93,
- T_AS = 110,
- T_AUTOMATIC_SEMICOLON = 62,
+ T_ARROW = 96,
+ T_AS = 116,
+ T_AT = 90,
+ T_AUTOMATIC_SEMICOLON = 64,
T_BREAK = 4,
T_CASE = 5,
T_CATCH = 6,
- T_CLASS = 98,
+ T_CLASS = 102,
T_COLON = 7,
T_COMMA = 8,
- T_COMMENT = 91,
- T_COMPATIBILITY_SEMICOLON = 92,
- T_CONST = 86,
+ T_COMMENT = 94,
+ T_COMPATIBILITY_SEMICOLON = 95,
+ T_COMPONENT = 108,
+ T_CONST = 88,
T_CONTINUE = 9,
- T_DEBUGGER = 88,
+ T_DEBUGGER = 91,
T_DEFAULT = 10,
T_DELETE = 11,
T_DIVIDE_ = 12,
T_DIVIDE_EQ = 13,
T_DO = 14,
T_DOT = 15,
- T_ELLIPSIS = 95,
+ T_ELLIPSIS = 99,
T_ELSE = 16,
- T_ENUM = 94,
+ T_ENUM = 98,
T_EQ = 17,
T_EQ_EQ = 18,
T_EQ_EQ_EQ = 19,
- T_ERROR = 114,
- T_EXPORT = 101,
- T_EXTENDS = 99,
- T_FALSE = 85,
- T_FEED_JS_EXPRESSION = 118,
- T_FEED_JS_MODULE = 120,
- T_FEED_JS_SCRIPT = 119,
- T_FEED_JS_STATEMENT = 117,
- T_FEED_UI_OBJECT_MEMBER = 116,
- T_FEED_UI_PROGRAM = 115,
+ T_ERROR = 120,
+ T_EXPORT = 105,
+ T_EXTENDS = 103,
+ T_FALSE = 87,
+ T_FEED_JS_EXPRESSION = 124,
+ T_FEED_JS_MODULE = 126,
+ T_FEED_JS_SCRIPT = 125,
+ T_FEED_JS_STATEMENT = 123,
+ T_FEED_UI_OBJECT_MEMBER = 122,
+ T_FEED_UI_PROGRAM = 121,
T_FINALLY = 20,
T_FOR = 21,
- T_FORCE_BLOCK = 122,
- T_FORCE_DECLARATION = 121,
- T_FOR_LOOKAHEAD_OK = 123,
- T_FROM = 102,
- T_FUNCTION = 22,
- T_GE = 23,
- T_GET = 112,
- T_GT = 24,
- T_GT_GT = 25,
- T_GT_GT_EQ = 26,
- T_GT_GT_GT = 27,
- T_GT_GT_GT_EQ = 28,
- T_IDENTIFIER = 29,
- T_IF = 30,
- T_IMPORT = 108,
- T_IN = 31,
- T_INSTANCEOF = 32,
- T_LBRACE = 33,
- T_LBRACKET = 34,
- T_LE = 35,
- T_LET = 87,
- T_LPAREN = 36,
- T_LT = 37,
- T_LT_LT = 38,
- T_LT_LT_EQ = 39,
- T_MINUS = 40,
- T_MINUS_EQ = 41,
- T_MINUS_MINUS = 42,
- T_MULTILINE_STRING_LITERAL = 90,
- T_NEW = 43,
- T_NOT = 44,
- T_NOT_EQ = 45,
- T_NOT_EQ_EQ = 46,
- T_NO_SUBSTITUTION_TEMPLATE = 103,
- T_NULL = 83,
- T_NUMERIC_LITERAL = 47,
- T_OF = 111,
- T_ON = 124,
- T_OR = 48,
- T_OR_EQ = 49,
- T_OR_OR = 50,
- T_PLUS = 51,
- T_PLUS_EQ = 52,
- T_PLUS_PLUS = 53,
- T_PRAGMA = 109,
- T_PROPERTY = 68,
- T_PUBLIC = 107,
- T_QUESTION = 54,
- T_RBRACE = 55,
- T_RBRACKET = 56,
- T_READONLY = 70,
- T_REMAINDER = 57,
- T_REMAINDER_EQ = 58,
- T_RESERVED_WORD = 89,
- T_RETURN = 59,
- T_RPAREN = 60,
- T_SEMICOLON = 61,
- T_SET = 113,
- T_SIGNAL = 69,
- T_STAR = 63,
- T_STAR_EQ = 66,
- T_STAR_STAR = 64,
- T_STAR_STAR_EQ = 65,
- T_STATIC = 100,
- T_STRING_LITERAL = 67,
- T_SUPER = 97,
- T_SWITCH = 71,
- T_TEMPLATE_HEAD = 104,
- T_TEMPLATE_MIDDLE = 105,
- T_TEMPLATE_TAIL = 106,
- T_THIS = 72,
- T_THROW = 73,
- T_TILDE = 74,
- T_TRUE = 84,
- T_TRY = 75,
- T_TYPEOF = 76,
- T_VAR = 77,
- T_VOID = 78,
- T_WHILE = 79,
- T_WITH = 80,
- T_XOR = 81,
- T_XOR_EQ = 82,
- T_YIELD = 96,
+ T_FORCE_BLOCK = 128,
+ T_FORCE_DECLARATION = 127,
+ T_FOR_LOOKAHEAD_OK = 129,
+ T_FROM = 106,
+ T_FUNCTION = 23,
+ T_FUNCTION_STAR = 22,
+ T_GE = 24,
+ T_GET = 118,
+ T_GT = 25,
+ T_GT_GT = 26,
+ T_GT_GT_EQ = 27,
+ T_GT_GT_GT = 28,
+ T_GT_GT_GT_EQ = 29,
+ T_IDENTIFIER = 30,
+ T_IF = 31,
+ T_IMPORT = 114,
+ T_IN = 32,
+ T_INSTANCEOF = 33,
+ T_LBRACE = 34,
+ T_LBRACKET = 35,
+ T_LE = 36,
+ T_LET = 89,
+ T_LPAREN = 37,
+ T_LT = 38,
+ T_LT_LT = 39,
+ T_LT_LT_EQ = 40,
+ T_MINUS = 41,
+ T_MINUS_EQ = 42,
+ T_MINUS_MINUS = 43,
+ T_MULTILINE_STRING_LITERAL = 93,
+ T_NEW = 44,
+ T_NOT = 45,
+ T_NOT_EQ = 46,
+ T_NOT_EQ_EQ = 47,
+ T_NO_SUBSTITUTION_TEMPLATE = 109,
+ T_NULL = 85,
+ T_NUMERIC_LITERAL = 48,
+ T_OF = 117,
+ T_ON = 130,
+ T_OR = 49,
+ T_OR_EQ = 51,
+ T_OR_OR = 52,
+ T_PLUS = 53,
+ T_PLUS_EQ = 54,
+ T_PLUS_PLUS = 55,
+ T_PRAGMA = 115,
+ T_PROPERTY = 70,
+ T_PUBLIC = 113,
+ T_QUESTION = 56,
+ T_QUESTION_QUESTION = 97,
+ T_RBRACE = 57,
+ T_RBRACKET = 58,
+ T_READONLY = 72,
+ T_REMAINDER = 59,
+ T_REMAINDER_EQ = 60,
+ T_REQUIRED = 107,
+ T_RESERVED_WORD = 92,
+ T_RETURN = 61,
+ T_RPAREN = 62,
+ T_SEMICOLON = 63,
+ T_SET = 119,
+ T_SIGNAL = 71,
+ T_STAR = 65,
+ T_STAR_EQ = 68,
+ T_STAR_STAR = 66,
+ T_STAR_STAR_EQ = 67,
+ T_STATIC = 104,
+ T_STRING_LITERAL = 69,
+ T_SUPER = 101,
+ T_SWITCH = 73,
+ T_TEMPLATE_HEAD = 110,
+ T_TEMPLATE_MIDDLE = 111,
+ T_TEMPLATE_TAIL = 112,
+ T_THEN = 132,
+ T_THIS = 74,
+ T_THROW = 75,
+ T_TILDE = 76,
+ T_TRUE = 86,
+ T_TRY = 77,
+ T_TYPEOF = 78,
+ T_VAR = 79,
+ T_VERSION_NUMBER = 50,
+ T_VOID = 80,
+ T_WHILE = 81,
+ T_WITH = 82,
+ T_WITHOUTAS = 133,
+ T_XOR = 83,
+ T_XOR_EQ = 84,
+ T_YIELD = 100,
- ACCEPT_STATE = 1008,
- RULE_COUNT = 586,
- STATE_COUNT = 1009,
- TERMINAL_COUNT = 126,
- NON_TERMINAL_COUNT = 213,
+ ACCEPT_STATE = 1098,
+ RULE_COUNT = 616,
+ STATE_COUNT = 1099,
+ TERMINAL_COUNT = 134,
+ NON_TERMINAL_COUNT = 238,
- GOTO_INDEX_OFFSET = 1009,
- GOTO_INFO_OFFSET = 6012,
- GOTO_CHECK_OFFSET = 6012
+ GOTO_INDEX_OFFSET = 1099,
+ GOTO_INFO_OFFSET = 7238,
+ GOTO_CHECK_OFFSET = 7238
#endregion
}
@@ -236,6 +244,7 @@ namespace QtVsTools.Qml.Syntax
case TokenKind.T_PROPERTY:
case TokenKind.T_PUBLIC:
case TokenKind.T_READONLY:
+ case TokenKind.T_REQUIRED:
case TokenKind.T_RESERVED_WORD:
case TokenKind.T_RETURN:
case TokenKind.T_SET:
diff --git a/VsQml/astvisitor.cpp b/VsQml/astvisitor.cpp
index 3bb9321a..71cc5f4a 100644
--- a/VsQml/astvisitor.cpp
+++ b/VsQml/astvisitor.cpp
@@ -27,6 +27,7 @@
****************************************************************************/
#include "astvisitor.h"
+using namespace QQmlJS;
using namespace QQmlJS::AST;
class AstVisitorPrivate : public QQmlJS::AST::Visitor
@@ -91,7 +92,6 @@ private:
marshalNode(nodeData, node);
marshalLocation(nodeData, node->importToken);
marshalLocation(nodeData, node->fileNameToken);
- marshalLocation(nodeData, node->versionToken);
marshalLocation(nodeData, node->asToken);
marshalLocation(nodeData, node->importIdToken);
marshalLocation(nodeData, node->semicolonToken);
@@ -229,8 +229,9 @@ public:
callbackFiltered[nodeKindFilter] = visitCallback;
}
- // Copied from qqmljsastvisitor_p.h
+ // Copied from qqmljsastvisitor_p.h: class QQmlJS::AST::Visitor
+ // Ui
virtual bool visit(UiProgram *node) { return visitCallback(node, true); }
virtual bool visit(UiHeaderItemList *node) { return visitCallback(node, true); }
virtual bool visit(UiPragma *node) { return visitCallback(node, true); }
diff --git a/VsQml/astvisitor.h b/VsQml/astvisitor.h
index 2c29f819..2e4257d3 100644
--- a/VsQml/astvisitor.h
+++ b/VsQml/astvisitor.h
@@ -31,6 +31,7 @@
#include <QtQml/private/qqmljslexer_p.h>
#include <QtQml/private/qqmljsparser_p.h>
+#include <QtQml/private/qqmljssourcelocation_p.h>
class AstVisitorPrivate;
diff --git a/VsQml/vsqml.cpp b/VsQml/vsqml.cpp
index 0d58ec03..1434ea23 100644
--- a/VsQml/vsqml.cpp
+++ b/VsQml/vsqml.cpp
@@ -148,8 +148,8 @@ bool qmlParse(
if (diagnosticMessages && diagnosticMessagesLength) {
QVector<int> diagValues;
- for (auto diag : s->parser->diagnosticMessages()) {
- diagValues.append(diag.kind);
+ for (auto &diag : s->parser->diagnosticMessages()) {
+ diagValues.append(diag.type >= QtCriticalMsg ? 1 : 0);
diagValues.append(diag.loc.offset);
diagValues.append(diag.loc.length);
}