From 44a155c6128d874da0902d6d3c95f159e486ec22 Mon Sep 17 00:00:00 2001 From: Christian Kamm <christian.d.kamm@nokia.com> Date: Fri, 30 Apr 2010 14:22:55 +0200 Subject: [PATCH] QmlJS: Fix completion context when cursor is to the right of inserted ; Done-with: Erik Verbruggen --- src/libs/qmljs/qmljscompletioncontextfinder.cpp | 3 +++ src/libs/qmljs/qmljslineinfo.cpp | 4 ++++ src/libs/qmljs/qmljslineinfo.h | 4 +++- src/plugins/qmljseditor/qmljscodecompletion.cpp | 1 - 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/libs/qmljs/qmljscompletioncontextfinder.cpp b/src/libs/qmljs/qmljscompletioncontextfinder.cpp index 0fd7ab856b1..645472c2203 100644 --- a/src/libs/qmljs/qmljscompletioncontextfinder.cpp +++ b/src/libs/qmljs/qmljscompletioncontextfinder.cpp @@ -31,6 +31,9 @@ CompletionContextFinder::CompletionContextFinder(const QTextCursor &cursor) break; } + if (m_startTokenIndex == yyLinizerState.tokens.size() - 1 && yyLinizerState.insertedSemicolon) + --m_startTokenIndex; + getQmlObjectTypeName(m_startTokenIndex); checkBinding(); } diff --git a/src/libs/qmljs/qmljslineinfo.cpp b/src/libs/qmljs/qmljslineinfo.cpp index a4c8837d1b8..5bae0d727c5 100644 --- a/src/libs/qmljs/qmljslineinfo.cpp +++ b/src/libs/qmljs/qmljslineinfo.cpp @@ -208,6 +208,7 @@ QString LineInfo::trimmedCodeLine(const QString &t) const Token sc(trimmed.size(), 1, Token::Semicolon); yyLinizerState.tokens.append(sc); trimmed.append(QLatin1Char(';')); + yyLinizerState.insertedSemicolon = true; } } @@ -276,6 +277,8 @@ bool LineInfo::readLine() (firstNonWhiteSpace(yyLinizerState.line) == QLatin1Char('{')); do { + yyLinizerState.insertedSemicolon = false; + if (yyLinizerState.iter == yyProgram.firstBlock()) { yyLinizerState.line.clear(); return false; @@ -332,6 +335,7 @@ void LineInfo::startLinizer() { yyLinizerState.braceDepth = 0; yyLinizerState.pendingRightBrace = false; + yyLinizerState.insertedSemicolon = false; yyLine = &yyLinizerState.line; yyBraceDepth = &yyLinizerState.braceDepth; diff --git a/src/libs/qmljs/qmljslineinfo.h b/src/libs/qmljs/qmljslineinfo.h index 2112e313f0a..8173f9ddc72 100644 --- a/src/libs/qmljs/qmljslineinfo.h +++ b/src/libs/qmljs/qmljslineinfo.h @@ -84,12 +84,14 @@ protected: LinizerState() : braceDepth(0), leftBraceFollows(false), - pendingRightBrace(false) + pendingRightBrace(false), + insertedSemicolon(false) { } int braceDepth; bool leftBraceFollows; bool pendingRightBrace; + bool insertedSemicolon; QString line; QList<Token> tokens; QTextBlock iter; diff --git a/src/plugins/qmljseditor/qmljscodecompletion.cpp b/src/plugins/qmljseditor/qmljscodecompletion.cpp index a5a5d15f575..aae8b16863b 100644 --- a/src/plugins/qmljseditor/qmljscodecompletion.cpp +++ b/src/plugins/qmljseditor/qmljscodecompletion.cpp @@ -690,7 +690,6 @@ int CodeCompletion::startCompletion(TextEditor::ITextEditable *editor) if (contextFinder.isInRhsOfBinding() && qmlScopeType) { doQmlKeywordCompletion = false; - qDebug() << "property name: " << contextFinder.bindingPropertyName(); if (!contextFinder.bindingPropertyName().isEmpty()) { const Interpreter::Value *value = qmlScopeType; -- GitLab