From 402566626a244f32be07fbc31236820b9477756b Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Thu, 11 Nov 2010 14:22:30 +0100 Subject: [PATCH] QmlJS: Determine whether cursor is inside a string literal. Reviewed-by: Erik Verbruggen --- src/libs/qmljs/qmljscompletioncontextfinder.cpp | 11 ++++++++++- src/libs/qmljs/qmljscompletioncontextfinder.h | 3 +++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/libs/qmljs/qmljscompletioncontextfinder.cpp b/src/libs/qmljs/qmljscompletioncontextfinder.cpp index 68b0db8996..6afcdd02a9 100644 --- a/src/libs/qmljs/qmljscompletioncontextfinder.cpp +++ b/src/libs/qmljs/qmljscompletioncontextfinder.cpp @@ -47,6 +47,7 @@ CompletionContextFinder::CompletionContextFinder(const QTextCursor &cursor) : m_cursor(cursor) , m_colonCount(-1) , m_behaviorBinding(false) + , m_inStringLiteral(false) { QTextBlock lastBlock = cursor.block(); if (lastBlock.next().isValid()) @@ -57,11 +58,14 @@ CompletionContextFinder::CompletionContextFinder(const QTextCursor &cursor) // Initialize calls readLine - which skips empty lines. We should only adjust // the start token index if the linizer still is in the same block as the cursor. + const int cursorPos = cursor.positionInBlock(); if (yyLinizerState.iter == cursor.block()) { for (; m_startTokenIndex >= 0; --m_startTokenIndex) { const Token &token = yyLinizerState.tokens.at(m_startTokenIndex); - if (token.end() <= cursor.positionInBlock()) + if (token.end() <= cursorPos) break; + if (token.begin() < cursorPos && token.is(Token::String)) + m_inStringLiteral = true; } if (m_startTokenIndex == yyLinizerState.tokens.size() - 1 && yyLinizerState.insertedSemicolon) @@ -228,6 +232,11 @@ bool CompletionContextFinder::isAfterOnInLhsOfBinding() const return isInLhsOfBinding() && m_behaviorBinding; } +bool QmlJS::CompletionContextFinder::isInStringLiteral() const +{ + return m_inStringLiteral; +} + int CompletionContextFinder::findOpeningBrace(int startTokenIndex) { YY_SAVE(); diff --git a/src/libs/qmljs/qmljscompletioncontextfinder.h b/src/libs/qmljs/qmljscompletioncontextfinder.h index c3a4d2ac0e..8d5ad51db5 100644 --- a/src/libs/qmljs/qmljscompletioncontextfinder.h +++ b/src/libs/qmljs/qmljscompletioncontextfinder.h @@ -52,6 +52,8 @@ public: bool isAfterOnInLhsOfBinding() const; QStringList bindingPropertyName() const; + bool isInStringLiteral() const; + private: int findOpeningBrace(int startTokenIndex); void getQmlObjectTypeName(int startTokenIndex); @@ -63,6 +65,7 @@ private: int m_startTokenIndex; int m_colonCount; bool m_behaviorBinding; + bool m_inStringLiteral; }; } // namespace QmlJS -- 2.11.0