[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: =?utf-8?q?=5Bkdev-python=5D_duchain=3A_Add_output_for_list_conte?=
From: Sven Brauch <svenbrauch () googlemail ! com>
Date: 2011-06-30 19:49:01
Message-ID: 20110630194901.56C9AA60A6 () git ! kde ! org
[Download RAW message or body]
Git commit 9bb287b8c5da533157523c56012fa5d498790b6f by Sven Brauch.
Committed on 30/06/2011 at 21:50.
Pushed by brauch into branch 'master'.
Add output for list content types, and loop handling
"for item in foo" assigns "item" the type of foo->contents, if possible.
Navigation widgets show something like "list of <type>" instead of
"list".
M +23 -4 duchain/declarationbuilder.cpp
M +18 -5 duchain/navigation/declarationnavigationcontext.cpp
M +1 -4 duchain/navigation/declarationnavigationcontext.h
M +1 -0 duchain/types/variablelengthcontainer.cpp
http://commits.kde.org/kdev-python/9bb287b8c5da533157523c56012fa5d498790b6f
diff --git a/duchain/declarationbuilder.cpp b/duchain/declarationbuilder.cpp
index 2f70a12..76a1e02 100644
--- a/duchain/declarationbuilder.cpp
+++ b/duchain/declarationbuilder.cpp
@@ -272,15 +272,34 @@ void \
DeclarationBuilder::visitExceptionHandler(ExceptionHandlerAst* node)
void DeclarationBuilder::visitFor(ForAst* node)
{
+ ExpressionVisitor v(currentContext(), editor());
+ v.visitNode(node->iterator);
+ VariableLengthContainer::Ptr type = \
v.lastType().cast<VariableLengthContainer>(); if ( node->target->astType == \
Ast::NameAstType ) {
- openType(AbstractType::Ptr(0)); // TODO check for what is iterated over
- setLastType(AbstractType::Ptr(0));
+ if ( type && type->contentType() ) {
+ setLastType(type->contentType().abstractType());
+ }
+ else {
+ setLastType(AbstractType::Ptr(new \
IntegralType(IntegralType::TypeMixed))); + }
visitVariableDeclaration<Declaration>(node->target);
- closeType();
}
else if ( node->target->astType == Ast::TupleAstType ) {
+ short atElement = 0;
foreach ( ExpressionAst* tupleMember, \
dynamic_cast<TupleAst*>(node->target)->elements ) {
- if ( tupleMember->astType == Ast::NameAstType ) \
visitVariableDeclaration<Declaration>(tupleMember); + if ( \
tupleMember->astType == Ast::NameAstType ) { + if ( atElement == 0 && \
type && type->keyType() ) { + \
setLastType(type->keyType().abstractType()); + }
+ else if ( atElement == 1 && type && type->contentType() ) {
+ setLastType(type->contentType().abstractType());
+ }
+ else {
+ setLastType(AbstractType::Ptr(new \
IntegralType(IntegralType::TypeMixed))); + }
+ visitVariableDeclaration<Declaration>(tupleMember);
+ }
+ ++atElement;
}
}
Python::ContextBuilder::visitFor(node);
diff --git a/duchain/navigation/declarationnavigationcontext.cpp \
b/duchain/navigation/declarationnavigationcontext.cpp index 61bd7c0..54c4da2 100644
--- a/duchain/navigation/declarationnavigationcontext.cpp
+++ b/duchain/navigation/declarationnavigationcontext.cpp
@@ -28,9 +28,8 @@
#include <language/duchain/namespacealiasdeclaration.h>
#include <language/duchain/forwarddeclaration.h>
#include <language/duchain/duchainutils.h>
-
-#include <QTcpSocket>
-#include <QProcess>
+#include <types/variablelengthcontainer.h>
+#include <language/duchain/types/typepointer.h>
namespace Python
{
@@ -41,9 +40,23 @@ DeclarationNavigationContext::DeclarationNavigationContext(DeclarationPointer \
de {
}
-NavigationContextPointer \
DeclarationNavigationContext::registerChild(DeclarationPointer declaration) +void \
DeclarationNavigationContext::htmlIdentifiedType(AbstractType::Ptr type, const \
IdentifiedType* idType) {
- return AbstractDeclarationNavigationContext::registerChild(new \
DeclarationNavigationContext(declaration, m_topContext, this)); + if ( \
VariableLengthContainer::Ptr t = VariableLengthContainer::Ptr::dynamicCast(type) ) { \
+ makeLink(t->toString(), \
DeclarationPointer(idType->declaration(m_topContext.data())), \
NavigationAction::NavigateDeclaration ); + modifyHtml() += i18n(" of ");
+ if ( AbstractType::Ptr contents = t->contentType().abstractType() ) {
+ IdentifiedType* identifiedContent = \
dynamic_cast<IdentifiedType*>(contents.unsafeData()); + if ( \
identifiedContent ) { + makeLink(contents->toString(), \
DeclarationPointer(identifiedContent->declaration(m_topContext.data())), \
NavigationAction::NavigateDeclaration ); + }
+ else modifyHtml() += contents->toString();
+ }
+ else modifyHtml() += i18n("unknown");
+ }
+ else {
+ KDevelop::AbstractDeclarationNavigationContext::htmlIdentifiedType(type, \
idType); + }
}
QString DeclarationNavigationContext::html(bool shorten)
diff --git a/duchain/navigation/declarationnavigationcontext.h \
b/duchain/navigation/declarationnavigationcontext.h index 1e5ebbb..bb7b7ee 100644
--- a/duchain/navigation/declarationnavigationcontext.h
+++ b/duchain/navigation/declarationnavigationcontext.h
@@ -33,11 +33,8 @@ public:
QString m_fullyQualifiedModuleIdentifier;
protected:
- KDevelop::NavigationContextPointer registerChild(KDevelop::DeclarationPointer \
declaration);
-// virtual KDevelop::QualifiedIdentifier prettyQualifiedIdentifier( \
KDevelop::DeclarationPointer decl ) const;
-// virtual void htmlClass();
-// virtual void htmlFunction();
QString html(bool shorten = false);
+ virtual void htmlIdentifiedType(KDevelop::AbstractType::Ptr type, const \
KDevelop::IdentifiedType* idType); };
}
diff --git a/duchain/types/variablelengthcontainer.cpp \
b/duchain/types/variablelengthcontainer.cpp index 2d2c607..419a00f 100644
--- a/duchain/types/variablelengthcontainer.cpp
+++ b/duchain/types/variablelengthcontainer.cpp
@@ -22,6 +22,7 @@
#include "helpers.h"
#include <language/duchain/duchain.h>
#include <language/duchain/duchainlock.h>
+#include <KLocalizedString>
using namespace KDevelop;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic