summaryrefslogtreecommitdiff
path: root/src/plugins/qmljseditor/qmljssemantichighlighter.cpp
diff options
context:
space:
mode:
authorChristian Kamm <christian.d.kamm@nokia.com>2011-09-12 14:00:05 +0200
committerChristian Kamm <christian.d.kamm@nokia.com>2011-09-14 11:51:35 +0200
commit1a0fb751cde975f43564c9a8b1475c263acecc9a (patch)
tree2dc32f37b798befb6ace66753e92ea3663812b5b /src/plugins/qmljseditor/qmljssemantichighlighter.cpp
parenta8b03e9c282dbe3a100726367ac5159cf8e5553e (diff)
downloadqt-creator-1a0fb751cde975f43564c9a8b1475c263acecc9a.tar.gz
QmlJS highlighting: Use semantics for types and binding names.
This fixes some problems with highlighting like anchors {}, allows us to only highlight correct types and to make the binding name formatting customizable. Change-Id: I7ab0c0ed384108b74a2998796d868d5ced4a5310 Reviewed-on: http://codereview.qt-project.org/4669 Reviewed-by: Thomas Hartmann <Thomas.Hartmann@nokia.com>
Diffstat (limited to 'src/plugins/qmljseditor/qmljssemantichighlighter.cpp')
-rw-r--r--src/plugins/qmljseditor/qmljssemantichighlighter.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/plugins/qmljseditor/qmljssemantichighlighter.cpp b/src/plugins/qmljseditor/qmljssemantichighlighter.cpp
index cc81c57cc7..c0ba42675b 100644
--- a/src/plugins/qmljseditor/qmljssemantichighlighter.cpp
+++ b/src/plugins/qmljseditor/qmljssemantichighlighter.cpp
@@ -40,6 +40,7 @@
#include <qmljs/qmljsevaluate.h>
#include <qmljs/qmljscontext.h>
#include <qmljs/qmljsbind.h>
+#include <qmljs/qmljscheck.h>
#include <qmljs/parser/qmljsast_p.h>
#include <qmljs/parser/qmljsastvisitor_p.h>
#include <texteditor/syntaxhighlighter.h>
@@ -249,26 +250,57 @@ protected:
addUse(location, type);
}
+ void processTypeId(UiQualifiedId *typeId)
+ {
+ if (!typeId)
+ return;
+ if (m_scopeChain.context()->lookupType(m_scopeChain.document().data(), typeId))
+ addUse(fullLocationForQualifiedId(typeId), SemanticHighlighter::QmlTypeType);
+ }
+
+ void processBindingName(UiQualifiedId *localId)
+ {
+ if (!localId)
+ return;
+ addUse(fullLocationForQualifiedId(localId), SemanticHighlighter::BindingNameType);
+ }
+
bool visit(UiObjectDefinition *ast)
{
+ if (m_scopeChain.document()->bind()->isGroupedPropertyBinding(ast)) {
+ processBindingName(ast->qualifiedTypeNameId);
+ } else {
+ processTypeId(ast->qualifiedTypeNameId);
+ }
scopedAccept(ast, ast->initializer);
return false;
}
bool visit(UiObjectBinding *ast)
{
+ processTypeId(ast->qualifiedTypeNameId);
+ processBindingName(ast->qualifiedId);
scopedAccept(ast, ast->initializer);
return false;
}
bool visit(UiScriptBinding *ast)
{
+ processBindingName(ast->qualifiedId);
scopedAccept(ast, ast->statement);
return false;
}
+ bool visit(UiArrayBinding *ast)
+ {
+ processBindingName(ast->qualifiedId);
+ return true;
+ }
+
bool visit(UiPublicMember *ast)
{
+ if (ast->identifierToken.isValid())
+ addUse(ast->identifierToken, SemanticHighlighter::BindingNameType);
scopedAccept(ast, ast->statement);
return false;
}
@@ -436,6 +468,8 @@ void SemanticHighlighter::updateFontSettings(const TextEditor::FontSettings &fon
m_formats[JsImportType] = fontSettings.toTextCharFormat(QLatin1String(TextEditor::Constants::C_JS_IMPORT_VAR));
m_formats[JsGlobalType] = fontSettings.toTextCharFormat(QLatin1String(TextEditor::Constants::C_JS_GLOBAL_VAR));
m_formats[LocalStateNameType] = fontSettings.toTextCharFormat(QLatin1String(TextEditor::Constants::C_QML_STATE_NAME));
+ m_formats[BindingNameType] = fontSettings.toTextCharFormat(QLatin1String(TextEditor::Constants::C_BINDING));
+ m_formats[FieldType] = fontSettings.toTextCharFormat(QLatin1String(TextEditor::Constants::C_FIELD));
}
int SemanticHighlighter::startRevision() const