Code::Blocks Forums

Developer forums (C::B DEVELOPMENT STRICTLY!) => Development => CodeCompletion redesign => Topic started by: killerbot on September 30, 2010, 04:40:01 pm

Title: several completion issues
Post by: killerbot on September 30, 2010, 04:40:01 pm
This is the test code (just your ordinary main.cpp) :
Code
#include <iostream>


enum enumerA
{
bla_on,
bla_off
};

enum enumerX
{
bla_on_foo,
bla_off_foo
};

class BitA
{
public:
BitA(){}
void Set(enumerA value) {mValue = value;}
enumerA Get() const {return mValue;}
private:
enumerA mValue;
};


enum enumerB
{
enable,
disable
};


class BitB
{
public:
BitB(){}
void Set(enumerB value) {mValue = value;}
enumerB Get() const {return mValue;}
private:
enumerB mValue;
};


template<typename T>
class BitTemplate
{
public:
BitTemplate() {std::cout << "bit template intended for enums" << std::endl;}
void Set(T value) {mValue = value;}
T Get() const {return mValue;}
private:
T mValue;
};

template<>
class BitTemplate<bool>
{
public:
BitTemplate() {std::cout << "bit template intended for bools" << std::endl;}
void Set(bool value) {mValue = value;}
bool Get() const {return mValue;}
private:
bool mValue;
};

template<>
class BitTemplate<int>
{
public:
BitTemplate() {std::cout << "bit template intended for ints" << std::endl;}
void Set(int value) {mValue = value;}
int Get() const {return mValue;}
private:
int mValue;
};


int main()
{
BitA a;
BitB b;

BitTemplate<enumerA> Bta;
BitTemplate<enumerB> Btb;

BitTemplate<bool> Btbool;

BitTemplate<int> Btint;

    return 0;
}

Carry out all experiments on the line before "return 0;"
Title: Re: several completion issues
Post by: killerbot on September 30, 2010, 04:41:47 pm
Issue 1 :

type :
Code
a.Set(bla_

You will see it offers 4 possibilities, but it should only be 2, only the 2 from "enumerA", and not the ones from "enumerX"
Title: Re: several completion issues
Post by: killerbot on September 30, 2010, 04:43:57 pm
Issue 2 :

Type :
Code
Bta.Set(

It give in the tooltip 3 entries. But the following ones should not be there :
Set(bool value)
Set(int value)

It should only be : Set(T value) (see more on this in Issue3 below)
Title: Re: several completion issues
Post by: killerbot on September 30, 2010, 04:45:17 pm
Issue 3.

Closely related to Issue2, assume the 2 entries that should not be there would be gone, then it would show :
Set(T value)

But we already know it is a template instantiated with enumerA, so ultimately it should show in the tooltip :
Set(enumerA value)
Title: Re: several completion issues
Post by: killerbot on September 30, 2010, 04:51:07 pm
Improvement :

In case the parameter in a method whose turn it is to be entered is an enumeration, it might be interesting to directly show the completion drop down with the possible enum values, now you first need to type some first characters before the completion is going to help you.

a.Set(  --> show the drop down with the 2 enum possibilities instead of the tooltip saying it is an enumerA.

What do you think ?
Title: Re: several completion issues
Post by: ollydbg on October 01, 2010, 04:55:00 am
Issue 1 :

type :
Code
a.Set(bla_

You will see it offers 4 possibilities, but it should only be 2, only the 2 from "enumerA", and not the ones from "enumerX"

Dear killerbot, let me explanation how CC generate the suggestion list.
It is very simple:

1, find the current statement:

for this code:
Code
a.Set(bla_
We just do a backward search from the caret position, then stop at characters like "[" or "(" etc. So, in this case, we stop at "(", so, the actual statement we are interest is:
Code
bla_

2, find a initial search scope, Now, we guess the statement "bla_" is in global namespace scope.

3, do a match in the search scope, so all the tokens in the global namespace with a prefix "bla_" will be listed as suggestion list.

From this algorithm, you can see that NO function argument information is used.


Here is another example code:
Code
#include <iostream>

void bla_my_function();


enum enumerA
{
bla_on,
bla_off
};

enum enumerX
{
bla_on_foo,
bla_off_foo
};

class BitA
{
public:
BitA(){}
void Set(enumerA value) {mValue = value;}
enumerA Get() const {return mValue;}
private:
enumerA mValue;
};


BitA a;

a.Set(bla_)

You can see the screen shot, even the global function named "bla_my_function" will be in suggest list:
(http://i683.photobucket.com/albums/vv194/ollydbg_cb/issue1.png)

Solution:

The statement analyzer should be more powerful to detect the caret was locate between parentheses, thus, the function argument type information can be used to filter the suggest result. :D

Currently I have no idea how we can improved it, sure, we can, let me think carefully....



Title: Re: several completion issues
Post by: killerbot on October 04, 2010, 09:45:48 am
I know nothing has been done on this issues, but today due to rev 6663 ( or 6662), things got a little bit worse.

When I type :
Code
Bta.Set(bla_
Nothing is suggested anymore.
Title: Re: several completion issues
Post by: Loaden on October 04, 2010, 11:16:58 am
I know nothing has been done on this issues, but today due to rev 6663 ( or 6662), things got a little bit worse.

When I type :
Code
Bta.Set(bla_
Nothing is suggested anymore.
This is new issue from r6660.
Title: Re: several completion issues
Post by: blueshake on October 04, 2010, 02:05:01 pm
I know nothing has been done on this issues, but today due to rev 6663 ( or 6662), things got a little bit worse.

When I type :
Code
Bta.Set(bla_
Nothing is suggested anymore.

I knew,will be fixed soon.
Title: Re: several completion issues
Post by: blueshake on October 04, 2010, 03:03:03 pm
had send patch to Loaden,and should be fixed.enjoy it. :P
Title: Re: several completion issues
Post by: Loaden on October 04, 2010, 03:35:18 pm
had send patch to Loaden,and should be fixed.enjoy it. :P
applied! thanks! :)
Title: Re: several completion issues
Post by: JGM on October 04, 2010, 07:02:40 pm
lol, you guys are fast  :D