diff --git a/src/libs/qmljs/qmljsindenter.cpp b/src/libs/qmljs/qmljsindenter.cpp index dc5407c8c9361bc1116e91d4d7ad9d6cf4dbfaba..ea42bd4f65c079c52f3024d9368e08131f1481ed 100644 --- a/src/libs/qmljs/qmljsindenter.cpp +++ b/src/libs/qmljs/qmljsindenter.cpp @@ -309,6 +309,18 @@ bool QmlJSIndenter::okay(QChar typedIn, QChar okayCh) const return typedIn == QChar() || typedIn == okayCh; } +QmlJSScanner::Token QmlJSIndenter::lastToken() const +{ + for (int index = yyLinizerState.tokens.size() - 1; index != -1; --index) { + const QmlJSScanner::Token &token = yyLinizerState.tokens.at(index); + + if (token.isNot(QmlJSScanner::Token::Comment)) + return token; + } + + return QmlJSScanner::Token(); +} + /* Saves and restores the state of the global linizer. This enables backtracking. @@ -473,7 +485,7 @@ bool QmlJSIndenter::matchBracelessControlStatement() int delimDepth = 0; if (! yyLinizerState.tokens.isEmpty()) { - const QmlJSScanner::Token &tk = yyLinizerState.tokens.last(); + QmlJSScanner::Token tk = lastToken(); if (tk.is(QmlJSScanner::Token::Identifier) && yyLinizerState.line.midRef(tk.offset, tk.length) == QLatin1String("else")) @@ -491,6 +503,10 @@ bool QmlJSIndenter::matchBracelessControlStatement() default: break; + case QmlJSScanner::Token::Comment: + // skip comments + break; + case QmlJSScanner::Token::RightParenthesis: ++delimDepth; break; @@ -1056,3 +1072,4 @@ int QmlJSIndenter::indentForBottomLine(QTextBlock begin, QTextBlock end, QChar t return qMax(0, indent); } + diff --git a/src/libs/qmljs/qmljsindenter.h b/src/libs/qmljs/qmljsindenter.h index d880a1a39395bf8dfd31c739f0ae9d55ce0bfd32..2fee67390ff670ff96f3ff78adad2c1dc9b9ccdc 100644 --- a/src/libs/qmljs/qmljsindenter.h +++ b/src/libs/qmljs/qmljsindenter.h @@ -84,6 +84,8 @@ private: int indentForContinuationLine(); int indentForStandaloneLine(); + QmlJSScanner::Token lastToken() const; + private: int ppHardwareTabSize; int ppIndentSize; diff --git a/src/libs/qmljs/qmljsscanner.h b/src/libs/qmljs/qmljsscanner.h index 9a6abb770213f9547afba391c1b2f7a93d019f1a..8b3990fc5b0295d328a8c3cc8d000ad1fc4bb1b2 100644 --- a/src/libs/qmljs/qmljsscanner.h +++ b/src/libs/qmljs/qmljsscanner.h @@ -41,11 +41,9 @@ namespace QmlJS { class QMLJS_EXPORT QmlJSScanner { public: - struct Token { - int offset; - int length; enum Kind { + EndOfFile, Keyword, Identifier, String, @@ -62,8 +60,13 @@ public: Colon, Comma, Dot - } kind; + }; + + int offset; + int length; + Kind kind; + inline Token(): offset(0), length(0), kind(EndOfFile) {} inline Token(int o, int l, Kind k): offset(o), length(l), kind(k) {} inline int begin() const { return offset; } inline int end() const { return offset + length; }