From 5302a5e64bcb421563f4b11ee97213739a4c1e69 Mon Sep 17 00:00:00 2001 From: Miguel Costa Date: Thu, 20 Apr 2023 12:34:42 +0200 Subject: 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 (cherry picked from commit 013b817e5f8732a52a8baae9d25240d33ddbab8d) --- QtVsTools.Package/QML/Parser/QmlParserInterop.cs | 1 - QtVsTools.Package/QML/Syntax/QmlAst.cs | 14 +- QtVsTools.Package/QML/Syntax/QmlSyntax.cs | 235 ++++++++++++----------- VsQml/astvisitor.cpp | 5 +- VsQml/astvisitor.h | 1 + VsQml/vsqml.cpp | 4 +- 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 /// 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 #include +#include 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 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); } -- cgit v1.2.3