News:

When registered with our forums, feel free to send a "here I am" post here to differ human beings from SPAM bots.

Main Menu

several completion issues

Started by killerbot, September 30, 2010, 04:40:01 PM

Previous topic - Next topic

killerbot

This is the test code (just your ordinary main.cpp) :

#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;"

killerbot

Issue 1 :

type :

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"

killerbot

Issue 2 :

Type :

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)

killerbot

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)

killerbot

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 ?

ollydbg

Quote from: killerbot on September 30, 2010, 04:41:47 PM
Issue 1 :

type :

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:
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:
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:

#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:


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....



If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

killerbot

#6
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 :

Bta.Set(bla_

Nothing is suggested anymore.

Loaden

Quote from: 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 :

Bta.Set(bla_

Nothing is suggested anymore.
This is new issue from r6660.

blueshake

Quote from: 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 :

Bta.Set(bla_

Nothing is suggested anymore.

I knew,will be fixed soon.
Keep low and hear the sadness of little dog.
I fall in love with a girl,but I don't dare to tell her.What should I do?

blueshake

had send patch to Loaden,and should be fixed.enjoy it. :P
Keep low and hear the sadness of little dog.
I fall in love with a girl,but I don't dare to tell her.What should I do?

Loaden

Quote from: blueshake on October 04, 2010, 03:03:03 PM
had send patch to Loaden,and should be fixed.enjoy it. :P
applied! thanks! :)

JGM