T O P I C R E V I E W |
GennadiyKorol |
Posted - Jul 15 2008 : 4:59:56 PM Good time of the day everyone,
I don't know if this was already suggested, so I might be the monkey's uncle here, but I have not seen this implemented anywhere and I have been searching for it a lot lately.
When creating implementations for new classes we often have to add numerous include files defining classes we'll be using.
So the workflow of getting the algorithm right is often broken by a routinely procedure that looks like this:
Recall where the class/procedure/enum etc was defined. Go to the top of the current file. Type #include <something> / #include "Class.h" Go back to where you were before.
I do not know why having the power of today's parsers we still have to manually manage the include files. Wouldn't it be neat if VAX would allow for the following feature:
Click over the symbol (Can be class name, procedure, etc), pick "Add include directive"
Visual assist analyzes the context in which the symbol is used, checks where that symbol is defined and adds the correct (relative path) include file on the top. If the file is defined in current project, it'd use #include "", otherwise consider this to be library include and use #include <> instead.
If the symbol would be defined in numerous places, a pop up window with the list of files where the symbol is defined would show up to let the user pick the desired one.
Becoming greedy, it would be awesome if VAX could check whether Class members are accessed in .h files and suggest to make a forward declaration if the symbol is used only via a reference or a pointer. Would be really handy for forward declarations in include files.
All in all, I do not know why we won't let the editor to automagically manage our includes as we work on the source files. To me, it should automatically add includes for the symbols not yet defined, and remove includes for symbols not used in the current source file, while I type, or before the project is compiled. This potentially could lead to a lot of redundant includes thanks to the nature of C++, but I trust there should be a way to work it out.
Right now I have modified the VB script I found on the net that does what I want, based on Visual Studios knowledge of where the symbol is defined. It still won't work if I would try using in on the symbol which the editor have not yet indexed. This happens a lot when you work with large API's, where you would exactly love the auto create include directive feature...
So I am sure many would love the proper implementation of this in VAX, using its knowledge about symbols.
Looking forward to your opinions, Gennadiy |
20 L A T E S T R E P L I E S (Newest First) |
support |
Posted - Aug 22 2009 : 7:14:50 PM case=24588 is fixed in build 1731 |
sean |
Posted - Jul 06 2009 : 9:41:44 PM We recently fixed a bug that had similar symptoms. case=24588 The fix will be in the next release cycle. |
feline |
Posted - Jul 06 2009 : 1:19:48 PM Does it seem to matter how you trigger the Add Include command? If you delete the include line / undo the command, and re-try the command do you get the correct case, or do you still see the problem?
Can you post the full path of one of these problem files? Is it located on the local hard drive or somewhere else? A network drive? A mapped drive letter? A junction point of some form? |
GennadiyKorol |
Posted - Jul 04 2009 : 5:13:28 PM 1727 here, I noticed it's not the case with each and every file. The file has an ordinary camel case name without any special characters. |
feline |
Posted - Jul 04 2009 : 1:31:16 PM Which IDE and version of VA are you using?
I have just tried this here with a mixed case .h file, and VA added:
#include "Test_Alt_G_MixedCase.h"
which is the correct case for this header file name. This is VS2005 with VA 1727. |
GennadiyKorol |
Posted - Jul 04 2009 : 11:53:35 AM I have noticed that the include paths that are added are always using the "to lower case" convention.
That is if my class Banana is defined in the file Banana.h
the include will look like this:
#include "banana.h"
instead of
#include "Banana.h"
which is quite confusing and goes against some conventions. Do you think it would be hard to use the actual file name taking its case into consideration? |
sean |
Posted - May 01 2009 : 8:46:28 PM case=23430 is fixed in build 1722. |
support |
Posted - Mar 30 2009 : 08:41:37 AM case=23341 is implemented in build 1721 |
sean |
Posted - Jan 30 2009 : 9:19:59 PM By default, VA just mirrors your VC++ include directories. So if you add more directories to the Tools | Options | Projects and Solutions | VC++ Directories | Win32 Include files, VA will pick those up.
If you don't want to change the VC++ directories, but do want to VA to see a different list, then in VA Options | Projects | C/C++ Directories, change platform from Win32 to Custom. Then you can modify the stable includes list. |
GennadiyKorol |
Posted - Jan 30 2009 : 7:32:54 PM That's true, even though one might add additional dll projects as references to their VS project in that case, saving adding the include/lib paths.
Can you add additional folders to the VAX "stable includes" list? |
sean |
Posted - Jan 30 2009 : 6:54:42 PM That might make sense in that particular solution, but I think in general, "additional include directories" should not be treated that way. For example a solution that contains multiple dlls will use additional include directories to include headers among the different projects. |
GennadiyKorol |
Posted - Jan 30 2009 : 6:11:08 PM Nope, these are not platform-sdk kind of includes, but just some other library includes.
VAX parses those includes so it does search the "Additional Include Directories". At the same time it could mark the files from those directories as "stable". |
sean |
Posted - Jan 30 2009 : 3:57:04 PM You mentioned stable and non-stable includes. Is the bananas/include directory listed in the "Stable include files" list (VA Options | Projects | C/C++ Directories)? |
GennadiyKorol |
Posted - Jan 30 2009 : 12:11:12 PM When my project is using some libraries that are not located in the project source tree, I am adding those using the "Additional Include Directories" option in the C++ compiler project tab.
Say I am using library called Bananas that is located in C:/Dev/Libs/Bananas/
I am going to add C:/Dev/Libs/Bananas/include to the "Additional Include Directories".
Now in my code I will be using the library by typing:
#include <bananas/banana.h>
But in this case VAX will always add
#include "bananas\\banana.h"
The suggestion is to make VAX differentiate between the stable and non-stable includes.
|
feline |
Posted - Jan 30 2009 : 11:48:43 AM We are looking to have VA use the "correct" delimiter, it will use the one that is currently being used in the file, rather than always using "\\":
case=23341
Something is going on with std::vector, but I am getting mixed results. Sometimes the command is not offered, as you say, and sometimes the command is offered, and it works correctly:
case=23430
Can you give an example for always getting #include "" ? When this command works on std::vector I am getting the line:
#include <vector>
which is what I am expecting. |
GennadiyKorol |
Posted - Jan 29 2009 : 4:57:16 PM This feature seems to be rather experimental as it does not allow me (the menu item is dimmed) to add include for unrecognized symbols in most of the cases.
For instance:
std::vector v;
Will not allow you to add "vector" include to your current file.
Also the includes are added using windows convention using "\\" delimiter which is not a cross platform way to handle the include paths.
Also the feature does not differentiate between static (library) and dynamic (project files) includes.
That is it always adds
"include.h"
Even if the include.h is a library include in which case it should use:
<include.h>
But I am very glad you are bringing this feature into VAX, Kudos! |
support |
Posted - Jan 27 2009 : 10:25:23 PM case=226 is implemented in build 1715 Hover over an unrecognized symbol and choose "Add include xxxx" from the refactoring context menu.
|
feline |
Posted - Jul 17 2008 : 10:39:24 AM You cannot check up on the cases directly, but this thread should be updated when this is done.
I do not have any estimate on when this might be done, since it is not a simple thing to do. |
GennadiyKorol |
Posted - Jul 16 2008 : 2:18:13 PM Great to hear that!
Could you please tell me where can I check up the case, having its number? |
feline |
Posted - Jul 16 2008 : 1:42:58 PM This is something we are considering doing, but it is a hard problem to solve in general:
case=226 |