Whole Tomato Software Forums
Whole Tomato Software Forums
Main Site | Profile | Register | Active Topics | Members | Search | FAQ
 All Forums
 Visual Assist
 Technical Support
 [[deprecated]] parsing glitch

You must be registered to post a reply.
Click here to register.

Screensize:
UserName:
Password:
Format: BoldItalicizeUnderlineStrikethrough Align leftCenterAlign right Insert horizontal ruleUpload and insert imageInsert hyperlinkInsert email addressInsert codeInsert quoted textInsert listInsert Emoji
   
Message:

Forum code is on.
Html is off.

 
Check to subscribe to this topic.
   

T O P I C    R E V I E W
bta Posted - Nov 07 2017 : 03:53:40 AM
I'm working with VS2015 Professional and VAX10.9.2237.0

When using this code things go wrong for TestClass3 and TestClass4.
It seems that it thinks there is a class with the name class defined.
So after typing MyNamespace:: the code completion suggestion list contains an entry 'class'.
Note that for TestClass1 and TestClass2 everything goes fine, so it seems that the fact that the class is templated is causing the problem.


namespace MyNamespace
   {
   class [[deprecated]] TestClass1
      {
      public:
         void f() {}
      };
   class [[deprecated("use MyNamespace::XXX instead")]] TestClass2
      {
      public:
         void f() {}
      };

   template <typename TParam>
   class [[deprecated]] TestClass3
      {
      public:
         void f() {}
      };
   template <typename TParam>
   class [[deprecated("use MyNamespace::XXX instead")]] TestClass4
      {
      public:
         void f() {}
      };
   }

void myFunction2()
   {
   MyNamespace::   // class gets suggested
   }
6   L A T E S T    R E P L I E S    (Newest First)
sean Posted - Sep 24 2018 : 2:16:43 PM
Support for attributes (case=112204) is improved in build 2291.
feline Posted - Nov 08 2017 : 07:23:40 AM
We are looking to add support for all of these new C++ attributes to VA's parser, now you have pointed out the problem

case=112204

I don't currently have an estimate for when this will be done, but it is now in the list. Supporting all of the new features in C++ is important to us, and it is something we are working on.

As for va_stdafx.h, most of the time you don't need it, but sometimes it can be very helpful indeed. It often helps when you are using quite complex macros that VA struggles with.
bta Posted - Nov 08 2017 : 03:19:43 AM
Yeah, the __declspec(deprecated) syntax is what we were using before.
But this is Microsoft specific syntax and as we strive to use standard C++ as much as possible (so we can use different compilers (ex. clang)),
we want to make use of these new standard C++ features.
As it was only 1 class that was causing the issue, I changed it back into using the __declspec(deprecated("xxx")) syntax for now, and the issue is gone.
However, I do hope that VAX will catch up and will not force us to not use some new, modern c++ features.
That would really be a pity. We had this kind of issue with a static analysis tool before and in the end we ditched it :-(

Related to the va_stdafx.h file: good to know that this exists, might come in handy...

Anyway, thanks for the support!
feline Posted - Nov 07 2017 : 1:01:02 PM
When I did a quick search on this, I ended up with this page:

https://msdn.microsoft.com/en-us/library/044swk7y.aspx

which has a different approach to doing this.

Turning off the IDE intellisense makes sense. Is using a macro for this an option for you? I have changed the test code slightly, to end up with this:


#define DEPRECIATE(x) [[deprecated(x)]]

namespace MyNamespace
{
	class DEPRECIATE() TestClass1
	{
	public:
		void f() {}
	};
	class DEPRECIATE("use MyNamespace::XXX instead") TestClass2
	{
	public:
		void f() {}
	};

	template <typename TParam>
	class DEPRECIATE() TestClass3
	{
	public:
		void f() {}
	};
	template <typename TParam>
	class DEPRECIATE("use MyNamespace::XXX instead") TestClass4
	{
	public:
		void f() {}
	};
}

void myFunction2()
{
	MyNamespace::   // class gets suggested
}

I also created a new empty txt file in the same directory as the .SLN file, called "va_stdafx.h". Into this file I placed the code:

#define DEPRECIATE(x)

you need to make sure the va_stdafx.h file ends with a blank line, and then trigger a VA symbol database rebuild via:

VA Options -> Performance -> Rebuild symbol databases

and restart the IDE. The va_stdafx.h file is used as a helper tool for VA's parser, and VA looks for this file, and parses it first if found, even though it is not part of the solution. For me this fixes the "class" suggestion in the listbox, but it would require changing your code as you encounter the problem. Still, perhaps worth while if you don't have to much code to update.
bta Posted - Nov 07 2017 : 11:05:32 AM
We turned off Intellisense completely as it consumed too much memory/diskspace and wasn't working decently.

Related to the C++ attributes, there are more than just [[deprecated]]: cfr. http://en.cppreference.com/w/cpp/language/attributes
Note that Visual Studio does not implement all of them in VS2015, don't know about VS2017 though...
feline Posted - Nov 07 2017 : 06:58:41 AM
Interesting, I had no idea you could do that in C++, but it compiles quite happily, and I am seeing the same listbox problem:

case=112204

Can you please try setting:

VA Options -> Enhanced Listboxes -> Source of C/C++ content: Default Intellisense

this should fix the problem for you, it does for me. Hopefully it won't have to many side effects.

© 2023 Whole Tomato Software, LLC Go To Top Of Page
Snitz Forums 2000