[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