Page 1 of 1

Is there a plan to impove the ctags parser?

Posted: Sun May 29, 2011 11:06 am
by fanhe0513
Hi eranif, thanks to your work, the ctags within codelite has supported basic function return value and class template.

But, I have a function return value problem.
Check the following test c++ code.

Code: Select all

class B {
public:
    int b3;
};

namespace NS01
{
    class A {
    public:
        int a1;
    };
    
    class B {
    public:
        A m_a;
        int b1;
    };
    
    namespace NS02
    {
        class A {
        public:
            int aa;
        };
        
        class B {
        public:
            int bb;
            class BB {
            public:
                int bb2;
            };
        };
    }
    
    template<typename T1, typename T2>
    T1 * 
    Func()
    {
        return new T1;
    }
    
    B * 
    Func2()
    {
        return new B;
    }
}

namespace NS02
{
    class A {
    public:
        int a2;
    };
    
    class B {
    public:
        int b2;
    };
    
    class C {
    public:
        int c2;
    };
}

//using namespace NS01;

int main(int argc, char **argv)
{
    using namespace NS01::NS02;
    using NS02::C;
    namespace NS002 = NS01;
    namespace NS003 = NS002::NS02;
    using NS003::B;
    using NS01::Func;
    using NS01::Func2;
//    using namespace NS02;
//    namespace B = NS01::NS02;
//    using NS01::NS02::B;
//    B::BB bb;

    A a1;
    NS01::B b1;
    B b2;
    NS002::B b3;
    NS003::B b4;
    C c1;
    
    a1; // -> aa
    b1; // -> b1
    b2; // -> bb
    b3; // -> b1
    b4; // -> bb
    c1; // -> c2
    b1.m_a.a1;

    Func<B, short>()->bb; // -> bb
    Func2()->b1;

    return 0;
}
The Func2 symbol stored in codelite database is
screenshot1.png
Obviously, it miss some information like template parameter and add some useless symbol.
So I think, we can add a extra field which I call qualifiers to store the class template info and function return info.
For the above Func2 symbol, it's qualifiers field is "template<typename T1, typename T2> T1 *"
I think storing the original text(after -I replacement) is the first idea.

For the above test code, I think I also report some bugs...

Currently, I migrate the codelite database to python and work with vim successfully. So I have the above questions.
screenshot2.png
I'm not familiar with the ctags.
Are you have a plan improve the ctags?

Best regards.
fanhe

Re: Is there a plan to impove the ctags parser?

Posted: Sun May 29, 2011 5:28 pm
by eranif
fanhe0513 wrote:Hi eranif, thanks to your work, the ctags within codelite has supported basic function return value and class template.
It has more than that. However, most of the template logic parsing is done inside codelite's parser which is *not* the ctags parser.

The ctags output is just a basic stage in providing a rough lookup table. the logic of templates and context parsing is done using an internal parser built-in into codelite binary.

For your question: i have no plans to extend ctags parser atm.
Eran

Re: Is there a plan to impove the ctags parser?

Posted: Sun May 29, 2011 7:56 pm
by fanhe0513
For your question: i have no plans to extend ctags parser atm.
En, then I will try to deal with the return value.

In future, I think I use clang instead.
Currently, the clang do not support code-complete in .h file, and slow without pch.
If I generate a pch, the symbols in pch will all enter code-complete such as the .c file include all the headers.
If there is a method can control file about pch, the clang will be the better code-complete tool.

fanhe

Re: Is there a plan to impove the ctags parser?

Posted: Fri Jun 03, 2011 7:27 pm
by eranif
fanhe0513 wrote:In future, I think I use clang instead.
have a look at codelite's source file named 'clang_code_completion.cpp' for an example for how I workaround completion in .h files

Eran