From b2bb919e454a0abd54aa5f21844857b0cd0502a8 Mon Sep 17 00:00:00 2001 From: Christian Kamm <christian.d.kamm@nokia.com> Date: Fri, 26 Mar 2010 13:50:51 +0100 Subject: [PATCH] QmlJSEditor: Add completion for JS keywords and Qml reserved words. Task-number: QTCREATORBUG-919 Reviewed-by: Roberto Raggi --- src/libs/qmljs/qmljsscanner.cpp | 10 ++++++++++ src/libs/qmljs/qmljsscanner.h | 1 + .../qmljseditor/qmljscodecompletion.cpp | 19 +++++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/src/libs/qmljs/qmljsscanner.cpp b/src/libs/qmljs/qmljsscanner.cpp index 7b201d2c6c7..79f81509f23 100644 --- a/src/libs/qmljs/qmljsscanner.cpp +++ b/src/libs/qmljs/qmljsscanner.cpp @@ -309,3 +309,13 @@ bool Scanner::isKeyword(const QString &text) const return false; } + +QStringList Scanner::keywords() +{ + static QStringList words; + if (words.isEmpty()) { + for (const QString *word = begin(js_keywords); word != end(js_keywords); ++word) + words.append(*word); + } + return words; +} diff --git a/src/libs/qmljs/qmljsscanner.h b/src/libs/qmljs/qmljsscanner.h index 7d02e1b42dd..9141842cd71 100644 --- a/src/libs/qmljs/qmljsscanner.h +++ b/src/libs/qmljs/qmljsscanner.h @@ -87,6 +87,7 @@ public: int state() const; bool isKeyword(const QString &text) const; + static QStringList keywords(); private: int _state; diff --git a/src/plugins/qmljseditor/qmljscodecompletion.cpp b/src/plugins/qmljseditor/qmljscodecompletion.cpp index 2eab2db74fb..1c7f3e39d1b 100644 --- a/src/plugins/qmljseditor/qmljscodecompletion.cpp +++ b/src/plugins/qmljseditor/qmljscodecompletion.cpp @@ -692,6 +692,25 @@ int CodeCompletion::startCompletion(TextEditor::ITextEditable *editor) item.icon = symbolIcon; m_completions.append(item); } + + // add js keywords + foreach (const QString &word, Scanner::keywords()) { + TextEditor::CompletionItem item(this); + item.text = word; + m_completions.append(item); + } + + // add qml extra words + if (document->qmlProgram()) { + static QStringList qmlWords; + if (qmlWords.isEmpty()) + qmlWords << "property" << "readonly" << "signal"; + foreach (const QString &word, qmlWords) { + TextEditor::CompletionItem item(this); + item.text = word; + m_completions.append(item); + } + } } else if (completionOperator == QLatin1Char('.') || completionOperator == QLatin1Char('(')) { -- GitLab